public static final String DOWNLOAD_BUCKET_NAME = Environment.getExternalStorageDirectory().toString() + "/" + DOWNLOAD_STRING;
public static final int CAMERA_BUCKET_ID = getBucketId(CAMERA_BUCKET_NAME);
public static final int DOWNLOAD_BUCKET_ID = getBucketId(DOWNLOAD_BUCKET_NAME);
+
+ public static boolean sObserverActive = false;
private boolean mDisableImages;
private boolean mDisableVideos;
}
private Context mContext;
- private ContentObserver mImagesObserver;
- private ContentObserver mVideosObserver;
+ private ContentObserver mObserver;
public LocalDataSource(Context context) {
mContext = context;
stopListeners();
CacheService.loadMediaSets(feed, this, !mDisableImages, !mDisableVideos);
Handler handler = ((Gallery) mContext).getHandler();
- ContentObserver imagesObserver = new ContentObserver(handler) {
- public void onChange(boolean selfChange) {
- if (((Gallery) mContext).isPaused()) {
- refresh(feed, CAMERA_BUCKET_ID);
- refresh(feed, DOWNLOAD_BUCKET_ID);
-
- MediaSet set = feed.getCurrentSet();
- if (set != null && set.mPicasaAlbumId == Shared.INVALID) {
- refresh(feed, set.mId);
- }
- }
- }
- };
- ContentObserver videosObserver = new ContentObserver(handler) {
+ ContentObserver observer = new ContentObserver(handler) {
public void onChange(boolean selfChange) {
- if (((Gallery) mContext).isPaused()) {
- refresh(feed, CAMERA_BUCKET_ID);
- }
+ CacheService.senseDirty(mContext, new CacheService.Observer() {
+ public void onChange(long[] ids) {
+ if (ids != null) {
+ int numLongs = ids.length;
+ for (int i = 0; i < numLongs; ++i) {
+ refreshUI(feed, ids[i]);
+ }
+ }
+ }
+ });
}
};
-
- // Start listening. TODO: coalesce update notifications while mediascanner is active.
+
+ // Start listening.
Uri uriImages = Images.Media.EXTERNAL_CONTENT_URI;
Uri uriVideos = Video.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = mContext.getContentResolver();
- mImagesObserver = imagesObserver;
- mVideosObserver = videosObserver;
- cr.registerContentObserver(uriImages, false, mImagesObserver);
- cr.registerContentObserver(uriVideos, false, mVideosObserver);
+ mObserver = observer;
+ cr.registerContentObserver(uriImages, false, observer);
+ cr.registerContentObserver(uriVideos, false, observer);
+ sObserverActive = true;
}
public void shutdown() {
private void stopListeners() {
ContentResolver cr = mContext.getContentResolver();
- if (mImagesObserver != null) {
- cr.unregisterContentObserver(mImagesObserver);
- }
- if (mVideosObserver != null) {
- cr.unregisterContentObserver(mVideosObserver);
+ if (mObserver != null) {
+ cr.unregisterContentObserver(mObserver);
}
+ sObserverActive = false;
}
-
- protected void refresh(MediaFeed feed, long setIdToUse) {
+
+ protected void refreshUI(MediaFeed feed, long setIdToUse) {
if (setIdToUse == Shared.INVALID) {
return;
}
Log.i(TAG, "Refreshing local data source");
- Gallery.NEEDS_REFRESH = true;
if (feed.getMediaSet(setIdToUse) == null) {
- if (!CacheService.setHasItems(mContext.getContentResolver(), setIdToUse))
- return;
MediaSet mediaSet = feed.addMediaSet(setIdToUse, this);
if (setIdToUse == CAMERA_BUCKET_ID) {
mediaSet.mName = CAMERA_STRING;
mediaSet.mName = DOWNLOAD_STRING;
}
mediaSet.generateTitle(true);
- if (!CacheService.isPresentInCache(setIdToUse))
- CacheService.markDirty(mContext);
} else {
MediaSet mediaSet = feed.replaceMediaSet(setIdToUse, this);
if (setIdToUse == CAMERA_BUCKET_ID) {
mediaSet.mName = DOWNLOAD_STRING;
}
mediaSet.generateTitle(true);
- CacheService.markDirty(mContext, setIdToUse);
}
}
return;
}
CacheService.loadMediaItemsIntoMediaFeed(mediaFeed, set, rangeStart, rangeEnd, !mDisableImages, !mDisableVideos);
- if (set.mId == CAMERA_BUCKET_ID && set.mNumItemsLoaded > 0) {
+ if (set.mId == CAMERA_BUCKET_ID) {
mediaFeed.moveSetToFront(set);
}
}