Merge "Fixed talkback issue" into qt-r1-dev

am: 7f22b4d5be

Change-Id: Ib6cd205e23c49ff808a0b3a849b9cddb279c0a3a
This commit is contained in:
Joshua Mccloskey
2019-06-05 15:39:56 -07:00
committed by android-build-merger
2 changed files with 34 additions and 4 deletions

View File

@@ -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;
@@ -280,6 +283,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);
@@ -289,6 +293,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);
@@ -447,12 +452,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) {
@@ -471,14 +478,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);
@@ -501,4 +514,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();
}
}

View File

@@ -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();
}
}