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

Commit da73fdf9 authored by Beverly's avatar Beverly
Browse files

Update biometricUnlockMode with biometricUnlockSource

These were previously updated separately and the timing
of checking one or the other couldn't be guaranteed. Consolidate
these two values that should only be updated together into
the BiometricUnlockState.

Fixes: 330739233
Bug: 319035806
Flag: None
Test: atest DeviceEntrySourceInteractorTest
Change-Id: I90ab1bc48ce473dd6145065fb3668b7b7581a12f
parent 12753147
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
@@ -70,8 +70,10 @@ class AuthRippleInteractorTest : SysuiTestCase() {
    fun faceUnlocked_showsAuthRipple() =
        testScope.runTest {
            val showUnlockRipple by collectLastValue(underTest.showUnlockRipple)
            keyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FACE_SENSOR)
            keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
            keyguardRepository.setBiometricUnlockState(
                BiometricUnlockMode.WAKE_AND_UNLOCK,
                BiometricUnlockSource.FACE_SENSOR
            )
            assertThat(showUnlockRipple).isEqualTo(BiometricUnlockSource.FACE_SENSOR)
        }

@@ -79,8 +81,10 @@ class AuthRippleInteractorTest : SysuiTestCase() {
    fun fingerprintUnlocked_showsAuthRipple() =
        testScope.runTest {
            val showUnlockRippleFromBiometricUnlock by collectLastValue(underTest.showUnlockRipple)
            keyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FINGERPRINT_SENSOR)
            keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
            keyguardRepository.setBiometricUnlockState(
                BiometricUnlockMode.WAKE_AND_UNLOCK,
                BiometricUnlockSource.FINGERPRINT_SENSOR
            )
            assertThat(showUnlockRippleFromBiometricUnlock)
                .isEqualTo(BiometricUnlockSource.FINGERPRINT_SENSOR)
        }
+13 −8
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
@@ -46,8 +46,10 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
        testScope.runTest {
            val deviceEntryFromBiometricAuthentication by
                collectLastValue(underTest.deviceEntryFromBiometricSource)
            keyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FACE_SENSOR)
            keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
            keyguardRepository.setBiometricUnlockState(
                BiometricUnlockMode.WAKE_AND_UNLOCK,
                BiometricUnlockSource.FACE_SENSOR,
            )
            runCurrent()
            assertThat(deviceEntryFromBiometricAuthentication)
                .isEqualTo(BiometricUnlockSource.FACE_SENSOR)
@@ -57,8 +59,10 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
    fun deviceEntryFromFingerprintUnlock() = runTest {
        val deviceEntryFromBiometricAuthentication by
            collectLastValue(underTest.deviceEntryFromBiometricSource)
        keyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FINGERPRINT_SENSOR)
        keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
        keyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK,
            BiometricUnlockSource.FINGERPRINT_SENSOR,
        )
        runCurrent()
        assertThat(deviceEntryFromBiometricAuthentication)
            .isEqualTo(BiometricUnlockSource.FINGERPRINT_SENSOR)
@@ -68,9 +72,10 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
    fun noDeviceEntry() = runTest {
        val deviceEntryFromBiometricAuthentication by
            collectLastValue(underTest.deviceEntryFromBiometricSource)
        keyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FINGERPRINT_SENSOR)
        // doesn't dismiss keyguard:
        keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.ONLY_WAKE)
        keyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.ONLY_WAKE, // doesn't dismiss keyguard:
            BiometricUnlockSource.FINGERPRINT_SENSOR,
        )
        runCurrent()
        assertThat(deviceEntryFromBiometricAuthentication).isNull()
    }
+6 −4
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.doze.DozeMachine
import com.android.systemui.doze.DozeTransitionCallback
import com.android.systemui.doze.DozeTransitionListener
import com.android.systemui.dreams.DreamOverlayCallbackController
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.DozeTransitionModel
@@ -515,11 +516,9 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
    fun biometricUnlockSource() =
        testScope.runTest {
            val values = mutableListOf<BiometricUnlockSource?>()
            val job = underTest.biometricUnlockSource.onEach(values::add).launchIn(this)
            val job = underTest.biometricUnlockState.onEach { values.add(it.source) }.launchIn(this)

            runCurrent()
            val captor = argumentCaptor<KeyguardUpdateMonitorCallback>()
            verify(keyguardUpdateMonitor).registerCallback(captor.capture())

            // An initial, null value should be initially emitted so that flows combined with this
            // one
@@ -535,7 +534,10 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
                    BiometricSourceType.FINGERPRINT,
                )
                .onEach { biometricSourceType ->
                    captor.value.onBiometricAuthenticated(0, biometricSourceType, false)
                    underTest.setBiometricUnlockState(
                        BiometricUnlockMode.NONE,
                        BiometricUnlockSource.Companion.fromBiometricSourceType(biometricSourceType)
                    )
                    runCurrent()
                }

+27 −11
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.AnimatorTestRule
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.data.repository.powerRepository
@@ -89,7 +89,10 @@ class LightRevealScrimRepositoryTest : SysuiTestCase() {

        // The source and sensor locations are still null, so we should still be using the
        // default reveal despite a biometric unlock.
        fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )

        runCurrent()
        values.assertEffectsMatchPredicates(
@@ -98,7 +101,10 @@ class LightRevealScrimRepositoryTest : SysuiTestCase() {

        // We got a source but still have no sensor locations, so should be sticking with
        // the default effect.
        fakeKeyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FINGERPRINT_SENSOR)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )

        runCurrent()
        values.assertEffectsMatchPredicates(
@@ -117,8 +123,10 @@ class LightRevealScrimRepositoryTest : SysuiTestCase() {
        // Now we have fingerprint sensor locations, and wake and unlock via fingerprint.
        val fingerprintLocation = Point(500, 500)
        fakeKeyguardRepository.setFingerprintSensorLocation(fingerprintLocation)
        fakeKeyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FINGERPRINT_SENSOR)
        fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK_PULSING)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK_PULSING,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )

        // We should now have switched to the circle reveal, at the fingerprint location.
        runCurrent()
@@ -133,14 +141,21 @@ class LightRevealScrimRepositoryTest : SysuiTestCase() {

        // Subsequent wake and unlocks should not emit duplicate, identical CircleReveals.
        val valuesPrevSize = values.size
        fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK_PULSING)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockModel.WAKE_AND_UNLOCK_FROM_DREAM
            BiometricUnlockMode.WAKE_AND_UNLOCK_PULSING,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK_FROM_DREAM,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )
        assertEquals(valuesPrevSize, values.size)

        // Non-biometric unlock, we should return to the default reveal.
        fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockModel.NONE)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.NONE,
            BiometricUnlockSource.FINGERPRINT_SENSOR
        )

        runCurrent()
        values.assertEffectsMatchPredicates(
@@ -155,9 +170,10 @@ class LightRevealScrimRepositoryTest : SysuiTestCase() {

        // We already have a face location, so switching to face source should update the
        // CircleReveal.
        fakeKeyguardRepository.setBiometricUnlockSource(BiometricUnlockSource.FACE_SENSOR)
        runCurrent()
        fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
        fakeKeyguardRepository.setBiometricUnlockState(
            BiometricUnlockMode.WAKE_AND_UNLOCK,
            BiometricUnlockSource.FACE_SENSOR
        )
        runCurrent()

        values.assertEffectsMatchPredicates(
+5 −4
Original line number Diff line number Diff line
@@ -42,8 +42,7 @@ import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepos
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.keyguardOcclusionRepository
import com.android.systemui.keyguard.data.repository.keyguardRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
@@ -97,7 +96,7 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
                to = KeyguardState.AOD,
                testScope
            )
            kosmos.keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.NONE)
            kosmos.fakeKeyguardRepository.setBiometricUnlockState(BiometricUnlockMode.NONE)
            reset(transitionRepository)
        }
    }
@@ -276,7 +275,9 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
    @EnableFlags(Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR)
    fun testWakeAndUnlock_transitionsToGone_onlyAfterDismissCallPostWakeup() =
        testScope.runTest {
            kosmos.keyguardRepository.setBiometricUnlockState(BiometricUnlockModel.WAKE_AND_UNLOCK)
            kosmos.fakeKeyguardRepository.setBiometricUnlockState(
                BiometricUnlockMode.WAKE_AND_UNLOCK
            )
            powerInteractor.setAwakeForTest()
            runCurrent()

Loading