Merge "FP won't wake device if daemon dies" into oc-dev
am: e3d3ffcb19
Change-Id: I66737d8a07f8147a5929559f79cfa6d8a4780881
This commit is contained in:
@@ -197,6 +197,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
private int mFingerprintRunningState = FINGERPRINT_STATE_STOPPED;
|
||||
private LockPatternUtils mLockPatternUtils;
|
||||
|
||||
// If FP daemon dies, keyguard should retry after a short delay
|
||||
private int mHardwareUnavailableRetryCount = 0;
|
||||
private static final int HW_UNAVAILABLE_TIMEOUT = 3000; // ms
|
||||
private static final int HW_UNAVAILABLE_RETRY_MAX = 3;
|
||||
|
||||
private final Handler mHandler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
@@ -471,6 +476,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
}
|
||||
|
||||
private Runnable mRetryFingerprintAuthentication = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Log.w(TAG, "Retrying fingerprint after HW unavailable, attempt " +
|
||||
mHardwareUnavailableRetryCount);
|
||||
updateFingerprintListeningState();
|
||||
}
|
||||
};
|
||||
|
||||
private void handleFingerprintError(int msgId, String errString) {
|
||||
if (msgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED
|
||||
&& mFingerprintRunningState == FINGERPRINT_STATE_CANCELLING_RESTARTING) {
|
||||
@@ -479,6 +493,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
} else {
|
||||
setFingerprintRunningState(FINGERPRINT_STATE_STOPPED);
|
||||
}
|
||||
|
||||
if (msgId == FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE) {
|
||||
if (mHardwareUnavailableRetryCount < HW_UNAVAILABLE_RETRY_MAX) {
|
||||
mHardwareUnavailableRetryCount++;
|
||||
mHandler.removeCallbacks(mRetryFingerprintAuthentication);
|
||||
mHandler.postDelayed(mRetryFingerprintAuthentication, HW_UNAVAILABLE_TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < mCallbacks.size(); i++) {
|
||||
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
|
||||
if (cb != null) {
|
||||
@@ -940,6 +963,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
|
||||
private void handleScreenTurnedOff() {
|
||||
mHardwareUnavailableRetryCount = 0;
|
||||
final int count = mCallbacks.size();
|
||||
for (int i = 0; i < count; i++) {
|
||||
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
|
||||
@@ -1072,6 +1096,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
|
||||
private void updateFingerprintListeningState() {
|
||||
mHandler.removeCallbacks(mRetryFingerprintAuthentication);
|
||||
boolean shouldListenForFingerprint = shouldListenForFingerprint();
|
||||
if (mFingerprintRunningState == FINGERPRINT_STATE_RUNNING && !shouldListenForFingerprint) {
|
||||
stopListeningForFingerprint();
|
||||
|
||||
Reference in New Issue
Block a user