From 8e056115eead7040584eda8c78b069998f0a9f2b Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Wed, 8 Apr 2015 22:30:18 -0700 Subject: [PATCH] Clean up FingerprintManager API and make it public. Change-Id: Ia5f36857da27da5c3a942350b7f772d237a50bc2 --- .../android/settings/FingerprintEnroll.java | 2 +- .../android/settings/FingerprintSettings.java | 48 ++++++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/FingerprintEnroll.java b/src/com/android/settings/FingerprintEnroll.java index 96e612b6b32..a6424e56ff7 100644 --- a/src/com/android/settings/FingerprintEnroll.java +++ b/src/com/android/settings/FingerprintEnroll.java @@ -254,7 +254,7 @@ public class FingerprintEnroll extends SettingsActivity { case EnrollingStart: mEnrollmentSteps = -1; long challenge = 0x12345; // TODO: get from keyguard confirmation - mFingerprintManager.enroll(challenge, mEnrollmentCallback, mEnrollmentCancel,0); + mFingerprintManager.enroll(challenge, mEnrollmentCancel, mEnrollmentCallback, 0); mProgressBar.setProgress(0); mEnrolling = true; startFingerprintAnimator(); // XXX hack - this should follow fingerprint detection diff --git a/src/com/android/settings/FingerprintSettings.java b/src/com/android/settings/FingerprintSettings.java index c134cfbbfad..b4d6a4f783d 100644 --- a/src/com/android/settings/FingerprintSettings.java +++ b/src/com/android/settings/FingerprintSettings.java @@ -24,6 +24,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.os.CancellationSignal; import android.os.Handler; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; @@ -92,8 +93,10 @@ public class FingerprintSettings extends SettingsActivity { private FingerprintManager mFingerprintManager; private EditText mDialogTextField; private PreferenceGroup mManageCategory; + private CancellationSignal mFingerprintCancel; + private int mMaxFingerprintAttempts; + private AuthenticationCallback mAuthCallback = new AuthenticationCallback() { - int mAttempts; @Override public void onAuthenticationSucceeded(AuthenticationResult result) { mHandler.obtainMessage(MSG_HIGHLIGHT_FINGERPRINT_ITEM, @@ -101,20 +104,16 @@ public class FingerprintSettings extends SettingsActivity { retryFingerprint(true); } + public void onAuthenticationFailed() { + retryFingerprint(true); + }; + @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT); - retryFingerprint(false); - } - - private void retryFingerprint(boolean resetAttempts) { - if (resetAttempts) { - mAttempts = 0; + if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) { + retryFingerprint(false); } - if (mAttempts < MAX_RETRY_ATTEMPTS) { - mFingerprintManager.authenticate(null, mAuthCallback, null, 0); - } - mAttempts++; } @Override @@ -148,6 +147,24 @@ public class FingerprintSettings extends SettingsActivity { }; }; + private void stopFingerprint() { + if (mFingerprintCancel != null) { + mFingerprintCancel.cancel(); + mFingerprintCancel = null; + } + } + + private void retryFingerprint(boolean resetAttempts) { + if (resetAttempts) { + mMaxFingerprintAttempts = 0; + } + if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS) { + mFingerprintCancel = new CancellationSignal(); + mFingerprintManager.authenticate(null, mFingerprintCancel, mAuthCallback, 0); + } + mMaxFingerprintAttempts++; + } + @Override protected int getMetricsCategory() { return MetricsLogger.FINGERPRINT; @@ -158,7 +175,6 @@ public class FingerprintSettings extends SettingsActivity { super.onCreate(savedInstanceState); mFingerprintManager = (FingerprintManager) getActivity().getSystemService( Context.FINGERPRINT_SERVICE); - mFingerprintManager.authenticate(null, mAuthCallback, null, 0); } protected void removeFingerprintPreference(int fingerprintId) { @@ -252,6 +268,13 @@ public class FingerprintSettings extends SettingsActivity { // Make sure we reload the preference hierarchy since fingerprints may be added, // deleted or renamed. createPreferenceHierarchy(); + retryFingerprint(true); + } + + @Override + public void onPause() { + super.onPause(); + stopFingerprint(); } @Override @@ -260,6 +283,7 @@ public class FingerprintSettings extends SettingsActivity { if (KEY_FINGERPRINT_ADD.equals(key)) { Intent intent = new Intent(); intent.setClassName("com.android.settings", FingerprintEnroll.class.getName()); + stopFingerprint(); startActivityForResult(intent, ADD_FINGERPRINT_REQUEST); } else if (pref instanceof FingerprintPreference) { FingerprintPreference fpref = (FingerprintPreference) pref;