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