diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java index 510fcbfd8bee2..a229b135d1a2a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -179,10 +179,10 @@ public abstract class KeyguardAbsKeyInputViewController private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final ConfigurationController mConfigurationController; private final AnnounceRunnable mAnnounceRunnable; + private final TextWatcher mTextWatcher = new TextWatcher() { + @Override + public void afterTextChanged(Editable editable) { + CharSequence msg = editable; + if (!TextUtils.isEmpty(msg)) { + mView.removeCallbacks(mAnnounceRunnable); + mAnnounceRunnable.setTextToAnnounce(msg); + mView.postDelayed(() -> { + if (msg == mView.getText()) { + mAnnounceRunnable.run(); + } + }, ANNOUNCEMENT_DELAY); + } + } + + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + /* no-op */ + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + /* no-op */ + } + }; private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { public void onFinishedGoingToSleep(int why) { @@ -89,12 +116,14 @@ public class KeyguardMessageAreaController mKeyguardUpdateMonitor.registerCallback(mInfoCallback); mView.setSelected(mKeyguardUpdateMonitor.isDeviceInteractive()); mView.onThemeChanged(); + mView.addTextChangedListener(mTextWatcher); } @Override protected void onViewDetached() { mConfigurationController.removeCallback(mConfigurationListener); mKeyguardUpdateMonitor.removeCallback(mInfoCallback); + mView.removeTextChangedListener(mTextWatcher); } /** @@ -113,12 +142,6 @@ public class KeyguardMessageAreaController */ public void setMessage(CharSequence s, boolean animate) { mView.setMessage(s, animate); - CharSequence msg = mView.getText(); - if (!TextUtils.isEmpty(msg)) { - mView.removeCallbacks(mAnnounceRunnable); - mAnnounceRunnable.setTextToAnnounce(msg); - mView.postDelayed(mAnnounceRunnable, ANNOUNCEMENT_DELAY); - } } public void setMessage(int resId) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java index b4ddc9a975c22..233974711d382 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -82,9 +82,6 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView protected void setPasswordEntryInputEnabled(boolean enabled) { mPasswordEntry.setEnabled(enabled); mOkButton.setEnabled(enabled); - if (enabled && !mPasswordEntry.hasFocus()) { - mPasswordEntry.requestFocus(); - } } @Override diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java index a35e5b59f7651..d4522d003d522 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java @@ -27,6 +27,8 @@ import static org.mockito.Mockito.when; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; +import android.text.Editable; +import android.text.TextWatcher; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -93,16 +95,16 @@ public class KeyguardMessageAreaControllerTest extends SysuiTestCase { } @Test - public void testSetMessage_AnnounceForAccessibility() { - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Runnable.class); - when(mKeyguardMessageArea.getText()).thenReturn("abc"); - mMessageAreaController.setMessage("abc"); + public void textChanged_AnnounceForAccessibility() { + ArgumentCaptor textWatcherArgumentCaptor = ArgumentCaptor.forClass( + TextWatcher.class); + mMessageAreaController.onViewAttached(); + verify(mKeyguardMessageArea).addTextChangedListener(textWatcherArgumentCaptor.capture()); - verify(mKeyguardMessageArea).setMessage("abc", /* animate= */ true); + textWatcherArgumentCaptor.getValue().afterTextChanged( + Editable.Factory.getInstance().newEditable("abc")); verify(mKeyguardMessageArea).removeCallbacks(any(Runnable.class)); - verify(mKeyguardMessageArea).postDelayed(argumentCaptor.capture(), anyLong()); - argumentCaptor.getValue().run(); - verify(mKeyguardMessageArea).announceForAccessibility("abc"); + verify(mKeyguardMessageArea).postDelayed(any(Runnable.class), anyLong()); } @Test