diff options
| author | 2022-11-16 11:59:57 -0800 | |
|---|---|---|
| committer | 2022-11-17 14:32:09 -0800 | |
| commit | 0b9bc54cb304472a19436ed106bb866859c97bcc (patch) | |
| tree | 45708e3a0d5f6b415b4734cc79a8c585a04048f8 | |
| parent | 2a4339d0730ac9c6bffc7a84fc9ae470415fc459 (diff) | |
[Bouncer] Remove flicker of message area.
When locked out for 30s, we add a timer that changes the message every
second. The animation is a bit jarring, so I added a way to disable the
animation in cases like this.
Fixes: 257407393
Test: Add unique incorrect pins until I get the dialog that I have been
locked out. Observe the changes. Also observe that the bouner title
still animates in other cases.
Test: Added unit tests.
Change-Id: I5e09686174ac17cae139f5f9535e946e39d6d009
9 files changed, 49 insertions, 37 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt b/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt index 450784ea8f03..f59bf8e766fe 100644 --- a/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt +++ b/packages/SystemUI/src/com/android/keyguard/BouncerKeyguardMessageArea.kt @@ -69,10 +69,16 @@ open class BouncerKeyguardMessageArea(context: Context?, attrs: AttributeSet?) : 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 @@ open class BouncerKeyguardMessageArea(context: Context?, attrs: AttributeSet?) : 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 92ba619e7eb9..3e32cf5521ff 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -159,10 +159,12 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey 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 c79fc2c27f0e..0e5f8c1c7a26 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageArea.java @@ -59,6 +59,7 @@ public abstract class KeyguardMessageArea extends TextView implements SecurityMe @Nullable private ViewGroup mContainer; private int mTopMargin; + protected boolean mAnimate; public KeyguardMessageArea(Context context, AttributeSet attrs) { super(context, attrs); @@ -106,7 +107,7 @@ public abstract class KeyguardMessageArea extends TextView implements SecurityMe } @Override - public void setMessage(CharSequence msg) { + public void setMessage(CharSequence msg, boolean animate) { if (!TextUtils.isEmpty(msg)) { securityMessageChanged(msg); } else { @@ -115,21 +116,12 @@ public abstract class KeyguardMessageArea extends TextView implements SecurityMe } @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 db986e0a631a..c29f632b88d3 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java @@ -92,11 +92,19 @@ public class KeyguardMessageAreaController<T extends KeyguardMessageArea> } 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 1f0bd54f8e09..cdbfb2492e27 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java @@ -372,10 +372,13 @@ public class KeyguardPatternViewController 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 777bd19864bf..3392a1cda90e 100644 --- a/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java +++ b/packages/SystemUI/src/com/android/keyguard/SecurityMessageDisplay.java @@ -23,9 +23,10 @@ public interface SecurityMessageDisplay { /** 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 0a9c745525c2..ffedb30a404d 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 @@ public class AuthKeyguardMessageAreaTest extends SysuiTestCase { @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 class AuthKeyguardMessageAreaTest extends SysuiTestCase { 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 @@ public class AuthKeyguardMessageAreaTest extends SysuiTestCase { @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 7b9b39f23c29..ba46a874c260 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 @@ class BouncerKeyguardMessageAreaTest : SysuiTestCase() { @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 829008403e02..0e837d2976ba 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 @@ public class KeyguardMessageAreaControllerTest extends SysuiTestCase { @Test public void testClearsTextField() { mMessageAreaController.setMessage(""); - verify(mKeyguardMessageArea).setMessage(""); + verify(mKeyguardMessageArea).setMessage("", /* animate= */ true); } @Test |