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:
@@ -252,7 +252,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
|
||||
@Override
|
||||
public void onStateChanged(int newState) {
|
||||
mStatusBarState = newState;
|
||||
updateBiometricListeningState();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user