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

Commit ea65706d authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Only listen for fingerprint if needed.

Clean up fingerprint listening lifecycle. Only listen for fingerprint
if both screen is turned on and Keyguard is actually showing
(not occluded).

Change-Id: I169ce9df308b96487ed9dc5c8ad8f1c301f2ef93
parent 27267d68
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -669,7 +669,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                cb.onScreenTurnedOn();
            }
        }
        startListeningForFingerprint();
        updateFingerprintListeningState();
    }

    protected void handleScreenTurnedOff(int arg1) {
@@ -681,7 +681,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                cb.onScreenTurnedOff(arg1);
            }
        }
        stopListeningForFingerprint();
        updateFingerprintListeningState();
    }

    /**
@@ -754,14 +754,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHING,
                                    newUserId, 0, reply));
                            mSwitchingUser = true;
                            stopListeningForFingerprint();
                            updateFingerprintListeningState();
                        }
                        @Override
                        public void onUserSwitchComplete(int newUserId) throws RemoteException {
                            mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCH_COMPLETE,
                                    newUserId, 0));
                            mSwitchingUser = false;
                            startListeningForFingerprint();
                            updateFingerprintListeningState();
                        }
                        @Override
                        public void onForegroundProfileSwitch(int newProfileId) {
@@ -777,8 +777,21 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        trustManager.registerTrustListener(this);

        mFpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
        updateFingerprintListeningState();
    }

    private void updateFingerprintListeningState() {
        boolean shouldListenForFingerprint = shouldListenForFingerprint();
        if (mFingerprintDetectionRunning && !shouldListenForFingerprint) {
            stopListeningForFingerprint();
        } else if (!mFingerprintDetectionRunning && shouldListenForFingerprint) {
            startListeningForFingerprint();
        }
    }

    private boolean shouldListenForFingerprint() {
        return mScreenOn && mKeyguardIsVisible && !mSwitchingUser;
    }

    private void startListeningForFingerprint() {
        if (DEBUG) Log.v(TAG, "startListeningForFingerprint()");
@@ -794,7 +807,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        }
    }

    public void stopListeningForFingerprint() {
    private void stopListeningForFingerprint() {
        if (DEBUG) Log.v(TAG, "stopListeningForFingerprint()");
        if (isFingerprintDetectionRunning()) {
            mFingerprintCancelSignal.cancel();
@@ -1052,6 +1065,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
                cb.onKeyguardVisibilityChangedRaw(isShowing);
            }
        }
        updateFingerprintListeningState();
    }

    /**
+0 −5
Original line number Diff line number Diff line
@@ -1393,14 +1393,9 @@ public class KeyguardViewMediator extends SystemUI {
            updateActivityLockScreenState();
            adjustStatusBarLocked();
            sendUserPresentBroadcast();
            maybeStopListeningForFingerprint();
        }
    }

    private void maybeStopListeningForFingerprint() {
        mUpdateMonitor.stopListeningForFingerprint();
    }

    private void adjustStatusBarLocked() {
        if (mStatusBarManager == null) {
            mStatusBarManager = (StatusBarManager)