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
This commit is contained in:
Jorim Jaggi
2015-04-28 13:45:11 -07:00
parent 27267d6869
commit ea65706d89
2 changed files with 20 additions and 11 deletions

View 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();
}
/**

View 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)