Merge "FP won't wake device if daemon dies" into oc-dev

am: e3d3ffcb19

Change-Id: I66737d8a07f8147a5929559f79cfa6d8a4780881
This commit is contained in:
Kevin Chyn
2017-04-28 03:48:08 +00:00
committed by android-build-merger

View File

@@ -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();