Loading src/com/android/settings/fingerprint/FingerprintSettings.java +46 −30 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } retryFingerprint(); // start again } if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS && mFingerprintCancel == null) { private void retryFingerprint() { if (!mInFingerprintLockout) { mFingerprintCancel = new CancellationSignal(); mFingerprintManager.authenticate(null, mFingerprintCancel, 0 /* flags */, mAuthCallback, null); } mMaxFingerprintAttempts++; } @Override Loading Loading @@ -361,7 +369,7 @@ public class FingerprintSettings extends SubSettings { private void updatePreferences() { createPreferenceHierarchy(); retryFingerprint(true); retryFingerprint(); } @Override Loading Loading @@ -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; Loading Loading
src/com/android/settings/fingerprint/FingerprintSettings.java +46 −30 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } retryFingerprint(); // start again } if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS && mFingerprintCancel == null) { private void retryFingerprint() { if (!mInFingerprintLockout) { mFingerprintCancel = new CancellationSignal(); mFingerprintManager.authenticate(null, mFingerprintCancel, 0 /* flags */, mAuthCallback, null); } mMaxFingerprintAttempts++; } @Override Loading Loading @@ -361,7 +369,7 @@ public class FingerprintSettings extends SubSettings { private void updatePreferences() { createPreferenceHierarchy(); retryFingerprint(true); retryFingerprint(); } @Override Loading Loading @@ -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; Loading