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

This commit is contained in:
Aaron Liu
2022-11-18 02:36:45 +00:00
committed by Android (Google) Code Review
9 changed files with 49 additions and 37 deletions

View File

@@ -69,10 +69,16 @@ open class BouncerKeyguardMessageArea(context: Context?, attrs: AttributeSet?) :
super.reloadColor() super.reloadColor()
} }
override fun setMessage(msg: CharSequence?) { override fun setMessage(msg: CharSequence?, animate: Boolean) {
if ((msg == textAboutToShow && msg != null) || msg == text) { if ((msg == textAboutToShow && msg != null) || msg == text) {
return return
} }
if (!animate) {
super.setMessage(msg, animate)
return
}
textAboutToShow = msg textAboutToShow = msg
if (animatorSet.isRunning) { if (animatorSet.isRunning) {
@@ -89,7 +95,7 @@ open class BouncerKeyguardMessageArea(context: Context?, attrs: AttributeSet?) :
hideAnimator.addListener( hideAnimator.addListener(
object : AnimatorListenerAdapter() { object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) { override fun onAnimationEnd(animation: Animator?) {
super@BouncerKeyguardMessageArea.setMessage(msg) super@BouncerKeyguardMessageArea.setMessage(msg, animate)
} }
} }
) )

View File

@@ -159,10 +159,12 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
int secondsRemaining = (int) Math.round(millisUntilFinished / 1000.0); int secondsRemaining = (int) Math.round(millisUntilFinished / 1000.0);
Map<String, Object> arguments = new HashMap<>(); Map<String, Object> arguments = new HashMap<>();
arguments.put("count", secondsRemaining); arguments.put("count", secondsRemaining);
mMessageAreaController.setMessage(PluralsMessageFormatter.format( mMessageAreaController.setMessage(
PluralsMessageFormatter.format(
mView.getResources(), mView.getResources(),
arguments, arguments,
R.string.kg_too_many_failed_attempts_countdown)); R.string.kg_too_many_failed_attempts_countdown),
/* animate= */ false);
} }
@Override @Override

View File

@@ -59,6 +59,7 @@ public abstract class KeyguardMessageArea extends TextView implements SecurityMe
@Nullable @Nullable
private ViewGroup mContainer; private ViewGroup mContainer;
private int mTopMargin; private int mTopMargin;
protected boolean mAnimate;
public KeyguardMessageArea(Context context, AttributeSet attrs) { public KeyguardMessageArea(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@@ -106,7 +107,7 @@ public abstract class KeyguardMessageArea extends TextView implements SecurityMe
} }
@Override @Override
public void setMessage(CharSequence msg) { public void setMessage(CharSequence msg, boolean animate) {
if (!TextUtils.isEmpty(msg)) { if (!TextUtils.isEmpty(msg)) {
securityMessageChanged(msg); securityMessageChanged(msg);
} else { } else {
@@ -114,22 +115,13 @@ 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 @Override
public void formatMessage(int resId, Object... formatArgs) { public void formatMessage(int resId, Object... formatArgs) {
CharSequence message = null; CharSequence message = null;
if (resId != 0) { if (resId != 0) {
message = getContext().getString(resId, formatArgs); message = getContext().getString(resId, formatArgs);
} }
setMessage(message); setMessage(message, true);
} }
private void securityMessageChanged(CharSequence message) { private void securityMessageChanged(CharSequence message) {

View File

@@ -92,11 +92,19 @@ public class KeyguardMessageAreaController<T extends KeyguardMessageArea>
} }
public void setMessage(CharSequence s) { 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) { public void setMessage(int resId) {
mView.setMessage(resId); String message = resId != 0 ? mView.getResources().getString(resId) : null;
setMessage(message);
} }
public void setNextMessageColor(ColorStateList colorState) { public void setNextMessageColor(ColorStateList colorState) {

View File

@@ -372,10 +372,13 @@ public class KeyguardPatternViewController
Map<String, Object> arguments = new HashMap<>(); Map<String, Object> arguments = new HashMap<>();
arguments.put("count", secondsRemaining); arguments.put("count", secondsRemaining);
mMessageAreaController.setMessage(PluralsMessageFormatter.format( mMessageAreaController.setMessage(
PluralsMessageFormatter.format(
mView.getResources(), mView.getResources(),
arguments, arguments,
R.string.kg_too_many_failed_attempts_countdown)); R.string.kg_too_many_failed_attempts_countdown),
/* animate= */ false
);
} }
@Override @Override

View File

@@ -23,9 +23,10 @@ public interface SecurityMessageDisplay {
/** Set text color for the next security message. */ /** Set text color for the next security message. */
default void setNextMessageColor(ColorStateList colorState) {} default void setNextMessageColor(ColorStateList colorState) {}
void setMessage(CharSequence msg); /**
* Sets a message to the underlying text view.
void setMessage(int resId); */
void setMessage(CharSequence msg, boolean animate);
void formatMessage(int resId, Object... formatArgs); void formatMessage(int resId, Object... formatArgs);
} }

View File

@@ -46,7 +46,7 @@ public class AuthKeyguardMessageAreaTest extends SysuiTestCase {
@Test @Test
public void testShowsTextField() { public void testShowsTextField() {
mKeyguardMessageArea.setVisibility(View.INVISIBLE); mKeyguardMessageArea.setVisibility(View.INVISIBLE);
mKeyguardMessageArea.setMessage("oobleck"); mKeyguardMessageArea.setMessage("oobleck", /* animate= */ true);
assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.VISIBLE); assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck"); assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck");
} }
@@ -55,7 +55,7 @@ public class AuthKeyguardMessageAreaTest extends SysuiTestCase {
public void testHiddenWhenBouncerHidden() { public void testHiddenWhenBouncerHidden() {
mKeyguardMessageArea.setIsVisible(false); mKeyguardMessageArea.setIsVisible(false);
mKeyguardMessageArea.setVisibility(View.INVISIBLE); mKeyguardMessageArea.setVisibility(View.INVISIBLE);
mKeyguardMessageArea.setMessage("oobleck"); mKeyguardMessageArea.setMessage("oobleck", /* animate= */ true);
assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE); assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE);
assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck"); assertThat(mKeyguardMessageArea.getText()).isEqualTo("oobleck");
} }
@@ -63,7 +63,7 @@ public class AuthKeyguardMessageAreaTest extends SysuiTestCase {
@Test @Test
public void testClearsTextField() { public void testClearsTextField() {
mKeyguardMessageArea.setVisibility(View.VISIBLE); mKeyguardMessageArea.setVisibility(View.VISIBLE);
mKeyguardMessageArea.setMessage(""); mKeyguardMessageArea.setMessage("", /* animate= */ true);
assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE); assertThat(mKeyguardMessageArea.getVisibility()).isEqualTo(View.INVISIBLE);
assertThat(mKeyguardMessageArea.getText()).isEqualTo(""); assertThat(mKeyguardMessageArea.getText()).isEqualTo("");
} }

View File

@@ -49,30 +49,30 @@ class BouncerKeyguardMessageAreaTest : SysuiTestCase() {
@Test @Test
fun testSetSameMessage() { fun testSetSameMessage() {
val underTestSpy = spy(underTest) val underTestSpy = spy(underTest)
underTestSpy.setMessage("abc") underTestSpy.setMessage("abc", animate = true)
underTestSpy.setMessage("abc") underTestSpy.setMessage("abc", animate = true)
verify(underTestSpy, times(1)).text = "abc" verify(underTestSpy, times(1)).text = "abc"
} }
@Test @Test
fun testSetDifferentMessage() { fun testSetDifferentMessage() {
underTest.setMessage("abc") underTest.setMessage("abc", animate = true)
underTest.setMessage("def") underTest.setMessage("def", animate = true)
assertThat(underTest.text).isEqualTo("def") assertThat(underTest.text).isEqualTo("def")
} }
@Test @Test
fun testSetNullMessage() { fun testSetNullMessage() {
underTest.setMessage(null) underTest.setMessage(null, animate = true)
assertThat(underTest.text).isEqualTo("") assertThat(underTest.text).isEqualTo("")
} }
@Test @Test
fun testSetNullClearsPreviousMessage() { fun testSetNullClearsPreviousMessage() {
underTest.setMessage("something not null") underTest.setMessage("something not null", animate = true)
assertThat(underTest.text).isEqualTo("something not null") assertThat(underTest.text).isEqualTo("something not null")
underTest.setMessage(null) underTest.setMessage(null, animate = true)
assertThat(underTest.text).isEqualTo("") assertThat(underTest.text).isEqualTo("")
} }
} }

View File

@@ -85,7 +85,7 @@ public class KeyguardMessageAreaControllerTest extends SysuiTestCase {
@Test @Test
public void testClearsTextField() { public void testClearsTextField() {
mMessageAreaController.setMessage(""); mMessageAreaController.setMessage("");
verify(mKeyguardMessageArea).setMessage(""); verify(mKeyguardMessageArea).setMessage("", /* animate= */ true);
} }
@Test @Test