Show view mode button in action bar on Downloads.
A grab bag also with:
Report Roots while loading (in DEBUG).
Null check DirectoryFragment before calling methods on it.
Bug:26936660,26143397
Change-Id: Ief2c943eb24fb14349bbd9cc4a5fbd670f57d567
diff --git a/res/menu/activity.xml b/res/menu/activity.xml
index ac668fd..b791ef1 100644
--- a/res/menu/activity.xml
+++ b/res/menu/activity.xml
@@ -29,7 +29,8 @@
android:icon="@drawable/ic_menu_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView"
- android:imeOptions="actionSearch" />
+ android:imeOptions="actionSearch"
+ android:visible="false" />
<item
android:id="@+id/menu_sort"
android:title="@string/menu_sort"
@@ -51,12 +52,13 @@
android:id="@+id/menu_grid"
android:title="@string/menu_grid"
android:icon="@drawable/ic_menu_view_grid"
- android:showAsAction="never" />
+ android:showAsAction="always" />
<item
android:id="@+id/menu_list"
android:title="@string/menu_list"
android:icon="@drawable/ic_menu_view_list"
- android:showAsAction="never" />
+ android:showAsAction="always" />
+
<item
android:id="@+id/menu_new_window"
android:title="@string/menu_new_window"
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 6fd29a4..0fed641 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -38,6 +38,7 @@
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
+import android.support.annotation.CallSuper;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.util.Log;
@@ -138,10 +139,12 @@
}
@Override
+ @CallSuper
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- final RootInfo root = getCurrentRoot();
+ mSearchManager.showMenu(canSearchRoot());
+
final boolean inRecents = getCurrentDirectory() == null;
final MenuItem sort = menu.findItem(R.id.menu_sort);
@@ -150,24 +153,17 @@
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 search = menu.findItem(R.id.menu_search);
- // I'm thinkin' this isn't necesary here. If it is...'cuz of a bug....
- // then uncomment the linke and let's get a proper bug reference here.
- // mSearchManager.update(root);
-
- // Search uses backend ranking; no sorting
+ // Search uses backend ranking; no sorting, recents doesn't support sort.
sort.setVisible(!inRecents && !mSearchManager.isSearching());
+ sortSize.setVisible(mState.showSize); // Only sort by size when file sizes are visible
+ fileSize.setVisible(!mState.forceSize);
// grid/list is effectively a toggle.
grid.setVisible(mState.derivedMode != State.MODE_GRID);
list.setVisible(mState.derivedMode != State.MODE_LIST);
- sortSize.setVisible(mState.showSize); // Only sort by size when visible
- fileSize.setVisible(!mState.forceSize);
advanced.setVisible(!mState.forceAdvanced);
- search.setVisible(canSearchRoot());
-
advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
? R.string.menu_advanced_hide : R.string.menu_advanced_show);
fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
@@ -271,8 +267,10 @@
return true;
case R.id.menu_paste_from_clipboard:
- DirectoryFragment.get(getFragmentManager())
- .pasteFromClipboard();
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.pasteFromClipboard();
+ }
return true;
case R.id.menu_advanced:
@@ -295,6 +293,10 @@
}
}
+ final @Nullable DirectoryFragment getDirectoryFragment() {
+ return DirectoryFragment.get(getFragmentManager());
+ }
+
void showCreateDirectoryDialog() {
CreateDirectoryFragment.show(getFragmentManager());
}
@@ -423,7 +425,10 @@
void setDisplayFileSize(boolean display) {
LocalPreferences.setDisplayFileSize(this, display);
mState.showSize = display;
- DirectoryFragment.get(getFragmentManager()).onDisplayStateChanged();
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.onDisplayStateChanged();
+ }
invalidateOptionsMenu();
}
@@ -432,7 +437,10 @@
*/
void setUserSortOrder(int sortOrder) {
mState.userSortOrder = sortOrder;
- DirectoryFragment.get(getFragmentManager()).onSortOrderChanged();
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.onSortOrderChanged();
+ };
}
/**
@@ -447,7 +455,10 @@
// in onOptionsItemSelected, and not do the full invalidation
// But! That's a larger refactoring we'll save for another day.
invalidateOptionsMenu();
- DirectoryFragment.get(getFragmentManager()).onViewModeChanged();
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.onViewModeChanged();
+ };
}
public void setPending(boolean pending) {
@@ -496,7 +507,8 @@
return;
}
- if (DirectoryFragment.get(getFragmentManager()).onBackPressed()) {
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null && dir.onBackPressed()) {
return;
}
diff --git a/src/com/android/documentsui/DocumentsActivity.java b/src/com/android/documentsui/DocumentsActivity.java
index e7347a3..b933d0a 100644
--- a/src/com/android/documentsui/DocumentsActivity.java
+++ b/src/com/android/documentsui/DocumentsActivity.java
@@ -293,18 +293,24 @@
final DocumentInfo cwd = getCurrentDirectory();
+ boolean picking = mState.action == ACTION_CREATE
+ || mState.action == ACTION_OPEN_TREE
+ || mState.action == ACTION_PICK_COPY_DESTINATION;
+
+ if (picking) {
+ // May already be hidden because the root
+ // doesn't support search.
+ mSearchManager.showMenu(false);
+ }
+
final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
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);
boolean recents = cwd == null;
- boolean picking = mState.action == ACTION_CREATE
- || mState.action == ACTION_OPEN_TREE
- || mState.action == ACTION_PICK_COPY_DESTINATION;
createDir.setVisible(picking && !recents && cwd.isCreateSupported());
- mSearchManager.showMenu(!picking);
// No display options in recent directories
if (picking && recents) {
diff --git a/src/com/android/documentsui/DownloadsActivity.java b/src/com/android/documentsui/DownloadsActivity.java
index 3302da9..b6ded6c 100644
--- a/src/com/android/documentsui/DownloadsActivity.java
+++ b/src/com/android/documentsui/DownloadsActivity.java
@@ -150,14 +150,12 @@
final MenuItem newWindow = menu.findItem(R.id.menu_new_window);
final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard);
final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
- final MenuItem search = menu.findItem(R.id.menu_search);
advanced.setVisible(false);
createDir.setVisible(false);
pasteFromCb.setEnabled(false);
newWindow.setEnabled(false);
fileSize.setVisible(false);
- search.setVisible(false);
Menus.disableHiddenItems(menu);
return true;
diff --git a/src/com/android/documentsui/FilesActivity.java b/src/com/android/documentsui/FilesActivity.java
index 3968cae..f0df3a2 100644
--- a/src/com/android/documentsui/FilesActivity.java
+++ b/src/com/android/documentsui/FilesActivity.java
@@ -245,20 +245,20 @@
@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 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.
+ // TODO: For some reason settings menu item is not
+ // honoring the "showAsAction=never" setting in activity.xml.
settings.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
Menus.disableHiddenItems(menu, pasteFromCb);
@@ -276,9 +276,10 @@
createNewWindow();
return true;
case R.id.menu_paste_from_clipboard:
- DirectoryFragment dir = DirectoryFragment.get(getFragmentManager());
- dir = DirectoryFragment.get(getFragmentManager());
- dir.pasteFromClipboard();
+ DirectoryFragment dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.pasteFromClipboard();
+ }
return true;
}
@@ -381,20 +382,26 @@
@Override
public boolean onKeyShortcut(int keyCode, KeyEvent event) {
DirectoryFragment dir;
+ // TODO: All key events should be statically bound using alphabeticShortcut.
+ // But not working.
switch (keyCode) {
case KeyEvent.KEYCODE_A:
- dir = DirectoryFragment.get(getFragmentManager());
- dir.selectAllFiles();
+ dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.selectAllFiles();
+ }
return true;
case KeyEvent.KEYCODE_C:
- // TODO: Should be statically bound using alphabeticShortcut. See b/21330356.
- dir = DirectoryFragment.get(getFragmentManager());
- dir.copySelectedToClipboard();
+ dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.copySelectedToClipboard();
+ }
return true;
case KeyEvent.KEYCODE_V:
- // TODO: Should be statically bound using alphabeticShortcut. See b/21330356.
- dir = DirectoryFragment.get(getFragmentManager());
- dir.pasteFromClipboard();
+ dir = getDirectoryFragment();
+ if (dir != null) {
+ dir.pasteFromClipboard();
+ }
return true;
default:
return super.onKeyShortcut(keyCode, event);
diff --git a/src/com/android/documentsui/RootsFragment.java b/src/com/android/documentsui/RootsFragment.java
index c2aeb86..d3a35d9 100644
--- a/src/com/android/documentsui/RootsFragment.java
+++ b/src/com/android/documentsui/RootsFragment.java
@@ -302,8 +302,10 @@
for (final RootInfo root : roots) {
final RootItem item = new RootItem(root);
if (root.isLibrary()) {
+ if (DEBUG) Log.d(TAG, "Adding " + root + " as library.");
libraries.add(item);
} else {
+ if (DEBUG) Log.d(TAG, "Adding " + root + " as non-library.");
others.add(item);
}
}