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

Commit 7c87916a authored by Austin Delgado's avatar Austin Delgado Committed by Android (Google) Code Review
Browse files

Merge "Show fingerprint guidance in alternate bouncer when a11y enabled" into main

parents 2efea4d3 4f40a4bd
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.UserHandle
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.accessibility.data.repository.fakeAccessibilityRepository
import com.android.systemui.biometrics.FaceHelpMessageDebouncer
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.biometrics.domain.faceHelpMessageDeferral
@@ -45,6 +46,7 @@ import com.android.systemui.keyguard.shared.model.ErrorFingerprintAuthentication
import com.android.systemui.keyguard.shared.model.FailFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.HelpFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.FakeUserRepository.Companion.DEFAULT_SELECTED_USER
import com.android.systemui.util.mockito.whenever
@@ -67,6 +69,7 @@ class BiometricMessageInteractorTest : SysuiTestCase() {
    private val faceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository
    private val biometricSettingsRepository = kosmos.biometricSettingsRepository
    private val faceHelpMessageDeferral = kosmos.faceHelpMessageDeferral
    private val accessibilityRepository = kosmos.fakeAccessibilityRepository

    @Test
    fun fingerprintErrorMessage() =
@@ -222,6 +225,28 @@ class BiometricMessageInteractorTest : SysuiTestCase() {
                )
        }

    @Test
    fun fingerprintA11yMessage_fps() =
        testScope.runTest {
            val fingerprintA11yMessage by collectLastValue(underTest.fingerprintMessage)

            // GIVEN UDFPS
            fingerprintPropertyRepository.setProperties(
                0,
                SensorStrength.STRONG,
                FingerprintSensorType.UDFPS_OPTICAL,
                mapOf(),
            )
            accessibilityRepository.isTouchExplorationEnabled.value = true

            // GIVEN fingerprint is allowed
            biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true)

            // THEN fingerprintA11yMessage is updated to fps message
            assertThat(fingerprintA11yMessage?.message)
                .isEqualTo(kosmos.mainResources.getString(R.string.fingerprint_dialog_touch_sensor))
        }

    @Test
    fun faceFailedMessage_primaryAuthRequired() =
        testScope.runTest {
+17 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.deviceentry.domain.interactor

import android.content.res.Resources
import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
import com.android.systemui.biometrics.domain.interactor.FingerprintPropertyInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
@@ -61,6 +62,7 @@ constructor(
    private val biometricSettingsInteractor: DeviceEntryBiometricSettingsInteractor,
    faceHelpMessageDeferralInteractor: FaceHelpMessageDeferralInteractor,
    devicePostureInteractor: DevicePostureInteractor,
    private val accessibilityInteractor: AccessibilityInteractor,
) {
    private val faceHelp: Flow<HelpFaceAuthenticationStatus> =
        faceAuthInteractor.authenticationStatus.filterIsInstance<HelpFaceAuthenticationStatus>()
@@ -133,6 +135,15 @@ constructor(
                }
        }

    private val fingerprintA11yMessage: Flow<FingerprintMessage> =
        accessibilityInteractor.isTouchExplorationEnabled
            .sample(biometricSettingsInteractor.fingerprintAuthCurrentlyAllowed, ::Pair)
            .filter { (_, fingerprintAuthAllowed) -> fingerprintAuthAllowed }
            .filter { (touchExplorationEnabled, _) -> touchExplorationEnabled }
            .map {
                FingerprintMessage(resources.getString(R.string.fingerprint_dialog_touch_sensor))
            }

    val coExFaceAcquisitionMsgIdsToShow: Flow<Set<Int>> =
        devicePostureInteractor.posture.map { devicePosture ->
            when (devicePosture) {
@@ -145,7 +156,12 @@ constructor(
        }

    val fingerprintMessage: Flow<FingerprintMessage> =
        merge(fingerprintErrorMessage, fingerprintFailMessage, fingerprintHelpMessage)
        merge(
            fingerprintErrorMessage,
            fingerprintFailMessage,
            fingerprintHelpMessage,
            fingerprintA11yMessage,
        )

    private val filterConditionForFaceHelpMessages:
        Flow<(HelpFaceAuthenticationStatus) -> Boolean> =
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.deviceentry.domain.interactor

import android.content.res.mainResources
import com.android.systemui.accessibility.domain.interactor.accessibilityInteractor
import com.android.systemui.biometrics.domain.interactor.fingerprintPropertyInteractor
import com.android.systemui.keyguard.domain.interactor.devicePostureInteractor
import com.android.systemui.kosmos.Kosmos
@@ -31,5 +32,6 @@ val Kosmos.biometricMessageInteractor by
            biometricSettingsInteractor = deviceEntryBiometricSettingsInteractor,
            faceHelpMessageDeferralInteractor = faceHelpMessageDeferralInteractor,
            devicePostureInteractor = devicePostureInteractor,
            accessibilityInteractor = accessibilityInteractor,
        )
    }