Update and cleanup FingerprintManager API to new spec

Fixes bug 21040383

Change-Id: Ic2b279ffad47d31a6ad3beed7b3af5ad0a61e815
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
index 2daffde..fa65afe 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
@@ -78,7 +78,7 @@
         mEnrollmentSteps = -1;
         mEnrollmentCancel = new CancellationSignal();
         getActivity().getSystemService(FingerprintManager.class).enroll(mToken, mEnrollmentCancel,
-                mEnrollmentCallback, 0);
+                0 /* flags */, mEnrollmentCallback);
         mEnrolling = true;
     }
 
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index a0ccb24..5cbab66 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -117,6 +117,8 @@
         private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
         private static final int MSG_FINGER_AUTH_SUCCESS = 1001;
         private static final int MSG_FINGER_AUTH_FAIL = 1002;
+        private static final int MSG_FINGER_AUTH_ERROR = 1003;
+        private static final int MSG_FINGER_AUTH_HELP = 1004;
 
         private static final int CONFIRM_REQUEST = 101;
         private static final int CHOOSE_LOCK_GENERIC_REQUEST = 102;
@@ -146,22 +148,14 @@
 
             @Override
             public void onAuthenticationError(int errMsgId, CharSequence errString) {
-                // get activity will be null on a screen rotation
-                final Activity activity = getActivity();
-                if (activity != null) {
-                    Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
-                }
-                if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
-                    retryFingerprint(false);
-                }
+                mHandler.obtainMessage(MSG_FINGER_AUTH_ERROR, errMsgId, 0, errString)
+                        .sendToTarget();
             }
 
             @Override
             public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
-                final Activity activity = getActivity();
-                if (activity != null) {
-                    Toast.makeText(activity, helpString, Toast.LENGTH_SHORT);
-                }
+                mHandler.obtainMessage(MSG_FINGER_AUTH_HELP, helpMsgId, 0, helpString)
+                        .sendToTarget();
             }
         };
         private RemovalCallback mRemoveCallback = new RemovalCallback() {
@@ -187,12 +181,36 @@
                         removeFingerprintPreference(msg.arg1);
                     break;
                     case MSG_FINGER_AUTH_SUCCESS:
+                        mFingerprintCancel = null;
                         highlightFingerprintItem(msg.arg1);
                         retryFingerprint(true);
                     break;
                     case MSG_FINGER_AUTH_FAIL:
+                        mFingerprintCancel = null;
                         retryFingerprint(true);
                     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);
+                        }
+                    }
+                    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);
+                        }
+                    }
+                    break;
                 }
             };
         };
@@ -208,9 +226,10 @@
             if (resetAttempts) {
                 mMaxFingerprintAttempts = 0;
             }
-            if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS) {
+            if (mMaxFingerprintAttempts < MAX_RETRY_ATTEMPTS && mFingerprintCancel == null) {
                 mFingerprintCancel = new CancellationSignal();
-                mFingerprintManager.authenticate(null, mFingerprintCancel, mAuthCallback, 0);
+                mFingerprintManager.authenticate(null, mFingerprintCancel, 0 /* flags */,
+                        mAuthCallback, null);
             }
             mMaxFingerprintAttempts++;
         }
@@ -351,7 +370,6 @@
                 intent.setClassName("com.android.settings",
                         FingerprintEnrollEnrolling.class.getName());
                 intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
-                stopFingerprint();
                 startActivityForResult(intent, ADD_FINGERPRINT_REQUEST);
             } else if (pref instanceof FingerprintPreference) {
                 FingerprintPreference fpref = (FingerprintPreference) pref;
diff --git a/src/com/android/settings/fingerprint/FingerprintUiHelper.java b/src/com/android/settings/fingerprint/FingerprintUiHelper.java
index 6ae76aa..10c0fe6 100644
--- a/src/com/android/settings/fingerprint/FingerprintUiHelper.java
+++ b/src/com/android/settings/fingerprint/FingerprintUiHelper.java
@@ -51,7 +51,7 @@
     public void startListening() {
         if (mFingerprintManager.getEnrolledFingerprints().size() > 0) {
             mCancellationSignal = new CancellationSignal();
-            mFingerprintManager.authenticate(null, mCancellationSignal, this, 0 /* flags */);
+            mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, this, null);
             setFingerprintIconVisibility(true);
             mIcon.setImageResource(R.drawable.ic_fingerprint);
         }