Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fbafb11 authored by Austin Delgado's avatar Austin Delgado
Browse files

Extend timeout for Biometric Prompt messages when talkback enabled

When talkback is enabled, use
AccessibilityManager.getRecommenededTimeoutMillis to determine length of
time message some remain.

Fixes: 373771867
Fixes: 373778537
Test: Verified manually
Test: atest PromptViewModelTest
Flag: EXEMPT bugfix
Change-Id: Ie7b12f586c5ee9f4a5328b1da42ee00720fa7d7c
parent df7b8f37
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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,
+13 −2
Original line number Diff line number Diff line
@@ -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)
        }
    }
+4 −0
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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,
    )
}