Merge "[Bouncer] Remove flicker of message area." into tm-qpr-dev
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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(
|
||||||
mView.getResources(),
|
PluralsMessageFormatter.format(
|
||||||
arguments,
|
mView.getResources(),
|
||||||
R.string.kg_too_many_failed_attempts_countdown));
|
arguments,
|
||||||
|
R.string.kg_too_many_failed_attempts_countdown),
|
||||||
|
/* animate= */ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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(
|
||||||
mView.getResources(),
|
PluralsMessageFormatter.format(
|
||||||
arguments,
|
mView.getResources(),
|
||||||
R.string.kg_too_many_failed_attempts_countdown));
|
arguments,
|
||||||
|
R.string.kg_too_many_failed_attempts_countdown),
|
||||||
|
/* animate= */ false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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("");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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("")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user