From f570c771f23792837fb63f708bfa5c948d5fcad7 Mon Sep 17 00:00:00 2001 From: Steve McKay Date: Tue, 10 May 2016 15:01:39 -0700 Subject: [PATCH] Don't show new-window item in Downloads per Gabe. 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 | 1 + .../android/provider/DocumentsContract.java | 3 +++ .../com/android/documentsui/BaseActivity.java | 17 +++++-------- .../android/documentsui/FilesActivity.java | 2 +- .../android/documentsui/LauncherActivity.java | 24 +++++++++++++++---- .../src/com/android/documentsui/Shared.java | 17 +++++++------ .../src/com/android/mtp/ReceiverActivity.java | 1 + 7 files changed, 41 insertions(+), 24 deletions(-) diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index 4b706496db206..5a98482383822 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -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; } diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index aba39722db0cf..1158776f5fd17 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -98,6 +98,9 @@ public final class DocumentsContract { /** {@hide} */ 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 7444797c9cf53..9d4b50c60bfb0 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -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); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index 84fc6fe2dee16..57c14e98727c2 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -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 diff --git a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java index 5cb6ca347896b..5e27e78af2222 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.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) diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java index 784d30f9fc253..145637c6fafea 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; @@ -180,13 +181,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". */ @@ -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); + } } diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java index 84745b29e428e..366add0b6b34e 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java @@ -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);