From 5e2adc2683212d60930d7f0442b4ad3129995129 Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Wed, 23 Oct 2024 17:34:16 +0000 Subject: [PATCH] Added interupt to accessibility interactor Test: Verified manually Bug: 366219635 Flag: EXEMPT bugfix Change-Id: If1dea7b3efd23e40c6c2668867b175ba84f11550 --- .../interactor/AccessibilityInteractor.kt | 35 ++++++++++++++----- .../biometrics/fingerprint/Injector.kt | 1 + ...gerprintEnrollFindSensorViewModelV2Test.kt | 2 ++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt index 9f62ed03572..bf0084d14a8 100644 --- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt +++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt @@ -16,6 +16,7 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor +import android.util.Log import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent.TYPE_ANNOUNCEMENT import android.view.accessibility.AccessibilityManager @@ -30,23 +31,26 @@ import kotlinx.coroutines.flow.stateIn interface AccessibilityInteractor { /** A flow that contains whether or not accessibility is enabled */ fun isEnabledFlow(scope: CoroutineScope): Flow + val isEnabled: Boolean + fun announce(clazz: Class<*>, announcement: CharSequence?) + + fun interrupt() } -class AccessibilityInteractorImpl( - private val accessibilityManager: AccessibilityManager, -) : AccessibilityInteractor { +class AccessibilityInteractorImpl(private val accessibilityManager: AccessibilityManager) : + AccessibilityInteractor { /** A flow that contains whether or not accessibility is enabled */ override fun isEnabledFlow(scope: CoroutineScope): Flow = callbackFlow { - val listener = - AccessibilityManager.AccessibilityStateChangeListener { enabled -> trySend(enabled) } - accessibilityManager.addAccessibilityStateChangeListener(listener) + val listener = + AccessibilityManager.AccessibilityStateChangeListener { enabled -> trySend(enabled) } + accessibilityManager.addAccessibilityStateChangeListener(listener) - // This clause will be called when no one is listening to the flow - awaitClose { accessibilityManager.removeAccessibilityStateChangeListener(listener) } - } + // This clause will be called when no one is listening to the flow + awaitClose { accessibilityManager.removeAccessibilityStateChangeListener(listener) } + } .stateIn( scope, SharingStarted.WhileSubscribed(), // When no longer subscribed, we removeTheListener @@ -63,4 +67,17 @@ class AccessibilityInteractorImpl( event.text.add(announcement) accessibilityManager.sendAccessibilityEvent(event) } + + /** Interrupts the current accessibility manager from announcing a phrase. */ + override fun interrupt() { + try { + accessibilityManager.interrupt() + } catch (e: IllegalStateException) { + Log.e(TAG, "Error trying to interrupt when accessibility isn't enabled $e") + } + } + + companion object { + const val TAG = "AccessibilityInteractor" + } } diff --git a/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt b/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt index a5d0461e4a3..84e3b8533b2 100644 --- a/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt +++ b/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt @@ -78,6 +78,7 @@ class Injector(step: FingerprintNavigationStep.UiStep) { override val isEnabled: Boolean get() = true override fun announce(clazz: Class<*>, announcement: CharSequence?) {} + override fun interrupt() {} } var foldStateInteractor = diff --git a/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt b/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt index a8c5e684d33..ca802087582 100644 --- a/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt +++ b/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt @@ -111,6 +111,8 @@ class FingerprintEnrollFindSensorViewModelV2Test { override val isEnabled: Boolean get() = true override fun announce(clazz: Class<*>, announcement: CharSequence?) {} + override fun interrupt() { + } } foldStateInteractor = object : FoldStateInteractor {