diff options
| -rw-r--r-- | core/java/android/hardware/fingerprint/FingerprintManager.java | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 6df2764d3f8b..2e4063b6dec1 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -114,6 +114,21 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing */ public static final int SENSOR_ID_ANY = -1; + private static class RemoveTracker { + static final int REMOVE_SINGLE = 1; + static final int REMOVE_ALL = 2; + @IntDef({REMOVE_SINGLE, REMOVE_ALL}) + @interface RemoveRequest {} + + final @RemoveRequest int mRemoveRequest; + @Nullable final Fingerprint mSingleFingerprint; + + RemoveTracker(@RemoveRequest int request, @Nullable Fingerprint fingerprint) { + mRemoveRequest = request; + mSingleFingerprint = fingerprint; + } + } + private IFingerprintService mService; private Context mContext; private IBinder mToken = new Binder(); @@ -123,10 +138,9 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing private RemovalCallback mRemovalCallback; private GenerateChallengeCallback mGenerateChallengeCallback; private CryptoObject mCryptoObject; - private Fingerprint mRemovalFingerprint; + @Nullable private RemoveTracker mRemoveTracker; private Handler mHandler; - /** * Retrieves a list of properties for all fingerprint sensors on the device. * @hide @@ -735,7 +749,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing public void remove(Fingerprint fp, int userId, RemovalCallback callback) { if (mService != null) try { mRemovalCallback = callback; - mRemovalFingerprint = fp; + mRemoveTracker = new RemoveTracker(RemoveTracker.REMOVE_SINGLE, fp); mService.remove(mToken, fp.getBiometricId(), userId, mServiceReceiver, mContext.getOpPackageName()); } catch (RemoteException e) { @@ -752,6 +766,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing if (mService != null) { try { mRemovalCallback = callback; + mRemoveTracker = new RemoveTracker(RemoveTracker.REMOVE_ALL, null /* fp */); mService.removeAll(mToken, userId, mServiceReceiver, mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -1055,16 +1070,29 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing if (mRemovalCallback == null) { return; } - if (fingerprint == null) { - Slog.e(TAG, "Received MSG_REMOVED, but fingerprint is null"); + + if (mRemoveTracker == null) { + Slog.w(TAG, "Removal tracker is null"); return; } - int fingerId = fingerprint.getBiometricId(); - int reqFingerId = mRemovalFingerprint.getBiometricId(); - if (reqFingerId != 0 && fingerId != 0 && fingerId != reqFingerId) { - Slog.w(TAG, "Finger id didn't match: " + fingerId + " != " + reqFingerId); - return; + if (mRemoveTracker.mRemoveRequest == RemoveTracker.REMOVE_SINGLE) { + if (fingerprint == null) { + Slog.e(TAG, "Received MSG_REMOVED, but fingerprint is null"); + return; + } + + if (mRemoveTracker.mSingleFingerprint == null) { + Slog.e(TAG, "Missing fingerprint"); + return; + } + + final int fingerId = fingerprint.getBiometricId(); + int reqFingerId = mRemoveTracker.mSingleFingerprint.getBiometricId(); + if (reqFingerId != 0 && fingerId != 0 && fingerId != reqFingerId) { + Slog.w(TAG, "Finger id didn't match: " + fingerId + " != " + reqFingerId); + return; + } } mRemovalCallback.onRemovalSucceeded(fingerprint, remaining); @@ -1121,7 +1149,9 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing mAuthenticationCallback.onAuthenticationError(clientErrMsgId, getErrorString(mContext, errMsgId, vendorCode)); } else if (mRemovalCallback != null) { - mRemovalCallback.onRemovalError(mRemovalFingerprint, clientErrMsgId, + final Fingerprint fp = mRemoveTracker != null + ? mRemoveTracker.mSingleFingerprint : null; + mRemovalCallback.onRemovalError(fp, clientErrMsgId, getErrorString(mContext, errMsgId, vendorCode)); } } |