Disable searching in archives.

It doesn't work anyway.

Test: Confirmed manually that the search icon is not shown.
Bug: 35053993
Change-Id: I53a3ed8784d7bf9662c2b1a4fe2d0c3240cf263b
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 1510d29..ac5d9d8 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -155,8 +155,6 @@
              */
             @Override
             public void onSearchChanged(@Nullable String query) {
-                // We should not get here if root is not searchable
-                assert (canSearchRoot());
                 reloadSearch(query);
             }
 
@@ -229,7 +227,7 @@
     @CallSuper
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
-        mSearchManager.showMenu(canSearchRoot());
+        mSearchManager.showMenu(mState.stack);
         return true;
     }
 
@@ -431,11 +429,6 @@
         return authorities;
     }
 
-    boolean canSearchRoot() {
-        final RootInfo root = getCurrentRoot();
-        return (root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0;
-    }
-
     public static BaseActivity get(Fragment fragment) {
         return (BaseActivity) fragment.getActivity();
     }
diff --git a/src/com/android/documentsui/RootsMonitor.java b/src/com/android/documentsui/RootsMonitor.java
index a0d4d0b..28a10f0 100644
--- a/src/com/android/documentsui/RootsMonitor.java
+++ b/src/com/android/documentsui/RootsMonitor.java
@@ -136,7 +136,7 @@
 
             // Clear entire backstack and start in new root.
             mState.stack.changeRoot(defaultRoot);
-            mSearchMgr.update(defaultRoot);
+            mSearchMgr.update(mState.stack);
 
             if (defaultRoot.isRecents()) {
                 mOwner.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
diff --git a/src/com/android/documentsui/picker/MenuManager.java b/src/com/android/documentsui/picker/MenuManager.java
index 9288717..9e74944 100644
--- a/src/com/android/documentsui/picker/MenuManager.java
+++ b/src/com/android/documentsui/picker/MenuManager.java
@@ -57,7 +57,7 @@
         if (picking()) {
             // May already be hidden because the root
             // doesn't support search.
-            mSearchManager.showMenu(false);
+            mSearchManager.showMenu(null);
         }
     }
 
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index ba05115..57b9053 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -34,6 +34,8 @@
 
 import com.android.documentsui.DocumentsToolbar;
 import com.android.documentsui.R;
+import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.Shared;
 
@@ -103,9 +105,9 @@
     }
 
     /**
-     * @param root Info about the current directory.
+     * @param stack New stack.
      */
-    public void update(RootInfo root) {
+    public void update(DocumentStack stack) {
         if (mMenuItem == null) {
             if (DEBUG) Log.d(TAG, "update called before Search MenuItem installed.");
             return;
@@ -129,21 +131,35 @@
             }
         }
 
-        showMenu(root != null
-                && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0));
+        showMenu(stack);
     }
 
-    public void showMenu(boolean visible) {
+    public void showMenu(@Nullable DocumentStack stack) {
+        final DocumentInfo cwd = stack.peek();
+
+        boolean supportsSearch = true;
+
+        // Searching in archives is not enabled, as archives are backed by
+        // a different provider than the root provider.
+        if (cwd != null && cwd.isInArchive()) {
+            supportsSearch = false;
+        }
+
+        final RootInfo root = stack != null ? stack.getRoot() : null;
+        if (root == null || (root.flags & Root.FLAG_SUPPORTS_SEARCH) == 0) {
+            supportsSearch = false;
+        }
+
         if (mMenuItem == null) {
             if (DEBUG) Log.d(TAG, "showMenu called before Search MenuItem installed.");
             return;
         }
 
-        if (!visible) {
+        if (!supportsSearch) {
             mCurrentSearch = null;
         }
 
-        mMenuItem.setVisible(visible);
+        mMenuItem.setVisible(supportsSearch);
     }
 
     /**
diff --git a/tests/common/com/android/documentsui/testing/TestSearchViewManager.java b/tests/common/com/android/documentsui/testing/TestSearchViewManager.java
index 6d84cb9..045045d 100644
--- a/tests/common/com/android/documentsui/testing/TestSearchViewManager.java
+++ b/tests/common/com/android/documentsui/testing/TestSearchViewManager.java
@@ -16,6 +16,7 @@
 
 package com.android.documentsui.testing;
 
+import com.android.documentsui.base.DocumentStack;
 import com.android.documentsui.queries.DebugCommandProcessor;
 import com.android.documentsui.queries.SearchViewManager;
 
@@ -52,7 +53,7 @@
     }
 
     @Override
-    public void showMenu(boolean visible) {
+    public void showMenu(DocumentStack stack) {
         mShowMenuCalled = true;
     }