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

Commit 8cab5bd4 authored by Beverly's avatar Beverly
Browse files

Add FaceManager.LockoutResetCallback from a bgThread

In case it takes a while to be added. We don't want
to block the main thread.

Fixes: 326147792
Test: Observe face unlock lockout can still be reset after a
successfuly primary authentication
Test: atest DeviceEntryFaceAuthRepositoryTest
Flag: None

Change-Id: Ia68c07cbd6aeb6e27a1f59747d028d34ea0444a7
parent 929ab9fd
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.domain.interactor.displayStateInteractor
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.coroutines.FlowValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
@@ -144,6 +145,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val testScope = kosmos.testScope
    private val fakeUserRepository = kosmos.fakeUserRepository
    private val fakeExecutor = kosmos.fakeExecutor
    private lateinit var authStatus: FlowValue<FaceAuthenticationStatus?>
    private lateinit var detectStatus: FlowValue<FaceDetectionStatus?>
    private lateinit var authRunning: FlowValue<Boolean?>
@@ -220,12 +222,12 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
            testScope.backgroundScope,
            testDispatcher,
            testDispatcher,
            fakeExecutor,
            sessionTracker,
            uiEventLogger,
            FaceAuthenticationLogger(logcatLogBuffer("DeviceEntryFaceAuthRepositoryLog")),
            biometricSettingsRepository,
            deviceEntryFingerprintAuthRepository,
            trustRepository,
            keyguardRepository,
            powerInteractor,
            keyguardInteractor,
@@ -292,6 +294,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
    fun faceLockoutStatusIsPropagated() =
        testScope.runTest {
            initCollectors()
            fakeExecutor.runAllReady()
            verify(faceManager).addLockoutResetCallback(faceLockoutResetCallback.capture())
            allPreconditionsToRunFaceAuthAreTrue()

@@ -1177,6 +1180,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
    }

    private suspend fun TestScope.allPreconditionsToRunFaceAuthAreTrue() {
        fakeExecutor.runAllReady()
        verify(faceManager, atLeastOnce())
            .addLockoutResetCallback(faceLockoutResetCallback.capture())
        trustRepository.setCurrentUserTrusted(false)
+6 −3
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthR
import com.android.systemui.keyguard.data.repository.FaceAuthTableLog
import com.android.systemui.keyguard.data.repository.FaceDetectTableLog
import com.android.systemui.keyguard.data.repository.KeyguardRepository
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
@@ -64,6 +63,7 @@ import com.android.systemui.user.data.repository.UserRepository
import com.google.errorprone.annotations.CompileTimeConstant
import java.io.PrintWriter
import java.util.Arrays
import java.util.concurrent.Executor
import java.util.stream.Collectors
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -150,12 +150,12 @@ constructor(
    @Application private val applicationScope: CoroutineScope,
    @Main private val mainDispatcher: CoroutineDispatcher,
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @Background private val backgroundExecutor: Executor,
    private val sessionTracker: SessionTracker,
    private val uiEventsLogger: UiEventLogger,
    private val faceAuthLogger: FaceAuthenticationLogger,
    private val biometricSettingsRepository: BiometricSettingsRepository,
    private val deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository,
    trustRepository: TrustRepository,
    private val keyguardRepository: KeyguardRepository,
    private val powerInteractor: PowerInteractor,
    private val keyguardInteractor: KeyguardInteractor,
@@ -235,7 +235,10 @@ constructor(
        }

    init {
        backgroundExecutor.execute {
            faceManager?.addLockoutResetCallback(faceLockoutResetCallback)
            faceAuthLogger.addLockoutResetCallbackDone()
        }
        faceAcquiredInfoIgnoreList =
            Arrays.stream(
                    context.resources.getIntArray(
+4 −0
Original line number Diff line number Diff line
@@ -201,6 +201,10 @@ constructor(
        )
    }

    fun addLockoutResetCallbackDone() {
        logBuffer.log(TAG, DEBUG, {}, { "addlockoutResetCallback done" })
    }

    fun authRequested(uiEvent: FaceAuthUiEvent) {
        logBuffer.log(
            TAG,