Clean up FingerprintManager API and make it public.

Change-Id: Ia5f36857da27da5c3a942350b7f772d237a50bc2
This commit is contained in:
Jim Miller
2015-04-08 22:30:18 -07:00
parent de6fe895ab
commit 8e056115ee
2 changed files with 37 additions and 13 deletions

View File

@@ -254,7 +254,7 @@ public class FingerprintEnroll extends SettingsActivity {
case EnrollingStart: case EnrollingStart:
mEnrollmentSteps = -1; mEnrollmentSteps = -1;
long challenge = 0x12345; // TODO: get from keyguard confirmation long challenge = 0x12345; // TODO: get from keyguard confirmation
mFingerprintManager.enroll(challenge, mEnrollmentCallback, mEnrollmentCancel,0); mFingerprintManager.enroll(challenge, mEnrollmentCancel, mEnrollmentCallback, 0);
mProgressBar.setProgress(0); mProgressBar.setProgress(0);
mEnrolling = true; mEnrolling = true;
startFingerprintAnimator(); // XXX hack - this should follow fingerprint detection startFingerprintAnimator(); // XXX hack - this should follow fingerprint detection

View File

@@ -24,6 +24,7 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler; import android.os.Handler;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceChangeListener;
@@ -92,8 +93,10 @@ public class FingerprintSettings extends SettingsActivity {
private FingerprintManager mFingerprintManager; private FingerprintManager mFingerprintManager;
private EditText mDialogTextField; private EditText mDialogTextField;
private PreferenceGroup mManageCategory; private PreferenceGroup mManageCategory;
private CancellationSignal mFingerprintCancel;
private int mMaxFingerprintAttempts;
private AuthenticationCallback mAuthCallback = new AuthenticationCallback() { private AuthenticationCallback mAuthCallback = new AuthenticationCallback() {
int mAttempts;
@Override @Override
public void onAuthenticationSucceeded(AuthenticationResult result) { public void onAuthenticationSucceeded(AuthenticationResult result) {
mHandler.obtainMessage(MSG_HIGHLIGHT_FINGERPRINT_ITEM, mHandler.obtainMessage(MSG_HIGHLIGHT_FINGERPRINT_ITEM,
@@ -101,20 +104,16 @@ public class FingerprintSettings extends SettingsActivity {
retryFingerprint(true); retryFingerprint(true);
} }
public void onAuthenticationFailed() {
retryFingerprint(true);
};
@Override @Override
public void onAuthenticationError(int errMsgId, CharSequence errString) { public void onAuthenticationError(int errMsgId, CharSequence errString) {
Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT); Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT);
if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
retryFingerprint(false); retryFingerprint(false);
} }
private void retryFingerprint(boolean resetAttempts) {
if (resetAttempts) {
mAttempts = 0;
}
if (mAttempts < MAX_RETRY_ATTEMPTS) {
mFingerprintManager.authenticate(null, mAuthCallback, null, 0);
}
mAttempts++;
} }
@Override @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 @Override
protected int getMetricsCategory() { protected int getMetricsCategory() {
return MetricsLogger.FINGERPRINT; return MetricsLogger.FINGERPRINT;
@@ -158,7 +175,6 @@ public class FingerprintSettings extends SettingsActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mFingerprintManager = (FingerprintManager) getActivity().getSystemService( mFingerprintManager = (FingerprintManager) getActivity().getSystemService(
Context.FINGERPRINT_SERVICE); Context.FINGERPRINT_SERVICE);
mFingerprintManager.authenticate(null, mAuthCallback, null, 0);
} }
protected void removeFingerprintPreference(int fingerprintId) { 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, // Make sure we reload the preference hierarchy since fingerprints may be added,
// deleted or renamed. // deleted or renamed.
createPreferenceHierarchy(); createPreferenceHierarchy();
retryFingerprint(true);
}
@Override
public void onPause() {
super.onPause();
stopFingerprint();
} }
@Override @Override
@@ -260,6 +283,7 @@ public class FingerprintSettings extends SettingsActivity {
if (KEY_FINGERPRINT_ADD.equals(key)) { if (KEY_FINGERPRINT_ADD.equals(key)) {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setClassName("com.android.settings", FingerprintEnroll.class.getName()); intent.setClassName("com.android.settings", FingerprintEnroll.class.getName());
stopFingerprint();
startActivityForResult(intent, ADD_FINGERPRINT_REQUEST); startActivityForResult(intent, ADD_FINGERPRINT_REQUEST);
} else if (pref instanceof FingerprintPreference) { } else if (pref instanceof FingerprintPreference) {
FingerprintPreference fpref = (FingerprintPreference) pref; FingerprintPreference fpref = (FingerprintPreference) pref;