diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index e8300b92a3764..3075617cafdf4 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -630,6 +630,14 @@ public class UdfpsController implements DozeReceiver { animation.init(); mView.setAnimationViewController(animation); + // This view overlaps the sensor area, so prevent it from being selectable + // during a11y. + if (reason == IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR + || reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING) { + mView.setImportantForAccessibility( + View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); + } + mWindowManager.addView(mView, computeLayoutParams(animation)); mAccessibilityManager.addTouchExplorationStateChangeListener( mTouchExplorationStateChangeListener); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java index 521c495496531..470fb8c1a561d 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java @@ -26,6 +26,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.util.Log; import android.util.TypedValue; +import android.view.accessibility.AccessibilityManager; import java.util.ArrayList; import java.util.List; @@ -53,6 +54,7 @@ public class UdfpsEnrollHelper { @NonNull private final Context mContext; // IUdfpsOverlayController reason private final int mEnrollReason; + private final boolean mAccessibilityEnabled; @NonNull private final List mGuidedEnrollmentPoints; private int mTotalSteps = -1; @@ -67,6 +69,10 @@ public class UdfpsEnrollHelper { public UdfpsEnrollHelper(@NonNull Context context, int reason) { mContext = context; mEnrollReason = reason; + + final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); + mAccessibilityEnabled = am.isEnabled(); + mGuidedEnrollmentPoints = new ArrayList<>(); // Number of pixels per mm @@ -148,6 +154,8 @@ public class UdfpsEnrollHelper { boolean isCenterEnrollmentComplete() { if (mTotalSteps == -1 || mRemainingSteps == -1) { return false; + } else if (mAccessibilityEnabled) { + return false; } final int stepsEnrolled = mTotalSteps - mRemainingSteps; return stepsEnrolled >= NUM_CENTER_TOUCHES; @@ -155,6 +163,10 @@ public class UdfpsEnrollHelper { @NonNull PointF getNextGuidedEnrollmentPoint() { + if (mAccessibilityEnabled) { + return new PointF(0f, 0f); + } + float scale = SCALE; if (Build.IS_ENG || Build.IS_USERDEBUG) { scale = Settings.Secure.getFloatForUser(mContext.getContentResolver(),