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

Commit ca88e5fb authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Block face auth when lock icon is pressed

It's necessary to lock the current user, until the next screen power
cycle, to avoid unlocking the device accidentally.

Fixes: 132129109
Test: atest KeyguardIndicationControllerTest
Test: Unlock with biometrics, long press lock icon, swipe up
Test: Unlock with biometrics, swipe up
Change-Id: I23258a79531c21d0e63bd0a91db59d8950526197
parent 8575ede8
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -238,6 +238,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    private boolean mIsDreaming;
    private final DevicePolicyManager mDevicePolicyManager;
    private boolean mLogoutEnabled;
    // If the user long pressed the lock icon, disabling face auth for the current session.
    private boolean mLockIconPressed;

    /**
     * Short delay before restarting biometric authentication after a successful try
@@ -1384,6 +1386,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    }

    private void handleScreenTurnedOff() {
        mLockIconPressed = false;
        mHardwareFingerprintUnavailableRetryCount = 0;
        mHardwareFaceUnavailableRetryCount = 0;
        final int count = mCallbacks.size();
@@ -1625,10 +1628,19 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
        return (mBouncer || mAuthInterruptActive || awakeKeyguard || shouldListenForFaceAssistant())
                && !mSwitchingUser && !getUserCanSkipBouncer(user) && !isFaceDisabled(user)
                && !mKeyguardGoingAway && mFaceSettingEnabledForUser
                && !mKeyguardGoingAway && mFaceSettingEnabledForUser && !mLockIconPressed
                && mUserManager.isUserUnlocked(user) && mIsPrimaryUser;
    }

    /**
     * Whenever the lock icon is long pressed, disabling trust agents.
     * This means that we cannot auth passively (face) until the user presses power.
     */
    public void onLockIconPressed() {
        mLockIconPressed = true;
        mUserFaceAuthenticated.put(getCurrentUser(), false);
        updateFaceListeningState();
    }

    private void startListeningForFingerprint() {
        if (mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING) {
+1 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ public class KeyguardIndicationController implements StateListener,
        mLockscreenGestureLogger.write(MetricsProto.MetricsEvent.ACTION_LS_LOCK,
                0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
        showTransientIndication(R.string.keyguard_indication_trust_disabled);
        mKeyguardUpdateMonitor.onLockIconPressed();
        mLockPatternUtils.requireCredentialEntry(KeyguardUpdateMonitor.getCurrentUser());

        return true;
+1 −0
Original line number Diff line number Diff line
@@ -261,6 +261,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {

        longClickCaptor.getValue().onLongClick(mLockIcon);
        verify(mLockPatternUtils).requireCredentialEntry(anyInt());
        verify(mKeyguardUpdateMonitor).onLockIconPressed();
    }

    @Test