Announce dynamic content changes in lock confirmation settings.
Also re-orders updateStage() and setText/Selection calls so that text
events don't flush announcements. This does not change functionality.
Bug: 7256500
Change-Id: I8b10d66e9f73c7a630a8c3c5128372e18f26234c
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 4657be5..aab4ba6 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -40,6 +40,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
+import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.TextView;
@@ -272,8 +273,15 @@
}
protected void updateStage(Stage stage) {
+ final Stage previousStage = mUiStage;
mUiStage = stage;
updateUi();
+
+ // If the stage changed, announce the header for accessibility. This
+ // is a no-op when accessibility is disabled.
+ if (previousStage != stage) {
+ mHeaderText.announceForAccessibility(mHeaderText.getText());
+ }
}
/**
@@ -378,8 +386,8 @@
errorMsg = validatePassword(pin);
if (errorMsg == null) {
mFirstPin = pin;
- updateStage(Stage.NeedToConfirm);
mPasswordEntry.setText("");
+ updateStage(Stage.NeedToConfirm);
}
} else if (mUiStage == Stage.NeedToConfirm) {
if (mFirstPin.equals(pin)) {
@@ -389,11 +397,11 @@
mLockPatternUtils.saveLockPassword(pin, mRequestedQuality, isFallback);
getActivity().finish();
} else {
- updateStage(Stage.ConfirmWrong);
CharSequence tmp = mPasswordEntry.getText();
if (tmp != null) {
Selection.setSelection((Spannable) tmp, 0, tmp.length());
}
+ updateStage(Stage.ConfirmWrong);
}
}
if (errorMsg != null) {
@@ -415,6 +423,7 @@
private void showError(String msg, final Stage next) {
mHeaderText.setText(msg);
+ mHeaderText.announceForAccessibility(mHeaderText.getText());
Message mesg = mHandler.obtainMessage(MSG_SHOW_ERROR, next);
mHandler.removeMessages(MSG_SHOW_ERROR);
mHandler.sendMessageDelayed(mesg, ERROR_MESSAGE_TIMEOUT);