From 1a313bf717ef8c535a6952dbc14e6c87195e9e35 Mon Sep 17 00:00:00 2001 From: Grace Cheng Date: Tue, 22 Mar 2022 23:24:15 +0000 Subject: [PATCH] =?UTF-8?q?Resolving=20duplicate=20=E2=80=9CFingerprint=20?= =?UTF-8?q?Sensor=E2=80=9D=20talkback=20in=20Side-FPS=20SUW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents Talkback from announcing “Fingerprint Sensor” twice in the side-FPS fingerprint enrollment page in setup wizard. Two accessibility events that speak “Fingerprint Sensor” are sent when the Talkback focus lands on the sensor location indicator, so we override the AccessibilityDelegate dispatcher to intercept and ignore the first event. Fixes: 209933998 Test: atest SidefpsControllerTest Change-Id: Ib5fad6dc0b36eb69b6084296956c12a9b25e28bb --- .../systemui/biometrics/SidefpsController.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt index 4c00735ab785a..085bcfafdf784 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt @@ -33,6 +33,8 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.hardware.fingerprint.ISidefpsController import android.os.Handler import android.util.Log +import android.view.View.AccessibilityDelegate +import android.view.accessibility.AccessibilityEvent import android.view.Display import android.view.Gravity import android.view.LayoutInflater @@ -181,6 +183,23 @@ class SidefpsController @Inject constructor( } lottie.addOverlayDynamicColor(context) + /** + * Intercepts TYPE_WINDOW_STATE_CHANGED accessibility event, preventing Talkback from + * speaking @string/accessibility_fingerprint_label twice when sensor location indicator + * is in focus + */ + view.setAccessibilityDelegate(object : AccessibilityDelegate() { + override fun dispatchPopulateAccessibilityEvent( + host: View, + event: AccessibilityEvent + ): Boolean { + return if (event.getEventType() === AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + true + } else { + super.dispatchPopulateAccessibilityEvent(host, event) + } + } + }) return view }