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

Commit 555e38c5 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Fingerprint allowed state should update based on face lockout" into main

parents 61e0c5de 4bf11ab1
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.bouncer.data.repository.BouncerMessageRepositoryImpl
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.shared.model.BouncerMessageModel
import com.android.systemui.bouncer.shared.model.BouncerMessageModel
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.deviceEntryBiometricsAllowedInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryFingerprintAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryFingerprintAuthInteractor
import com.android.systemui.flags.SystemPropertiesHelper
import com.android.systemui.flags.SystemPropertiesHelper
import com.android.systemui.keyguard.data.repository.fakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.fakeBiometricSettingsRepository
@@ -108,7 +109,9 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
                facePropertyRepository = kosmos.fakeFacePropertyRepository,
                facePropertyRepository = kosmos.fakeFacePropertyRepository,
                deviceEntryFingerprintAuthInteractor = kosmos.deviceEntryFingerprintAuthInteractor,
                deviceEntryFingerprintAuthInteractor = kosmos.deviceEntryFingerprintAuthInteractor,
                faceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository,
                faceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository,
                securityModel = securityModel
                securityModel = securityModel,
                deviceEntryBiometricsAllowedInteractor =
                    kosmos.deviceEntryBiometricsAllowedInteractor,
            )
            )
        biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(
        biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(
            fingerprintAuthCurrentlyAllowed
            fingerprintAuthCurrentlyAllowed
+13 −27
Original line number Original line Diff line number Diff line
@@ -21,8 +21,6 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.biometricSettingsRepository
import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertThat
@@ -36,41 +34,29 @@ class DeviceEntryFingerprintAuthInteractorTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val testScope = kosmos.testScope
    private val underTest = kosmos.deviceEntryFingerprintAuthInteractor
    private val underTest = kosmos.deviceEntryFingerprintAuthInteractor
    private val fingerprintAuthRepository = kosmos.deviceEntryFingerprintAuthRepository
    private val fingerprintPropertyRepository = kosmos.fingerprintPropertyRepository
    private val fingerprintPropertyRepository = kosmos.fingerprintPropertyRepository
    private val biometricSettingsRepository = kosmos.biometricSettingsRepository


    @Test
    @Test
    fun isFingerprintAuthCurrentlyAllowed_allowedOnlyWhenItIsNotLockedOutAndAllowedBySettings() =
    fun isSensorUnderDisplay() =
        testScope.runTest {
        testScope.runTest {
            val currentlyAllowed by collectLastValue(underTest.isFingerprintAuthCurrentlyAllowed)
            val isUdfps by collectLastValue(underTest.isSensorUnderDisplay)
            biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true)
            fingerprintPropertyRepository.supportsUdfps()
            fingerprintAuthRepository.setLockedOut(true)
            assertThat(isUdfps).isTrue()

            assertThat(currentlyAllowed).isFalse()

            fingerprintAuthRepository.setLockedOut(false)
            assertThat(currentlyAllowed).isTrue()

            biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(false)
            assertThat(currentlyAllowed).isFalse()
        }
        }


    @Test
    @Test
    fun isFingerprintCurrentlyAllowedInBouncer_trueForNonUdfpsSensorTypes() =
    fun isSensorUnderDisplay_rear() =
        testScope.runTest {
        testScope.runTest {
            biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true)
            val isUdfps by collectLastValue(underTest.isSensorUnderDisplay)

            val isFingerprintCurrentlyAllowedInBouncer by
                collectLastValue(underTest.isFingerprintCurrentlyAllowedOnBouncer)

            fingerprintPropertyRepository.supportsUdfps()
            assertThat(isFingerprintCurrentlyAllowedInBouncer).isFalse()

            fingerprintPropertyRepository.supportsRearFps()
            fingerprintPropertyRepository.supportsRearFps()
            assertThat(isFingerprintCurrentlyAllowedInBouncer).isTrue()
            assertThat(isUdfps).isFalse()
        }


    @Test
    fun isSensorUnderDisplay_side() =
        testScope.runTest {
            val isUdfps by collectLastValue(underTest.isSensorUnderDisplay)
            fingerprintPropertyRepository.supportsSideFps()
            fingerprintPropertyRepository.supportsSideFps()
            assertThat(isFingerprintCurrentlyAllowedInBouncer).isTrue()
            assertThat(isUdfps).isFalse()
        }
        }
}
}
+4 −3
Original line number Original line Diff line number Diff line
@@ -21,7 +21,7 @@ import com.android.systemui.biometrics.data.repository.FingerprintPropertyReposi
import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository
import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricsAllowedInteractor
import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor
import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
@@ -60,7 +60,8 @@ constructor(
    private val biometricSettingsRepository: BiometricSettingsRepository,
    private val biometricSettingsRepository: BiometricSettingsRepository,
    private val systemClock: SystemClock,
    private val systemClock: SystemClock,
    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
    private val deviceEntryFingerprintAuthInteractor: Lazy<DeviceEntryFingerprintAuthInteractor>,
    private val deviceEntryBiometricsAllowedInteractor:
        Lazy<DeviceEntryBiometricsAllowedInteractor>,
    private val keyguardInteractor: Lazy<KeyguardInteractor>,
    private val keyguardInteractor: Lazy<KeyguardInteractor>,
    keyguardTransitionInteractor: Lazy<KeyguardTransitionInteractor>,
    keyguardTransitionInteractor: Lazy<KeyguardTransitionInteractor>,
    sceneInteractor: Lazy<SceneInteractor>,
    sceneInteractor: Lazy<SceneInteractor>,
@@ -114,7 +115,7 @@ constructor(
                                flowOf(false)
                                flowOf(false)
                            } else {
                            } else {
                                combine(
                                combine(
                                    deviceEntryFingerprintAuthInteractor
                                    deviceEntryBiometricsAllowedInteractor
                                        .get()
                                        .get()
                                        .isFingerprintAuthCurrentlyAllowed,
                                        .isFingerprintAuthCurrentlyAllowed,
                                    keyguardInteractor.get().isKeyguardDismissible,
                                    keyguardInteractor.get().isKeyguardDismissible,
+5 −1
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.bouncer.shared.model.Message
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.data.repository.DeviceEntryFaceAuthRepository
import com.android.systemui.deviceentry.data.repository.DeviceEntryFaceAuthRepository
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricsAllowedInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor
import com.android.systemui.flags.SystemPropertiesHelper
import com.android.systemui.flags.SystemPropertiesHelper
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
@@ -76,10 +77,11 @@ constructor(
    private val deviceEntryFingerprintAuthInteractor: DeviceEntryFingerprintAuthInteractor,
    private val deviceEntryFingerprintAuthInteractor: DeviceEntryFingerprintAuthInteractor,
    faceAuthRepository: DeviceEntryFaceAuthRepository,
    faceAuthRepository: DeviceEntryFaceAuthRepository,
    private val securityModel: KeyguardSecurityModel,
    private val securityModel: KeyguardSecurityModel,
    deviceEntryBiometricsAllowedInteractor: DeviceEntryBiometricsAllowedInteractor,
) {
) {


    private val isFingerprintAuthCurrentlyAllowedOnBouncer =
    private val isFingerprintAuthCurrentlyAllowedOnBouncer =
        deviceEntryFingerprintAuthInteractor.isFingerprintCurrentlyAllowedOnBouncer.stateIn(
        deviceEntryBiometricsAllowedInteractor.isFingerprintCurrentlyAllowedOnBouncer.stateIn(
            applicationScope,
            applicationScope,
            SharingStarted.Eagerly,
            SharingStarted.Eagerly,
            false
            false
@@ -87,6 +89,7 @@ constructor(


    private val currentSecurityMode
    private val currentSecurityMode
        get() = securityModel.getSecurityMode(currentUserId)
        get() = securityModel.getSecurityMode(currentUserId)

    private val currentUserId
    private val currentUserId
        get() = userRepository.getSelectedUserInfo().id
        get() = userRepository.getSelectedUserInfo().id


@@ -349,6 +352,7 @@ constructor(


interface CountDownTimerCallback {
interface CountDownTimerCallback {
    fun onFinish()
    fun onFinish()

    fun onTick(millisUntilFinished: Long)
    fun onTick(millisUntilFinished: Long)
}
}


+9 −7
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import android.os.Build
import com.android.systemui.CoreStartable
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricSettingsInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricSettingsInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricsAllowedInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFingerprintAuthInteractor
import com.android.systemui.log.BouncerLogger
import com.android.systemui.log.BouncerLogger
@@ -39,6 +40,7 @@ constructor(
    private val faceAuthInteractor: DeviceEntryFaceAuthInteractor,
    private val faceAuthInteractor: DeviceEntryFaceAuthInteractor,
    private val fingerprintAuthInteractor: DeviceEntryFingerprintAuthInteractor,
    private val fingerprintAuthInteractor: DeviceEntryFingerprintAuthInteractor,
    private val bouncerLogger: BouncerLogger,
    private val bouncerLogger: BouncerLogger,
    private val deviceEntryBiometricsAllowedInteractor: DeviceEntryBiometricsAllowedInteractor,
) : CoreStartable {
) : CoreStartable {
    override fun start() {
    override fun start() {
        if (!Build.isDebuggable()) {
        if (!Build.isDebuggable()) {
@@ -69,8 +71,8 @@ constructor(
            }
            }
        }
        }
        applicationScope.launch {
        applicationScope.launch {
            fingerprintAuthInteractor.isFingerprintCurrentlyAllowedOnBouncer.collectLatest {
            deviceEntryBiometricsAllowedInteractor.isFingerprintCurrentlyAllowedOnBouncer
                newValue ->
                .collectLatest { newValue ->
                    bouncerLogger.interestedStateChanged(
                    bouncerLogger.interestedStateChanged(
                        "fingerprintCurrentlyAllowedOnBouncer",
                        "fingerprintCurrentlyAllowedOnBouncer",
                        newValue
                        newValue
Loading