From 4db942c21bac097a4c87b479d07d47cc3d7cc002 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 16 May 2016 18:06:50 -0700 Subject: [PATCH] Don't always announce accessibility events when resetting password The code use to always announce for accessibility when resetting the password field, which results in announcing "Four characters replaced with zero characters." The fix is to only announce this message when the user needs to try again. Fixes bug 24331841 Change-Id: Icc9450d37b9338a39709f50666829d4a007b2b65 --- .../src/com/android/keyguard/KeyguardAbsKeyInputView.java | 6 +++--- .../Keyguard/src/com/android/keyguard/KeyguardPINView.java | 1 + .../src/com/android/keyguard/KeyguardPasswordView.java | 5 ++++- .../src/com/android/keyguard/KeyguardPinBasedInputView.java | 6 +++--- .../Keyguard/src/com/android/keyguard/KeyguardSimPinView.java | 10 ++++++++-- .../Keyguard/src/com/android/keyguard/KeyguardSimPukView.java | 10 ++++++++-- .../Keyguard/src/com/android/keyguard/PasswordTextView.java | 6 ++++-- 7 files changed, 31 insertions(+), 13 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index 64b443babde7..60eaad2699ee 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -69,7 +69,7 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout public void reset() { // start fresh mDismissing = false; - resetPasswordText(false /* animate */); + resetPasswordText(false /* animate */, false /* announce */); // if the user is currently locked out, enforce it. long deadline = mLockPatternUtils.getLockoutAttemptDeadline( KeyguardUpdateMonitor.getCurrentUser()); @@ -169,10 +169,10 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout mSecurityMessageDisplay.setMessage(getWrongPasswordStringId(), true); } } - resetPasswordText(true /* animate */); + resetPasswordText(true /* animate */, !matched /* announce deletion if no match */); } - protected abstract void resetPasswordText(boolean animate); + protected abstract void resetPasswordText(boolean animate, boolean announce); protected abstract String getPasswordText(); protected abstract void setPasswordEntryEnabled(boolean enabled); protected abstract void setPasswordEntryInputEnabled(boolean enabled); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java index 4abb795b267b..7ea767c004fb 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java @@ -60,6 +60,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { R.dimen.disappear_y_translation); } + @Override protected void resetState() { super.resetState(); mSecurityMessageDisplay.setMessage(R.string.kg_pin_instructions, false); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java index 189f5b7dcfc7..b75f52987a92 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java @@ -72,6 +72,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView context, android.R.interpolator.fast_out_linear_in); } + @Override protected void resetState() { mSecurityMessageDisplay.setMessage(R.string.kg_password_instructions, false); final boolean wasDisabled = mPasswordEntry.isEnabled(); @@ -159,6 +160,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView // Poke the wakelock any time the text is selected or modified mPasswordEntry.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { mCallback.userActivity(); } @@ -175,6 +177,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView switchImeButton.setVisibility(View.VISIBLE); imeOrDeleteButtonVisible = true; switchImeButton.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { mCallback.userActivity(); // Leave the screen on a bit longer // Do not show auxiliary subtypes in password lock screen. @@ -202,7 +205,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView } @Override - protected void resetPasswordText(boolean animate) { + protected void resetPasswordText(boolean animate, boolean announce) { mPasswordEntry.setText(""); } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java index f14290af172d..c8719f3f88e3 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -159,8 +159,8 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView } @Override - protected void resetPasswordText(boolean animate) { - mPasswordEntry.reset(animate); + protected void resetPasswordText(boolean animate, boolean announce) { + mPasswordEntry.reset(animate, announce); } @Override @@ -214,7 +214,7 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView public boolean onLongClick(View v) { // check for time-based lockouts if (mPasswordEntry.isEnabled()) { - resetPasswordText(true /* animate */); + resetPasswordText(true /* animate */, true /* announce */); } doHapticKeyClick(); return true; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java index 2033159af720..cfaf7b622eb7 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java @@ -71,6 +71,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { super(context, attrs); } + @Override public void resetState() { super.resetState(); if (DEBUG) Log.v(TAG, "Resetting state"); @@ -199,6 +200,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { Log.v(TAG, "supplyPinReportResult returned: " + result[0] + " " + result[1]); } post(new Runnable() { + @Override public void run() { onSimCheckResponse(result[0], result[1]); } @@ -206,6 +208,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { } catch (RemoteException e) { Log.e(TAG, "RemoteException for supplyPinReportResult:", e); post(new Runnable() { + @Override public void run() { onSimCheckResponse(PhoneConstants.PIN_GENERAL_FAILURE, -1); } @@ -250,7 +253,7 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { if (entry.length() < 4) { // otherwise, display a message to the user, and don't submit. mSecurityMessageDisplay.setMessage(R.string.kg_invalid_sim_pin_hint, true); - resetPasswordText(true); + resetPasswordText(true /* animate */, true /* announce */); mCallback.userActivity(); return; } @@ -259,13 +262,16 @@ public class KeyguardSimPinView extends KeyguardPinBasedInputView { if (mCheckSimPinThread == null) { mCheckSimPinThread = new CheckSimPin(mPasswordEntry.getText(), mSubId) { + @Override void onSimCheckResponse(final int result, final int attemptsRemaining) { post(new Runnable() { + @Override public void run() { if (mSimUnlockProgressDialog != null) { mSimUnlockProgressDialog.hide(); } - resetPasswordText(true /* animate */); + resetPasswordText(true /* animate */, + result != PhoneConstants.PIN_RESULT_SUCCESS /* announce */); if (result == PhoneConstants.PIN_RESULT_SUCCESS) { KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java index af882395ee79..59c01cf481c7 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java @@ -106,7 +106,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { msg = R.string.kg_invalid_confirm_pin_hint; } } - resetPasswordText(true); + resetPasswordText(true /* animate */, true /* announce */); if (msg != 0) { mSecurityMessageDisplay.setMessage(msg, true); } @@ -163,6 +163,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { return displayMessage; } + @Override public void resetState() { super.resetState(); mStateMachine.reset(); @@ -242,6 +243,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { Log.v(TAG, "supplyPukReportResult returned: " + result[0] + " " + result[1]); } post(new Runnable() { + @Override public void run() { onSimLockChangedResponse(result[0], result[1]); } @@ -249,6 +251,7 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { } catch (RemoteException e) { Log.e(TAG, "RemoteException for supplyPukReportResult:", e); post(new Runnable() { + @Override public void run() { onSimLockChangedResponse(PhoneConstants.PIN_GENERAL_FAILURE, -1); } @@ -316,13 +319,16 @@ public class KeyguardSimPukView extends KeyguardPinBasedInputView { if (mCheckSimPukThread == null) { mCheckSimPukThread = new CheckSimPuk(mPukText, mPinText, mSubId) { + @Override void onSimLockChangedResponse(final int result, final int attemptsRemaining) { post(new Runnable() { + @Override public void run() { if (mSimUnlockProgressDialog != null) { mSimUnlockProgressDialog.hide(); } - resetPasswordText(true /* animate */); + resetPasswordText(true /* animate */, + result != PhoneConstants.PIN_RESULT_SUCCESS /* announce */); if (result == PhoneConstants.PIN_RESULT_SUCCESS) { KeyguardUpdateMonitor.getInstance(getContext()) .reportSimUnlocked(mSubId); diff --git a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java index 7dba5455e642..48737f9a9bfb 100644 --- a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java +++ b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java @@ -268,7 +268,7 @@ public class PasswordTextView extends View { return charState; } - public void reset(boolean animated) { + public void reset(boolean animated, boolean announce) { String textbefore = mText; mText = ""; int length = mTextChars.size(); @@ -297,7 +297,9 @@ public class PasswordTextView extends View { if (!animated) { mTextChars.clear(); } - sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0); + if (announce) { + sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0); + } } void sendAccessibilityEventTypeViewTextChanged(String beforeText, int fromIndex, -- 2.11.0