OSDN Git Service

Don't always announce accessibility events when resetting password
authorJim Miller <jaggies@google.com>
Tue, 17 May 2016 01:06:50 +0000 (18:06 -0700)
committerJim Miller <jaggies@google.com>
Tue, 17 May 2016 01:06:50 +0000 (18:06 -0700)
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

packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
packages/Keyguard/src/com/android/keyguard/PasswordTextView.java

index 64b443b..60eaad2 100644 (file)
@@ -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);
index 4abb795..7ea767c 100644 (file)
@@ -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);
index 189f5b7..b75f529 100644 (file)
@@ -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("");
     }
 
index f14290a..c8719f3 100644 (file)
@@ -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;
index 2033159..cfaf7b6 100644 (file)
@@ -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);
index af88239..59c01cf 100644 (file)
@@ -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);
index 7dba545..48737f9 100644 (file)
@@ -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,