OSDN Git Service

Picking up dirty albums when something is deleted
authorVenkat Krishnaraj <venkatkrishnaraj@venkat-krishnarajs-macbook-pro.local>
Tue, 8 Dec 2009 20:13:13 +0000 (12:13 -0800)
committerDave Sparks <davidsparks@android.com>
Wed, 9 Dec 2009 03:25:51 +0000 (19:25 -0800)
src/com/cooliris/media/LocalDataSource.java
src/com/cooliris/media/MediaFeed.java

index 0c8ad6d..34d463e 100644 (file)
@@ -66,13 +66,18 @@ public final class LocalDataSource implements DataSource {
         Handler handler = ((Gallery) mContext).getHandler();
         ContentObserver observer = new ContentObserver(handler) {
             public void onChange(boolean selfChange) {
-                MediaSet mediaSet = feed.getCurrentSet();
-                if (mediaSet != null) {
-                    CacheService.markDirtyImmediate(mediaSet.mId);
-                    refreshUI(feed, mediaSet.mId);
+                final boolean isPaused = ((Gallery) mContext).isPaused();
+                if (isPaused) {
+                    MediaSet mediaSet = feed.getCurrentSet();
+                    if (mediaSet != null) {
+                        CacheService.markDirtyImmediate(mediaSet.mId);
+                        refreshUI(feed, mediaSet.mId);
+                    }
                 }
                 CacheService.senseDirty(mContext, new CacheService.Observer() {
                     public void onChange(long[] ids) {
+                        if (!isPaused)
+                            return;
                         if (ids != null) {
                             int numLongs = ids.length;
                             for (int i = 0; i < numLongs; ++i) {
@@ -89,15 +94,13 @@ public final class LocalDataSource implements DataSource {
         Uri uriVideos = Video.Media.EXTERNAL_CONTENT_URI;
         ContentResolver cr = mContext.getContentResolver();
         mObserver = observer;
-        cr.registerContentObserver(uriImages, false, observer);
-        cr.registerContentObserver(uriVideos, false, observer);
+        cr.registerContentObserver(uriImages, true, observer);
+        cr.registerContentObserver(uriVideos, true, observer);
         sObserverActive = true;
     }
 
     public void shutdown() {
-        if (ImageManager.isMediaScannerScanning(mContext.getContentResolver())) {
-            stopListeners();
-        }
+        stopListeners();
     }
 
     private void stopListeners() {
index d2e4a28..8c9eefa 100644 (file)
@@ -355,6 +355,8 @@ public final class MediaFeed implements Runnable {
                 mWaitingForMediaScanner = false;
                 while (ImageManager.isMediaScannerScanning(mContext.getContentResolver())) {
                     // MediaScanner is still running, wait
+                    if (Thread.interrupted())
+                        return;
                     mWaitingForMediaScanner = true;
                     try {
                         if (mContext == null)
@@ -362,7 +364,7 @@ public final class MediaFeed implements Runnable {
                         showToast(mContext.getResources().getString(R.string.initializing), Toast.LENGTH_LONG);
                         Thread.sleep(6000);
                     } catch (InterruptedException e) {
-
+                        return;
                     }
                 }
                 if (mWaitingForMediaScanner) {