diff options
| author | Vishwath Mohan <vishwath@google.com> | 2018-03-28 18:46:34 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-03-28 18:46:34 +0000 |
| commit | 86ed912f5afb6384e38d87c517ce6b25aa4466f4 (patch) | |
| tree | 56cf410c887ee605e93783c0c2209ddf9649d9d7 /core/java/android | |
| parent | 8dfb334264e53e4419103e298cb78dbd77dc619a (diff) | |
| parent | cf87df15310611ae4e5229b19c5a4942e54185b5 (diff) | |
Merge "Refactor FingerprintDialog to BiometricDialog" into pi-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/admin/DevicePolicyManager.java | 21 | ||||
| -rw-r--r-- | core/java/android/hardware/biometrics/BiometricConstants.java | 165 | ||||
| -rw-r--r-- | core/java/android/hardware/biometrics/BiometricDialog.java (renamed from core/java/android/hardware/fingerprint/FingerprintDialog.java) | 158 | ||||
| -rw-r--r-- | core/java/android/hardware/biometrics/IBiometricDialogReceiver.aidl (renamed from core/java/android/hardware/fingerprint/IFingerprintDialogReceiver.aidl) | 7 | ||||
| -rw-r--r-- | core/java/android/hardware/fingerprint/FingerprintManager.java | 57 | ||||
| -rw-r--r-- | core/java/android/hardware/fingerprint/IFingerprintService.aidl | 4 |
6 files changed, 295 insertions, 117 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 3015398e97ee..436947f3a9a5 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3742,7 +3742,7 @@ public class DevicePolicyManager { public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 1 << 4; /** - * Disable fingerprint sensor on keyguard secure screens (e.g. PIN/Pattern/Password). + * Disable fingerprint authentication on keyguard secure screens (e.g. PIN/Pattern/Password). */ public static final int KEYGUARD_DISABLE_FINGERPRINT = 1 << 5; @@ -3752,6 +3752,25 @@ public class DevicePolicyManager { public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 1 << 6; /** + * Disable face authentication on keyguard secure screens (e.g. PIN/Pattern/Password). + */ + public static final int KEYGUARD_DISABLE_FACE = 1 << 7; + + /** + * Disable iris authentication on keyguard secure screens (e.g. PIN/Pattern/Password). + */ + public static final int KEYGUARD_DISABLE_IRIS = 1 << 8; + + /** + * Disable all biometric authentication on keyguard secure screens (e.g. PIN/Pattern/Password). + */ + public static final int KEYGUARD_DISABLE_BIOMETRICS = + DevicePolicyManager.KEYGUARD_DISABLE_FACE + | DevicePolicyManager.KEYGUARD_DISABLE_IRIS + | DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT; + + + /** * Disable all current and future keyguard customizations. */ public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff; diff --git a/core/java/android/hardware/biometrics/BiometricConstants.java b/core/java/android/hardware/biometrics/BiometricConstants.java new file mode 100644 index 000000000000..a037289ad45b --- /dev/null +++ b/core/java/android/hardware/biometrics/BiometricConstants.java @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.biometrics; + + +/** + * Interface containing all of the biometric modality agnostic constants. + * @hide + */ +public interface BiometricConstants { + // + // Error messages from biometric hardware during initilization, enrollment, authentication or + // removal. + // + + /** + * The hardware is unavailable. Try again later. + */ + int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; + + /** + * Error state returned when the sensor was unable to process the current image. + */ + int BIOMETRIC_ERROR_UNABLE_TO_PROCESS = 2; + + /** + * Error state returned when the current request has been running too long. This is intended to + * prevent programs from waiting for the biometric sensor indefinitely. The timeout is platform + * and sensor-specific, but is generally on the order of 30 seconds. + */ + int BIOMETRIC_ERROR_TIMEOUT = 3; + + /** + * Error state returned for operations like enrollment; the operation cannot be completed + * because there's not enough storage remaining to complete the operation. + */ + int BIOMETRIC_ERROR_NO_SPACE = 4; + + /** + * The operation was canceled because the biometric sensor is unavailable. For example, this may + * happen when the user is switched, the device is locked or another pending operation prevents + * or disables it. + */ + int BIOMETRIC_ERROR_CANCELED = 5; + + /** + * The {@link BiometricManager#remove} call failed. Typically this will happen when the provided + * biometric id was incorrect. + * + * @hide + */ + int BIOMETRIC_ERROR_UNABLE_TO_REMOVE = 6; + + /** + * The operation was canceled because the API is locked out due to too many attempts. + * This occurs after 5 failed attempts, and lasts for 30 seconds. + */ + int BIOMETRIC_ERROR_LOCKOUT = 7; + + /** + * Hardware vendors may extend this list if there are conditions that do not fall under one of + * the above categories. Vendors are responsible for providing error strings for these errors. + * These messages are typically reserved for internal operations such as enrollment, but may be + * used to express vendor errors not otherwise covered. Applications are expected to show the + * error message string if they happen, but are advised not to rely on the message id since they + * will be device and vendor-specific + */ + int BIOMETRIC_ERROR_VENDOR = 8; + + /** + * The operation was canceled because BIOMETRIC_ERROR_LOCKOUT occurred too many times. + * Biometric authentication is disabled until the user unlocks with strong authentication + * (PIN/Pattern/Password) + */ + int BIOMETRIC_ERROR_LOCKOUT_PERMANENT = 9; + + /** + * The user canceled the operation. Upon receiving this, applications should use alternate + * authentication (e.g. a password). The application should also provide the means to return to + * biometric authentication, such as a "use <biometric>" button. + */ + int BIOMETRIC_ERROR_USER_CANCELED = 10; + + /** + * The user does not have any biometrics enrolled. + */ + int BIOMETRIC_ERROR_NO_BIOMETRICS = 11; + + /** + * The device does not have a biometric sensor. + */ + int BIOMETRIC_ERROR_HW_NOT_PRESENT = 12; + + /** + * @hide + */ + int BIOMETRIC_ERROR_VENDOR_BASE = 1000; + + // + // Image acquisition messages. + // + + /** + * The image acquired was good. + */ + int BIOMETRIC_ACQUIRED_GOOD = 0; + + /** + * Only a partial biometric image was detected. During enrollment, the user should be informed + * on what needs to happen to resolve this problem, e.g. "press firmly on sensor." (for + * fingerprint) + */ + int BIOMETRIC_ACQUIRED_PARTIAL = 1; + + /** + * The biometric image was too noisy to process due to a detected condition or a possibly dirty + * sensor (See {@link #BIOMETRIC_ACQUIRED_IMAGER_DIRTY}). + */ + int BIOMETRIC_ACQUIRED_INSUFFICIENT = 2; + + /** + * The biometric image was too noisy due to suspected or detected dirt on the sensor. For + * example, it's reasonable return this after multiple {@link #BIOMETRIC_ACQUIRED_INSUFFICIENT} + * or actual detection of dirt on the sensor (stuck pixels, swaths, etc.). The user is expected + * to take action to clean the sensor when this is returned. + */ + int BIOMETRIC_ACQUIRED_IMAGER_DIRTY = 3; + + /** + * The biometric image was unreadable due to lack of motion. + */ + int BIOMETRIC_ACQUIRED_TOO_SLOW = 4; + + /** + * The biometric image was incomplete due to quick motion. For example, this could also happen + * if the user moved during acquisition. The user should be asked to repeat the operation more + * slowly. + */ + int BIOMETRIC_ACQUIRED_TOO_FAST = 5; + + /** + * Hardware vendors may extend this list if there are conditions that do not fall under one of + * the above categories. Vendors are responsible for providing error strings for these errors. + * @hide + */ + int BIOMETRIC_ACQUIRED_VENDOR = 6; + /** + * @hide + */ + int BIOMETRICT_ACQUIRED_VENDOR_BASE = 1000; +} diff --git a/core/java/android/hardware/fingerprint/FingerprintDialog.java b/core/java/android/hardware/biometrics/BiometricDialog.java index 13b706494db7..dd848a340dbc 100644 --- a/core/java/android/hardware/fingerprint/FingerprintDialog.java +++ b/core/java/android/hardware/biometrics/BiometricDialog.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package android.hardware.fingerprint; +package android.hardware.biometrics; -import static android.Manifest.permission.USE_FINGERPRINT; +import static android.Manifest.permission.USE_BIOMETRIC; import android.annotation.CallbackExecutor; import android.annotation.NonNull; @@ -24,10 +24,7 @@ import android.annotation.RequiresPermission; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageManager; -import android.hardware.biometrics.BiometricAuthenticator; -import android.hardware.biometrics.BiometricFingerprintConstants; -import android.hardware.biometrics.CryptoObject; -import android.hardware.fingerprint.IFingerprintDialogReceiver; +import android.hardware.fingerprint.FingerprintManager; import android.os.Bundle; import android.os.CancellationSignal; import android.text.TextUtils; @@ -39,9 +36,9 @@ import javax.crypto.Cipher; import javax.crypto.Mac; /** - * A class that manages a system-provided fingerprint dialog. + * A class that manages a system-provided biometric dialog. */ -public class FingerprintDialog implements BiometricAuthenticator, BiometricFingerprintConstants { +public class BiometricDialog implements BiometricAuthenticator, BiometricConstants { /** * @hide @@ -97,18 +94,21 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** - * A builder that collects arguments, to be shown on the system-provided fingerprint dialog. + * A builder that collects arguments to be shown on the system-provided biometric dialog. **/ public static class Builder { - private final Bundle bundle; - private ButtonInfo positiveButtonInfo; - private ButtonInfo negativeButtonInfo; + private final Bundle mBundle; + private ButtonInfo mPositiveButtonInfo; + private ButtonInfo mNegativeButtonInfo; + private Context mContext; /** - * Creates a builder for a fingerprint dialog. + * Creates a builder for a biometric dialog. + * @param context */ - public Builder() { - bundle = new Bundle(); + public Builder(Context context) { + mBundle = new Bundle(); + mContext = context; } /** @@ -117,7 +117,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge * @return */ public Builder setTitle(@NonNull CharSequence title) { - bundle.putCharSequence(KEY_TITLE, title); + mBundle.putCharSequence(KEY_TITLE, title); return this; } @@ -127,7 +127,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge * @return */ public Builder setSubtitle(@NonNull CharSequence subtitle) { - bundle.putCharSequence(KEY_SUBTITLE, subtitle); + mBundle.putCharSequence(KEY_SUBTITLE, subtitle); return this; } @@ -137,7 +137,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge * @return */ public Builder setDescription(@NonNull CharSequence description) { - bundle.putCharSequence(KEY_DESCRIPTION, description); + mBundle.putCharSequence(KEY_DESCRIPTION, description); return this; } @@ -160,8 +160,8 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge if (listener == null) { throw new IllegalArgumentException("Listener must not be null"); } - bundle.putCharSequence(KEY_POSITIVE_TEXT, text); - positiveButtonInfo = new ButtonInfo(executor, listener); + mBundle.putCharSequence(KEY_POSITIVE_TEXT, text); + mPositiveButtonInfo = new ButtonInfo(executor, listener); return this; } @@ -184,27 +184,26 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge if (listener == null) { throw new IllegalArgumentException("Listener must not be null"); } - bundle.putCharSequence(KEY_NEGATIVE_TEXT, text); - negativeButtonInfo = new ButtonInfo(executor, listener); + mBundle.putCharSequence(KEY_NEGATIVE_TEXT, text); + mNegativeButtonInfo = new ButtonInfo(executor, listener); return this; } /** - * Creates a {@link FingerprintDialog} with the arguments supplied to this builder. - * @param context - * @return a {@link FingerprintDialog} + * Creates a {@link BiometricDialog}. + * @return a {@link BiometricDialog} * @throws IllegalArgumentException if any of the required fields are not set. */ - public FingerprintDialog build(Context context) { - final CharSequence title = bundle.getCharSequence(KEY_TITLE); - final CharSequence negative = bundle.getCharSequence(KEY_NEGATIVE_TEXT); + public BiometricDialog build() { + final CharSequence title = mBundle.getCharSequence(KEY_TITLE); + final CharSequence negative = mBundle.getCharSequence(KEY_NEGATIVE_TEXT); if (TextUtils.isEmpty(title)) { throw new IllegalArgumentException("Title must be set and non-empty"); } else if (TextUtils.isEmpty(negative)) { throw new IllegalArgumentException("Negative text must be set and non-empty"); } - return new FingerprintDialog(context, bundle, positiveButtonInfo, negativeButtonInfo); + return new BiometricDialog(mContext, mBundle, mPositiveButtonInfo, mNegativeButtonInfo); } } @@ -214,7 +213,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge private ButtonInfo mPositiveButtonInfo; private ButtonInfo mNegativeButtonInfo; - IFingerprintDialogReceiver mDialogReceiver = new IFingerprintDialogReceiver.Stub() { + IBiometricDialogReceiver mDialogReceiver = new IBiometricDialogReceiver.Stub() { @Override public void onDialogDismissed(int reason) { // Check the reason and invoke OnClickListener(s) if necessary @@ -230,7 +229,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } }; - private FingerprintDialog(Context context, Bundle bundle, + private BiometricDialog(Context context, Bundle bundle, ButtonInfo positiveButtonInfo, ButtonInfo negativeButtonInfo) { mBundle = bundle; mPositiveButtonInfo = positiveButtonInfo; @@ -240,8 +239,8 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** - * A wrapper class for the crypto objects supported by FingerprintManager. Currently the - * framework supports {@link Signature}, {@link Cipher} and {@link Mac} objects. + * A wrapper class for the crypto objects supported by BiometricDialog. Currently the framework + * supports {@link Signature}, {@link Cipher} and {@link Mac} objects. */ public static final class CryptoObject extends android.hardware.biometrics.CryptoObject { public CryptoObject(@NonNull Signature signature) { @@ -282,9 +281,8 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** - * Container for callback data from {@link #authenticate( - * CancellationSignal, Executor, AuthenticationCallback)} and - * {@link #authenticate(CryptoObject, CancellationSignal, Executor, + * Container for callback data from {@link #authenticate( CancellationSignal, Executor, + * AuthenticationCallback)} and {@link #authenticate(CryptoObject, CancellationSignal, Executor, * AuthenticationCallback)} */ public static class AuthenticationResult extends BiometricAuthenticator.AuthenticationResult { @@ -301,8 +299,8 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** * Obtain the crypto object associated with this transaction - * @return crypto object provided to {@link #authenticate( - * CryptoObject, CancellationSignal, Executor, AuthenticationCallback)} + * @return crypto object provided to {@link #authenticate( CryptoObject, CancellationSignal, + * Executor, AuthenticationCallback)} */ public CryptoObject getCryptoObject() { return (CryptoObject) super.getCryptoObject(); @@ -310,12 +308,12 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** - * Callback structure provided to {@link FingerprintDialog#authenticate(CancellationSignal, - * Executor, AuthenticationCallback)} or {@link FingerprintDialog#authenticate(CryptoObject, + * Callback structure provided to {@link BiometricDialog#authenticate(CancellationSignal, + * Executor, AuthenticationCallback)} or {@link BiometricDialog#authenticate(CryptoObject, * CancellationSignal, Executor, AuthenticationCallback)}. Users must provide an implementation * of this for listening to authentication events. */ - public static abstract class AuthenticationCallback extends + public abstract static class AuthenticationCallback extends BiometricAuthenticator.AuthenticationCallback { /** * Called when an unrecoverable error has been encountered and the operation is complete. @@ -368,7 +366,6 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } } - /** * @param crypto Object associated with the call * @param cancel An object that can be used to cancel authentication @@ -381,7 +378,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge @NonNull CancellationSignal cancel, @NonNull @CallbackExecutor Executor executor, @NonNull BiometricAuthenticator.AuthenticationCallback callback) { - if (!(callback instanceof FingerprintDialog.AuthenticationCallback)) { + if (!(callback instanceof BiometricDialog.AuthenticationCallback)) { throw new IllegalArgumentException("Callback cannot be casted"); } authenticate(crypto, cancel, executor, (AuthenticationCallback) callback); @@ -398,30 +395,26 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge public void authenticate(@NonNull CancellationSignal cancel, @NonNull @CallbackExecutor Executor executor, @NonNull BiometricAuthenticator.AuthenticationCallback callback) { - if (!(callback instanceof FingerprintDialog.AuthenticationCallback)) { + if (!(callback instanceof BiometricDialog.AuthenticationCallback)) { throw new IllegalArgumentException("Callback cannot be casted"); } authenticate(cancel, executor, (AuthenticationCallback) callback); } - /** - * This call warms up the fingerprint hardware, displays a system-provided dialog, - * and starts scanning for a fingerprint. It terminates when - * {@link AuthenticationCallback#onAuthenticationError(int, - * CharSequence)} is called, when - * {@link AuthenticationCallback#onAuthenticationSucceeded( - * AuthenticationResult)}, or when the user dismisses the system-provided dialog, at which point - * the crypto object becomes invalid. This operation can be canceled by using the provided - * cancel object. The application will receive authentication errors through - * {@link AuthenticationCallback}, and button events through the - * corresponding callback set in {@link Builder#setNegativeButton(CharSequence, - * Executor, DialogInterface.OnClickListener)}. It is safe to reuse the - * {@link FingerprintDialog} object, and calling {@link FingerprintDialog#authenticate( - * CancellationSignal, Executor, AuthenticationCallback)} while an - * existing authentication attempt is occurring will stop the previous client and start a - * new authentication. The interrupted client will receive a cancelled notification through - * {@link AuthenticationCallback#onAuthenticationError(int, + * This call warms up the fingerprint hardware, displays a system-provided dialog, and starts + * scanning for a fingerprint. It terminates when {@link + * AuthenticationCallback#onAuthenticationError(int, CharSequence)} is called, when {@link + * AuthenticationCallback#onAuthenticationSucceeded( AuthenticationResult)}, or when the user + * dismisses the system-provided dialog, at which point the crypto object becomes invalid. This + * operation can be canceled by using the provided cancel object. The application will receive + * authentication errors through {@link AuthenticationCallback}, and button events through the + * corresponding callback set in {@link Builder#setNegativeButton(CharSequence, Executor, + * DialogInterface.OnClickListener)}. It is safe to reuse the {@link BiometricDialog} object, + * and calling {@link BiometricDialog#authenticate( CancellationSignal, Executor, + * AuthenticationCallback)} while an existing authentication attempt is occurring will stop the + * previous client and start a new authentication. The interrupted client will receive a + * cancelled notification through {@link AuthenticationCallback#onAuthenticationError(int, * CharSequence)}. * * @throws IllegalArgumentException If any of the arguments are null @@ -431,7 +424,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge * @param executor An executor to handle callback events * @param callback An object to receive authentication events */ - @RequiresPermission(USE_FINGERPRINT) + @RequiresPermission(USE_BIOMETRIC) public void authenticate(@NonNull CryptoObject crypto, @NonNull CancellationSignal cancel, @NonNull @CallbackExecutor Executor executor, @@ -444,23 +437,19 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge } /** - * This call warms up the fingerprint hardware, displays a system-provided dialog, - * and starts scanning for a fingerprint. It terminates when - * {@link AuthenticationCallback#onAuthenticationError(int, - * CharSequence)} is called, when - * {@link AuthenticationCallback#onAuthenticationSucceeded( - * AuthenticationResult)} is called, or when the user dismisses the system-provided dialog. - * This operation can be canceled by using the provided cancel object. The application will - * receive authentication errors through {@link AuthenticationCallback}, - * and button events through the corresponding callback set in - * {@link Builder#setNegativeButton(CharSequence, Executor, DialogInterface.OnClickListener)}. - * It is safe to reuse the {@link FingerprintDialog} object, and calling - * {@link FingerprintDialog#authenticate(CancellationSignal, Executor, - * AuthenticationCallback)} while an existing authentication attempt is - * occurring will stop the previous client and start a new authentication. The interrupted - * client will receive a cancelled notification through - * {@link AuthenticationCallback#onAuthenticationError(int, - * CharSequence)}. + * This call warms up the fingerprint hardware, displays a system-provided dialog, and starts + * scanning for a fingerprint. It terminates when {@link + * AuthenticationCallback#onAuthenticationError(int, CharSequence)} is called, when {@link + * AuthenticationCallback#onAuthenticationSucceeded( AuthenticationResult)} is called, or when + * the user dismisses the system-provided dialog. This operation can be canceled by using the + * provided cancel object. The application will receive authentication errors through {@link + * AuthenticationCallback}, and button events through the corresponding callback set in {@link + * Builder#setNegativeButton(CharSequence, Executor, DialogInterface.OnClickListener)}. It is + * safe to reuse the {@link BiometricDialog} object, and calling {@link + * BiometricDialog#authenticate(CancellationSignal, Executor, AuthenticationCallback)} while + * an existing authentication attempt is occurring will stop the previous client and start a new + * authentication. The interrupted client will receive a cancelled notification through {@link + * AuthenticationCallback#onAuthenticationError(int, CharSequence)}. * * @throws IllegalArgumentException If any of the arguments are null * @@ -468,7 +457,7 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge * @param executor An executor to handle callback events * @param callback An object to receive authentication events */ - @RequiresPermission(USE_FINGERPRINT) + @RequiresPermission(USE_BIOMETRIC) public void authenticate(@NonNull CancellationSignal cancel, @NonNull @CallbackExecutor Executor executor, @NonNull AuthenticationCallback callback) { @@ -481,13 +470,16 @@ public class FingerprintDialog implements BiometricAuthenticator, BiometricFinge private boolean handlePreAuthenticationErrors(AuthenticationCallback callback, Executor executor) { if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { - sendError(FINGERPRINT_ERROR_HW_NOT_PRESENT, callback, executor); + sendError(BiometricDialog.BIOMETRIC_ERROR_HW_NOT_PRESENT, callback, + executor); return true; } else if (!mFingerprintManager.isHardwareDetected()) { - sendError(FINGERPRINT_ERROR_HW_UNAVAILABLE, callback, executor); + sendError(BiometricDialog.BIOMETRIC_ERROR_HW_UNAVAILABLE, callback, + executor); return true; } else if (!mFingerprintManager.hasEnrolledFingerprints()) { - sendError(FINGERPRINT_ERROR_NO_FINGERPRINTS, callback, executor); + sendError(BiometricDialog.BIOMETRIC_ERROR_NO_BIOMETRICS, callback, + executor); return true; } return false; diff --git a/core/java/android/hardware/fingerprint/IFingerprintDialogReceiver.aidl b/core/java/android/hardware/biometrics/IBiometricDialogReceiver.aidl index 13e79741e543..e528aa710349 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintDialogReceiver.aidl +++ b/core/java/android/hardware/biometrics/IBiometricDialogReceiver.aidl @@ -13,16 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.hardware.fingerprint; +package android.hardware.biometrics; -import android.hardware.fingerprint.Fingerprint; import android.os.Bundle; import android.os.UserHandle; /** - * Communication channel from the FingerprintDialog (SysUI) back to AuthenticationClient. + * Communication channel from the BiometricDialog (SysUI) back to AuthenticationClient. * @hide */ -oneway interface IFingerprintDialogReceiver { +oneway interface IBiometricDialogReceiver { void onDialogDismissed(int reason); } diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index a19ba197ff52..5e28570c798d 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -18,6 +18,7 @@ package android.hardware.fingerprint; import static android.Manifest.permission.INTERACT_ACROSS_USERS; import static android.Manifest.permission.MANAGE_FINGERPRINT; +import static android.Manifest.permission.USE_BIOMETRIC; import static android.Manifest.permission.USE_FINGERPRINT; import android.annotation.CallbackExecutor; @@ -30,7 +31,9 @@ import android.app.ActivityManager; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.biometrics.BiometricAuthenticator; +import android.hardware.biometrics.BiometricDialog; import android.hardware.biometrics.BiometricFingerprintConstants; +import android.hardware.biometrics.IBiometricDialogReceiver; import android.os.Binder; import android.os.Bundle; import android.os.CancellationSignal; @@ -54,10 +57,10 @@ import javax.crypto.Mac; /** * A class that coordinates access to the fingerprint hardware. - * @deprecated See {@link FingerprintDialog} which shows a system-provided dialog upon starting - * authentication. In a world where devices may have in-display fingerprint sensors, it's much - * more realistic to have a system-provided authentication dialog since the in-display sensor - * location may vary by vendor/device. + * @deprecated See {@link BiometricDialog} which shows a system-provided dialog upon starting + * authentication. In a world where devices may have different types of biometric authentication, + * it's much more realistic to have a system-provided authentication dialog since the method may + * vary by vendor/device. */ @Deprecated @SystemService(Context.FINGERPRINT_SERVICE) @@ -108,7 +111,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { /** * A wrapper class for the crypto objects supported by FingerprintManager. Currently the * framework supports {@link Signature}, {@link Cipher} and {@link Mac} objects. - * @deprecated See {@link android.hardware.fingerprint.FingerprintDialog.CryptoObject} + * @deprecated See {@link android.hardware.biometrics.BiometricDialog.CryptoObject} */ @Deprecated public static final class CryptoObject extends android.hardware.biometrics.CryptoObject { @@ -152,7 +155,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { /** * Container for callback data from {@link FingerprintManager#authenticate(CryptoObject, * CancellationSignal, int, AuthenticationCallback, Handler)}. - * @deprecated See {@link android.hardware.fingerprint.FingerprintDialog.AuthenticationResult} + * @deprecated See {@link android.hardware.biometrics.BiometricDialog.AuthenticationResult} */ @Deprecated public static class AuthenticationResult { @@ -201,7 +204,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { * FingerprintManager#authenticate(CryptoObject, CancellationSignal, * int, AuthenticationCallback, Handler) } must provide an implementation of this for listening to * fingerprint events. - * @deprecated See {@link android.hardware.fingerprint.FingerprintDialog.AuthenticationCallback} + * @deprecated See {@link android.hardware.biometrics.BiometricDialog.AuthenticationCallback} */ @Deprecated public static abstract class AuthenticationCallback @@ -375,13 +378,13 @@ public class FingerprintManager implements BiometricFingerprintConstants { * by <a href="{@docRoot}training/articles/keystore.html">Android Keystore * facility</a>. * @throws IllegalStateException if the crypto primitive is not initialized. - * @deprecated See {@link FingerprintDialog#authenticate(CancellationSignal, Executor, - * FingerprintDialog.AuthenticationCallback)} and {@link FingerprintDialog#authenticate( - * FingerprintDialog.CryptoObject, CancellationSignal, Executor, - * FingerprintDialog.AuthenticationCallback)} + * @deprecated See {@link BiometricDialog#authenticate(CancellationSignal, Executor, + * BiometricDialog.AuthenticationCallback)} and {@link BiometricDialog#authenticate( + * BiometricDialog.CryptoObject, CancellationSignal, Executor, + * BiometricDialog.AuthenticationCallback)} */ @Deprecated - @RequiresPermission(USE_FINGERPRINT) + @RequiresPermission(anyOf = {USE_BIOMETRIC, USE_FINGERPRINT}) public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel, int flags, @NonNull AuthenticationCallback callback, @Nullable Handler handler) { authenticate(crypto, cancel, flags, callback, handler, mContext.getUserId()); @@ -405,7 +408,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { * @param userId the user ID that the fingerprint hardware will authenticate for. * @hide */ - @RequiresPermission(USE_FINGERPRINT) + @RequiresPermission(anyOf = {USE_BIOMETRIC, USE_FINGERPRINT}) public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel, int flags, @NonNull AuthenticationCallback callback, Handler handler, int userId) { if (callback == null) { @@ -441,7 +444,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { /** * Per-user version, see {@link FingerprintManager#authenticate(CryptoObject, - * CancellationSignal, Bundle, Executor, IFingerprintDialogReceiver, AuthenticationCallback)} + * CancellationSignal, Bundle, Executor, IBiometricDialogReceiver, AuthenticationCallback)} * @param userId the user ID that the fingerprint hardware will authenticate for. */ private void authenticate(int userId, @@ -449,7 +452,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { @NonNull CancellationSignal cancel, @NonNull Bundle bundle, @NonNull @CallbackExecutor Executor executor, - @NonNull IFingerprintDialogReceiver receiver, + @NonNull IBiometricDialogReceiver receiver, @NonNull BiometricAuthenticator.AuthenticationCallback callback) { mCryptoObject = crypto; if (cancel.isCanceled()) { @@ -477,8 +480,8 @@ public class FingerprintManager implements BiometricFingerprintConstants { } /** - * Private method, see {@link FingerprintDialog#authenticate(CancellationSignal, Executor, - * AuthenticationCallback)} + * Private method, see {@link BiometricDialog#authenticate(CancellationSignal, Executor, + * BiometricDialog.AuthenticationCallback)} * @param cancel * @param executor * @param callback @@ -488,7 +491,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { @NonNull CancellationSignal cancel, @NonNull Bundle bundle, @NonNull @CallbackExecutor Executor executor, - @NonNull IFingerprintDialogReceiver receiver, + @NonNull IBiometricDialogReceiver receiver, @NonNull BiometricAuthenticator.AuthenticationCallback callback) { if (cancel == null) { throw new IllegalArgumentException("Must supply a cancellation signal"); @@ -509,8 +512,8 @@ public class FingerprintManager implements BiometricFingerprintConstants { } /** - * Private method, see {@link FingerprintDialog#authenticate(CryptoObject, CancellationSignal, - * Executor, AuthenticationCallback)} + * Private method, see {@link BiometricDialog#authenticate(BiometricDialog.CryptoObject, + * CancellationSignal, Executor, BiometricDialog.AuthenticationCallback)} * @param crypto * @param cancel * @param executor @@ -521,7 +524,7 @@ public class FingerprintManager implements BiometricFingerprintConstants { @NonNull CancellationSignal cancel, @NonNull Bundle bundle, @NonNull @CallbackExecutor Executor executor, - @NonNull IFingerprintDialogReceiver receiver, + @NonNull IBiometricDialogReceiver receiver, @NonNull BiometricAuthenticator.AuthenticationCallback callback) { if (crypto == null) { throw new IllegalArgumentException("Must supply a crypto object"); @@ -740,8 +743,8 @@ public class FingerprintManager implements BiometricFingerprintConstants { * Determine if there is at least one fingerprint enrolled. * * @return true if at least one fingerprint is enrolled, false otherwise - * @deprecated See {@link FingerprintDialog} and - * {@link FingerprintDialog#FINGERPRINT_ERROR_NO_FINGERPRINTS} + * @deprecated See {@link BiometricDialog} and + * {@link FingerprintManager#FINGERPRINT_ERROR_NO_FINGERPRINTS} */ @Deprecated @RequiresPermission(USE_FINGERPRINT) @@ -774,8 +777,8 @@ public class FingerprintManager implements BiometricFingerprintConstants { * Determine if fingerprint hardware is present and functional. * * @return true if hardware is present and functional, false otherwise. - * @deprecated See {@link FingerprintDialog} and - * {@link FingerprintDialog#FINGERPRINT_ERROR_HW_UNAVAILABLE} + * @deprecated See {@link BiometricDialog} and + * {@link FingerprintManager#FINGERPRINT_ERROR_HW_UNAVAILABLE} */ @Deprecated @RequiresPermission(USE_FINGERPRINT) @@ -1155,14 +1158,14 @@ public class FingerprintManager implements BiometricFingerprintConstants { @Override // binder call public void onError(long deviceId, int error, int vendorCode) { if (mExecutor != null) { - // FingerprintDialog case, post a delayed runnable on the FingerprintManager handler + // BiometricDialog case, post a delayed runnable on the FingerprintManager handler // that sends the error message after FingerprintDialog.HIDE_DIALOG_DELAY to send // the error to the application. mHandler.postDelayed(() -> { mExecutor.execute(() -> { sendErrorResult(deviceId, error, vendorCode); }); - }, FingerprintDialog.HIDE_DIALOG_DELAY); + }, BiometricDialog.HIDE_DIALOG_DELAY); } else { mHandler.obtainMessage(MSG_ERROR, error, vendorCode, deviceId).sendToTarget(); } diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl index f1502e489c11..78d01e50dcf3 100644 --- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl +++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl @@ -16,8 +16,8 @@ package android.hardware.fingerprint; import android.os.Bundle; +import android.hardware.biometrics.IBiometricDialogReceiver; import android.hardware.fingerprint.IFingerprintClientActiveCallback; -import android.hardware.fingerprint.IFingerprintDialogReceiver; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback; import android.hardware.fingerprint.Fingerprint; @@ -31,7 +31,7 @@ interface IFingerprintService { // Authenticate the given sessionId with a fingerprint void authenticate(IBinder token, long sessionId, int userId, IFingerprintServiceReceiver receiver, int flags, String opPackageName, - in Bundle bundle, IFingerprintDialogReceiver dialogReceiver); + in Bundle bundle, IBiometricDialogReceiver dialogReceiver); // Cancel authentication for the given sessionId void cancelAuthentication(IBinder token, String opPackageName); |
