OSDN Git Service

Show view mode button in action bar on Downloads.
authorSteve McKay <smckay@google.com>
Tue, 2 Feb 2016 19:41:03 +0000 (11:41 -0800)
committerSteve McKay <smckay@google.com>
Tue, 2 Feb 2016 22:51:04 +0000 (14:51 -0800)
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

packages/DocumentsUI/res/menu/activity.xml
packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java
packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java

index ac668fd..b791ef1 100644 (file)
@@ -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"
         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"
index 6fd29a4..0fed641 100644 (file)
@@ -38,6 +38,7 @@ import android.os.AsyncTask;
 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 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
     }
 
     @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 @@ 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 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 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
                 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 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
         }
     }
 
+    final @Nullable DirectoryFragment getDirectoryFragment() {
+        return DirectoryFragment.get(getFragmentManager());
+    }
+
     void showCreateDirectoryDialog() {
         CreateDirectoryFragment.show(getFragmentManager());
     }
@@ -423,7 +425,10 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
     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 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
      */
     void setUserSortOrder(int sortOrder) {
         mState.userSortOrder = sortOrder;
-        DirectoryFragment.get(getFragmentManager()).onSortOrderChanged();
+        DirectoryFragment dir = getDirectoryFragment();
+        if (dir != null) {
+            dir.onSortOrderChanged();
+        };
     }
 
     /**
@@ -447,7 +455,10 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
         // 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 @@ public abstract class BaseActivity extends Activity implements SearchManagerList
             return;
         }
 
-        if (DirectoryFragment.get(getFragmentManager()).onBackPressed()) {
+        DirectoryFragment dir = getDirectoryFragment();
+        if (dir != null && dir.onBackPressed()) {
             return;
         }
 
index e7347a3..b933d0a 100644 (file)
@@ -293,18 +293,24 @@ public class DocumentsActivity extends BaseActivity {
 
         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) {
index 3302da9..b6ded6c 100644 (file)
@@ -150,14 +150,12 @@ public class DownloadsActivity extends BaseActivity {
         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;
index 3968cae..f0df3a2 100644 (file)
@@ -245,20 +245,20 @@ 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 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 @@ public class FilesActivity extends BaseActivity {
                 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 @@ public class FilesActivity extends BaseActivity {
     @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);
index c2aeb86..d3a35d9 100644 (file)
@@ -302,8 +302,10 @@ public class RootsFragment extends Fragment {
             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);
                 }
             }