Clear face auth locked out state after user switch.

If the new user doesn't have face auth locked out we should reset the state.

Fixes: 299164873
Test: atest KeyguardFaceAuthInteractorTest
Test: atest DeviceEntryFaceAuthRepositoryTest
Change-Id: Id18e192c3fe41314f9620e7d654d6e1faf8fc24b
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
index 8064cc1..8954947 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
@@ -107,7 +107,7 @@
     val isBypassEnabled: Flow<Boolean>
 
     /** Set whether face authentication should be locked out or not */
-    fun lockoutFaceAuth()
+    fun setLockedOut(isLockedOut: Boolean)
 
     /**
      * Cancel current face authentication and prevent it from running until [resumeFaceAuth] is
@@ -228,8 +228,8 @@
         }
             ?: flowOf(false)
 
-    override fun lockoutFaceAuth() {
-        _isLockedOut.value = true
+    override fun setLockedOut(isLockedOut: Boolean) {
+        _isLockedOut.value = isLockedOut
     }
 
     private val faceLockoutResetCallback =
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/NoopDeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/NoopDeviceEntryFaceAuthRepository.kt
index e4e6a6d..46135fa 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/NoopDeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/NoopDeviceEntryFaceAuthRepository.kt
@@ -55,7 +55,7 @@
     override val isBypassEnabled: Flow<Boolean>
         get() = emptyFlow()
 
-    override fun lockoutFaceAuth() = Unit
+    override fun setLockedOut(isLockedOut: Boolean) = Unit
     override fun pauseFaceAuth() = Unit
 
     override fun resumeFaceAuth() = Unit
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
index 4b8171f..ccc2080 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
@@ -132,7 +132,7 @@
             .onEach {
                 if (it) {
                     faceAuthenticationLogger.faceLockedOut("Fingerprint locked out")
-                    repository.lockoutFaceAuth()
+                    repository.setLockedOut(true)
                 }
             }
             .launchIn(applicationScope)
@@ -148,9 +148,9 @@
                     repository.pauseFaceAuth()
                 } else if (wasSwitching && !isSwitching) {
                     val lockoutMode = facePropertyRepository.getLockoutMode(curr.userInfo.id)
-                    if (lockoutMode == LockoutMode.PERMANENT || lockoutMode == LockoutMode.TIMED) {
-                        repository.lockoutFaceAuth()
-                    }
+                    repository.setLockedOut(
+                        lockoutMode == LockoutMode.PERMANENT || lockoutMode == LockoutMode.TIMED
+                    )
                     repository.resumeFaceAuth()
                     yield()
                     runFaceAuth(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
index f0dbaf1..ec15416 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
@@ -559,7 +559,7 @@
 
     @Test
     fun authenticateDoesNotRunWhenFaceIsDisabled() =
-        testScope.runTest { testGatingCheckForFaceAuth { underTest.lockoutFaceAuth() } }
+        testScope.runTest { testGatingCheckForFaceAuth { underTest.setLockedOut(true) } }
 
     @Test
     fun authenticateDoesNotRunWhenUserIsCurrentlyTrusted() =
@@ -869,7 +869,7 @@
             initCollectors()
             assertThat(underTest.isLockedOut.value).isFalse()
 
-            underTest.lockoutFaceAuth()
+            underTest.setLockedOut(true)
             runCurrent()
 
             assertThat(underTest.isLockedOut.value).isTrue()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
index ec11573..da70a9f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
@@ -244,15 +244,18 @@
         testScope.runTest {
             underTest.start()
 
-            // previously running
+            // User switching has started
+            fakeUserRepository.setSelectedUserInfo(primaryUser, SelectionStatus.SELECTION_COMPLETE)
             fakeUserRepository.setSelectedUserInfo(
                 primaryUser,
                 SelectionStatus.SELECTION_IN_PROGRESS
             )
             runCurrent()
-            bouncerRepository.setPrimaryShow(true)
+            assertThat(faceAuthRepository.isFaceAuthPaused()).isTrue()
 
-            facePropertyRepository.setLockoutMode(secondaryUser.id, LockoutMode.TIMED)
+            bouncerRepository.setPrimaryShow(true)
+            // New user is not locked out.
+            facePropertyRepository.setLockoutMode(secondaryUser.id, LockoutMode.NONE)
             fakeUserRepository.setSelectedUserInfo(
                 secondaryUser,
                 SelectionStatus.SELECTION_COMPLETE
@@ -260,7 +263,7 @@
             runCurrent()
 
             assertThat(faceAuthRepository.isFaceAuthPaused()).isFalse()
-            assertThat(faceAuthRepository.wasDisabled).isTrue()
+            assertThat(faceAuthRepository.isLockedOut.value).isFalse()
 
             runCurrent()
             assertThat(faceAuthRepository.runningAuthRequest.value!!.first)
@@ -406,7 +409,7 @@
             fakeDeviceEntryFingerprintAuthRepository.setLockedOut(true)
             runCurrent()
 
-            assertThat(faceAuthRepository.wasDisabled).isTrue()
+            assertThat(faceAuthRepository.isLockedOut.value).isTrue()
         }
 
     companion object {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
index 1e1dc4f..2b13dca 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
@@ -27,11 +27,6 @@
 
 class FakeDeviceEntryFaceAuthRepository : DeviceEntryFaceAuthRepository {
 
-    private var _wasDisabled: Boolean = false
-
-    val wasDisabled: Boolean
-        get() = _wasDisabled
-
     override val isAuthenticated = MutableStateFlow(false)
     override val canRunFaceAuth = MutableStateFlow(false)
     private val _authenticationStatus = MutableStateFlow<FaceAuthenticationStatus?>(null)
@@ -57,8 +52,8 @@
     override val isAuthRunning: StateFlow<Boolean> = _isAuthRunning
 
     override val isBypassEnabled = MutableStateFlow(false)
-    override fun lockoutFaceAuth() {
-        _wasDisabled = true
+    override fun setLockedOut(isLockedOut: Boolean) {
+        _isLockedOut.value = isLockedOut
     }
 
     private val faceAuthPaused = MutableStateFlow(false)
@@ -79,10 +74,6 @@
         _isAuthRunning.value = true
     }
 
-    fun setLockedOut(value: Boolean) {
-        _isLockedOut.value = value
-    }
-
     override fun cancel() {
         _isAuthRunning.value = false
         _runningAuthRequest.value = null