OSDN Git Service

Show active downloads in Files app Downloads dir.
authorSteve McKay <smckay@google.com>
Mon, 7 Mar 2016 19:51:31 +0000 (11:51 -0800)
committerSteve McKay <smckay@google.com>
Mon, 7 Mar 2016 22:17:06 +0000 (14:17 -0800)
And permit users to peek into zip files stored in Downloads.
But dont' show active downloads in pickers.

Bug: 26759955
Change-Id: Ib425a79488e953c981ddadeb01a37f6e1d8a8285

packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java

index 83838d3..1967923 100644 (file)
@@ -17,7 +17,6 @@
 package com.android.documentsui.dirlist;
 
 import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.ACTION_MANAGE;
 import static com.android.documentsui.State.MODE_GRID;
 import static com.android.documentsui.State.MODE_LIST;
 import static com.android.documentsui.State.SORT_ORDER_UNKNOWN;
@@ -1535,7 +1534,7 @@ public class DirectoryFragment extends Fragment
                         mRoot.authority, mRoot.rootId, mQuery)
                         : DocumentsContract.buildChildDocumentsUri(
                                 mDocument.authority, mDocument.documentId);
-                if (state.action == ACTION_MANAGE) {
+                if (mTuner.enableManagedMode()) {
                     contentsUri = DocumentsContract.setManageMode(contentsUri);
                 }
                 return new DirectoryLoader(
@@ -1544,6 +1543,7 @@ public class DirectoryFragment extends Fragment
             case TYPE_RECENT_OPEN:
                 final RootsCache roots = DocumentsApplication.getRootsCache(context);
                 return new RecentsLoader(context, roots, state);
+
             default:
                 throw new IllegalStateException("Unknown type " + mType);
         }
index f99ec85..adaa850 100644 (file)
@@ -82,6 +82,12 @@ public abstract class FragmentTuner {
     abstract void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch);
 
     /**
+     * When managed mode is enabled, active downloads will be visible in the UI.
+     * Presumably this should only be true when in the downloads directory.
+     */
+    abstract boolean enableManagedMode();
+
+    /**
      * Provides support for Platform specific specializations of DirectoryFragment.
      */
     private static final class DocumentsTuner extends FragmentTuner {
@@ -157,6 +163,11 @@ public abstract class FragmentTuner {
                 ((BaseActivity) mContext).setRootsDrawerOpen(true);
             }
         }
+
+        @Override
+        public boolean enableManagedMode() {
+            return false;
+        }
     }
 
     /**
@@ -166,6 +177,7 @@ public abstract class FragmentTuner {
 
         public DownloadsTuner(Context context, State state) {
             super(context, state);
+            assert(state.action == ACTION_MANAGE);
         }
 
         @Override
@@ -192,6 +204,11 @@ public abstract class FragmentTuner {
 
         @Override
         void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) {}
+
+        @Override
+        public boolean enableManagedMode() {
+            return mState.stack.root != null && mState.stack.root.isDownloads();
+        }
     }
 
     /**
@@ -233,6 +250,17 @@ public abstract class FragmentTuner {
                 ((BaseActivity) mContext).setRootsDrawerOpen(true);
             }
         }
+
+        @Override
+        public boolean enableManagedMode() {
+            // When in downloads top level directory, we also show active downloads.
+            // And while we don't allow folders in Downloads, we do allow Zip files in
+            // downloads that themselves can be opened and viewed like directories.
+            // This method helps us understand when to kick in on those special behaviors.
+            return mState.stack.root != null
+                    && mState.stack.root.isDownloads()
+                    && mState.stack.size() == 1;
+        }
     }
 
     private static boolean isDirectory(String mimeType) {