Merge "Merge "Fixed talkback issue" into qt-r1-dev am: 7f22b4d5be" into qt-r1-dev-plus-aosp
This commit is contained in:
committed by
Android (Google) Code Review
commit
2b398bd6da
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.biometrics;
|
||||
|
||||
import static android.view.accessibility.AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.PixelFormat;
|
||||
@@ -36,6 +38,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
@@ -284,6 +287,7 @@ public abstract class BiometricDialogView extends LinearLayout {
|
||||
final CharSequence subtitleText = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
|
||||
if (TextUtils.isEmpty(subtitleText)) {
|
||||
mSubtitleText.setVisibility(View.GONE);
|
||||
announceAccessibilityEvent();
|
||||
} else {
|
||||
mSubtitleText.setVisibility(View.VISIBLE);
|
||||
mSubtitleText.setText(subtitleText);
|
||||
@@ -293,6 +297,7 @@ public abstract class BiometricDialogView extends LinearLayout {
|
||||
mBundle.getCharSequence(BiometricPrompt.KEY_DESCRIPTION);
|
||||
if (TextUtils.isEmpty(descriptionText)) {
|
||||
mDescriptionText.setVisibility(View.GONE);
|
||||
announceAccessibilityEvent();
|
||||
} else {
|
||||
mDescriptionText.setVisibility(View.VISIBLE);
|
||||
mDescriptionText.setText(descriptionText);
|
||||
@@ -451,12 +456,14 @@ public abstract class BiometricDialogView extends LinearLayout {
|
||||
if (newState == STATE_PENDING_CONFIRMATION) {
|
||||
mHandler.removeMessages(MSG_RESET_MESSAGE);
|
||||
mErrorText.setVisibility(View.INVISIBLE);
|
||||
announceAccessibilityEvent();
|
||||
mPositiveButton.setVisibility(View.VISIBLE);
|
||||
mPositiveButton.setEnabled(true);
|
||||
} else if (newState == STATE_AUTHENTICATED) {
|
||||
mPositiveButton.setVisibility(View.GONE);
|
||||
mNegativeButton.setVisibility(View.GONE);
|
||||
mErrorText.setVisibility(View.INVISIBLE);
|
||||
announceAccessibilityEvent();
|
||||
}
|
||||
|
||||
if (newState == STATE_PENDING_CONFIRMATION || newState == STATE_AUTHENTICATED) {
|
||||
@@ -475,14 +482,20 @@ public abstract class BiometricDialogView extends LinearLayout {
|
||||
|
||||
public void restoreState(Bundle bundle) {
|
||||
mRestoredState = bundle;
|
||||
mTryAgainButton.setVisibility(bundle.getInt(KEY_TRY_AGAIN_VISIBILITY));
|
||||
mPositiveButton.setVisibility(bundle.getInt(KEY_CONFIRM_VISIBILITY));
|
||||
final int tryAgainVisibility = bundle.getInt(KEY_TRY_AGAIN_VISIBILITY);
|
||||
mTryAgainButton.setVisibility(tryAgainVisibility);
|
||||
final int confirmVisibility = bundle.getInt(KEY_CONFIRM_VISIBILITY);
|
||||
mPositiveButton.setVisibility(confirmVisibility);
|
||||
mState = bundle.getInt(KEY_STATE);
|
||||
mErrorText.setText(bundle.getCharSequence(KEY_ERROR_TEXT_STRING));
|
||||
mErrorText.setContentDescription(bundle.getCharSequence(KEY_ERROR_TEXT_STRING));
|
||||
mErrorText.setVisibility(bundle.getInt(KEY_ERROR_TEXT_VISIBILITY));
|
||||
final int errorTextVisibility = bundle.getInt(KEY_ERROR_TEXT_VISIBILITY);
|
||||
mErrorText.setVisibility(errorTextVisibility);
|
||||
if (errorTextVisibility == View.INVISIBLE || tryAgainVisibility == View.INVISIBLE
|
||||
|| confirmVisibility == View.INVISIBLE) {
|
||||
announceAccessibilityEvent();
|
||||
}
|
||||
mErrorText.setTextColor(bundle.getInt(KEY_ERROR_TEXT_COLOR));
|
||||
|
||||
if (bundle.getBoolean(KEY_ERROR_TEXT_IS_TEMPORARY)) {
|
||||
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RESET_MESSAGE),
|
||||
BiometricPrompt.HIDE_DIALOG_DELAY);
|
||||
@@ -505,4 +518,16 @@ public abstract class BiometricDialogView extends LinearLayout {
|
||||
lp.token = mWindowToken;
|
||||
return lp;
|
||||
}
|
||||
|
||||
// Every time a view becomes invisible we need to announce an accessibility event.
|
||||
// This is due to an issue in the framework, b/132298701 recommended this workaround.
|
||||
protected void announceAccessibilityEvent() {
|
||||
AccessibilityEvent event = AccessibilityEvent.obtain();
|
||||
event.setEventType(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
|
||||
event.setContentChangeTypes(CONTENT_CHANGE_TYPE_SUBTREE);
|
||||
mDialog.sendAccessibilityEventUnchecked(event);
|
||||
mDialog.notifySubtreeAccessibilityStateChanged(mDialog, mDialog,
|
||||
CONTENT_CHANGE_TYPE_SUBTREE);
|
||||
event.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,6 +149,7 @@ public class FaceDialogView extends BiometricDialogView {
|
||||
private final Runnable mErrorToIdleAnimationRunnable = () -> {
|
||||
updateState(STATE_IDLE);
|
||||
mErrorText.setVisibility(View.INVISIBLE);
|
||||
announceAccessibilityEvent();
|
||||
};
|
||||
|
||||
public FaceDialogView(Context context,
|
||||
@@ -188,6 +189,7 @@ public class FaceDialogView extends BiometricDialogView {
|
||||
mDialog.invalidateOutline();
|
||||
|
||||
mSize = newSize;
|
||||
announceAccessibilityEvent();
|
||||
} else if (mSize == SIZE_SMALL && newSize == SIZE_BIG) {
|
||||
mSize = SIZE_GROWING;
|
||||
|
||||
@@ -294,6 +296,7 @@ public class FaceDialogView extends BiometricDialogView {
|
||||
mErrorText.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mErrorText.setVisibility(View.INVISIBLE);
|
||||
announceAccessibilityEvent();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,11 +371,13 @@ public class FaceDialogView extends BiometricDialogView {
|
||||
mTryAgainButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mTryAgainButton.setVisibility(View.GONE);
|
||||
announceAccessibilityEvent();
|
||||
}
|
||||
}
|
||||
|
||||
if (show) {
|
||||
mPositiveButton.setVisibility(View.GONE);
|
||||
announceAccessibilityEvent();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user