From 459024febac85d582f21eb98c31a95e06fbe97d7 Mon Sep 17 00:00:00 2001 From: Beverly Date: Fri, 17 Mar 2023 17:26:32 +0000 Subject: [PATCH] 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 --- .../domain/interactor/AlternateBouncerInteractor.kt | 5 ++++- .../systemui/biometrics/SideFpsControllerTest.kt | 5 +++-- .../UdfpsKeyguardViewControllerWithCoroutinesTest.kt | 2 ++ .../interactor/AlternateBouncerInteractorTest.kt | 12 ++++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractor.kt index e1702c5d61c43..9a90bb3c9b1e0 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractor.kt @@ -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) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt index 3ec49b263c549..961b47eca60bd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt @@ -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(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt index 786cb01621bb3..cefa9b129262a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt @@ -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), diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt index 2060e3d5d3bd6..86246f7af0331 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt @@ -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() {