Merge "Don't show new-window item in Downloads per Gabe." into nyc-dev
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java
index 4b70649..5a98482 100644
--- a/core/java/android/os/storage/VolumeInfo.java
+++ b/core/java/android/os/storage/VolumeInfo.java
@@ -442,6 +442,7 @@
         // 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;
     }
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index aba3972..1158776 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -99,6 +99,9 @@
     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";
 
     /**
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 7444797..9d4b50c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -218,23 +218,18 @@
         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);
     }
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index 84fc6fe..57c14e9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -201,7 +201,7 @@
         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
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
index 5cb6ca3..5e27e78 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
@@ -25,6 +25,7 @@
 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 @@
     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 @@
         // 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 @@
         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)
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java
index 784d30f..145637c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/Shared.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/Shared.java
@@ -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 @@
     /*
      * 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 @@
         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);
+    }
 }
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
index 84745b2..366add0b 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
@@ -49,6 +49,7 @@
                 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);