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
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
index 64b443b..60eaad2 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
@@ -69,7 +69,7 @@
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 @@
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 4abb795..7ea767c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
@@ -60,6 +60,7 @@
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 189f5b7..b75f529 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -72,6 +72,7 @@
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 @@
// 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 @@
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 @@
}
@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 f14290a..c8719f3 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
@@ -159,8 +159,8 @@
}
@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 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 2033159..cfaf7b6 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
@@ -71,6 +71,7 @@
super(context, attrs);
}
+ @Override
public void resetState() {
super.resetState();
if (DEBUG) Log.v(TAG, "Resetting state");
@@ -199,6 +200,7 @@
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 @@
} 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 @@
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 @@
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 af88239..59c01cf 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
@@ -106,7 +106,7 @@
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 @@
return displayMessage;
}
+ @Override
public void resetState() {
super.resetState();
mStateMachine.reset();
@@ -242,6 +243,7 @@
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 @@
} 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 @@
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 7dba545..48737f9 100644
--- a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java
+++ b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java
@@ -268,7 +268,7 @@
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 @@
if (!animated) {
mTextChars.clear();
}
- sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0);
+ if (announce) {
+ sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0);
+ }
}
void sendAccessibilityEventTypeViewTextChanged(String beforeText, int fromIndex,