OSDN Git Service

Only listen for fingerprint if needed.
authorJorim Jaggi <jjaggi@google.com>
Tue, 28 Apr 2015 20:45:11 +0000 (13:45 -0700)
committerJorim Jaggi <jjaggi@google.com>
Tue, 28 Apr 2015 20:46:37 +0000 (13:46 -0700)
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

packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java

index 1eec532..c55dd4b 100644 (file)
@@ -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,7 +777,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
         trustManager.registerTrustListener(this);
 
         mFpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
-        startListeningForFingerprint();
+        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() {
@@ -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();
     }
 
     /**
index b828e78..81068a0 100644 (file)
@@ -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)