Schedule biometric watchdog whenever keyguard transitions to gone state.
Fixes: 275794631 Test: atest DeviceEntryFaceAuthRepositoryTest Change-Id: I888c66dba278003454558e83fb18e83af482e0a1
This commit is contained in:
@@ -4373,7 +4373,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
* Cancels all operations in the scheduler if it is hung for 10 seconds.
|
||||
*/
|
||||
public void startBiometricWatchdog() {
|
||||
if (mFaceManager != null) {
|
||||
if (mFaceManager != null && !isFaceAuthInteractorEnabled()) {
|
||||
mFaceManager.scheduleWatchdog();
|
||||
}
|
||||
if (mFpm != null) {
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
|
||||
import com.android.systemui.keyguard.shared.model.AcquiredAuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.AuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.DetectionStatus
|
||||
@@ -133,6 +134,7 @@ constructor(
|
||||
private val alternateBouncerInteractor: AlternateBouncerInteractor,
|
||||
@FaceDetectTableLog private val faceDetectLog: TableLogBuffer,
|
||||
@FaceAuthTableLog private val faceAuthLog: TableLogBuffer,
|
||||
private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
|
||||
dumpManager: DumpManager,
|
||||
) : DeviceEntryFaceAuthRepository, Dumpable {
|
||||
private var authCancellationSignal: CancellationSignal? = null
|
||||
@@ -211,6 +213,13 @@ constructor(
|
||||
observeFaceAuthGatingChecks()
|
||||
observeFaceDetectGatingChecks()
|
||||
observeFaceAuthResettingConditions()
|
||||
listenForSchedulingWatchdog()
|
||||
}
|
||||
|
||||
private fun listenForSchedulingWatchdog() {
|
||||
keyguardTransitionInteractor.anyStateToGoneTransition
|
||||
.onEach { faceManager?.scheduleWatchdog() }
|
||||
.launchIn(applicationScope)
|
||||
}
|
||||
|
||||
private fun observeFaceAuthResettingConditions() {
|
||||
|
||||
@@ -44,11 +44,14 @@ import com.android.systemui.flags.FakeFeatureFlags
|
||||
import com.android.systemui.flags.Flags.FACE_AUTH_REFACTOR
|
||||
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
|
||||
import com.android.systemui.keyguard.shared.model.AuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.DetectionStatus
|
||||
import com.android.systemui.keyguard.shared.model.ErrorAuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.HelpAuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardState
|
||||
import com.android.systemui.keyguard.shared.model.SuccessAuthenticationStatus
|
||||
import com.android.systemui.keyguard.shared.model.TransitionStep
|
||||
import com.android.systemui.keyguard.shared.model.WakeSleepReason
|
||||
import com.android.systemui.keyguard.shared.model.WakefulnessModel
|
||||
import com.android.systemui.keyguard.shared.model.WakefulnessState
|
||||
@@ -119,6 +122,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
|
||||
private lateinit var faceLockoutResetCallback: ArgumentCaptor<FaceManager.LockoutResetCallback>
|
||||
private lateinit var testDispatcher: TestDispatcher
|
||||
|
||||
private lateinit var keyguardTransitionRepository: FakeKeyguardTransitionRepository
|
||||
private lateinit var testScope: TestScope
|
||||
private lateinit var fakeUserRepository: FakeUserRepository
|
||||
private lateinit var authStatus: FlowValue<AuthenticationStatus?>
|
||||
@@ -189,6 +193,9 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
|
||||
val systemClock = FakeSystemClock()
|
||||
val faceAuthBuffer = TableLogBuffer(10, "face auth", systemClock)
|
||||
val faceDetectBuffer = TableLogBuffer(10, "face detect", systemClock)
|
||||
keyguardTransitionRepository = FakeKeyguardTransitionRepository()
|
||||
val keyguardTransitionInteractor =
|
||||
KeyguardTransitionInteractor(keyguardTransitionRepository)
|
||||
return DeviceEntryFaceAuthRepositoryImpl(
|
||||
mContext,
|
||||
fmOverride,
|
||||
@@ -207,6 +214,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
|
||||
alternateBouncerInteractor,
|
||||
faceDetectBuffer,
|
||||
faceAuthBuffer,
|
||||
keyguardTransitionInteractor,
|
||||
dumpManager,
|
||||
)
|
||||
}
|
||||
@@ -772,6 +780,50 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromDozing() =
|
||||
testScope.runTest {
|
||||
keyguardTransitionRepository.sendTransitionStep(
|
||||
TransitionStep(from = KeyguardState.DOZING, to = KeyguardState.GONE)
|
||||
)
|
||||
|
||||
runCurrent()
|
||||
verify(faceManager).scheduleWatchdog()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromAod() =
|
||||
testScope.runTest {
|
||||
keyguardTransitionRepository.sendTransitionStep(
|
||||
TransitionStep(from = KeyguardState.AOD, to = KeyguardState.GONE)
|
||||
)
|
||||
|
||||
runCurrent()
|
||||
verify(faceManager).scheduleWatchdog()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromLockscreen() =
|
||||
testScope.runTest {
|
||||
keyguardTransitionRepository.sendTransitionStep(
|
||||
TransitionStep(from = KeyguardState.LOCKSCREEN, to = KeyguardState.GONE)
|
||||
)
|
||||
|
||||
runCurrent()
|
||||
verify(faceManager).scheduleWatchdog()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromBouncer() =
|
||||
testScope.runTest {
|
||||
keyguardTransitionRepository.sendTransitionStep(
|
||||
TransitionStep(from = KeyguardState.PRIMARY_BOUNCER, to = KeyguardState.GONE)
|
||||
)
|
||||
|
||||
runCurrent()
|
||||
verify(faceManager).scheduleWatchdog()
|
||||
}
|
||||
|
||||
private suspend fun TestScope.testGatingCheckForFaceAuth(gatingCheckModifier: () -> Unit) {
|
||||
initCollectors()
|
||||
allPreconditionsToRunFaceAuthAreTrue()
|
||||
|
||||
Reference in New Issue
Block a user