Added interupt to accessibility interactor

Test: Verified manually
Bug: 366219635
Flag: EXEMPT bugfix
Change-Id: If1dea7b3efd23e40c6c2668867b175ba84f11550
This commit is contained in:
Joshua McCloskey
2024-10-23 17:34:16 +00:00
parent 01359592a2
commit 5e2adc2683
3 changed files with 29 additions and 9 deletions

View File

@@ -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<Boolean>
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<Boolean> =
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"
}
}

View File

@@ -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 =

View File

@@ -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 {