summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Austin Delgado <austindelgado@google.com> 2025-02-26 10:16:12 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-26 10:16:12 -0800
commit82dd4dbeedb1a3eb2177af3d273bee2dcf34764f (patch)
treea3974ed4c01ca66dd5db012c382304b0e73ffe43
parent7b5a72a3b89f15223a8d6ea4aff3aa1de4b57f87 (diff)
parent3fbafb11a03dfea7f56caf89273017f036268344 (diff)
Merge "Extend timeout for Biometric Prompt messages when talkback enabled" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt3
4 files changed, 22 insertions, 3 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
index 88c9e74551fd..0cfb36d58f89 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -36,6 +36,7 @@ import android.testing.ViewUtils
import android.view.View
import android.view.WindowInsets
import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
import android.widget.ScrollView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -114,6 +115,7 @@ open class AuthContainerViewTest : SysuiTestCase() {
@Mock lateinit var selectedUserInteractor: SelectedUserInteractor
@Mock private lateinit var packageManager: PackageManager
@Mock private lateinit var activityTaskManager: ActivityTaskManager
+ @Mock private lateinit var accessibilityManager: AccessibilityManager
@Mock private lateinit var lazyViewCapture: Lazy<ViewCapture>
private lateinit var displayRepository: FakeDisplayRepository
@@ -678,6 +680,7 @@ open class AuthContainerViewTest : SysuiTestCase() {
udfpsUtils,
iconProvider,
activityTaskManager,
+ accessibilityManager,
),
{ credentialViewModel },
fakeExecutor,
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
index 4dcf26808a9e..0902d19b6787 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
@@ -34,6 +34,7 @@ import android.util.Log
import android.util.RotationUtils
import android.view.HapticFeedbackConstants
import android.view.MotionEvent
+import android.view.accessibility.AccessibilityManager
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.keyguard.AuthInteractionProperties
import com.android.launcher3.icons.IconProvider
@@ -85,7 +86,17 @@ constructor(
private val udfpsUtils: UdfpsUtils,
private val iconProvider: IconProvider,
private val activityTaskManager: ActivityTaskManager,
+ private val accessibilityManager: AccessibilityManager,
) {
+ // When a11y enabled, increase message delay to ensure messages get read
+ private val messageDelay =
+ accessibilityManager
+ .getRecommendedTimeoutMillis(
+ BiometricPrompt.HIDE_DIALOG_DELAY,
+ AccessibilityManager.FLAG_CONTENT_CONTROLS or AccessibilityManager.FLAG_CONTENT_TEXT,
+ )
+ .toLong()
+
/** The set of modalities available for this prompt */
val modalities: Flow<BiometricModalities> =
promptSelectorInteractor.prompt
@@ -692,7 +703,7 @@ constructor(
messageJob?.cancel()
messageJob = launch {
- delay(BiometricPrompt.HIDE_DIALOG_DELAY.toLong())
+ delay(messageDelay)
if (authenticateAfterError) {
showAuthenticating(messageAfterError)
} else {
@@ -754,7 +765,7 @@ constructor(
messageJob?.cancel()
messageJob = launch {
- delay(BiometricPrompt.HIDE_DIALOG_DELAY.toLong())
+ delay(messageDelay)
showAuthenticating(messageAfterHelp)
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
index b6c63479990e..0e68fce679b0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
@@ -28,6 +28,7 @@ import android.graphics.Point
import android.graphics.Rect
import android.graphics.drawable.BitmapDrawable
import android.hardware.biometrics.BiometricFingerprintConstants
+import android.hardware.biometrics.BiometricPrompt
import android.hardware.biometrics.PromptContentItemBulletedText
import android.hardware.biometrics.PromptContentView
import android.hardware.biometrics.PromptContentViewWithMoreOptionsButton
@@ -42,6 +43,7 @@ import android.platform.test.annotations.EnableFlags
import android.view.HapticFeedbackConstants
import android.view.MotionEvent
import android.view.Surface
+import android.view.accessibility.accessibilityManager
import androidx.test.filters.SmallTest
import com.android.app.activityTaskManager
import com.android.keyguard.AuthInteractionProperties
@@ -200,6 +202,8 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
overrideResource(R.dimen.biometric_dialog_face_icon_size, mockFaceIconSize)
kosmos.applicationContext = context
+ whenever(kosmos.accessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt()))
+ .thenReturn(BiometricPrompt.HIDE_DIALOG_DELAY)
if (testCase.fingerprint?.isAnyUdfpsType == true) {
kosmos.authController = authController
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
index 43b57de3df9f..d6b625b49fb2 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.biometrics.ui.viewmodel
import android.content.applicationContext
+import android.view.accessibility.accessibilityManager
import com.android.app.activityTaskManager
import com.android.launcher3.icons.IconProvider
import com.android.systemui.biometrics.domain.interactor.biometricStatusInteractor
@@ -27,7 +28,6 @@ import com.android.systemui.biometrics.udfpsUtils
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.util.mockito.mock
-import org.mockito.Mockito.mock
val Kosmos.promptViewModel by Fixture {
PromptViewModel(
@@ -39,6 +39,7 @@ val Kosmos.promptViewModel by Fixture {
udfpsUtils = udfpsUtils,
iconProvider = iconProvider,
activityTaskManager = activityTaskManager,
+ accessibilityManager = accessibilityManager,
)
}