From efa1761776160376278fa467ea31d8e3f621a286 Mon Sep 17 00:00:00 2001 From: Steve McKay Date: Fri, 29 Jan 2016 18:15:39 -0800 Subject: [PATCH] Decouple SD card from ADVANCED storage toggle. A variety of related fixes: - don't force size enable when browsing from device mounted notifications. - don't show settings menu item as action (put in overflow). - add sd card icon (not quite yet used, need to suss that out). Bug:26880985,26883578,26771127 Change-Id: I36f153c42217f8092f157ded2a756c02525593ab --- core/java/android/os/storage/VolumeInfo.java | 5 +++- .../res/drawable/ic_sd_storage.xml | 24 +++++++++++++++++++ packages/DocumentsUI/res/menu/activity.xml | 3 ++- packages/DocumentsUI/res/values/strings.xml | 4 ++-- .../com/android/documentsui/BaseActivity.java | 2 -- .../documentsui/DocumentsActivity.java | 2 -- .../android/documentsui/FilesActivity.java | 9 +++++-- .../android/documentsui/model/RootInfo.java | 5 ++++ .../ExternalStorageProvider.java | 10 ++++---- 9 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 packages/DocumentsUI/res/drawable/ic_sd_storage.xml diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index 5997515e58d24..4b706496db206 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -438,8 +438,11 @@ public class VolumeInfo implements Parcelable { final Intent intent = new Intent(DocumentsContract.ACTION_BROWSE); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(uri); + + // 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_SHOW_FILESIZE, true); - intent.putExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, true); return intent; } diff --git a/packages/DocumentsUI/res/drawable/ic_sd_storage.xml b/packages/DocumentsUI/res/drawable/ic_sd_storage.xml new file mode 100644 index 0000000000000..b0f3cc395bcdc --- /dev/null +++ b/packages/DocumentsUI/res/drawable/ic_sd_storage.xml @@ -0,0 +1,24 @@ + + + + diff --git a/packages/DocumentsUI/res/menu/activity.xml b/packages/DocumentsUI/res/menu/activity.xml index a3cfde825f475..ac668fd2cb383 100644 --- a/packages/DocumentsUI/res/menu/activity.xml +++ b/packages/DocumentsUI/res/menu/activity.xml @@ -88,5 +88,6 @@ + android:showAsAction="never" + android:visible="false" /> diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml index afe93369ae2b5..3c49f167534ee 100644 --- a/packages/DocumentsUI/res/values/strings.xml +++ b/packages/DocumentsUI/res/values/strings.xml @@ -39,8 +39,8 @@ Sort by Search - - Settings + + Storage settings Open diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index 1474aa6b76905..6fd29a4e12087 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -150,7 +150,6 @@ public abstract class BaseActivity extends Activity implements SearchManagerList final MenuItem list = menu.findItem(R.id.menu_list); final MenuItem advanced = menu.findItem(R.id.menu_advanced); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); - final MenuItem settings = menu.findItem(R.id.menu_settings); final MenuItem search = menu.findItem(R.id.menu_search); // I'm thinkin' this isn't necesary here. If it is...'cuz of a bug.... @@ -167,7 +166,6 @@ public abstract class BaseActivity extends Activity implements SearchManagerList sortSize.setVisible(mState.showSize); // Only sort by size when visible fileSize.setVisible(!mState.forceSize); advanced.setVisible(!mState.forceAdvanced); - settings.setVisible((root.flags & Root.FLAG_HAS_SETTINGS) != 0); search.setVisible(canSearchRoot()); advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this) diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index c3395aeb7ba29..e7347a3d1485c 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -297,7 +297,6 @@ public class DocumentsActivity extends BaseActivity { final MenuItem grid = menu.findItem(R.id.menu_grid); final MenuItem list = menu.findItem(R.id.menu_list); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); - final MenuItem settings = menu.findItem(R.id.menu_settings); boolean recents = cwd == null; boolean picking = mState.action == ACTION_CREATE @@ -314,7 +313,6 @@ public class DocumentsActivity extends BaseActivity { } fileSize.setVisible(fileSize.isVisible() && !picking); - settings.setVisible(false); if (mState.action == ACTION_CREATE) { final FragmentManager fm = getFragmentManager(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index b490c002dc6c3..3968caea79ad6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -245,16 +245,21 @@ public class FilesActivity extends BaseActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); + final RootInfo root = getCurrentRoot(); final MenuItem createDir = menu.findItem(R.id.menu_create_dir); - final MenuItem newWindow = menu.findItem(R.id.menu_new_window); final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); + final MenuItem settings = menu.findItem(R.id.menu_settings); createDir.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); createDir.setVisible(true); createDir.setEnabled(canCreateDirectory()); - pasteFromCb.setEnabled(mClipper.hasItemsToPaste()); + settings.setVisible(root.hasSettings()); + + // TODO: For some reason menu is ignoring this being set + // to never in activity.xml. File a bug. + settings.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); Menus.disableHiddenItems(menu, pasteFromCb); return true; diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java index 12c0b8fcd2281..3f14a5506adf0 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java +++ b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java @@ -176,6 +176,7 @@ public class RootInfo implements Durable, Parcelable { } else if (isExternalStorage()) { derivedIcon = R.drawable.ic_root_smartphone; derivedType = TYPE_LOCAL; + // TODO: Apply SD card icon to SD devices. } else if (isDownloads()) { derivedIcon = R.drawable.ic_root_download; derivedType = TYPE_DOWNLOADS; @@ -244,6 +245,10 @@ public class RootInfo implements Durable, Parcelable { || derivedType == TYPE_RECENTS || derivedType == TYPE_DOWNLOADS; } + public boolean hasSettings() { + return (flags & Root.FLAG_HAS_SETTINGS) != 0; + } + public Drawable loadIcon(Context context) { if (derivedIcon != 0) { return context.getDrawable(derivedIcon); diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 56e5a9b6c58db..f89934dc50e43 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -134,9 +134,6 @@ public class ExternalStorageProvider extends DocumentsProvider { final String rootId; final String title; if (volume.getType() == VolumeInfo.TYPE_EMULATED) { - // save off the primary volume for subsequent "Home" dir initialization. - primaryVolume = volume; - // We currently only support a single emulated volume mounted at // a time, and it's always considered the primary rootId = ROOT_ID_PRIMARY_EMULATED; @@ -167,9 +164,14 @@ public class ExternalStorageProvider extends DocumentsProvider { mRoots.put(rootId, root); root.rootId = rootId; - root.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_ADVANCED + root.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD; + if (volume.isPrimary()) { + // save off the primary volume for subsequent "Home" dir initialization. + primaryVolume = volume; + root.flags |= Root.FLAG_ADVANCED; + } // Dunno when this would NOT be the case, but never hurts to be correct. if (volume.isMountedWritable()) { root.flags |= Root.FLAG_SUPPORTS_CREATE;