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()
}
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)
}
}
)

View File

@@ -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

View File

@@ -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 {
@@ -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
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) {

View File

@@ -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) {

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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("");
}

View File

@@ -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("")
}
}

View File

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