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

Commit d421a8d8 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

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
parent 532dd4e6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -252,7 +252,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        @Override
        public void onStateChanged(int newState) {
            mStatusBarState = newState;
            updateBiometricListeningState();
        }

        @Override
+28 −0
Original line number Diff line number Diff line
@@ -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);