Merge "[DO NOT MERGE] Bouncer - Update selected item text color" into tm-dev
diff --git a/packages/SystemUI/res-keyguard/values-night/styles.xml b/packages/SystemUI/res-keyguard/values-night/styles.xml
new file mode 100644
index 0000000..b5e0b65
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/values-night/styles.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2022, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
+    <style name="Bouncer.UserSwitcher.Spinner.Item">
+        <item name="android:textSize">@dimen/bouncer_user_switcher_item_text_size</item>
+        <item name="android:textColor">@color/bouncer_user_switcher_item_text</item>
+    </style>
+</resources>
diff --git a/packages/SystemUI/res/color/bouncer_user_switcher_item_text.xml b/packages/SystemUI/res/color/bouncer_user_switcher_item_text.xml
new file mode 100644
index 0000000..b1e4b34
--- /dev/null
+++ b/packages/SystemUI/res/color/bouncer_user_switcher_item_text.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="false"
+          android:color="?android:attr/textColorPrimary"/>
+
+    <item android:color="?android:attr/textColorPrimaryInverse"/>
+</selector>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index fd7a6e6..f8c0590 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -707,6 +707,10 @@
         mDisappearAnimRunning = false;
     }
 
+    void reloadColors() {
+        mViewMode.reloadColors();
+    }
+
     /**
      * Enscapsulates the differences between bouncer modes for the container.
      */
@@ -728,6 +732,9 @@
         /** Called when the view needs to reset or hides */
         default void reset() {};
 
+        /** Refresh colors */
+        default void reloadColors() {};
+
         /** On a successful auth, optionally handle how the view disappears */
         default void startDisappearAnimation(SecurityMode securityMode) {};
 
@@ -822,6 +829,17 @@
         }
 
         @Override
+        public void reloadColors() {
+            TextView header =  (TextView) mView.findViewById(R.id.user_switcher_header);
+            if (header != null) {
+                header.setTextColor(Utils.getColorAttrDefaultColor(mView.getContext(),
+                        android.R.attr.textColorPrimary));
+                header.setBackground(mView.getContext().getDrawable(
+                        R.drawable.bouncer_user_switcher_header_bg));
+            }
+        }
+
+        @Override
         public void onDestroy() {
             mUserSwitcherController.removeUserSwitchCallback(mUserSwitchCallback);
         }
@@ -911,6 +929,7 @@
                     } else {
                         textView.setBackground(null);
                     }
+                    textView.setSelected(item == currentUser);
                     view.setEnabled(item.isSwitchToEnabled);
                     view.setAlpha(view.isEnabled() ? USER_SWITCH_ENABLED_ALPHA :
                             USER_SWITCH_DISABLED_ALPHA);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 965fcd2..19a2d9e 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -232,12 +232,12 @@
             new ConfigurationController.ConfigurationListener() {
                 @Override
                 public void onThemeChanged() {
-                    mSecurityViewFlipperController.reloadColors();
+                    reloadColors();
                 }
 
                 @Override
                 public void onUiModeChanged() {
-                    mSecurityViewFlipperController.reloadColors();
+                    reloadColors();
                 }
             };
     private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
@@ -635,6 +635,11 @@
         mView.updatePositionByTouchX(x);
     }
 
+    private void reloadColors() {
+        mSecurityViewFlipperController.reloadColors();
+        mView.reloadColors();
+    }
+
     static class Factory {
 
         private final KeyguardSecurityContainer mView;
diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java
index eb6705a..caf7ee4 100644
--- a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java
+++ b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java
@@ -30,8 +30,8 @@
 
 import androidx.annotation.StyleRes;
 
+import com.android.settingslib.Utils;
 import com.android.systemui.animation.Interpolators;
-import com.android.systemui.util.Utils;
 
 /**
  * Provides background color and radius animations for key pad buttons.
@@ -45,6 +45,7 @@
     private int mNormalColor;
     private int mHighlightColor;
     private int mStyle;
+    private TextView mDigitTextView;
     private static final int EXPAND_ANIMATION_MS = 100;
     private static final int EXPAND_COLOR_ANIMATION_MS = 50;
     private static final int CONTRACT_ANIMATION_DELAY_MS = 33;
@@ -58,71 +59,9 @@
             @Nullable TextView digitTextView) {
         mStyle = style;
         mBackground = (GradientDrawable) drawable;
+        mDigitTextView = digitTextView;
 
         reloadColors(context);
-        int textColorPrimary = com.android.settingslib.Utils
-                .getColorAttrDefaultColor(context, android.R.attr.textColorPrimary);
-        int textColorPrimaryInverse = com.android.settingslib.Utils
-                .getColorAttrDefaultColor(context, android.R.attr.textColorPrimaryInverse);
-
-        // Actual values will be updated later, usually during an onLayout() call
-        mExpandAnimator = ValueAnimator.ofFloat(0f, 1f);
-        mExpandAnimator.setDuration(EXPAND_ANIMATION_MS);
-        mExpandAnimator.setInterpolator(Interpolators.LINEAR);
-        mExpandAnimator.addUpdateListener(
-                anim -> mBackground.setCornerRadius((float) anim.getAnimatedValue()));
-
-        ValueAnimator expandBackgroundColorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
-                mNormalColor, mHighlightColor);
-        expandBackgroundColorAnimator.setDuration(EXPAND_COLOR_ANIMATION_MS);
-        expandBackgroundColorAnimator.setInterpolator(Interpolators.LINEAR);
-        expandBackgroundColorAnimator.addUpdateListener(
-                animator -> mBackground.setColor((int) animator.getAnimatedValue()));
-
-        ValueAnimator expandTextColorAnimator =
-                ValueAnimator.ofObject(new ArgbEvaluator(),
-                textColorPrimary, textColorPrimaryInverse);
-        expandTextColorAnimator.setInterpolator(Interpolators.LINEAR);
-        expandTextColorAnimator.setDuration(EXPAND_COLOR_ANIMATION_MS);
-        expandTextColorAnimator.addUpdateListener(valueAnimator -> {
-            if (digitTextView != null) {
-                digitTextView.setTextColor((int) valueAnimator.getAnimatedValue());
-            }
-        });
-
-        mExpandAnimatorSet = new AnimatorSet();
-        mExpandAnimatorSet.playTogether(mExpandAnimator,
-                expandBackgroundColorAnimator, expandTextColorAnimator);
-
-        mContractAnimator = ValueAnimator.ofFloat(1f, 0f);
-        mContractAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
-        mContractAnimator.setDuration(CONTRACT_ANIMATION_MS);
-        mContractAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-        mContractAnimator.addUpdateListener(
-                anim -> mBackground.setCornerRadius((float) anim.getAnimatedValue()));
-        ValueAnimator contractBackgroundColorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
-                mHighlightColor, mNormalColor);
-        contractBackgroundColorAnimator.setInterpolator(Interpolators.LINEAR);
-        contractBackgroundColorAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
-        contractBackgroundColorAnimator.setDuration(CONTRACT_ANIMATION_MS);
-        contractBackgroundColorAnimator.addUpdateListener(
-                animator -> mBackground.setColor((int) animator.getAnimatedValue()));
-
-        ValueAnimator contractTextColorAnimator =
-                ValueAnimator.ofObject(new ArgbEvaluator(), textColorPrimaryInverse,
-                textColorPrimary);
-        contractTextColorAnimator.setInterpolator(Interpolators.LINEAR);
-        contractTextColorAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
-        contractTextColorAnimator.setDuration(CONTRACT_ANIMATION_MS);
-        contractTextColorAnimator.addUpdateListener(valueAnimator -> {
-            if (digitTextView != null) {
-                digitTextView.setTextColor((int) valueAnimator.getAnimatedValue());
-            }
-        });
-
-        mContractAnimatorSet = new AnimatorSet();
-        mContractAnimatorSet.playTogether(mContractAnimator,
-                contractBackgroundColorAnimator, contractTextColorAnimator);
     }
 
     public void expand() {
@@ -160,6 +99,73 @@
         a.recycle();
 
         mBackground.setColor(mNormalColor);
+        createAnimators(context);
+    }
+
+    private void createAnimators(Context context) {
+        int textColorPrimary = Utils.getColorAttrDefaultColor(context,
+                android.R.attr.textColorPrimary);
+        int textColorPrimaryInverse = Utils.getColorAttrDefaultColor(context,
+                android.R.attr.textColorPrimaryInverse);
+
+        // Actual values will be updated later, usually during an onLayout() call
+        mExpandAnimator = ValueAnimator.ofFloat(0f, 1f);
+        mExpandAnimator.setDuration(EXPAND_ANIMATION_MS);
+        mExpandAnimator.setInterpolator(Interpolators.LINEAR);
+        mExpandAnimator.addUpdateListener(
+                anim -> mBackground.setCornerRadius((float) anim.getAnimatedValue()));
+
+        ValueAnimator expandBackgroundColorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
+                mNormalColor, mHighlightColor);
+        expandBackgroundColorAnimator.setDuration(EXPAND_COLOR_ANIMATION_MS);
+        expandBackgroundColorAnimator.setInterpolator(Interpolators.LINEAR);
+        expandBackgroundColorAnimator.addUpdateListener(
+                animator -> mBackground.setColor((int) animator.getAnimatedValue()));
+
+        ValueAnimator expandTextColorAnimator =
+                ValueAnimator.ofObject(new ArgbEvaluator(),
+                textColorPrimary, textColorPrimaryInverse);
+        expandTextColorAnimator.setInterpolator(Interpolators.LINEAR);
+        expandTextColorAnimator.setDuration(EXPAND_COLOR_ANIMATION_MS);
+        expandTextColorAnimator.addUpdateListener(valueAnimator -> {
+            if (mDigitTextView != null) {
+                mDigitTextView.setTextColor((int) valueAnimator.getAnimatedValue());
+            }
+        });
+
+        mExpandAnimatorSet = new AnimatorSet();
+        mExpandAnimatorSet.playTogether(mExpandAnimator,
+                expandBackgroundColorAnimator, expandTextColorAnimator);
+
+        mContractAnimator = ValueAnimator.ofFloat(1f, 0f);
+        mContractAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
+        mContractAnimator.setDuration(CONTRACT_ANIMATION_MS);
+        mContractAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+        mContractAnimator.addUpdateListener(
+                anim -> mBackground.setCornerRadius((float) anim.getAnimatedValue()));
+        ValueAnimator contractBackgroundColorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
+                mHighlightColor, mNormalColor);
+        contractBackgroundColorAnimator.setInterpolator(Interpolators.LINEAR);
+        contractBackgroundColorAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
+        contractBackgroundColorAnimator.setDuration(CONTRACT_ANIMATION_MS);
+        contractBackgroundColorAnimator.addUpdateListener(
+                animator -> mBackground.setColor((int) animator.getAnimatedValue()));
+
+        ValueAnimator contractTextColorAnimator =
+                ValueAnimator.ofObject(new ArgbEvaluator(), textColorPrimaryInverse,
+                textColorPrimary);
+        contractTextColorAnimator.setInterpolator(Interpolators.LINEAR);
+        contractTextColorAnimator.setStartDelay(CONTRACT_ANIMATION_DELAY_MS);
+        contractTextColorAnimator.setDuration(CONTRACT_ANIMATION_MS);
+        contractTextColorAnimator.addUpdateListener(valueAnimator -> {
+            if (mDigitTextView != null) {
+                mDigitTextView.setTextColor((int) valueAnimator.getAnimatedValue());
+            }
+        });
+
+        mContractAnimatorSet = new AnimatorSet();
+        mContractAnimatorSet.playTogether(mContractAnimator,
+                contractBackgroundColorAnimator, contractTextColorAnimator);
     }
 }