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
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user