Don't update biometricListenState on SB stateChange

On StatusBarState change, don't immediately update
biometricListeningState or else it's possible we start face auth before
the device turns off. We rely on other signals to update the
biometricListeningState when all state (ie: dozing/sleeping) is properly
set.

This bug was introduced by ag/13020637 in a seemingly harmless small
refactor of KeyguardUpdateMonitor's mStatusBarState handling.

Test: atest KeyguardUpdateMonitorTest
Test: manual
Fixes: 187677463
Change-Id: I874273e1a5c9bd2d5e892702c4c154540cdc0a84
This commit is contained in:
Beverly
2021-05-14 12:33:56 -04:00
committed by Beverly Tai
parent 532dd4e6f7
commit d421a8d868
2 changed files with 28 additions and 1 deletions

View File

@@ -252,7 +252,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
@Override
public void onStateChanged(int newState) {
mStatusBarState = newState;
updateBiometricListeningState();
}
@Override

View File

@@ -942,6 +942,34 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isEqualTo(false);
}
@Test
public void testShouldNotUpdateBiometricListeningStateOnStatusBarStateChange() {
// GIVEN state for face auth should run aside from StatusBarState
when(mDevicePolicyManager.getKeyguardDisabledFeatures(null,
KeyguardUpdateMonitor.getCurrentUser())).thenReturn(0);
mStatusBarStateListener.onStateChanged(StatusBarState.SHADE_LOCKED);
setKeyguardBouncerVisibility(false /* isVisible */);
mKeyguardUpdateMonitor.dispatchStartedWakingUp();
when(mKeyguardBypassController.canBypass()).thenReturn(true);
mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
// WHEN status bar state reports a change to the keyguard that would normally indicate to
// start running face auth
mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isEqualTo(true);
// THEN face unlock is not running b/c status bar state changes don't cause biometric
// listening state to update
assertThat(mKeyguardUpdateMonitor.isFaceUnlockRunning(
KeyguardUpdateMonitor.getCurrentUser())).isEqualTo(false);
// WHEN biometric listening state is updated
mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
// THEN face unlock is running
assertThat(mKeyguardUpdateMonitor.isFaceDetectionRunning()).isEqualTo(true);
}
@Test
public void testRequireUnlockForNfc_Broadcast() {
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);