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

Commit 868f60e2 authored by Beverly's avatar Beverly
Browse files

Reset the face authenticated state when finished transition to GONE

AND status bar state is SHADE.

This follows logic in SharedNotificationContainerViewModel which
also checks the status bar state.

Test: atest DeviceEntryFaceAuthRepositoryTest
Fixes: 330117158
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint TEAMFOOD
Flag: NONE
Change-Id: I309ca40a04edc003047a5d4308a51508e4f74989
parent ca83c707
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ import com.android.systemui.keyguard.data.repository.fakeTrustRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testDispatcher
@@ -820,21 +821,37 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
        }

    @Test
    fun isAuthenticatedIsResetToFalseWhenKeyguardDoneAnimationsFinished() =
    fun isAuthenticatedIsResetToFalseWhenFinishedTransitioningToGoneAndStatusBarStateShade() =
        testScope.runTest {
            initCollectors()
            allPreconditionsToRunFaceAuthAreTrue()

            triggerFaceAuth(false)

            keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
            authenticationCallback.value.onAuthenticationSucceeded(
                mock(FaceManager.AuthenticationResult::class.java)
            )

            assertThat(authenticated()).isTrue()

            keyguardRepository.keyguardDoneAnimationsFinished()
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    transitionState = TransitionState.STARTED,
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.GONE,
                )
            )
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    transitionState = TransitionState.FINISHED,
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.GONE,
                )
            )
            assertThat(authenticated()).isTrue()

            keyguardRepository.setStatusBarState(StatusBarState.SHADE)
            assertThat(authenticated()).isFalse()
        }

+11 −5
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import com.android.systemui.deviceentry.shared.model.FailedFaceAuthenticationSta
import com.android.systemui.deviceentry.shared.model.HelpFaceAuthenticationStatus
import com.android.systemui.deviceentry.shared.model.SuccessFaceAuthenticationStatus
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.KeyguardWmStateRefactor
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.BiometricType
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
@@ -51,6 +50,7 @@ import com.android.systemui.keyguard.data.repository.TrustRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.log.FaceAuthenticationLogger
@@ -313,10 +313,16 @@ constructor(
        // or device starts going to sleep.
        merge(
                powerInteractor.isAsleep,
                if (KeyguardWmStateRefactor.isEnabled) {
                    keyguardTransitionInteractor.isInTransitionToState(KeyguardState.GONE)
                } else {
                    keyguardRepository.keyguardDoneAnimationsFinished.map { true }
                combine(
                    keyguardTransitionInteractor.isFinishedInState(KeyguardState.GONE),
                    keyguardInteractor.statusBarState,
                ) { isFinishedInGoneState, statusBarState ->
                    // When the user is dragging the primary bouncer in (up) by manually scrolling
                    // up on the lockscreen, the device won't be irreversibly transitioned to GONE
                    // until the statusBarState updates to SHADE, so we check that here.
                    // Else, we could reset the face auth state too early and end up in a strange
                    // state.
                    isFinishedInGoneState && statusBarState == StatusBarState.SHADE
                },
                userRepository.selectedUser.map {
                    it.selectionStatus == SelectionStatus.SELECTION_IN_PROGRESS