Merge "Implement AOSP landing page by config" into qt-dev
am: df6b9fa055

Change-Id: Iee5011204266bea6c0c08593dc701d9a86ff8eae
diff --git a/res/values/overlayable.xml b/res/values/overlayable.xml
index c0074ab..23ca14e 100644
--- a/res/values/overlayable.xml
+++ b/res/values/overlayable.xml
@@ -46,6 +46,7 @@
             <item type="bool" name="config_default_show_device_root"/>
             <item type="bool" name="feature_default_root_in_browse"/>
             <item type="bool" name="is_launcher_enabled"/>
+            <item type="bool" name="show_search_bar"/>
             <!-- END BOOLEAN CONFIG -->
 
             <!-- START STRING CONFIG -->
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index d46a77a..0f019b2 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -301,7 +301,8 @@
         getMenuInflater().inflate(R.menu.activity, menu);
         mNavigator.update();
         boolean fullBarSearch = getResources().getBoolean(R.bool.full_bar_search_view);
-        mSearchManager.install(menu, fullBarSearch);
+        boolean showSearchBar = getResources().getBoolean(R.bool.show_search_bar);
+        mSearchManager.install(menu, fullBarSearch, showSearchBar);
 
         final ActionMenuView subMenuView = findViewById(R.id.sub_menu);
         // If size is 0, it means the menu has not inflated and it should only do once.
diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java
index 167f6d6..c2fc76a 100644
--- a/src/com/android/documentsui/NavigationViewManager.java
+++ b/src/com/android/documentsui/NavigationViewManager.java
@@ -18,9 +18,6 @@
 
 import static com.android.documentsui.base.SharedMinimal.VERBOSE;
 
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-
 import android.app.Activity;
 import android.content.res.Resources;
 import android.graphics.Outline;
@@ -29,6 +26,9 @@
 import android.view.View;
 import android.view.ViewOutlineProvider;
 
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.Toolbar;
+
 import com.android.documentsui.R;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
@@ -55,6 +55,7 @@
     private final CollapsingToolbarLayout mCollapsingBarLayout;
     private final Drawable mDefaultActionBarBackground;
     private final ViewOutlineProvider mSearchBarOutlineProvider;
+    private final boolean mShowSearchBar;
 
     public NavigationViewManager(
             Activity activity,
@@ -80,6 +81,7 @@
         mSearchBarView = activity.findViewById(R.id.searchbar_title);
         mCollapsingBarLayout = activity.findViewById(R.id.collapsing_toolbar);
         mDefaultActionBarBackground = mToolbar.getBackground();
+        mShowSearchBar = activity.getResources().getBoolean(R.bool.show_search_bar);
 
         final Resources resources = mToolbar.getResources();
         final int radius = resources.getDimensionPixelSize(R.dimen.search_bar_radius);
@@ -133,7 +135,7 @@
         mToolbar.setNavigationIcon(getActionBarIcon());
         mToolbar.setNavigationContentDescription(R.string.drawer_open);
 
-        if (mState.stack.isRecents()) {
+        if (shouldShowSearchBar()) {
             mBreadcrumb.show(false);
             mToolbar.setTitle(null);
             mSearchBarView.setVisibility(View.VISIBLE);
@@ -186,7 +188,7 @@
     }
 
     private boolean shouldShowSearchBar() {
-        return mState.stack.isRecents() && !mEnv.isSearchExpanded();
+        return mState.stack.isRecents() && !mEnv.isSearchExpanded() && mShowSearchBar;
     }
 
     // Hamburger if drawer is present, else sad nullness.
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index fd6499c..c498329 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -84,6 +84,7 @@
     private boolean mIgnoreNextClose;
     private boolean mFullBar;
     private boolean mIsHistorySearch;
+    private boolean mShowSearchBar;
 
     private Menu mMenu;
     private MenuItem mMenuItem;
@@ -206,7 +207,14 @@
         mSearchView.clearFocus();
     }
 
-    public void install(Menu menu, boolean isFullBarSearch) {
+    /**
+     * Initailize search view by option menu.
+     *
+     * @param menu the menu include search view
+     * @param isFullBarSearch whether hide other menu when search view expand
+     * @param isShowSearchBar whether replace collapsed search view by search hint text
+     */
+    public void install(Menu menu, boolean isFullBarSearch, boolean isShowSearchBar) {
         mMenu = menu;
         mMenuItem = mMenu.findItem(R.id.option_menu_search);
         mSearchView = (SearchView) mMenuItem.getActionView();
@@ -224,6 +232,7 @@
         }
 
         mFullBar = isFullBarSearch;
+        mShowSearchBar = isShowSearchBar;
         mSearchView.setMaxWidth(Integer.MAX_VALUE);
         mMenuItem.setOnActionExpandListener(this);
 
@@ -300,7 +309,7 @@
         }
 
         // Recent root show open search bar, do not show duplicate search icon.
-        mMenuItem.setVisible(supportsSearch && !stack.isRecents());
+        mMenuItem.setVisible(supportsSearch && (!stack.isRecents() || !mShowSearchBar));
 
         mChipViewManager.setChipsRowVisible(supportsSearch && root.supportsMimeTypesSearch());
     }
diff --git a/tests/functional/com/android/documentsui/FilesActivityDefaultsUiTest.java b/tests/functional/com/android/documentsui/FilesActivityDefaultsUiTest.java
index 8cf7306..f8748fa 100644
--- a/tests/functional/com/android/documentsui/FilesActivityDefaultsUiTest.java
+++ b/tests/functional/com/android/documentsui/FilesActivityDefaultsUiTest.java
@@ -60,7 +60,13 @@
                 bots.main.assertWindowTitle("Downloads");
             }
         } else {
-            bots.main.assertSearchBarShow();
+            boolean showSearchBar =
+                    context.getResources().getBoolean(R.bool.show_search_bar);
+            if (showSearchBar) {
+                bots.main.assertSearchBarShow();
+            } else {
+                bots.main.assertWindowTitle("Recent");
+            }
         }
     }
 
diff --git a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
index e058ecb..c4be9f3 100644
--- a/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
+++ b/tests/unit/com/android/documentsui/queries/SearchViewManagerTest.java
@@ -121,7 +121,7 @@
 
         mTestMenu = TestMenu.create();
         mSearchMenuItem = mTestMenu.findItem(R.id.option_menu_search);
-        mSearchViewManager.install(mTestMenu, true);
+        mSearchViewManager.install(mTestMenu, true, false);
     }
 
     private static class TestableSearchViewManager extends SearchViewManager {
@@ -395,7 +395,7 @@
         root.queryArgs = QUERY_ARG_MIME_TYPES;
         DocumentStack stack = new DocumentStack(root, new DocumentInfo());
 
-        mSearchViewManager.install(mTestMenu, true);
+        mSearchViewManager.install(mTestMenu, true, false);
         mSearchViewManager.showMenu(stack);
 
         assertFalse(mSearchMenuItem.isVisible());