diff options
author | Jim Miller <jaggies@google.com> | 2015-07-17 21:15:57 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-07-17 21:15:57 +0000 |
commit | 4b3bc882ad2824a1f7d4362d8757ddb9c7ba21ce (patch) | |
tree | f7b486d719be914ca24859bc054858ee9cf72bc4 | |
parent | 8560ae2f8752f611ffee651289519a7993b3e500 (diff) | |
parent | bf9a425d5c3f61f02133084d11ab8481b0f53102 (diff) | |
download | packages_apps_Settings-4b3bc882ad2824a1f7d4362d8757ddb9c7ba21ce.zip packages_apps_Settings-4b3bc882ad2824a1f7d4362d8757ddb9c7ba21ce.tar.gz packages_apps_Settings-4b3bc882ad2824a1f7d4362d8757ddb9c7ba21ce.tar.bz2 |
am bf9a425d: Merge "Simplify FingerprintSettings" into mnc-dev
* commit 'bf9a425d5c3f61f02133084d11ab8481b0f53102':
Simplify FingerprintSettings
-rw-r--r-- | src/com/android/settings/fingerprint/FingerprintSettings.java | 76 |
1 files changed, 46 insertions, 30 deletions
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java index b070a0a..89c6e1b 100644 --- a/src/com/android/settings/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/fingerprint/FingerprintSettings.java @@ -81,6 +81,7 @@ public class FingerprintSettings extends SubSettings { * result. */ static final int RESULT_FINISHED = RESULT_FIRST_USER; + private static final long LOCKOUT_DURATION = 30000; // time we have to wait for fp to reset, ms @Override public Intent getIntent() { @@ -129,7 +130,7 @@ public class FingerprintSettings extends SubSettings { private FingerprintManager mFingerprintManager; private CancellationSignal mFingerprintCancel; - private int mMaxFingerprintAttempts; + private boolean mInFingerprintLockout; private byte[] mToken; private boolean mLaunchedConfirm; private Drawable mHighlightDrawable; @@ -185,32 +186,16 @@ public class FingerprintSettings extends SubSettings { case MSG_FINGER_AUTH_SUCCESS: mFingerprintCancel = null; highlightFingerprintItem(msg.arg1); - retryFingerprint(true); + retryFingerprint(); break; case MSG_FINGER_AUTH_FAIL: - mFingerprintCancel = null; - retryFingerprint(true); + // No action required... fingerprint will allow up to 5 of these break; - case MSG_FINGER_AUTH_ERROR: { - mFingerprintCancel = null; - // get activity will be null on a screen rotation - final Activity activity = getActivity(); - if (activity != null) { - CharSequence errString = (CharSequence) msg.obj; - Toast.makeText(activity, errString , Toast.LENGTH_SHORT); - } - final int errMsgId = msg.arg1; - if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) { - retryFingerprint(false); - } - } + case MSG_FINGER_AUTH_ERROR: + handleError(msg.arg1 /* errMsgId */, (CharSequence) msg.obj /* errStr */ ); break; case MSG_FINGER_AUTH_HELP: { - final Activity activity = getActivity(); - if (activity != null) { - CharSequence helpString = (CharSequence) msg.obj; - Toast.makeText(activity, helpString , Toast.LENGTH_SHORT); - } + // Not used } break; } @@ -218,22 +203,45 @@ public class FingerprintSettings extends SubSettings { }; private void stopFingerprint() { - if (mFingerprintCancel != null) { + if (mFingerprintCancel != null && !mFingerprintCancel.isCanceled()) { mFingerprintCancel.cancel(); - mFingerprintCancel = null; } + mFingerprintCancel = null; } - private void retryFingerprint(boolean resetAttempts) { - if (resetAttempts) { - mMaxFingerprintAttempts = 0; + /** + * @param errMsgId + */ + protected void handleError(int errMsgId, CharSequence msg) { + mFingerprintCancel = null; + switch (errMsgId) { + case FingerprintManager.FINGERPRINT_ERROR_CANCELED: + return; // Only happens if we get preempted by another activity. Ignored. + case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT: + mInFingerprintLockout = true; + // We've been locked out. Reset after 30s. + if (!mHandler.hasCallbacks(mFingerprintLockoutReset)) { + mHandler.postDelayed(mFingerprintLockoutReset, + LOCKOUT_DURATION); + } + // Fall through to show message + default: + // Activity can be null on a screen rotation. + final Activity activity = getActivity(); + if (activity != null) { + Toast.makeText(activity, msg , Toast.LENGTH_SHORT); + } + break; } - if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS && mFingerprintCancel == null) { + retryFingerprint(); // start again + } + + private void retryFingerprint() { + if (!mInFingerprintLockout) { mFingerprintCancel = new CancellationSignal(); mFingerprintManager.authenticate(null, mFingerprintCancel, 0 /* flags */, mAuthCallback, null); } - mMaxFingerprintAttempts++; } @Override @@ -361,7 +369,7 @@ public class FingerprintSettings extends SubSettings { private void updatePreferences() { createPreferenceHierarchy(); - retryFingerprint(true); + retryFingerprint(); } @Override @@ -508,6 +516,14 @@ public class FingerprintSettings extends SubSettings { updatePreferences(); } + private final Runnable mFingerprintLockoutReset = new Runnable() { + @Override + public void run() { + mInFingerprintLockout = false; + retryFingerprint(); + } + }; + public static class RenameDeleteDialog extends DialogFragment { private Fingerprint mFp; |