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

Commit 1fcafc49 authored by Selim Cinek's avatar Selim Cinek
Browse files

Adapted the behavior when unlocking with fingerprint is not allowed

We now keep the fingerprint running and switch to the bouncer when
the user successfully authenticated.

Bug: 21618072
Change-Id: If00061cb3914afd4d7a7d75964594484c792a890
parent a2bf7616
Loading
Loading
Loading
Loading
+29 −4
Original line number Diff line number Diff line
@@ -111,7 +111,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    private static final int MSG_DEVICE_PROVISIONED = 308;
    private static final int MSG_DPM_STATE_CHANGED = 309;
    private static final int MSG_USER_SWITCHING = 310;
    private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 312;
    private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 311;
    private static final int MSG_KEYGUARD_RESET = 312;
    private static final int MSG_BOOT_COMPLETED = 313;
    private static final int MSG_USER_SWITCH_COMPLETE = 314;
    private static final int MSG_USER_INFO_CHANGED = 317;
@@ -135,6 +136,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    private boolean mKeyguardIsVisible;
    private boolean mBouncer;
    private boolean mBootCompleted;
    private boolean mUserHasAuthenticatedSinceBoot;

    // Device provisioning state
    private boolean mDeviceProvisioned;
@@ -194,6 +196,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                case MSG_KEYGUARD_VISIBILITY_CHANGED:
                    handleKeyguardVisibilityChanged(msg.arg1);
                    break;
                case MSG_KEYGUARD_RESET:
                    handleKeyguardReset();
                    break;
                case MSG_KEYGUARD_BOUNCER_CHANGED:
                    handleKeyguardBouncerChanged(msg.arg1);
                    break;
@@ -497,7 +502,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    }

    public boolean getUserCanSkipBouncer(int userId) {
        return getUserHasTrust(userId) || mUserFingerprintAuthenticated.get(userId);
        return getUserHasTrust(userId) || (mUserFingerprintAuthenticated.get(userId)
                && isUnlockingWithFingerprintAllowed());
    }

    public boolean getUserHasTrust(int userId) {
@@ -508,6 +514,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        return mUserTrustIsManaged.get(userId) && !isTrustDisabled(userId);
    }

    public boolean isUnlockingWithFingerprintAllowed() {
        return mUserHasAuthenticatedSinceBoot;
    }

    static class DisplayClientState {
        public int clientGeneration;
        public boolean clearing;
@@ -867,14 +877,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
    }

    private boolean shouldListenForFingerprint() {
        return mKeyguardIsVisible && !mSwitchingUser
                && mTrustManager.hasUserAuthenticatedSinceBoot(ActivityManager.getCurrentUser());
        return mKeyguardIsVisible && !mSwitchingUser;
    }

    private void startListeningForFingerprint() {
        if (DEBUG) Log.v(TAG, "startListeningForFingerprint()");
        int userId = ActivityManager.getCurrentUser();
        if (isUnlockWithFingerPrintPossible(userId)) {
            mUserHasAuthenticatedSinceBoot = mTrustManager.hasUserAuthenticatedSinceBoot(
                    ActivityManager.getCurrentUser());
            if (mFingerprintCancelSignal != null) {
                mFingerprintCancelSignal.cancel();
            }
@@ -1167,6 +1178,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        updateFingerprintListeningState();
    }

    /**
     * Handle {@link #MSG_KEYGUARD_RESET}
     */
    private void handleKeyguardReset() {
        if (DEBUG) Log.d(TAG, "handleKeyguardReset");
        if (!isUnlockingWithFingerprintAllowed()) {
            updateFingerprintListeningState();
        }
    }

    /**
     * Handle {@link #MSG_KEYGUARD_BOUNCER_CHANGED}
     * @see #sendKeyguardBouncerChanged(boolean)
@@ -1274,6 +1295,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        message.sendToTarget();
    }

    public void sendKeyguardReset() {
        mHandler.obtainMessage(MSG_KEYGUARD_RESET).sendToTarget();
    }

    /**
     * @see #handleKeyguardBouncerChanged(int)
     */
+3 −1
Original line number Diff line number Diff line
@@ -461,7 +461,9 @@ public class KeyguardViewMediator extends SystemUI {
        @Override
        public void onFingerprintAuthenticated(int userId, boolean wakeAndUnlocking) {
            if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
                if (mUpdateMonitor.isUnlockingWithFingerprintAllowed()) {
                    mStatusBarKeyguardViewManager.notifyKeyguardAuthenticated();
                }
            } else {
                if (wakeAndUnlocking) {
                    mWakeAndUnlocking = true;
+6 −0
Original line number Diff line number Diff line
@@ -651,6 +651,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL

        @Override
        public void onFingerprintHelp(int msgId, String helpString) {
            if (!KeyguardUpdateMonitor.getInstance(mContext).isUnlockingWithFingerprintAllowed()) {
                return;
            }
            mLockIcon.setTransientFpError(true);
            mIndicationController.showTransientIndication(helpString,
                    getResources().getColor(R.color.system_warning_color, null));
@@ -660,6 +663,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL

        @Override
        public void onFingerprintError(int msgId, String errString) {
            if (!KeyguardUpdateMonitor.getInstance(mContext).isUnlockingWithFingerprintAllowed()) {
                return;
            }
            // TODO: Go to bouncer if this is "too many attempts" (lockout) error.
            mIndicationController.showTransientIndication(errString,
                    getResources().getColor(R.color.system_warning_color, null));
+4 −3
Original line number Diff line number Diff line
@@ -224,13 +224,14 @@ public class LockIcon extends KeyguardAffordanceView {
    }

    private int getState() {
        boolean fingerprintRunning =
                KeyguardUpdateMonitor.getInstance(mContext).isFingerprintDetectionRunning();
        KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
        boolean fingerprintRunning = updateMonitor.isFingerprintDetectionRunning();
        boolean unlockingAllowed = updateMonitor.isUnlockingWithFingerprintAllowed();
        if (mUnlockMethodCache.canSkipBouncer()) {
            return STATE_LOCK_OPEN;
        } else if (mTransientFpError) {
            return STATE_FINGERPRINT_ERROR;
        } else if (fingerprintRunning) {
        } else if (fingerprintRunning && unlockingAllowed) {
            return STATE_FINGERPRINT;
        } else if (mUnlockMethodCache.isFaceUnlockRunning()) {
            return STATE_FACE_UNLOCK;
+1 −0
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ public class StatusBarKeyguardViewManager {
            } else {
                showBouncerOrKeyguard();
            }
            KeyguardUpdateMonitor.getInstance(mContext).sendKeyguardReset();
            updateStates();
        }
    }
Loading