Merge "[Bouncer] Remove flicker of message area." into tm-qpr-dev am: 33b7f00aac

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20498374

Change-Id: Ica058b5035fa83e7257129a80a4b666bafb47a34
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt b/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt
index 450784e..f59bf8e 100644
--- a/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt
+++ b/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt
@@ -69,10 +69,16 @@
         super.reloadColor()
     }
 
-    override fun setMessage(msg: CharSequence?) {
+    override fun setMessage(msg: CharSequence?, animate: Boolean) {
         if ((msg == textAboutToShow && msg != null) || msg == text) {
             return
         }
+
+        if (!animate) {
+            super.setMessage(msg, animate)
+            return
+        }
+
         textAboutToShow = msg
 
         if (animatorSet.isRunning) {
@@ -89,7 +95,7 @@
         hideAnimator.addListener(
             object : AnimatorListenerAdapter() {
                 override fun onAnimationEnd(animation: Animator?) {
-                    super@BouncerKeyguardMessageArea.setMessage(msg)
+                    super@BouncerKeyguardMessageArea.setMessage(msg, animate)
                 }
             }
         )
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
index 92ba619..3e32cf5 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
@@ -159,10 +159,12 @@
                 int secondsRemaining = (int) Math.round(millisUntilFinished / 1000.0);
                 Map<String, Object> arguments = new HashMap<>();
                 arguments.put("count", secondsRemaining);
-                mMessageAreaController.setMessage(PluralsMessageFormatter.format(
-                        mView.getResources(),
-                        arguments,
-                        R.string.kg_too_many_failed_attempts_countdown));
+                mMessageAreaController.setMessage(
+                        PluralsMessageFormatter.format(
+                            mView.getResources(),
+                            arguments,
+                            R.string.kg_too_many_failed_attempts_countdown),
+                        /* animate= */ false);
             }
 
             @Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java
index c79fc2c..0e5f8c1 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java
@@ -59,6 +59,7 @@
     @Nullable
     private ViewGroup mContainer;
     private int mTopMargin;
+    protected boolean mAnimate;
 
     public KeyguardMessageArea(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -106,7 +107,7 @@
     }
 
     @Override
-    public void setMessage(CharSequence msg) {
+    public void setMessage(CharSequence msg, boolean animate) {
         if (!TextUtils.isEmpty(msg)) {
             securityMessageChanged(msg);
         } else {
@@ -115,21 +116,12 @@
     }
 
     @Override
-    public void setMessage(int resId) {
-        CharSequence message = null;
-        if (resId != 0) {
-            message = getContext().getResources().getText(resId);
-        }
-        setMessage(message);
-    }
-
-    @Override
     public void formatMessage(int resId, Object... formatArgs) {
         CharSequence message = null;
         if (resId != 0) {
             message = getContext().getString(resId, formatArgs);
         }
-        setMessage(message);
+        setMessage(message, true);
     }
 
     private void securityMessageChanged(CharSequence message) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
index db986e0..c29f632 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
@@ -92,11 +92,19 @@
     }
 
     public void setMessage(CharSequence s) {
-        mView.setMessage(s);
+        setMessage(s, true);
+    }
+
+    /**
+     * Sets a message to the underlying text view.
+     */
+    public void setMessage(CharSequence s, boolean animate) {
+        mView.setMessage(s, animate);
     }
 
     public void setMessage(int resId) {
-        mView.setMessage(resId);
+        String message = resId != 0 ? mView.getResources().getString(resId) : null;
+        setMessage(message);
     }
 
     public void setNextMessageColor(ColorStateList colorState) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 1f0bd54..cdbfb24 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -372,10 +372,13 @@
                 Map<String, Object> arguments = new HashMap<>();
                 arguments.put("count", secondsRemaining);
 
-                mMessageAreaController.setMessage(PluralsMessageFormatter.format(
-                        mView.getResources(),
-                        arguments,
-                        R.string.kg_too_many_failed_attempts_countdown));
+                mMessageAreaController.setMessage(
+                        PluralsMessageFormatter.format(
+                            mView.getResources(),
+                            arguments,
+                            R.string.kg_too_many_failed_attempts_countdown),
+                        /* animate= */ false
+                );
             }
 
             @Override
diff --git a/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java b/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java
index 777bd19..3392a1c 100644
--- a/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java
+++ b/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java
@@ -23,9 +23,10 @@
     /** Set text color for the next security message. */
     default void setNextMessageColor(ColorStateList colorState) {}
 
-    void setMessage(CharSequence msg);
-
-    void setMessage(int resId);
+    /**
+     * Sets a message to the underlying text view.
+     */
+    void setMessage(CharSequence msg, boolean animate);
 
     void formatMessage(int resId, Object... formatArgs);
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/AuthKeyguardMessageAreaTest.java b/packages/SystemUI/tests/src/com/android/keyguard/AuthKeyguardMessageAreaTest.java
index 0a9c745..ffedb30 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/AuthKeyguardMessageAreaTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/AuthKeyguardMessageAreaTest.java
@@ -46,7 +46,7 @@
     @Test
     public void testShowsTextField() {
         mKeyguardMessageArea.setVisibility(View.INVISIBLE);
-        mKeyguardMessageArea.setMessage("oobleck");
+        mKeyguardMessageArea.setMessage("oobleck", /* animate= */ true);
         assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck");
     }
@@ -55,7 +55,7 @@
     public void testHiddenWhenBouncerHidden() {
         mKeyguardMessageArea.setIsVisible(false);
         mKeyguardMessageArea.setVisibility(View.INVISIBLE);
-        mKeyguardMessageArea.setMessage("oobleck");
+        mKeyguardMessageArea.setMessage("oobleck", /* animate= */ true);
         assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE);
         assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck");
     }
@@ -63,7 +63,7 @@
     @Test
     public void testClearsTextField() {
         mKeyguardMessageArea.setVisibility(View.VISIBLE);
-        mKeyguardMessageArea.setMessage("");
+        mKeyguardMessageArea.setMessage("", /* animate= */ true);
         assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE);
         assertThat(mKeyguardMessageArea.getText()).isEqualTo("");
     }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/BouncerKeyguardMessageAreaTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/BouncerKeyguardMessageAreaTest.kt
index 7b9b39f..ba46a87 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/BouncerKeyguardMessageAreaTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/BouncerKeyguardMessageAreaTest.kt
@@ -49,30 +49,30 @@
     @Test
     fun testSetSameMessage() {
         val underTestSpy = spy(underTest)
-        underTestSpy.setMessage("abc")
-        underTestSpy.setMessage("abc")
+        underTestSpy.setMessage("abc", animate = true)
+        underTestSpy.setMessage("abc", animate = true)
         verify(underTestSpy, times(1)).text = "abc"
     }
 
     @Test
     fun testSetDifferentMessage() {
-        underTest.setMessage("abc")
-        underTest.setMessage("def")
+        underTest.setMessage("abc", animate = true)
+        underTest.setMessage("def", animate = true)
         assertThat(underTest.text).isEqualTo("def")
     }
 
     @Test
     fun testSetNullMessage() {
-        underTest.setMessage(null)
+        underTest.setMessage(null, animate = true)
         assertThat(underTest.text).isEqualTo("")
     }
 
     @Test
     fun testSetNullClearsPreviousMessage() {
-        underTest.setMessage("something not null")
+        underTest.setMessage("something not null", animate = true)
         assertThat(underTest.text).isEqualTo("something not null")
 
-        underTest.setMessage(null)
+        underTest.setMessage(null, animate = true)
         assertThat(underTest.text).isEqualTo("")
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
index 8290084..0e837d2 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
@@ -85,7 +85,7 @@
     @Test
     public void testClearsTextField() {
         mMessageAreaController.setMessage("");
-        verify(mKeyguardMessageArea).setMessage("");
+        verify(mKeyguardMessageArea).setMessage("", /* animate= */ true);
     }
 
     @Test