OSDN Git Service

Don't show new-window item in Downloads per Gabe.
authorSteve McKay <smckay@google.com>
Tue, 10 May 2016 22:01:39 +0000 (15:01 -0700)
committerSteve McKay <smckay@google.com>
Tue, 10 May 2016 23:25:58 +0000 (16:25 -0700)
Also, fix regression...don't show "internal storage" option in Downloads.
All other modes, fix inconsistencies in presentation of
internal-storage/new-windows commands by eliminating launch mode inference.
Update VolumeInfo and MTP provider to send correct launch mode extra.

Bug: 28691735,28695347
Change-Id: Ic480925f4c8f1beee4da104a2259c1ce5f28a6a1

core/java/android/os/storage/VolumeInfo.java
core/java/android/provider/DocumentsContract.java
packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
packages/DocumentsUI/src/com/android/documentsui/Shared.java
packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java

index 4b70649..5a98482 100644 (file)
@@ -442,6 +442,7 @@ public class VolumeInfo implements Parcelable {
         // note that docsui treats this as *force* show advanced. So sending
         // false permits advanced to be shown based on user preferences.
         intent.putExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, isPrimary());
+        intent.putExtra(DocumentsContract.EXTRA_FANCY_FEATURES, true);
         intent.putExtra(DocumentsContract.EXTRA_SHOW_FILESIZE, true);
         return intent;
     }
index aba3972..1158776 100644 (file)
@@ -99,6 +99,9 @@ public final class DocumentsContract {
     public static final String EXTRA_SHOW_FILESIZE = "android.content.extra.SHOW_FILESIZE";
 
     /** {@hide} */
+    public static final String EXTRA_FANCY_FEATURES = "android.content.extra.FANCY";
+
+    /** {@hide} */
     public static final String EXTRA_TARGET_URI = "android.content.extra.TARGET_URI";
 
     /**
index 7444797..9d4b50c 100644 (file)
@@ -218,23 +218,18 @@ public abstract class BaseActivity extends Activity
         state.showAdvanced = Shared.shouldShowDeviceRoot(this, intent);
         // Menu option is shown for whitelisted intents if advanced roots are not shown by default.
         state.showAdvancedOption = !state.showAdvanced && (
-                !directLaunch(intent) ||
-                state.action == ACTION_OPEN ||
-                state.action == ACTION_CREATE ||
-                state.action == ACTION_OPEN_TREE ||
-                state.action == ACTION_PICK_COPY_DESTINATION ||
-                state.action == ACTION_GET_CONTENT);
+                Shared.shouldShowFancyFeatures(this)
+                || state.action == ACTION_OPEN
+                || state.action == ACTION_CREATE
+                || state.action == ACTION_OPEN_TREE
+                || state.action == ACTION_PICK_COPY_DESTINATION
+                || state.action == ACTION_GET_CONTENT);
 
         if (DEBUG) Log.d(mTag, "Created new state object: " + state);
 
         return state;
     }
 
-    private static boolean directLaunch(Intent intent) {
-        return LauncherActivity.isLaunchUri(intent.getData())
-                && intent.hasExtra(Shared.EXTRA_STACK);
-    }
-
     public void setRootsDrawerOpen(boolean open) {
         mNavigator.revealRootsDrawer(open);
     }
index 84fc6fe..57c14e9 100644 (file)
@@ -201,7 +201,7 @@ public class FilesActivity extends BaseActivity {
         createDir.setEnabled(canCreateDirectory());
         pasteFromCb.setEnabled(mClipper.hasItemsToPaste());
         settings.setVisible(root.hasSettings());
-        newWindow.setVisible(true);
+        newWindow.setVisible(Shared.shouldShowFancyFeatures(this));
 
         Menus.disableHiddenItems(menu, pasteFromCb);
         // It hides icon if searching in progress
index 5cb6ca3..5e27e78 100644 (file)
@@ -25,6 +25,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.DocumentsContract;
 import android.support.annotation.Nullable;
 import android.util.Log;
 
@@ -44,6 +45,15 @@ public class LauncherActivity extends Activity {
     private static final String LAUNCH_CONTROL_AUTHORITY = "com.android.documentsui.launchControl";
     private static final String TAG = "LauncherActivity";
 
+    // Array of boolean extras that should be copied when creating new launch intents.
+    // Missing intents will be ignored.
+    private static final String[] PERSISTENT_BOOLEAN_EXTRAS = {
+        DocumentsContract.EXTRA_SHOW_FILESIZE,
+        DocumentsContract.EXTRA_SHOW_ADVANCED,
+        DocumentsContract.EXTRA_FANCY_FEATURES,
+        Shared.EXTRA_PRODUCTIVITY_MODE
+    };
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -94,11 +104,7 @@ public class LauncherActivity extends Activity {
         // Relay any config overrides bits present in the original intent.
         Intent original = activity.getIntent();
         if (original != null) {
-            if (original.hasExtra(Shared.EXTRA_PRODUCTIVITY_MODE)) {
-                intent.putExtra(
-                        Shared.EXTRA_PRODUCTIVITY_MODE,
-                        original.getBooleanExtra(Shared.EXTRA_PRODUCTIVITY_MODE, false));
-            }
+            copyExtras(original, intent);
             if (original.hasExtra(Intent.EXTRA_TITLE)) {
                 intent.putExtra(
                         Intent.EXTRA_TITLE,
@@ -108,6 +114,14 @@ public class LauncherActivity extends Activity {
         return intent;
     }
 
+    private static void copyExtras(Intent src, Intent dest) {
+        for (String extra : PERSISTENT_BOOLEAN_EXTRAS) {
+            if (src.hasExtra(extra)) {
+                dest.putExtra(extra, src.getBooleanExtra(extra, false));
+            }
+        }
+    }
+
     private static Uri buildLaunchUri() {
         return new Uri.Builder()
                 .authority(LAUNCH_CONTROL_AUTHORITY)
index 784d30f..145637c 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.documentsui;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.Intent;
@@ -183,13 +184,6 @@ public final class Shared {
     /*
      * Returns true if app is running in "productivity mode".
      */
-    public static boolean productivityMode(Context context) {
-        return context.getResources().getBoolean(R.bool.productivity_device);
-    }
-
-    /*
-     * Returns true if app is running in "productivity mode".
-     */
     private static boolean isProductivityMode(Context context, Intent intent) {
         return intent.getBooleanExtra(
                 Shared.EXTRA_PRODUCTIVITY_MODE,
@@ -210,4 +204,13 @@ public final class Shared {
         return isProductivityMode(context, intent)
                 || intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
     }
+
+    /**
+     * Returns true if device root should be shown.
+     */
+    public static boolean shouldShowFancyFeatures(Activity activity) {
+        Intent intent = activity.getIntent();
+        return isProductivityMode(activity, intent)
+                || intent.getBooleanExtra(DocumentsContract.EXTRA_FANCY_FEATURES, false);
+    }
 }
index 84745b2..366add0 100644 (file)
@@ -49,6 +49,7 @@ public class ReceiverActivity extends Activity {
                 final Intent intent = new Intent(DocumentsContract.ACTION_BROWSE);
                 intent.setData(uri);
                 intent.addCategory(Intent.CATEGORY_DEFAULT);
+                intent.putExtra(DocumentsContract.EXTRA_FANCY_FEATURES, true);
                 this.startActivity(intent);
             } catch (IOException exception) {
                 Log.e(MtpDocumentsProvider.TAG, "Failed to open device", exception);