Merge "Save BottomSheet state when screen rotate"
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 43a9b78..cc470cc 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -171,6 +171,7 @@
         <item name="colorPrimaryDark">@*android:color/primary_dark_device_default_settings_light</item>
         <item name="colorAccent">@*android:color/accent_device_default_light</item>
         <item name="preferenceTheme">@style/PreferenceTheme</item>
+        <item name="android:windowLightStatusBar">true</item>
     </style>
 
     <!--TODO(b/111875856) This theme will be useless, when we add real activity/fragment to handle the full screen for WifiDialog -->
diff --git a/src/com/android/settings/SettingsHomepageActivity.java b/src/com/android/settings/SettingsHomepageActivity.java
index 6eef99c..859e635 100644
--- a/src/com/android/settings/SettingsHomepageActivity.java
+++ b/src/com/android/settings/SettingsHomepageActivity.java
@@ -40,9 +40,12 @@
             settings.setAction("android.settings.SETTINGS");
             startActivity(settings);
             finish();
+            return;
         }
         setContentView(R.layout.settings_homepage);
-        switchToFragment(this, R.id.main_content, HomepageFragment.class.getName());
+        if (savedInstanceState == null) {
+            switchToFragment(this, R.id.main_content, HomepageFragment.class.getName());
+        }
     }
 
     public static boolean isDynamicHomepageEnabled(Context context) {
diff --git a/src/com/android/settings/homepage/HomepageFragment.java b/src/com/android/settings/homepage/HomepageFragment.java
index 2e22a03..9ed4e6a 100644
--- a/src/com/android/settings/homepage/HomepageFragment.java
+++ b/src/com/android/settings/homepage/HomepageFragment.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.homepage;
 
-
 import android.app.ActionBar;
 import android.app.Activity;
 import android.content.Intent;
@@ -37,17 +36,20 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.SearchFeatureProvider;
 
-import com.google.android.material.bottomappbar.BottomAppBar;
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 
 public class HomepageFragment extends InstrumentedFragment {
 
     private static final String TAG = "HomepageFragment";
+    private static final String SAVE_BOTTOMBAR_STATE = "bottombar_state";
+    private static final String SAVE_BOTTOM_FRAGMENT_LOADED = "bottom_fragment_loaded";
 
     private FloatingActionButton mSearchButton;
     private BottomSheetBehavior mBottomSheetBehavior;
-    private boolean mBottomFragmentLoaded = false;
+    private View mBottomBar;
+    private View mSearchBar;
+    private boolean mBottomFragmentLoaded;
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -61,6 +63,22 @@
         super.onActivityCreated(savedInstanceState);
         setupBottomBar();
         setupSearchBar();
+        if (savedInstanceState != null) {
+            final int bottombarState = savedInstanceState.getInt(SAVE_BOTTOMBAR_STATE);
+            mBottomFragmentLoaded = savedInstanceState.getBoolean(SAVE_BOTTOM_FRAGMENT_LOADED);
+            mBottomSheetBehavior.setState(bottombarState);
+            setBarState(bottombarState);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        if (mBottomSheetBehavior != null) {
+            outState.putInt(SAVE_BOTTOMBAR_STATE, mBottomSheetBehavior.getState());
+            outState.putBoolean(SAVE_BOTTOM_FRAGMENT_LOADED, mBottomFragmentLoaded);
+        }
     }
 
     @Override
@@ -70,8 +88,8 @@
 
     private void setupBottomBar() {
         final Activity activity = getActivity();
-        mSearchButton = activity.findViewById(R.id.search_fab);
 
+        mSearchButton = activity.findViewById(R.id.search_fab);
         mSearchButton.setOnClickListener(v -> {
             final Intent intent = SearchFeatureProvider.SEARCH_UI_INTENT;
             intent.setPackage(FeatureFactory.getFactory(activity)
@@ -79,18 +97,16 @@
             startActivityForResult(intent, 0 /* requestCode */);
         });
         mBottomSheetBehavior = BottomSheetBehavior.from(activity.findViewById(R.id.bottom_sheet));
-        final BottomAppBar bottomBar = activity.findViewById(R.id.bar);
-        bottomBar.setOnClickListener(v -> {
+        mSearchBar = activity.findViewById(R.id.search_bar_container);
+        mBottomBar = activity.findViewById(R.id.bar);
+        mBottomBar.setOnClickListener(v -> {
             mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
         });
 
         final int screenWidthpx = getResources().getDisplayMetrics().widthPixels;
-        final View searchbar = activity.findViewById(R.id.search_bar_container);
-        final View bottombar = activity.findViewById(R.id.bar);
         final Toolbar searchActionBar = activity.findViewById(R.id.search_action_bar);
         searchActionBar.setNavigationIcon(R.drawable.ic_search_floating_24dp);
 
-
         mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
             @Override
             public void onStateChanged(@NonNull View bottomSheet, int newState) {
@@ -100,31 +116,35 @@
                             R.id.bottom_sheet_fragment, DashboardSummary.class.getName());
                     mBottomFragmentLoaded = true;
                 }
-                if (newState == BottomSheetBehavior.STATE_EXPANDED) {
-                    bottombar.setVisibility(View.INVISIBLE);
-                    searchbar.setVisibility(View.VISIBLE);
-                    mSearchButton.setVisibility(View.GONE);
-                } else if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
-                    bottombar.setVisibility(View.VISIBLE);
-                    searchbar.setVisibility(View.INVISIBLE);
-                    mSearchButton.setVisibility(View.VISIBLE);
-                } else if (newState == BottomSheetBehavior.STATE_SETTLING) {
-                    bottombar.setVisibility(View.VISIBLE);
-                    searchbar.setVisibility(View.VISIBLE);
-                    mSearchButton.setVisibility(View.VISIBLE);
-                }
+                setBarState(newState);
             }
 
             @Override
             public void onSlide(@NonNull View bottomSheet, float slideOffset) {
-                bottombar.setAlpha(1 - slideOffset);
+                mBottomBar.setAlpha(1 - slideOffset);
                 mSearchButton.setAlpha(1 - slideOffset);
-                searchbar.setAlpha(slideOffset);
-                searchbar.setPadding((int) (screenWidthpx * (1 - slideOffset)), 0, 0, 0);
+                mSearchBar.setAlpha(slideOffset);
+                mSearchBar.setPadding((int) (screenWidthpx * (1 - slideOffset)), 0, 0, 0);
             }
         });
     }
 
+    private void setBarState(int bottomSheetState) {
+        if (bottomSheetState == BottomSheetBehavior.STATE_EXPANDED) {
+            mBottomBar.setVisibility(View.INVISIBLE);
+            mSearchBar.setVisibility(View.VISIBLE);
+            mSearchButton.setVisibility(View.GONE);
+        } else if (bottomSheetState == BottomSheetBehavior.STATE_COLLAPSED) {
+            mBottomBar.setVisibility(View.VISIBLE);
+            mSearchBar.setVisibility(View.INVISIBLE);
+            mSearchButton.setVisibility(View.VISIBLE);
+        } else if (bottomSheetState == BottomSheetBehavior.STATE_SETTLING) {
+            mBottomBar.setVisibility(View.VISIBLE);
+            mSearchBar.setVisibility(View.VISIBLE);
+            mSearchButton.setVisibility(View.VISIBLE);
+        }
+    }
+
     //TODO(110767984), copied from settingsActivity. We have to merge them
     private void setupSearchBar() {
         final Activity activity = getActivity();