Merge "Schedule biometric watchdog whenever keyguard transitions to gone state." into udc-dev

This commit is contained in:
Chandru S
2023-04-13 02:17:17 +00:00
committed by Android (Google) Code Review
3 changed files with 62 additions and 1 deletions

View File

@@ -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) {

View File

@@ -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() {

View File

@@ -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()