Merge "Fixed talkback issue" into qt-r1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7f22b4d5be
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.systemui.biometrics;
|
package com.android.systemui.biometrics;
|
||||||
|
|
||||||
|
import static android.view.accessibility.AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
@@ -36,6 +38,7 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.animation.Interpolator;
|
import android.view.animation.Interpolator;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@@ -280,6 +283,7 @@ public abstract class BiometricDialogView extends LinearLayout {
|
|||||||
final CharSequence subtitleText = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
|
final CharSequence subtitleText = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
|
||||||
if (TextUtils.isEmpty(subtitleText)) {
|
if (TextUtils.isEmpty(subtitleText)) {
|
||||||
mSubtitleText.setVisibility(View.GONE);
|
mSubtitleText.setVisibility(View.GONE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
} else {
|
} else {
|
||||||
mSubtitleText.setVisibility(View.VISIBLE);
|
mSubtitleText.setVisibility(View.VISIBLE);
|
||||||
mSubtitleText.setText(subtitleText);
|
mSubtitleText.setText(subtitleText);
|
||||||
@@ -289,6 +293,7 @@ public abstract class BiometricDialogView extends LinearLayout {
|
|||||||
mBundle.getCharSequence(BiometricPrompt.KEY_DESCRIPTION);
|
mBundle.getCharSequence(BiometricPrompt.KEY_DESCRIPTION);
|
||||||
if (TextUtils.isEmpty(descriptionText)) {
|
if (TextUtils.isEmpty(descriptionText)) {
|
||||||
mDescriptionText.setVisibility(View.GONE);
|
mDescriptionText.setVisibility(View.GONE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
} else {
|
} else {
|
||||||
mDescriptionText.setVisibility(View.VISIBLE);
|
mDescriptionText.setVisibility(View.VISIBLE);
|
||||||
mDescriptionText.setText(descriptionText);
|
mDescriptionText.setText(descriptionText);
|
||||||
@@ -447,12 +452,14 @@ public abstract class BiometricDialogView extends LinearLayout {
|
|||||||
if (newState == STATE_PENDING_CONFIRMATION) {
|
if (newState == STATE_PENDING_CONFIRMATION) {
|
||||||
mHandler.removeMessages(MSG_RESET_MESSAGE);
|
mHandler.removeMessages(MSG_RESET_MESSAGE);
|
||||||
mErrorText.setVisibility(View.INVISIBLE);
|
mErrorText.setVisibility(View.INVISIBLE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
mPositiveButton.setVisibility(View.VISIBLE);
|
mPositiveButton.setVisibility(View.VISIBLE);
|
||||||
mPositiveButton.setEnabled(true);
|
mPositiveButton.setEnabled(true);
|
||||||
} else if (newState == STATE_AUTHENTICATED) {
|
} else if (newState == STATE_AUTHENTICATED) {
|
||||||
mPositiveButton.setVisibility(View.GONE);
|
mPositiveButton.setVisibility(View.GONE);
|
||||||
mNegativeButton.setVisibility(View.GONE);
|
mNegativeButton.setVisibility(View.GONE);
|
||||||
mErrorText.setVisibility(View.INVISIBLE);
|
mErrorText.setVisibility(View.INVISIBLE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newState == STATE_PENDING_CONFIRMATION || newState == STATE_AUTHENTICATED) {
|
if (newState == STATE_PENDING_CONFIRMATION || newState == STATE_AUTHENTICATED) {
|
||||||
@@ -471,14 +478,20 @@ public abstract class BiometricDialogView extends LinearLayout {
|
|||||||
|
|
||||||
public void restoreState(Bundle bundle) {
|
public void restoreState(Bundle bundle) {
|
||||||
mRestoredState = bundle;
|
mRestoredState = bundle;
|
||||||
mTryAgainButton.setVisibility(bundle.getInt(KEY_TRY_AGAIN_VISIBILITY));
|
final int tryAgainVisibility = bundle.getInt(KEY_TRY_AGAIN_VISIBILITY);
|
||||||
mPositiveButton.setVisibility(bundle.getInt(KEY_CONFIRM_VISIBILITY));
|
mTryAgainButton.setVisibility(tryAgainVisibility);
|
||||||
|
final int confirmVisibility = bundle.getInt(KEY_CONFIRM_VISIBILITY);
|
||||||
|
mPositiveButton.setVisibility(confirmVisibility);
|
||||||
mState = bundle.getInt(KEY_STATE);
|
mState = bundle.getInt(KEY_STATE);
|
||||||
mErrorText.setText(bundle.getCharSequence(KEY_ERROR_TEXT_STRING));
|
mErrorText.setText(bundle.getCharSequence(KEY_ERROR_TEXT_STRING));
|
||||||
mErrorText.setContentDescription(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));
|
mErrorText.setTextColor(bundle.getInt(KEY_ERROR_TEXT_COLOR));
|
||||||
|
|
||||||
if (bundle.getBoolean(KEY_ERROR_TEXT_IS_TEMPORARY)) {
|
if (bundle.getBoolean(KEY_ERROR_TEXT_IS_TEMPORARY)) {
|
||||||
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RESET_MESSAGE),
|
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RESET_MESSAGE),
|
||||||
BiometricPrompt.HIDE_DIALOG_DELAY);
|
BiometricPrompt.HIDE_DIALOG_DELAY);
|
||||||
@@ -501,4 +514,16 @@ public abstract class BiometricDialogView extends LinearLayout {
|
|||||||
lp.token = mWindowToken;
|
lp.token = mWindowToken;
|
||||||
return lp;
|
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 = () -> {
|
private final Runnable mErrorToIdleAnimationRunnable = () -> {
|
||||||
updateState(STATE_IDLE);
|
updateState(STATE_IDLE);
|
||||||
mErrorText.setVisibility(View.INVISIBLE);
|
mErrorText.setVisibility(View.INVISIBLE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
};
|
};
|
||||||
|
|
||||||
public FaceDialogView(Context context,
|
public FaceDialogView(Context context,
|
||||||
@@ -188,6 +189,7 @@ public class FaceDialogView extends BiometricDialogView {
|
|||||||
mDialog.invalidateOutline();
|
mDialog.invalidateOutline();
|
||||||
|
|
||||||
mSize = newSize;
|
mSize = newSize;
|
||||||
|
announceAccessibilityEvent();
|
||||||
} else if (mSize == SIZE_SMALL && newSize == SIZE_BIG) {
|
} else if (mSize == SIZE_SMALL && newSize == SIZE_BIG) {
|
||||||
mSize = SIZE_GROWING;
|
mSize = SIZE_GROWING;
|
||||||
|
|
||||||
@@ -294,6 +296,7 @@ public class FaceDialogView extends BiometricDialogView {
|
|||||||
mErrorText.setVisibility(View.VISIBLE);
|
mErrorText.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
mErrorText.setVisibility(View.INVISIBLE);
|
mErrorText.setVisibility(View.INVISIBLE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,11 +371,13 @@ public class FaceDialogView extends BiometricDialogView {
|
|||||||
mTryAgainButton.setVisibility(View.VISIBLE);
|
mTryAgainButton.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
mTryAgainButton.setVisibility(View.GONE);
|
mTryAgainButton.setVisibility(View.GONE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show) {
|
if (show) {
|
||||||
mPositiveButton.setVisibility(View.GONE);
|
mPositiveButton.setVisibility(View.GONE);
|
||||||
|
announceAccessibilityEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user