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

Commit 459024fe authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Don't show the altBouncer if isDozing=true

There's strange bouncer behavior where CentralSurfacesImpl
sometimes unexpectedly requests the bouncer when the device
start doing. To protect against showing the bouncer
during the screen off transition, make sure to guard showing the
alternateBouncer on isDozing.

Test: repeatedly unfold & unlock with FP & fold (x10) and observe
that there's no alternate bouncer lingering on display
Test: atest AlternateBouncerInteractorTest
Fixes: 273303575

Change-Id: I6412ed147be5fd6ca9952b65fc39d029babf1233
parent 10fb7116
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.LegacyAlternateBouncer
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.time.SystemClock
@@ -34,6 +35,7 @@ import kotlinx.coroutines.flow.Flow
class AlternateBouncerInteractor
@Inject
constructor(
    private val statusBarStateController: StatusBarStateController,
    private val keyguardStateController: KeyguardStateController,
    private val bouncerRepository: KeyguardBouncerRepository,
    private val biometricSettingsRepository: BiometricSettingsRepository,
@@ -118,7 +120,8 @@ constructor(
                biometricSettingsRepository.isStrongBiometricAllowed.value &&
                biometricSettingsRepository.isFingerprintEnabledByDevicePolicy.value &&
                !deviceEntryFingerprintAuthRepository.isLockedOut.value &&
                !keyguardStateController.isUnlocked
                !keyguardStateController.isUnlocked &&
                !statusBarStateController.isDozing
        } else {
            legacyAlternateBouncer != null &&
                keyguardUpdateMonitor.isUnlockingWithBiometricAllowed(true)
+3 −2
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsReposi
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.recents.OverviewProxyService
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.concurrency.FakeExecutor
@@ -98,7 +99,6 @@ class SideFpsControllerTest : SysuiTestCase() {

    @JvmField @Rule var rule = MockitoJUnit.rule()

    @Mock lateinit var keyguardStateController: KeyguardStateController
    @Mock lateinit var layoutInflater: LayoutInflater
    @Mock lateinit var fingerprintManager: FingerprintManager
    @Mock lateinit var windowManager: WindowManager
@@ -138,7 +138,8 @@ class SideFpsControllerTest : SysuiTestCase() {
        keyguardBouncerRepository = FakeKeyguardBouncerRepository()
        alternateBouncerInteractor =
            AlternateBouncerInteractor(
                keyguardStateController,
                mock(StatusBarStateController::class.java),
                mock(KeyguardStateController::class.java),
                keyguardBouncerRepository,
                FakeBiometricSettingsRepository(),
                FakeDeviceEntryFingerprintAuthRepository(),
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInt
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -93,6 +94,7 @@ class UdfpsKeyguardViewControllerWithCoroutinesTest : UdfpsKeyguardViewControlle
            )
        mAlternateBouncerInteractor =
            AlternateBouncerInteractor(
                mock(StatusBarStateController::class.java),
                mock(KeyguardStateController::class.java),
                keyguardBouncerRepository,
                mock(BiometricSettingsRepository::class.java),
+12 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintA
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepositoryImpl
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
@@ -54,6 +55,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
    private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
    private lateinit var deviceEntryFingerprintAuthRepository:
        FakeDeviceEntryFingerprintAuthRepository
    @Mock private lateinit var statusBarStateController: StatusBarStateController
    @Mock private lateinit var keyguardStateController: KeyguardStateController
    @Mock private lateinit var systemClock: SystemClock
    @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
@@ -75,6 +77,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
        featureFlags = FakeFeatureFlags().apply { this.set(Flags.MODERN_ALTERNATE_BOUNCER, true) }
        underTest =
            AlternateBouncerInteractor(
                statusBarStateController,
                keyguardStateController,
                bouncerRepository,
                biometricSettingsRepository,
@@ -131,6 +134,14 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_isDozing() {
        givenCanShowAlternateBouncer()
        whenever(statusBarStateController.isDozing).thenReturn(true)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun show_whenCanShow() {
        givenCanShowAlternateBouncer()
@@ -214,6 +225,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
        biometricSettingsRepository.setFingerprintEnabledByDevicePolicy(true)
        deviceEntryFingerprintAuthRepository.setLockedOut(false)
        whenever(keyguardStateController.isUnlocked).thenReturn(false)
        whenever(statusBarStateController.isDozing).thenReturn(false)
    }

    private fun givenCannotShowAlternateBouncer() {