Loading packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java +29 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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); Loading @@ -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(); } } packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java +5 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -294,6 +296,7 @@ public class FaceDialogView extends BiometricDialogView { mErrorText.setVisibility(View.VISIBLE); } else { mErrorText.setVisibility(View.INVISIBLE); announceAccessibilityEvent(); } } Loading Loading @@ -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(); } } Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java +29 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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); Loading @@ -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(); } }
packages/SystemUI/src/com/android/systemui/biometrics/FaceDialogView.java +5 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -294,6 +296,7 @@ public class FaceDialogView extends BiometricDialogView { mErrorText.setVisibility(View.VISIBLE); } else { mErrorText.setVisibility(View.INVISIBLE); announceAccessibilityEvent(); } } Loading Loading @@ -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(); } } Loading