Allow AllApps to restore current selected tab on activity recreate

This CL also fixes:

- Wrong tab selection on RTL
- Fixes header protection hydraulic scroll issue
- Work toggle button text background contrast

Bug: 186005219
Bug: 191250799
Bug: 191227662
Bug: 191349226
Test: Manual
Change-Id: I3777474c954ed0d542ac38ff552367904be147d3
diff --git a/res/values/config.xml b/res/values/config.xml
index 299c80e..04c359e 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -76,6 +76,9 @@
     <!-- View IDs to store item highlight information -->
     <item type="id" name="view_unhighlight_background" />
 
+    <!-- view ID used to restore work tab state -->
+    <item type="id" name="work_tab_state_id" />
+
     <!-- Menu id for feature flags -->
     <item type="id" name="menu_apply_flags" />
 
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 8076b27..67f2a9e 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -31,6 +31,7 @@
 import android.graphics.Paint;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.os.Bundle;
 import android.os.Parcelable;
 import android.os.Process;
 import android.text.Selection;
@@ -82,6 +83,8 @@
         Insettable, OnDeviceProfileChangeListener, OnActivePageChangedListener,
         ScrimView.ScrimDrawingController {
 
+    private static final String BUNDLE_KEY_CURRENT_PAGE = "launcher.allapps.current_page";
+
     public static final float PULL_MULTIPLIER = .02f;
     public static final float FLING_VELOCITY_MULTIPLIER = 1200f;
 
@@ -181,6 +184,23 @@
         } catch (Exception e) {
             Log.e("AllAppsContainerView", "restoreInstanceState viewId = 0", e);
         }
+        Bundle state = (Bundle) sparseArray.get(R.id.work_tab_state_id, null);
+        if (state != null) {
+            int currentPage = state.getInt(BUNDLE_KEY_CURRENT_PAGE, 0);
+            if (currentPage != 0) {
+                rebindAdapters(true);
+                mViewPager.setCurrentPage(currentPage);
+            }
+        }
+    }
+
+
+    @Override
+    protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
+        super.dispatchSaveInstanceState(container);
+        Bundle state = new Bundle();
+        state.putInt(BUNDLE_KEY_CURRENT_PAGE, getCurrentPage());
+        container.put(R.id.work_tab_state_id, state);
     }
 
     /**
@@ -231,7 +251,9 @@
 
     private void resetWorkProfile() {
         boolean isEnabled = !mAllAppsStore.hasModelFlag(FLAG_QUIET_MODE_ENABLED);
-        mWorkModeSwitch.updateCurrentState(isEnabled);
+        if (mWorkModeSwitch != null) {
+            mWorkModeSwitch.updateCurrentState(isEnabled);
+        }
         mWorkAdapterProvider.updateCurrentState(isEnabled);
         mAH[AdapterHolder.WORK].applyPadding();
     }
diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java
index 6d57aa6..a800d34 100644
--- a/src/com/android/launcher3/allapps/WorkModeSwitch.java
+++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java
@@ -67,6 +67,7 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
+        setSelected(true);
         setOnClickListener(this);
         if (Utilities.ATLEAST_R) {
             mKeyboardInsetAnimationCallback = new KeyboardInsetAnimationCallback(this);
diff --git a/src/com/android/launcher3/views/SpringRelativeLayout.java b/src/com/android/launcher3/views/SpringRelativeLayout.java
index 8e3ac20..8f814a1 100644
--- a/src/com/android/launcher3/views/SpringRelativeLayout.java
+++ b/src/com/android/launcher3/views/SpringRelativeLayout.java
@@ -108,8 +108,6 @@
             switch (direction) {
                 case DIRECTION_TOP:
                     return new EdgeEffectProxy(getContext(), mEdgeGlowTop);
-                case DIRECTION_BOTTOM:
-                    return new EdgeEffectProxy(getContext(), mEdgeGlowBottom);
             }
             return super.createEdgeEffect(view, direction);
         }
diff --git a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java
index b35c75b..df5d465 100644
--- a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java
+++ b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java
@@ -127,7 +127,7 @@
     @Override
     public void setActiveMarker(int activePage) {
         updateTabTextColor(activePage);
-        updateIndicatorPosition(activePage);
+        updateIndicatorPosition(mIsRtl ? 1 - activePage : activePage);
         if (mOnActivePageChangedListener != null && mLastActivePage != activePage) {
             mOnActivePageChangedListener.onActivePageChanged(activePage);
         }