OSDN Git Service

Update roots when data cleared, refresh UI.
authorJeff Sharkey <jsharkey@android.com>
Wed, 23 Oct 2013 16:59:06 +0000 (09:59 -0700)
committerJeff Sharkey <jsharkey@android.com>
Wed, 23 Oct 2013 16:59:06 +0000 (09:59 -0700)
Data cleared usually means accounts went away, so kick off roots
refresh.  Also update any visible UI after a refresh finishes.

Bug: 10899793
Change-Id: Id68c80b5e635e358cfd75f4961ce13cd1c7c5f82

packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java
packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
packages/DocumentsUI/src/com/android/documentsui/RootsLoader.java

index 6b46e3a..547e343 100644 (file)
@@ -75,6 +75,7 @@ public class DocumentsApplication extends Application {
         packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
         packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
         packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        packageFilter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
         packageFilter.addDataScheme("package");
         registerReceiver(mCacheReceiver, packageFilter);
 
index b98e1ee..f6b43c7 100644 (file)
@@ -60,8 +60,8 @@ import java.util.concurrent.TimeUnit;
 public class RootsCache {
     private static final boolean LOGD = true;
 
-    // TODO: cache roots in local provider to avoid spinning up backends
-    // TODO: root updates should trigger UI refresh
+    public static final Uri sNotificationUri = Uri.parse(
+            "content://com.android.documentsui.roots/");
 
     private final Context mContext;
     private final ContentObserver mObserver;
@@ -201,6 +201,7 @@ public class RootsCache {
                 mStoppedAuthorities = mTaskStoppedAuthorities;
             }
             mFirstLoad.countDown();
+            resolver.notifyChange(sNotificationUri, null, false);
             return null;
         }
 
index 7108971..8d37cdf 100644 (file)
@@ -25,6 +25,8 @@ import com.android.documentsui.model.RootInfo;
 import java.util.Collection;
 
 public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
+    private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
+
     private final RootsCache mRoots;
     private final State mState;
 
@@ -34,6 +36,9 @@ public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
         super(context);
         mRoots = roots;
         mState = state;
+
+        getContext().getContentResolver()
+                .registerContentObserver(RootsCache.sNotificationUri, false, mObserver);
     }
 
     @Override
@@ -77,5 +82,7 @@ public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
         onStopLoading();
 
         mResult = null;
+
+        getContext().getContentResolver().unregisterContentObserver(mObserver);
     }
 }