Only announce for accessibility if accessibility is enabled
Otherwise SystemUI will crash. Also, do not recycle events for now due to
b/134608331. Otherwise SystemUI will crash as well.
Fixes: 134603979
Bug: 134608331
Test: Do not enable talkback, successful auth does not crash now
Test: Enable talkback, successful auth also works
Change-Id: I5779a1a79a6504520d592e688ff9a48b6ea277d3
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
index 499fe8d..25c4bfa 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogView.java
@@ -39,6 +39,7 @@
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.ImageView;
@@ -75,6 +76,7 @@
protected static final int STATE_PENDING_CONFIRMATION = 3;
protected static final int STATE_AUTHENTICATED = 4;
+ private final AccessibilityManager mAccessibilityManager;
private final IBinder mWindowToken = new Binder();
private final Interpolator mLinearOutSlowIn;
private final WindowManager mWindowManager;
@@ -153,6 +155,7 @@
super(context);
mCallback = callback;
mLinearOutSlowIn = Interpolators.LINEAR_OUT_SLOW_IN;
+ mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
mWindowManager = mContext.getSystemService(WindowManager.class);
mUserManager = mContext.getSystemService(UserManager.class);
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
@@ -518,12 +521,14 @@
// 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() {
+ if (!mAccessibilityManager.isEnabled()) {
+ return;
+ }
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();
}
}