| /* |
| * This file is auto-generated. DO NOT MODIFY. |
| * Using: out/host/linux-x86/bin/aidl --lang=java -Weverything -Wno-missing-permission-annotation --structured --version 5 --hash notfrozen -t --stability vintf --min_sdk_version platform_apis -pout/soong/.intermediates/hardware/interfaces/biometrics/common/aidl/android.hardware.biometrics.common_interface/4/preprocessed.aidl -pout/soong/.intermediates/hardware/interfaces/keymaster/aidl/android.hardware.keymaster_interface/4/preprocessed.aidl --previous_api_dir=hardware/interfaces/biometrics/fingerprint/aidl/aidl_api/android.hardware.biometrics.fingerprint/4 --previous_hash 41a730a7a6b5aa9cebebce70ee5b5e509b0af6fb --ninja -d out/soong/.intermediates/hardware/interfaces/biometrics/fingerprint/aidl/android.hardware.biometrics.fingerprint-V5-java-source/gen/android/hardware/biometrics/fingerprint/ISession.java.d -o out/soong/.intermediates/hardware/interfaces/biometrics/fingerprint/aidl/android.hardware.biometrics.fingerprint-V5-java-source/gen -Nhardware/interfaces/biometrics/fingerprint/aidl hardware/interfaces/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/ISession.aidl |
| */ |
| package android.hardware.biometrics.fingerprint; |
| /** |
| * Operations defined within this interface can be split into the following categories: |
| * 1) Non-interrupting operations. These operations are handled by the HAL in a FIFO order. |
| * 1a) Cancellable operations. These operations can usually run for several minutes. To allow |
| * for cancellation, they return an instance of ICancellationSignal that allows the |
| * framework to cancel them by calling ICancellationSignal#cancel. If such an operation is |
| * cancelled, it must notify the framework by calling ISessionCallback#onError with |
| * Error::CANCELED. |
| * 1b) Non-cancellable operations. Such operations cannot be cancelled once started. |
| * 2) Interrupting operations. These operations may be invoked by the framework immediately, |
| * regardless of whether another operation is executing. For example, on devices with sensors |
| * of FingerprintSensorType::UNDER_DISPLAY_*, ISession#onPointerDown may be invoked while the |
| * HAL is executing ISession#enroll, ISession#authenticate or ISession#detectInteraction. |
| * |
| * The lifecycle of a non-interrupting operation ends when one of its final callbacks is called. |
| * For example, ISession#authenticate is considered completed when either ISessionCallback#onError |
| * or ISessionCallback#onAuthenticationSucceeded is called. |
| * |
| * The lifecycle of an interrupting operation ends when it returns. Interrupting operations do not |
| * have callbacks. |
| * |
| * ISession only supports execution of one non-interrupting operation at a time, regardless of |
| * whether it's cancellable. The framework must wait for a callback indicating the end of the |
| * current non-interrupting operation before a new non-interrupting operation can be started. |
| * @hide |
| */ |
| public interface ISession extends android.os.IInterface |
| { |
| /** |
| * The version of this interface that the caller is built against. |
| * This might be different from what {@link #getInterfaceVersion() |
| * getInterfaceVersion} returns as that is the version of the interface |
| * that the remote object is implementing. |
| */ |
| public static final int VERSION = true ? 4 : 5; |
| public static final String HASH = "41a730a7a6b5aa9cebebce70ee5b5e509b0af6fb"; |
| /** Default implementation for ISession. */ |
| public static class Default implements android.hardware.biometrics.fingerprint.ISession |
| { |
| /** Methods applicable to any fingerprint type. */ |
| /** |
| * generateChallenge: |
| * |
| * Begins a secure transaction request. Note that the challenge by itself is not useful. It only |
| * becomes useful when wrapped in a verifiable message such as a HardwareAuthToken. |
| * |
| * Canonical example: |
| * 1) User requests an operation, such as fingerprint enrollment. |
| * 2) Fingerprint enrollment cannot happen until the user confirms their lockscreen credential |
| * (PIN/Pattern/Password). |
| * 3) However, the biometric subsystem does not want just "any" proof of credential |
| * confirmation. It needs proof that the user explicitly authenticated credential in order |
| * to allow addition of biometric enrollments. |
| * To secure this path, the following path is taken: |
| * 1) Upon user requesting fingerprint enroll, the framework requests |
| * ISession#generateChallenge |
| * 2) Framework sends the challenge to the credential subsystem, and upon credential |
| * confirmation, a HAT is created, containing the challenge in the "challenge" field. |
| * 3) Framework sends the HAT to the HAL, e.g. ISession#enroll. |
| * 4) Implementation verifies the authenticity and integrity of the HAT. |
| * 5) Implementation now has confidence that the user entered their credential to allow |
| * biometric enrollment. |
| * |
| * Note that this interface allows multiple in-flight challenges. Invoking generateChallenge |
| * twice does not invalidate the first challenge. The challenge is invalidated only when: |
| * 1) Its lifespan exceeds the HAL's internal challenge timeout |
| * 2) IFingerprint#revokeChallenge is invoked |
| * |
| * For example, the following is a possible table of valid challenges: |
| * ---------------------------------------------- |
| * | SensorId | UserId | ValidUntil | Challenge | |
| * |----------|--------|------------|-----------| |
| * | 0 | 0 | <Time1> | <Random1> | |
| * | 0 | 0 | <Time2> | <Random2> | |
| * | 1 | 0 | <Time3> | <Random3> | |
| * | 0 | 10 | <Time4> | <Random4> | |
| * ---------------------------------------------- |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeGenerated |
| */ |
| @Override public void generateChallenge() throws android.os.RemoteException |
| { |
| } |
| /** |
| * revokeChallenge: |
| * |
| * Revokes a challenge that was previously generated. Note that if a non-existent challenge is |
| * provided, the HAL must still notify the framework using ISessionCallback#onChallengeRevoked. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeRevoked |
| * |
| * @param challenge Challenge that should be revoked. |
| */ |
| @Override public void revokeChallenge(long challenge) throws android.os.RemoteException |
| { |
| } |
| /** |
| * enroll: |
| * |
| * A request to add a fingerprint enrollment. |
| * |
| * At any point during enrollment, if a non-recoverable error occurs, the HAL must notify the |
| * framework via ISessionCallback#onError with the applicable enrollment-specific error. |
| * |
| * Before capturing fingerprint data, the HAL must first verify the authenticity and integrity |
| * of the provided HardwareAuthToken. In addition, it must check that the challenge within the |
| * provided HardwareAuthToken is valid. See ISession#generateChallenge. If any of the above |
| * checks fail, the framework must be notified using ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * During enrollment, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. Similarly, the framework may be notified of enrollment progress changes via |
| * ISessionCallback#onEnrollmentProgress. Once the framework is notified that there are 0 |
| * "remaining" steps, the framework may cache the "enrollmentId". See |
| * ISessionCallback#onEnrollmentProgress for more info. |
| * |
| * When a finger is successfully added and before the framework is notified of remaining=0, the |
| * HAL must update and associate this (sensorId, userId) pair with a new entropy-encoded random |
| * identifier. See ISession#getAuthenticatorId for more information. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onEnrollmentProgress(enrollmentId, remaining=0) |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @param hat See above documentation. |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal enroll(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** |
| * authenticate: |
| * |
| * A request to start looking for fingerprints to authenticate. |
| * |
| * At any point during authentication, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable authentication-specific error. |
| * |
| * During authentication, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. |
| * |
| * The HAL must notify the framework of accepts and rejects via |
| * ISessionCallback#onAuthenticationSucceeded and ISessionCallback#onAuthenticationFailed, |
| * correspondingly. |
| * |
| * The authentication lifecycle ends when either: |
| * 1) A fingerprint is accepted, and ISessionCallback#onAuthenticationSucceeded is invoked. |
| * 2) Any non-recoverable error occurs (such as lockout). See the full list of |
| * authentication-specific errors in the Error enum. |
| * |
| * Note that upon successful authentication, the lockout counter for this (sensorId, userId) |
| * pair must be cleared. |
| * |
| * Note that upon successful authentication, ONLY sensors configured as SensorStrength::STRONG |
| * are allowed to create and send a HardwareAuthToken to the framework. See the Android CDD for |
| * more details. For SensorStrength::STRONG sensors, the HardwareAuthToken's "challenge" field |
| * must be set with the operationId passed in during #authenticate. If the sensor is NOT |
| * SensorStrength::STRONG, the HardwareAuthToken MUST be null. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onAuthenticationSucceeded |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * - ISessionCallback#onAuthenticationFailed |
| * - ISessionCallback#onLockoutTimed |
| * - ISessionCallback#onLockoutPermanent |
| * |
| * @param operationId For sensors configured as SensorStrength::STRONG, this must be used ONLY |
| * upon successful authentication and wrapped in the HardwareAuthToken's |
| * "challenge" field and sent to the framework via |
| * ISessionCallback#onAuthenticationSucceeded. The operationId is an opaque |
| * identifier created from a separate secure subsystem such as, but not |
| * limited to KeyStore/KeyMaster. The HardwareAuthToken can then be used as |
| * an attestation for the provided operation. For example, this is used to |
| * unlock biometric-bound auth-per-use keys (see |
| * setUserAuthenticationParameters in KeyGenParameterSpec.Builder and |
| * KeyProtection.Builder). |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal authenticate(long operationId) throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** |
| * detectInteraction: |
| * |
| * A request to start looking for fingerprints without performing matching. Must only be called |
| * if SensorProps#supportsDetectInteraction is true. If invoked on HALs that do not support this |
| * functionality, the HAL must respond with ISession#onError(UNABLE_TO_PROCESS, 0). |
| * |
| * The framework will use this operation in cases where determining user presence is required, |
| * but identifying/authenticating is not. For example, when the device is encrypted (first boot) |
| * or in lockdown mode. |
| * |
| * At any point during detectInteraction, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable error. |
| * |
| * The HAL must only check whether a fingerprint-like image was detected (e.g. to minimize |
| * interactions due to non-fingerprint objects), and the lockout counter must not be modified. |
| * |
| * Upon detecting any fingerprint, the HAL must invoke ISessionCallback#onInteractionDetected. |
| * |
| * The lifecycle of this operation ends when either: |
| * 1) Any fingerprint is detected and the framework is notified via |
| * ISessionCallback#onInteractionDetected. |
| * 2) An error occurs, for example Error::TIMEOUT. |
| * |
| * Note that if the operation is canceled, the HAL must notify the framework via |
| * ISessionCallback#onError with Error::CANCELED. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onInteractionDetected |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal detectInteraction() throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** |
| * enumerateEnrollments: |
| * |
| * A request to enumerate (list) the enrollments for this (sensorId, userId) pair. The framework |
| * typically uses this to ensure that its cache is in sync with the HAL. |
| * |
| * The HAL must then notify the framework with a list of enrollments applicable for the current |
| * session via ISessionCallback#onEnrollmentsEnumerated. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsEnumerated |
| */ |
| @Override public void enumerateEnrollments() throws android.os.RemoteException |
| { |
| } |
| /** |
| * removeEnrollments: |
| * |
| * A request to remove the enrollments for this (sensorId, userId) pair. |
| * |
| * After removing the enrollmentIds from everywhere necessary (filesystem, secure subsystems, |
| * etc), the HAL must notify the framework via ISessionCallback#onEnrollmentsRemoved. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsRemoved |
| * |
| * @param enrollmentIds a list of enrollments that should be removed. |
| */ |
| @Override public void removeEnrollments(int[] enrollmentIds) throws android.os.RemoteException |
| { |
| } |
| /** |
| * getAuthenticatorId: |
| * |
| * MUST return 0 via ISessionCallback#onAuthenticatorIdRetrieved for sensors that are configured |
| * as SensorStrength::WEAK or SensorStrength::CONVENIENCE. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * The authenticatorId is a (sensorId, user)-specific identifier which can be used during key |
| * generation and import to associate the key (in KeyStore / KeyMaster) with the current set of |
| * enrolled fingerprints. For example, the following public Android APIs allow for keys to be |
| * invalidated when the user adds a new enrollment after the key was created: |
| * KeyGenParameterSpec.Builder.setInvalidatedByBiometricEnrollment and |
| * KeyProtection.Builder.setInvalidatedByBiometricEnrollment. |
| * |
| * In addition, upon successful fingerprint authentication, the signed HAT that is returned to |
| * the framework via ISessionCallback#onAuthenticationSucceeded must contain this identifier in |
| * the authenticatorId field. |
| * |
| * Returns an entropy-encoded random identifier associated with the current set of enrollments |
| * via ISessionCallback#onAuthenticatorIdRetrieved. The authenticatorId |
| * 1) MUST change whenever a new fingerprint is enrolled |
| * 2) MUST return 0 if no fingerprints are enrolled |
| * 3) MUST not change if a fingerprint is deleted. |
| * 4) MUST be an entropy-encoded random number |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdRetrieved |
| */ |
| @Override public void getAuthenticatorId() throws android.os.RemoteException |
| { |
| } |
| /** |
| * invalidateAuthenticatorId: |
| * |
| * This operation only applies to sensors that are configured as SensorStrength::STRONG. If |
| * invoked by the framework for sensors of other strengths, the HAL should immediately invoke |
| * ISessionCallback#onAuthenticatorIdInvalidated. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * When invoked by the framework, the HAL must perform the following sequence of events: |
| * 1) Update the authenticatorId with a new entropy-encoded random number |
| * 2) Persist the new authenticatorId to non-ephemeral storage |
| * 3) Notify the framework that the above is completed, via |
| * ISessionCallback#onAuthenticatorInvalidated |
| * |
| * A practical use case of invalidation would be when the user adds a new enrollment to a sensor |
| * managed by a different HAL instance. The public android.security.keystore APIs bind keys to |
| * "all biometrics" rather than "fingerprint-only" or "face-only" (see #getAuthenticatorId for |
| * more details). As such, the framework would coordinate invalidation across multiple biometric |
| * HALs as necessary. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdInvalidated |
| */ |
| @Override public void invalidateAuthenticatorId() throws android.os.RemoteException |
| { |
| } |
| /** |
| * resetLockout: |
| * |
| * Requests the HAL to clear the lockout counter. Upon receiving this request, the HAL must |
| * perform the following: |
| * 1) Verify the authenticity and integrity of the provided HAT |
| * 2) Verify that the timestamp provided within the HAT is relatively recent (e.g. on the |
| * order of minutes, not hours). |
| * If either of the checks fail, the HAL must invoke ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * Upon successful verification, the HAL must clear the lockout counter and notify the framework |
| * via ISessionCallback#onLockoutCleared. |
| * |
| * Note that lockout is user AND sensor specific. In other words, there is a separate lockout |
| * state for each (user, sensor) pair. For example, the following is a valid state on a |
| * multi-sensor device: |
| * ------------------------------------------------------------------ |
| * | SensorId | UserId | FailedAttempts | LockedOut | LockedUntil | |
| * |----------|--------|----------------|-----------|---------------| |
| * | 0 | 0 | 1 | false | x | |
| * | 1 | 0 | 5 | true | <future_time> | |
| * | 0 | 10 | 0 | false | x | |
| * | 1 | 10 | 0 | false | x | |
| * ------------------------------------------------------------------ |
| * |
| * Lockout may be cleared in the following ways: |
| * 1) ISession#resetLockout |
| * 2) After a period of time, according to a rate-limiter. |
| * |
| * Note that the "FailedAttempts" counter must be cleared upon successful fingerprint |
| * authentication. For example, if SensorId=0 UserId=0 FailedAttempts=1, and a successful |
| * fingerprint authentication occurs, the counter for that (SensorId, UserId) pair must be reset |
| * to 0. |
| * |
| * In addition, lockout states MUST persist after device reboots, HAL crashes, etc. |
| * |
| * See the Android CDD section 7.3.10 for the full set of lockout and rate-limiting |
| * requirements. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onLockoutCleared |
| * |
| * @param hat HardwareAuthToken See above documentation. |
| */ |
| @Override public void resetLockout(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException |
| { |
| } |
| /** |
| * Close this session and allow the HAL to release the resources associated with this session. |
| * |
| * A session can only be closed when the HAL is idling, i.e. not performing any of the |
| * non-interruptable operations. If the HAL is busy performing a cancellable operation, the |
| * operation must be explicitly cancelled with a call to ICancellationSignal#cancel before |
| * the session can be closed. |
| * |
| * After a session is closed, the HAL must notify the framework by calling |
| * ISessionCallback#onSessionClosed. |
| * |
| * All sessions must be explicitly closed. Calling IFingerprint#createSession while there is an |
| * active session is considered an error. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onSessionClosed |
| */ |
| @Override public void close() throws android.os.RemoteException |
| { |
| } |
| /** Methods for notifying the under-display fingerprint sensor about external events. */ |
| /** |
| * onPointerDown: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * This operation is used to notify the HAL of display touches. This operation can be invoked |
| * when the HAL is performing any one of: ISession#authenticate, ISession#enroll, |
| * ISession#detectInteraction. |
| * |
| * Note that the framework will only invoke this operation if the event occurred on the display |
| * on which this sensor is located. |
| * |
| * Note that for sensors which require illumination such as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, and where illumination is handled below the |
| * framework, this is a good time to start illuminating. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * @param x The distance in pixels from the left edge of the display. |
| * @param y The distance in pixels from the top edge of the display. |
| * @param minor See android.view.MotionEvent#getTouchMinor |
| * @param major See android.view.MotionEvent#getTouchMajor |
| * |
| * @deprecated use onPointerDownWithContext instead. |
| */ |
| @Override public void onPointerDown(int pointerId, int x, int y, float minor, float major) throws android.os.RemoteException |
| { |
| } |
| /** |
| * onPointerUp: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * |
| * @deprecated use onPointerUpWithContext instead. |
| */ |
| @Override public void onPointerUp(int pointerId) throws android.os.RemoteException |
| { |
| } |
| /** |
| * onUiReady: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL. If invoked for sensors of other types, the HAL |
| * must treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * For FingerprintSensorType::UNDER_DISPLAY_OPTICAL where illumination is handled above the |
| * HAL, the framework will invoke this operation to notify when the illumination is showing. |
| */ |
| @Override public void onUiReady() throws android.os.RemoteException |
| { |
| } |
| /** |
| * These are alternative methods for some operations to allow the HAL to make optional |
| * optimizations during execution. |
| * |
| * HALs may ignore the additional context and treat all *WithContext methods the same as |
| * the original methods. |
| */ |
| /** See ISession#authenticate(long) */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal authenticateWithContext(long operationId, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** See ISession#enroll(HardwareAuthToken) */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal enrollWithContext(android.hardware.keymaster.HardwareAuthToken hat, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** See ISession#detectInteraction() */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal detectInteractionWithContext(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| return null; |
| } |
| /** |
| * onPointerDownWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger entered the sensor area. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * Note that for sensors which require illumination, for example |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, this is a good time to start illuminating. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerDownWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| } |
| /** |
| * onPointerUpWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger left the sensor area. This operation can be invoked regardless |
| * of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerUpWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| } |
| /** |
| * onContextChanged: |
| * |
| * This may be called while an authenticate, detect interaction, or enrollment operation is |
| * running when the context changes. |
| */ |
| @Override public void onContextChanged(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| } |
| /** |
| * onPointerCancelWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that if there were fingers within the sensor area, they are no longer being |
| * tracked. The fingers may or may not still be on the sensor. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerCancelWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| } |
| /** |
| * setIgnoreDisplayTouches: |
| * |
| * This operation only applies to sensors that have SensorProps#halHandlesDisplayTouches |
| * set to true. For all other sensors this is a no-op. |
| * |
| * Instructs the HAL whether to ignore display touches. This can be useful to avoid unintended |
| * fingerprint captures during certain UI interactions. For example, when entering a lockscreen |
| * PIN, some of the touches might overlap with the fingerprint sensor. Those touches should be |
| * ignored to avoid unintended authentication attempts. |
| * |
| * This flag must default to false when the HAL starts. |
| * |
| * The framework is responsible for both setting the flag to true and resetting it to false |
| * whenever it's appropriate. |
| * |
| * @param shouldIgnore whether the display touches should be ignored. |
| * |
| * @deprecated use isHardwareIgnoringTouches in OperationContext from onContextChanged instead |
| */ |
| @Override public void setIgnoreDisplayTouches(boolean shouldIgnore) throws android.os.RemoteException |
| { |
| } |
| @Override |
| public int getInterfaceVersion() { |
| return 0; |
| } |
| @Override |
| public String getInterfaceHash() { |
| return ""; |
| } |
| @Override |
| public android.os.IBinder asBinder() { |
| return null; |
| } |
| } |
| /** Local-side IPC implementation stub class. */ |
| public static abstract class Stub extends android.os.Binder implements android.hardware.biometrics.fingerprint.ISession |
| { |
| /** Construct the stub at attach it to the interface. */ |
| @SuppressWarnings("this-escape") |
| public Stub() |
| { |
| this.markVintfStability(); |
| this.attachInterface(this, DESCRIPTOR); |
| } |
| /** |
| * Cast an IBinder object into an android.hardware.biometrics.fingerprint.ISession interface, |
| * generating a proxy if needed. |
| */ |
| public static android.hardware.biometrics.fingerprint.ISession asInterface(android.os.IBinder obj) |
| { |
| if ((obj==null)) { |
| return null; |
| } |
| android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); |
| if (((iin!=null)&&(iin instanceof android.hardware.biometrics.fingerprint.ISession))) { |
| return ((android.hardware.biometrics.fingerprint.ISession)iin); |
| } |
| return new android.hardware.biometrics.fingerprint.ISession.Stub.Proxy(obj); |
| } |
| @Override public android.os.IBinder asBinder() |
| { |
| return this; |
| } |
| /** @hide */ |
| public static java.lang.String getDefaultTransactionName(int transactionCode) |
| { |
| switch (transactionCode) |
| { |
| case TRANSACTION_generateChallenge: |
| { |
| return "generateChallenge"; |
| } |
| case TRANSACTION_revokeChallenge: |
| { |
| return "revokeChallenge"; |
| } |
| case TRANSACTION_enroll: |
| { |
| return "enroll"; |
| } |
| case TRANSACTION_authenticate: |
| { |
| return "authenticate"; |
| } |
| case TRANSACTION_detectInteraction: |
| { |
| return "detectInteraction"; |
| } |
| case TRANSACTION_enumerateEnrollments: |
| { |
| return "enumerateEnrollments"; |
| } |
| case TRANSACTION_removeEnrollments: |
| { |
| return "removeEnrollments"; |
| } |
| case TRANSACTION_getAuthenticatorId: |
| { |
| return "getAuthenticatorId"; |
| } |
| case TRANSACTION_invalidateAuthenticatorId: |
| { |
| return "invalidateAuthenticatorId"; |
| } |
| case TRANSACTION_resetLockout: |
| { |
| return "resetLockout"; |
| } |
| case TRANSACTION_close: |
| { |
| return "close"; |
| } |
| case TRANSACTION_onPointerDown: |
| { |
| return "onPointerDown"; |
| } |
| case TRANSACTION_onPointerUp: |
| { |
| return "onPointerUp"; |
| } |
| case TRANSACTION_onUiReady: |
| { |
| return "onUiReady"; |
| } |
| case TRANSACTION_authenticateWithContext: |
| { |
| return "authenticateWithContext"; |
| } |
| case TRANSACTION_enrollWithContext: |
| { |
| return "enrollWithContext"; |
| } |
| case TRANSACTION_detectInteractionWithContext: |
| { |
| return "detectInteractionWithContext"; |
| } |
| case TRANSACTION_onPointerDownWithContext: |
| { |
| return "onPointerDownWithContext"; |
| } |
| case TRANSACTION_onPointerUpWithContext: |
| { |
| return "onPointerUpWithContext"; |
| } |
| case TRANSACTION_onContextChanged: |
| { |
| return "onContextChanged"; |
| } |
| case TRANSACTION_onPointerCancelWithContext: |
| { |
| return "onPointerCancelWithContext"; |
| } |
| case TRANSACTION_setIgnoreDisplayTouches: |
| { |
| return "setIgnoreDisplayTouches"; |
| } |
| case TRANSACTION_getInterfaceVersion: |
| { |
| return "getInterfaceVersion"; |
| } |
| case TRANSACTION_getInterfaceHash: |
| { |
| return "getInterfaceHash"; |
| } |
| default: |
| { |
| return null; |
| } |
| } |
| } |
| /** @hide */ |
| public java.lang.String getTransactionName(int transactionCode) |
| { |
| return this.getDefaultTransactionName(transactionCode); |
| } |
| @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException |
| { |
| java.lang.String descriptor = DESCRIPTOR; |
| if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) { |
| data.enforceInterface(descriptor); |
| } |
| if (code == INTERFACE_TRANSACTION) { |
| reply.writeString(descriptor); |
| return true; |
| } |
| else if (code == TRANSACTION_getInterfaceVersion) { |
| reply.writeNoException(); |
| reply.writeInt(getInterfaceVersion()); |
| return true; |
| } |
| else if (code == TRANSACTION_getInterfaceHash) { |
| reply.writeNoException(); |
| reply.writeString(getInterfaceHash()); |
| return true; |
| } |
| switch (code) |
| { |
| case TRANSACTION_generateChallenge: |
| { |
| this.generateChallenge(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_revokeChallenge: |
| { |
| long _arg0; |
| _arg0 = data.readLong(); |
| data.enforceNoDataAvail(); |
| this.revokeChallenge(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_enroll: |
| { |
| android.hardware.keymaster.HardwareAuthToken _arg0; |
| _arg0 = data.readTypedObject(android.hardware.keymaster.HardwareAuthToken.CREATOR); |
| data.enforceNoDataAvail(); |
| android.hardware.biometrics.common.ICancellationSignal _result = this.enroll(_arg0); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_authenticate: |
| { |
| long _arg0; |
| _arg0 = data.readLong(); |
| data.enforceNoDataAvail(); |
| android.hardware.biometrics.common.ICancellationSignal _result = this.authenticate(_arg0); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_detectInteraction: |
| { |
| android.hardware.biometrics.common.ICancellationSignal _result = this.detectInteraction(); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_enumerateEnrollments: |
| { |
| this.enumerateEnrollments(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_removeEnrollments: |
| { |
| int[] _arg0; |
| _arg0 = data.createIntArray(); |
| data.enforceNoDataAvail(); |
| this.removeEnrollments(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_getAuthenticatorId: |
| { |
| this.getAuthenticatorId(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_invalidateAuthenticatorId: |
| { |
| this.invalidateAuthenticatorId(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_resetLockout: |
| { |
| android.hardware.keymaster.HardwareAuthToken _arg0; |
| _arg0 = data.readTypedObject(android.hardware.keymaster.HardwareAuthToken.CREATOR); |
| data.enforceNoDataAvail(); |
| this.resetLockout(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_close: |
| { |
| this.close(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onPointerDown: |
| { |
| int _arg0; |
| _arg0 = data.readInt(); |
| int _arg1; |
| _arg1 = data.readInt(); |
| int _arg2; |
| _arg2 = data.readInt(); |
| float _arg3; |
| _arg3 = data.readFloat(); |
| float _arg4; |
| _arg4 = data.readFloat(); |
| data.enforceNoDataAvail(); |
| this.onPointerDown(_arg0, _arg1, _arg2, _arg3, _arg4); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onPointerUp: |
| { |
| int _arg0; |
| _arg0 = data.readInt(); |
| data.enforceNoDataAvail(); |
| this.onPointerUp(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onUiReady: |
| { |
| this.onUiReady(); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_authenticateWithContext: |
| { |
| long _arg0; |
| _arg0 = data.readLong(); |
| android.hardware.biometrics.common.OperationContext _arg1; |
| _arg1 = data.readTypedObject(android.hardware.biometrics.common.OperationContext.CREATOR); |
| data.enforceNoDataAvail(); |
| android.hardware.biometrics.common.ICancellationSignal _result = this.authenticateWithContext(_arg0, _arg1); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_enrollWithContext: |
| { |
| android.hardware.keymaster.HardwareAuthToken _arg0; |
| _arg0 = data.readTypedObject(android.hardware.keymaster.HardwareAuthToken.CREATOR); |
| android.hardware.biometrics.common.OperationContext _arg1; |
| _arg1 = data.readTypedObject(android.hardware.biometrics.common.OperationContext.CREATOR); |
| data.enforceNoDataAvail(); |
| android.hardware.biometrics.common.ICancellationSignal _result = this.enrollWithContext(_arg0, _arg1); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_detectInteractionWithContext: |
| { |
| android.hardware.biometrics.common.OperationContext _arg0; |
| _arg0 = data.readTypedObject(android.hardware.biometrics.common.OperationContext.CREATOR); |
| data.enforceNoDataAvail(); |
| android.hardware.biometrics.common.ICancellationSignal _result = this.detectInteractionWithContext(_arg0); |
| reply.writeNoException(); |
| reply.writeStrongInterface(_result); |
| break; |
| } |
| case TRANSACTION_onPointerDownWithContext: |
| { |
| android.hardware.biometrics.fingerprint.PointerContext _arg0; |
| _arg0 = data.readTypedObject(android.hardware.biometrics.fingerprint.PointerContext.CREATOR); |
| data.enforceNoDataAvail(); |
| this.onPointerDownWithContext(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onPointerUpWithContext: |
| { |
| android.hardware.biometrics.fingerprint.PointerContext _arg0; |
| _arg0 = data.readTypedObject(android.hardware.biometrics.fingerprint.PointerContext.CREATOR); |
| data.enforceNoDataAvail(); |
| this.onPointerUpWithContext(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onContextChanged: |
| { |
| android.hardware.biometrics.common.OperationContext _arg0; |
| _arg0 = data.readTypedObject(android.hardware.biometrics.common.OperationContext.CREATOR); |
| data.enforceNoDataAvail(); |
| this.onContextChanged(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_onPointerCancelWithContext: |
| { |
| android.hardware.biometrics.fingerprint.PointerContext _arg0; |
| _arg0 = data.readTypedObject(android.hardware.biometrics.fingerprint.PointerContext.CREATOR); |
| data.enforceNoDataAvail(); |
| this.onPointerCancelWithContext(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| case TRANSACTION_setIgnoreDisplayTouches: |
| { |
| boolean _arg0; |
| _arg0 = data.readBoolean(); |
| data.enforceNoDataAvail(); |
| this.setIgnoreDisplayTouches(_arg0); |
| reply.writeNoException(); |
| break; |
| } |
| default: |
| { |
| return super.onTransact(code, data, reply, flags); |
| } |
| } |
| return true; |
| } |
| private static class Proxy implements android.hardware.biometrics.fingerprint.ISession |
| { |
| private android.os.IBinder mRemote; |
| Proxy(android.os.IBinder remote) |
| { |
| mRemote = remote; |
| } |
| private int mCachedVersion = -1; |
| private String mCachedHash = "-1"; |
| @Override public android.os.IBinder asBinder() |
| { |
| return mRemote; |
| } |
| public java.lang.String getInterfaceDescriptor() |
| { |
| return DESCRIPTOR; |
| } |
| /** Methods applicable to any fingerprint type. */ |
| /** |
| * generateChallenge: |
| * |
| * Begins a secure transaction request. Note that the challenge by itself is not useful. It only |
| * becomes useful when wrapped in a verifiable message such as a HardwareAuthToken. |
| * |
| * Canonical example: |
| * 1) User requests an operation, such as fingerprint enrollment. |
| * 2) Fingerprint enrollment cannot happen until the user confirms their lockscreen credential |
| * (PIN/Pattern/Password). |
| * 3) However, the biometric subsystem does not want just "any" proof of credential |
| * confirmation. It needs proof that the user explicitly authenticated credential in order |
| * to allow addition of biometric enrollments. |
| * To secure this path, the following path is taken: |
| * 1) Upon user requesting fingerprint enroll, the framework requests |
| * ISession#generateChallenge |
| * 2) Framework sends the challenge to the credential subsystem, and upon credential |
| * confirmation, a HAT is created, containing the challenge in the "challenge" field. |
| * 3) Framework sends the HAT to the HAL, e.g. ISession#enroll. |
| * 4) Implementation verifies the authenticity and integrity of the HAT. |
| * 5) Implementation now has confidence that the user entered their credential to allow |
| * biometric enrollment. |
| * |
| * Note that this interface allows multiple in-flight challenges. Invoking generateChallenge |
| * twice does not invalidate the first challenge. The challenge is invalidated only when: |
| * 1) Its lifespan exceeds the HAL's internal challenge timeout |
| * 2) IFingerprint#revokeChallenge is invoked |
| * |
| * For example, the following is a possible table of valid challenges: |
| * ---------------------------------------------- |
| * | SensorId | UserId | ValidUntil | Challenge | |
| * |----------|--------|------------|-----------| |
| * | 0 | 0 | <Time1> | <Random1> | |
| * | 0 | 0 | <Time2> | <Random2> | |
| * | 1 | 0 | <Time3> | <Random3> | |
| * | 0 | 10 | <Time4> | <Random4> | |
| * ---------------------------------------------- |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeGenerated |
| */ |
| @Override public void generateChallenge() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_generateChallenge, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method generateChallenge is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * revokeChallenge: |
| * |
| * Revokes a challenge that was previously generated. Note that if a non-existent challenge is |
| * provided, the HAL must still notify the framework using ISessionCallback#onChallengeRevoked. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeRevoked |
| * |
| * @param challenge Challenge that should be revoked. |
| */ |
| @Override public void revokeChallenge(long challenge) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeLong(challenge); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_revokeChallenge, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method revokeChallenge is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * enroll: |
| * |
| * A request to add a fingerprint enrollment. |
| * |
| * At any point during enrollment, if a non-recoverable error occurs, the HAL must notify the |
| * framework via ISessionCallback#onError with the applicable enrollment-specific error. |
| * |
| * Before capturing fingerprint data, the HAL must first verify the authenticity and integrity |
| * of the provided HardwareAuthToken. In addition, it must check that the challenge within the |
| * provided HardwareAuthToken is valid. See ISession#generateChallenge. If any of the above |
| * checks fail, the framework must be notified using ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * During enrollment, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. Similarly, the framework may be notified of enrollment progress changes via |
| * ISessionCallback#onEnrollmentProgress. Once the framework is notified that there are 0 |
| * "remaining" steps, the framework may cache the "enrollmentId". See |
| * ISessionCallback#onEnrollmentProgress for more info. |
| * |
| * When a finger is successfully added and before the framework is notified of remaining=0, the |
| * HAL must update and associate this (sensorId, userId) pair with a new entropy-encoded random |
| * identifier. See ISession#getAuthenticatorId for more information. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onEnrollmentProgress(enrollmentId, remaining=0) |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @param hat See above documentation. |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal enroll(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(hat, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_enroll, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method enroll is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** |
| * authenticate: |
| * |
| * A request to start looking for fingerprints to authenticate. |
| * |
| * At any point during authentication, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable authentication-specific error. |
| * |
| * During authentication, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. |
| * |
| * The HAL must notify the framework of accepts and rejects via |
| * ISessionCallback#onAuthenticationSucceeded and ISessionCallback#onAuthenticationFailed, |
| * correspondingly. |
| * |
| * The authentication lifecycle ends when either: |
| * 1) A fingerprint is accepted, and ISessionCallback#onAuthenticationSucceeded is invoked. |
| * 2) Any non-recoverable error occurs (such as lockout). See the full list of |
| * authentication-specific errors in the Error enum. |
| * |
| * Note that upon successful authentication, the lockout counter for this (sensorId, userId) |
| * pair must be cleared. |
| * |
| * Note that upon successful authentication, ONLY sensors configured as SensorStrength::STRONG |
| * are allowed to create and send a HardwareAuthToken to the framework. See the Android CDD for |
| * more details. For SensorStrength::STRONG sensors, the HardwareAuthToken's "challenge" field |
| * must be set with the operationId passed in during #authenticate. If the sensor is NOT |
| * SensorStrength::STRONG, the HardwareAuthToken MUST be null. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onAuthenticationSucceeded |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * - ISessionCallback#onAuthenticationFailed |
| * - ISessionCallback#onLockoutTimed |
| * - ISessionCallback#onLockoutPermanent |
| * |
| * @param operationId For sensors configured as SensorStrength::STRONG, this must be used ONLY |
| * upon successful authentication and wrapped in the HardwareAuthToken's |
| * "challenge" field and sent to the framework via |
| * ISessionCallback#onAuthenticationSucceeded. The operationId is an opaque |
| * identifier created from a separate secure subsystem such as, but not |
| * limited to KeyStore/KeyMaster. The HardwareAuthToken can then be used as |
| * an attestation for the provided operation. For example, this is used to |
| * unlock biometric-bound auth-per-use keys (see |
| * setUserAuthenticationParameters in KeyGenParameterSpec.Builder and |
| * KeyProtection.Builder). |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal authenticate(long operationId) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeLong(operationId); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_authenticate, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method authenticate is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** |
| * detectInteraction: |
| * |
| * A request to start looking for fingerprints without performing matching. Must only be called |
| * if SensorProps#supportsDetectInteraction is true. If invoked on HALs that do not support this |
| * functionality, the HAL must respond with ISession#onError(UNABLE_TO_PROCESS, 0). |
| * |
| * The framework will use this operation in cases where determining user presence is required, |
| * but identifying/authenticating is not. For example, when the device is encrypted (first boot) |
| * or in lockdown mode. |
| * |
| * At any point during detectInteraction, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable error. |
| * |
| * The HAL must only check whether a fingerprint-like image was detected (e.g. to minimize |
| * interactions due to non-fingerprint objects), and the lockout counter must not be modified. |
| * |
| * Upon detecting any fingerprint, the HAL must invoke ISessionCallback#onInteractionDetected. |
| * |
| * The lifecycle of this operation ends when either: |
| * 1) Any fingerprint is detected and the framework is notified via |
| * ISessionCallback#onInteractionDetected. |
| * 2) An error occurs, for example Error::TIMEOUT. |
| * |
| * Note that if the operation is canceled, the HAL must notify the framework via |
| * ISessionCallback#onError with Error::CANCELED. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onInteractionDetected |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal detectInteraction() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_detectInteraction, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method detectInteraction is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** |
| * enumerateEnrollments: |
| * |
| * A request to enumerate (list) the enrollments for this (sensorId, userId) pair. The framework |
| * typically uses this to ensure that its cache is in sync with the HAL. |
| * |
| * The HAL must then notify the framework with a list of enrollments applicable for the current |
| * session via ISessionCallback#onEnrollmentsEnumerated. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsEnumerated |
| */ |
| @Override public void enumerateEnrollments() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_enumerateEnrollments, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method enumerateEnrollments is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * removeEnrollments: |
| * |
| * A request to remove the enrollments for this (sensorId, userId) pair. |
| * |
| * After removing the enrollmentIds from everywhere necessary (filesystem, secure subsystems, |
| * etc), the HAL must notify the framework via ISessionCallback#onEnrollmentsRemoved. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsRemoved |
| * |
| * @param enrollmentIds a list of enrollments that should be removed. |
| */ |
| @Override public void removeEnrollments(int[] enrollmentIds) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeIntArray(enrollmentIds); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_removeEnrollments, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method removeEnrollments is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * getAuthenticatorId: |
| * |
| * MUST return 0 via ISessionCallback#onAuthenticatorIdRetrieved for sensors that are configured |
| * as SensorStrength::WEAK or SensorStrength::CONVENIENCE. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * The authenticatorId is a (sensorId, user)-specific identifier which can be used during key |
| * generation and import to associate the key (in KeyStore / KeyMaster) with the current set of |
| * enrolled fingerprints. For example, the following public Android APIs allow for keys to be |
| * invalidated when the user adds a new enrollment after the key was created: |
| * KeyGenParameterSpec.Builder.setInvalidatedByBiometricEnrollment and |
| * KeyProtection.Builder.setInvalidatedByBiometricEnrollment. |
| * |
| * In addition, upon successful fingerprint authentication, the signed HAT that is returned to |
| * the framework via ISessionCallback#onAuthenticationSucceeded must contain this identifier in |
| * the authenticatorId field. |
| * |
| * Returns an entropy-encoded random identifier associated with the current set of enrollments |
| * via ISessionCallback#onAuthenticatorIdRetrieved. The authenticatorId |
| * 1) MUST change whenever a new fingerprint is enrolled |
| * 2) MUST return 0 if no fingerprints are enrolled |
| * 3) MUST not change if a fingerprint is deleted. |
| * 4) MUST be an entropy-encoded random number |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdRetrieved |
| */ |
| @Override public void getAuthenticatorId() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_getAuthenticatorId, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method getAuthenticatorId is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * invalidateAuthenticatorId: |
| * |
| * This operation only applies to sensors that are configured as SensorStrength::STRONG. If |
| * invoked by the framework for sensors of other strengths, the HAL should immediately invoke |
| * ISessionCallback#onAuthenticatorIdInvalidated. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * When invoked by the framework, the HAL must perform the following sequence of events: |
| * 1) Update the authenticatorId with a new entropy-encoded random number |
| * 2) Persist the new authenticatorId to non-ephemeral storage |
| * 3) Notify the framework that the above is completed, via |
| * ISessionCallback#onAuthenticatorInvalidated |
| * |
| * A practical use case of invalidation would be when the user adds a new enrollment to a sensor |
| * managed by a different HAL instance. The public android.security.keystore APIs bind keys to |
| * "all biometrics" rather than "fingerprint-only" or "face-only" (see #getAuthenticatorId for |
| * more details). As such, the framework would coordinate invalidation across multiple biometric |
| * HALs as necessary. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdInvalidated |
| */ |
| @Override public void invalidateAuthenticatorId() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_invalidateAuthenticatorId, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method invalidateAuthenticatorId is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * resetLockout: |
| * |
| * Requests the HAL to clear the lockout counter. Upon receiving this request, the HAL must |
| * perform the following: |
| * 1) Verify the authenticity and integrity of the provided HAT |
| * 2) Verify that the timestamp provided within the HAT is relatively recent (e.g. on the |
| * order of minutes, not hours). |
| * If either of the checks fail, the HAL must invoke ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * Upon successful verification, the HAL must clear the lockout counter and notify the framework |
| * via ISessionCallback#onLockoutCleared. |
| * |
| * Note that lockout is user AND sensor specific. In other words, there is a separate lockout |
| * state for each (user, sensor) pair. For example, the following is a valid state on a |
| * multi-sensor device: |
| * ------------------------------------------------------------------ |
| * | SensorId | UserId | FailedAttempts | LockedOut | LockedUntil | |
| * |----------|--------|----------------|-----------|---------------| |
| * | 0 | 0 | 1 | false | x | |
| * | 1 | 0 | 5 | true | <future_time> | |
| * | 0 | 10 | 0 | false | x | |
| * | 1 | 10 | 0 | false | x | |
| * ------------------------------------------------------------------ |
| * |
| * Lockout may be cleared in the following ways: |
| * 1) ISession#resetLockout |
| * 2) After a period of time, according to a rate-limiter. |
| * |
| * Note that the "FailedAttempts" counter must be cleared upon successful fingerprint |
| * authentication. For example, if SensorId=0 UserId=0 FailedAttempts=1, and a successful |
| * fingerprint authentication occurs, the counter for that (SensorId, UserId) pair must be reset |
| * to 0. |
| * |
| * In addition, lockout states MUST persist after device reboots, HAL crashes, etc. |
| * |
| * See the Android CDD section 7.3.10 for the full set of lockout and rate-limiting |
| * requirements. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onLockoutCleared |
| * |
| * @param hat HardwareAuthToken See above documentation. |
| */ |
| @Override public void resetLockout(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(hat, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_resetLockout, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method resetLockout is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * Close this session and allow the HAL to release the resources associated with this session. |
| * |
| * A session can only be closed when the HAL is idling, i.e. not performing any of the |
| * non-interruptable operations. If the HAL is busy performing a cancellable operation, the |
| * operation must be explicitly cancelled with a call to ICancellationSignal#cancel before |
| * the session can be closed. |
| * |
| * After a session is closed, the HAL must notify the framework by calling |
| * ISessionCallback#onSessionClosed. |
| * |
| * All sessions must be explicitly closed. Calling IFingerprint#createSession while there is an |
| * active session is considered an error. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onSessionClosed |
| */ |
| @Override public void close() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_close, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method close is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** Methods for notifying the under-display fingerprint sensor about external events. */ |
| /** |
| * onPointerDown: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * This operation is used to notify the HAL of display touches. This operation can be invoked |
| * when the HAL is performing any one of: ISession#authenticate, ISession#enroll, |
| * ISession#detectInteraction. |
| * |
| * Note that the framework will only invoke this operation if the event occurred on the display |
| * on which this sensor is located. |
| * |
| * Note that for sensors which require illumination such as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, and where illumination is handled below the |
| * framework, this is a good time to start illuminating. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * @param x The distance in pixels from the left edge of the display. |
| * @param y The distance in pixels from the top edge of the display. |
| * @param minor See android.view.MotionEvent#getTouchMinor |
| * @param major See android.view.MotionEvent#getTouchMajor |
| * |
| * @deprecated use onPointerDownWithContext instead. |
| */ |
| @Override public void onPointerDown(int pointerId, int x, int y, float minor, float major) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeInt(pointerId); |
| _data.writeInt(x); |
| _data.writeInt(y); |
| _data.writeFloat(minor); |
| _data.writeFloat(major); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onPointerDown, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onPointerDown is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * onPointerUp: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * |
| * @deprecated use onPointerUpWithContext instead. |
| */ |
| @Override public void onPointerUp(int pointerId) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeInt(pointerId); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onPointerUp, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onPointerUp is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * onUiReady: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL. If invoked for sensors of other types, the HAL |
| * must treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * For FingerprintSensorType::UNDER_DISPLAY_OPTICAL where illumination is handled above the |
| * HAL, the framework will invoke this operation to notify when the illumination is showing. |
| */ |
| @Override public void onUiReady() throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onUiReady, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onUiReady is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * These are alternative methods for some operations to allow the HAL to make optional |
| * optimizations during execution. |
| * |
| * HALs may ignore the additional context and treat all *WithContext methods the same as |
| * the original methods. |
| */ |
| /** See ISession#authenticate(long) */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal authenticateWithContext(long operationId, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeLong(operationId); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_authenticateWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method authenticateWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** See ISession#enroll(HardwareAuthToken) */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal enrollWithContext(android.hardware.keymaster.HardwareAuthToken hat, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(hat, 0); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_enrollWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method enrollWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** See ISession#detectInteraction() */ |
| @Override public android.hardware.biometrics.common.ICancellationSignal detectInteractionWithContext(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| android.hardware.biometrics.common.ICancellationSignal _result; |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_detectInteractionWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method detectInteractionWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| _result = android.hardware.biometrics.common.ICancellationSignal.Stub.asInterface(_reply.readStrongBinder()); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| return _result; |
| } |
| /** |
| * onPointerDownWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger entered the sensor area. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * Note that for sensors which require illumination, for example |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, this is a good time to start illuminating. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerDownWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onPointerDownWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onPointerDownWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * onPointerUpWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger left the sensor area. This operation can be invoked regardless |
| * of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerUpWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onPointerUpWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onPointerUpWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * onContextChanged: |
| * |
| * This may be called while an authenticate, detect interaction, or enrollment operation is |
| * running when the context changes. |
| */ |
| @Override public void onContextChanged(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onContextChanged, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onContextChanged is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * onPointerCancelWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that if there were fingers within the sensor area, they are no longer being |
| * tracked. The fingers may or may not still be on the sensor. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| @Override public void onPointerCancelWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeTypedObject(context, 0); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_onPointerCancelWithContext, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method onPointerCancelWithContext is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| /** |
| * setIgnoreDisplayTouches: |
| * |
| * This operation only applies to sensors that have SensorProps#halHandlesDisplayTouches |
| * set to true. For all other sensors this is a no-op. |
| * |
| * Instructs the HAL whether to ignore display touches. This can be useful to avoid unintended |
| * fingerprint captures during certain UI interactions. For example, when entering a lockscreen |
| * PIN, some of the touches might overlap with the fingerprint sensor. Those touches should be |
| * ignored to avoid unintended authentication attempts. |
| * |
| * This flag must default to false when the HAL starts. |
| * |
| * The framework is responsible for both setting the flag to true and resetting it to false |
| * whenever it's appropriate. |
| * |
| * @param shouldIgnore whether the display touches should be ignored. |
| * |
| * @deprecated use isHardwareIgnoringTouches in OperationContext from onContextChanged instead |
| */ |
| @Override public void setIgnoreDisplayTouches(boolean shouldIgnore) throws android.os.RemoteException |
| { |
| android.os.Parcel _data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel _reply = android.os.Parcel.obtain(); |
| try { |
| _data.writeInterfaceToken(DESCRIPTOR); |
| _data.writeBoolean(shouldIgnore); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_setIgnoreDisplayTouches, _data, _reply, 0); |
| if (!_status) { |
| throw new android.os.RemoteException("Method setIgnoreDisplayTouches is unimplemented."); |
| } |
| _reply.readException(); |
| } |
| finally { |
| _reply.recycle(); |
| _data.recycle(); |
| } |
| } |
| @Override |
| public int getInterfaceVersion() throws android.os.RemoteException { |
| if (mCachedVersion == -1) { |
| android.os.Parcel data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel reply = android.os.Parcel.obtain(); |
| try { |
| data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_getInterfaceVersion, data, reply, 0); |
| reply.readException(); |
| mCachedVersion = reply.readInt(); |
| } finally { |
| reply.recycle(); |
| data.recycle(); |
| } |
| } |
| return mCachedVersion; |
| } |
| @Override |
| public synchronized String getInterfaceHash() throws android.os.RemoteException { |
| if ("-1".equals(mCachedHash)) { |
| android.os.Parcel data = android.os.Parcel.obtain(asBinder()); |
| android.os.Parcel reply = android.os.Parcel.obtain(); |
| try { |
| data.writeInterfaceToken(DESCRIPTOR); |
| boolean _status = mRemote.transact(Stub.TRANSACTION_getInterfaceHash, data, reply, 0); |
| reply.readException(); |
| mCachedHash = reply.readString(); |
| } finally { |
| reply.recycle(); |
| data.recycle(); |
| } |
| } |
| return mCachedHash; |
| } |
| } |
| static final int TRANSACTION_generateChallenge = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); |
| static final int TRANSACTION_revokeChallenge = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); |
| static final int TRANSACTION_enroll = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); |
| static final int TRANSACTION_authenticate = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); |
| static final int TRANSACTION_detectInteraction = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); |
| static final int TRANSACTION_enumerateEnrollments = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); |
| static final int TRANSACTION_removeEnrollments = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); |
| static final int TRANSACTION_getAuthenticatorId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); |
| static final int TRANSACTION_invalidateAuthenticatorId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); |
| static final int TRANSACTION_resetLockout = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); |
| static final int TRANSACTION_close = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10); |
| static final int TRANSACTION_onPointerDown = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11); |
| static final int TRANSACTION_onPointerUp = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12); |
| static final int TRANSACTION_onUiReady = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13); |
| static final int TRANSACTION_authenticateWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 14); |
| static final int TRANSACTION_enrollWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 15); |
| static final int TRANSACTION_detectInteractionWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16); |
| static final int TRANSACTION_onPointerDownWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 17); |
| static final int TRANSACTION_onPointerUpWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 18); |
| static final int TRANSACTION_onContextChanged = (android.os.IBinder.FIRST_CALL_TRANSACTION + 19); |
| static final int TRANSACTION_onPointerCancelWithContext = (android.os.IBinder.FIRST_CALL_TRANSACTION + 20); |
| static final int TRANSACTION_setIgnoreDisplayTouches = (android.os.IBinder.FIRST_CALL_TRANSACTION + 21); |
| static final int TRANSACTION_getInterfaceVersion = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16777214); |
| static final int TRANSACTION_getInterfaceHash = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16777213); |
| /** @hide */ |
| public int getMaxTransactionId() |
| { |
| return 16777214; |
| } |
| } |
| /** @hide */ |
| public static final java.lang.String DESCRIPTOR = "android$hardware$biometrics$fingerprint$ISession".replace('$', '.'); |
| /** Methods applicable to any fingerprint type. */ |
| /** |
| * generateChallenge: |
| * |
| * Begins a secure transaction request. Note that the challenge by itself is not useful. It only |
| * becomes useful when wrapped in a verifiable message such as a HardwareAuthToken. |
| * |
| * Canonical example: |
| * 1) User requests an operation, such as fingerprint enrollment. |
| * 2) Fingerprint enrollment cannot happen until the user confirms their lockscreen credential |
| * (PIN/Pattern/Password). |
| * 3) However, the biometric subsystem does not want just "any" proof of credential |
| * confirmation. It needs proof that the user explicitly authenticated credential in order |
| * to allow addition of biometric enrollments. |
| * To secure this path, the following path is taken: |
| * 1) Upon user requesting fingerprint enroll, the framework requests |
| * ISession#generateChallenge |
| * 2) Framework sends the challenge to the credential subsystem, and upon credential |
| * confirmation, a HAT is created, containing the challenge in the "challenge" field. |
| * 3) Framework sends the HAT to the HAL, e.g. ISession#enroll. |
| * 4) Implementation verifies the authenticity and integrity of the HAT. |
| * 5) Implementation now has confidence that the user entered their credential to allow |
| * biometric enrollment. |
| * |
| * Note that this interface allows multiple in-flight challenges. Invoking generateChallenge |
| * twice does not invalidate the first challenge. The challenge is invalidated only when: |
| * 1) Its lifespan exceeds the HAL's internal challenge timeout |
| * 2) IFingerprint#revokeChallenge is invoked |
| * |
| * For example, the following is a possible table of valid challenges: |
| * ---------------------------------------------- |
| * | SensorId | UserId | ValidUntil | Challenge | |
| * |----------|--------|------------|-----------| |
| * | 0 | 0 | <Time1> | <Random1> | |
| * | 0 | 0 | <Time2> | <Random2> | |
| * | 1 | 0 | <Time3> | <Random3> | |
| * | 0 | 10 | <Time4> | <Random4> | |
| * ---------------------------------------------- |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeGenerated |
| */ |
| public void generateChallenge() throws android.os.RemoteException; |
| /** |
| * revokeChallenge: |
| * |
| * Revokes a challenge that was previously generated. Note that if a non-existent challenge is |
| * provided, the HAL must still notify the framework using ISessionCallback#onChallengeRevoked. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onChallengeRevoked |
| * |
| * @param challenge Challenge that should be revoked. |
| */ |
| public void revokeChallenge(long challenge) throws android.os.RemoteException; |
| /** |
| * enroll: |
| * |
| * A request to add a fingerprint enrollment. |
| * |
| * At any point during enrollment, if a non-recoverable error occurs, the HAL must notify the |
| * framework via ISessionCallback#onError with the applicable enrollment-specific error. |
| * |
| * Before capturing fingerprint data, the HAL must first verify the authenticity and integrity |
| * of the provided HardwareAuthToken. In addition, it must check that the challenge within the |
| * provided HardwareAuthToken is valid. See ISession#generateChallenge. If any of the above |
| * checks fail, the framework must be notified using ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * During enrollment, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. Similarly, the framework may be notified of enrollment progress changes via |
| * ISessionCallback#onEnrollmentProgress. Once the framework is notified that there are 0 |
| * "remaining" steps, the framework may cache the "enrollmentId". See |
| * ISessionCallback#onEnrollmentProgress for more info. |
| * |
| * When a finger is successfully added and before the framework is notified of remaining=0, the |
| * HAL must update and associate this (sensorId, userId) pair with a new entropy-encoded random |
| * identifier. See ISession#getAuthenticatorId for more information. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onEnrollmentProgress(enrollmentId, remaining=0) |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @param hat See above documentation. |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| public android.hardware.biometrics.common.ICancellationSignal enroll(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException; |
| /** |
| * authenticate: |
| * |
| * A request to start looking for fingerprints to authenticate. |
| * |
| * At any point during authentication, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable authentication-specific error. |
| * |
| * During authentication, the HAL may notify the framework via ISessionCallback#onAcquired with |
| * messages that may be used to guide the user. This callback can be invoked multiple times if |
| * necessary. |
| * |
| * The HAL must notify the framework of accepts and rejects via |
| * ISessionCallback#onAuthenticationSucceeded and ISessionCallback#onAuthenticationFailed, |
| * correspondingly. |
| * |
| * The authentication lifecycle ends when either: |
| * 1) A fingerprint is accepted, and ISessionCallback#onAuthenticationSucceeded is invoked. |
| * 2) Any non-recoverable error occurs (such as lockout). See the full list of |
| * authentication-specific errors in the Error enum. |
| * |
| * Note that upon successful authentication, the lockout counter for this (sensorId, userId) |
| * pair must be cleared. |
| * |
| * Note that upon successful authentication, ONLY sensors configured as SensorStrength::STRONG |
| * are allowed to create and send a HardwareAuthToken to the framework. See the Android CDD for |
| * more details. For SensorStrength::STRONG sensors, the HardwareAuthToken's "challenge" field |
| * must be set with the operationId passed in during #authenticate. If the sensor is NOT |
| * SensorStrength::STRONG, the HardwareAuthToken MUST be null. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onAuthenticationSucceeded |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * - ISessionCallback#onAuthenticationFailed |
| * - ISessionCallback#onLockoutTimed |
| * - ISessionCallback#onLockoutPermanent |
| * |
| * @param operationId For sensors configured as SensorStrength::STRONG, this must be used ONLY |
| * upon successful authentication and wrapped in the HardwareAuthToken's |
| * "challenge" field and sent to the framework via |
| * ISessionCallback#onAuthenticationSucceeded. The operationId is an opaque |
| * identifier created from a separate secure subsystem such as, but not |
| * limited to KeyStore/KeyMaster. The HardwareAuthToken can then be used as |
| * an attestation for the provided operation. For example, this is used to |
| * unlock biometric-bound auth-per-use keys (see |
| * setUserAuthenticationParameters in KeyGenParameterSpec.Builder and |
| * KeyProtection.Builder). |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| public android.hardware.biometrics.common.ICancellationSignal authenticate(long operationId) throws android.os.RemoteException; |
| /** |
| * detectInteraction: |
| * |
| * A request to start looking for fingerprints without performing matching. Must only be called |
| * if SensorProps#supportsDetectInteraction is true. If invoked on HALs that do not support this |
| * functionality, the HAL must respond with ISession#onError(UNABLE_TO_PROCESS, 0). |
| * |
| * The framework will use this operation in cases where determining user presence is required, |
| * but identifying/authenticating is not. For example, when the device is encrypted (first boot) |
| * or in lockdown mode. |
| * |
| * At any point during detectInteraction, if a non-recoverable error occurs, the HAL must notify |
| * the framework via ISessionCallback#onError with the applicable error. |
| * |
| * The HAL must only check whether a fingerprint-like image was detected (e.g. to minimize |
| * interactions due to non-fingerprint objects), and the lockout counter must not be modified. |
| * |
| * Upon detecting any fingerprint, the HAL must invoke ISessionCallback#onInteractionDetected. |
| * |
| * The lifecycle of this operation ends when either: |
| * 1) Any fingerprint is detected and the framework is notified via |
| * ISessionCallback#onInteractionDetected. |
| * 2) An error occurs, for example Error::TIMEOUT. |
| * |
| * Note that if the operation is canceled, the HAL must notify the framework via |
| * ISessionCallback#onError with Error::CANCELED. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onError |
| * - ISessionCallback#onInteractionDetected |
| * |
| * Other applicable callbacks: |
| * - ISessionCallback#onAcquired |
| * |
| * @return ICancellationSignal An object that can be used by the framework to cancel this |
| * operation. |
| */ |
| public android.hardware.biometrics.common.ICancellationSignal detectInteraction() throws android.os.RemoteException; |
| /** |
| * enumerateEnrollments: |
| * |
| * A request to enumerate (list) the enrollments for this (sensorId, userId) pair. The framework |
| * typically uses this to ensure that its cache is in sync with the HAL. |
| * |
| * The HAL must then notify the framework with a list of enrollments applicable for the current |
| * session via ISessionCallback#onEnrollmentsEnumerated. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsEnumerated |
| */ |
| public void enumerateEnrollments() throws android.os.RemoteException; |
| /** |
| * removeEnrollments: |
| * |
| * A request to remove the enrollments for this (sensorId, userId) pair. |
| * |
| * After removing the enrollmentIds from everywhere necessary (filesystem, secure subsystems, |
| * etc), the HAL must notify the framework via ISessionCallback#onEnrollmentsRemoved. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onEnrollmentsRemoved |
| * |
| * @param enrollmentIds a list of enrollments that should be removed. |
| */ |
| public void removeEnrollments(int[] enrollmentIds) throws android.os.RemoteException; |
| /** |
| * getAuthenticatorId: |
| * |
| * MUST return 0 via ISessionCallback#onAuthenticatorIdRetrieved for sensors that are configured |
| * as SensorStrength::WEAK or SensorStrength::CONVENIENCE. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * The authenticatorId is a (sensorId, user)-specific identifier which can be used during key |
| * generation and import to associate the key (in KeyStore / KeyMaster) with the current set of |
| * enrolled fingerprints. For example, the following public Android APIs allow for keys to be |
| * invalidated when the user adds a new enrollment after the key was created: |
| * KeyGenParameterSpec.Builder.setInvalidatedByBiometricEnrollment and |
| * KeyProtection.Builder.setInvalidatedByBiometricEnrollment. |
| * |
| * In addition, upon successful fingerprint authentication, the signed HAT that is returned to |
| * the framework via ISessionCallback#onAuthenticationSucceeded must contain this identifier in |
| * the authenticatorId field. |
| * |
| * Returns an entropy-encoded random identifier associated with the current set of enrollments |
| * via ISessionCallback#onAuthenticatorIdRetrieved. The authenticatorId |
| * 1) MUST change whenever a new fingerprint is enrolled |
| * 2) MUST return 0 if no fingerprints are enrolled |
| * 3) MUST not change if a fingerprint is deleted. |
| * 4) MUST be an entropy-encoded random number |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdRetrieved |
| */ |
| public void getAuthenticatorId() throws android.os.RemoteException; |
| /** |
| * invalidateAuthenticatorId: |
| * |
| * This operation only applies to sensors that are configured as SensorStrength::STRONG. If |
| * invoked by the framework for sensors of other strengths, the HAL should immediately invoke |
| * ISessionCallback#onAuthenticatorIdInvalidated. |
| * |
| * The following only applies to sensors that are configured as SensorStrength::STRONG. |
| * |
| * When invoked by the framework, the HAL must perform the following sequence of events: |
| * 1) Update the authenticatorId with a new entropy-encoded random number |
| * 2) Persist the new authenticatorId to non-ephemeral storage |
| * 3) Notify the framework that the above is completed, via |
| * ISessionCallback#onAuthenticatorInvalidated |
| * |
| * A practical use case of invalidation would be when the user adds a new enrollment to a sensor |
| * managed by a different HAL instance. The public android.security.keystore APIs bind keys to |
| * "all biometrics" rather than "fingerprint-only" or "face-only" (see #getAuthenticatorId for |
| * more details). As such, the framework would coordinate invalidation across multiple biometric |
| * HALs as necessary. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onAuthenticatorIdInvalidated |
| */ |
| public void invalidateAuthenticatorId() throws android.os.RemoteException; |
| /** |
| * resetLockout: |
| * |
| * Requests the HAL to clear the lockout counter. Upon receiving this request, the HAL must |
| * perform the following: |
| * 1) Verify the authenticity and integrity of the provided HAT |
| * 2) Verify that the timestamp provided within the HAT is relatively recent (e.g. on the |
| * order of minutes, not hours). |
| * If either of the checks fail, the HAL must invoke ISessionCallback#onError with |
| * Error::UNABLE_TO_PROCESS. |
| * |
| * Upon successful verification, the HAL must clear the lockout counter and notify the framework |
| * via ISessionCallback#onLockoutCleared. |
| * |
| * Note that lockout is user AND sensor specific. In other words, there is a separate lockout |
| * state for each (user, sensor) pair. For example, the following is a valid state on a |
| * multi-sensor device: |
| * ------------------------------------------------------------------ |
| * | SensorId | UserId | FailedAttempts | LockedOut | LockedUntil | |
| * |----------|--------|----------------|-----------|---------------| |
| * | 0 | 0 | 1 | false | x | |
| * | 1 | 0 | 5 | true | <future_time> | |
| * | 0 | 10 | 0 | false | x | |
| * | 1 | 10 | 0 | false | x | |
| * ------------------------------------------------------------------ |
| * |
| * Lockout may be cleared in the following ways: |
| * 1) ISession#resetLockout |
| * 2) After a period of time, according to a rate-limiter. |
| * |
| * Note that the "FailedAttempts" counter must be cleared upon successful fingerprint |
| * authentication. For example, if SensorId=0 UserId=0 FailedAttempts=1, and a successful |
| * fingerprint authentication occurs, the counter for that (SensorId, UserId) pair must be reset |
| * to 0. |
| * |
| * In addition, lockout states MUST persist after device reboots, HAL crashes, etc. |
| * |
| * See the Android CDD section 7.3.10 for the full set of lockout and rate-limiting |
| * requirements. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onLockoutCleared |
| * |
| * @param hat HardwareAuthToken See above documentation. |
| */ |
| public void resetLockout(android.hardware.keymaster.HardwareAuthToken hat) throws android.os.RemoteException; |
| /** |
| * Close this session and allow the HAL to release the resources associated with this session. |
| * |
| * A session can only be closed when the HAL is idling, i.e. not performing any of the |
| * non-interruptable operations. If the HAL is busy performing a cancellable operation, the |
| * operation must be explicitly cancelled with a call to ICancellationSignal#cancel before |
| * the session can be closed. |
| * |
| * After a session is closed, the HAL must notify the framework by calling |
| * ISessionCallback#onSessionClosed. |
| * |
| * All sessions must be explicitly closed. Calling IFingerprint#createSession while there is an |
| * active session is considered an error. |
| * |
| * Callbacks that signify the end of this operation's lifecycle: |
| * - ISessionCallback#onSessionClosed |
| */ |
| public void close() throws android.os.RemoteException; |
| /** Methods for notifying the under-display fingerprint sensor about external events. */ |
| /** |
| * onPointerDown: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * This operation is used to notify the HAL of display touches. This operation can be invoked |
| * when the HAL is performing any one of: ISession#authenticate, ISession#enroll, |
| * ISession#detectInteraction. |
| * |
| * Note that the framework will only invoke this operation if the event occurred on the display |
| * on which this sensor is located. |
| * |
| * Note that for sensors which require illumination such as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, and where illumination is handled below the |
| * framework, this is a good time to start illuminating. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * @param x The distance in pixels from the left edge of the display. |
| * @param y The distance in pixels from the top edge of the display. |
| * @param minor See android.view.MotionEvent#getTouchMinor |
| * @param major See android.view.MotionEvent#getTouchMajor |
| * |
| * @deprecated use onPointerDownWithContext instead. |
| */ |
| @Deprecated |
| public void onPointerDown(int pointerId, int x, int y, float minor, float major) throws android.os.RemoteException; |
| /** |
| * onPointerUp: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * @param pointerId See android.view.MotionEvent#getPointerId |
| * |
| * @deprecated use onPointerUpWithContext instead. |
| */ |
| @Deprecated |
| public void onPointerUp(int pointerId) throws android.os.RemoteException; |
| /** |
| * onUiReady: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL. If invoked for sensors of other types, the HAL |
| * must treat this as a no-op and return immediately. |
| * |
| * This operation can be invoked when the HAL is performing any one of: ISession#authenticate, |
| * ISession#enroll, ISession#detectInteraction. |
| * |
| * For FingerprintSensorType::UNDER_DISPLAY_OPTICAL where illumination is handled above the |
| * HAL, the framework will invoke this operation to notify when the illumination is showing. |
| */ |
| public void onUiReady() throws android.os.RemoteException; |
| /** |
| * These are alternative methods for some operations to allow the HAL to make optional |
| * optimizations during execution. |
| * |
| * HALs may ignore the additional context and treat all *WithContext methods the same as |
| * the original methods. |
| */ |
| /** See ISession#authenticate(long) */ |
| public android.hardware.biometrics.common.ICancellationSignal authenticateWithContext(long operationId, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException; |
| /** See ISession#enroll(HardwareAuthToken) */ |
| public android.hardware.biometrics.common.ICancellationSignal enrollWithContext(android.hardware.keymaster.HardwareAuthToken hat, android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException; |
| /** See ISession#detectInteraction() */ |
| public android.hardware.biometrics.common.ICancellationSignal detectInteractionWithContext(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException; |
| /** |
| * onPointerDownWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked erroneously by the framework for sensors |
| * of other types, the HAL must treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger entered the sensor area. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * Note that for sensors which require illumination, for example |
| * FingerprintSensorType::UNDER_DISPLAY_OPTICAL, this is a good time to start illuminating. |
| * |
| * @param context See PointerContext |
| */ |
| public void onPointerDownWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException; |
| /** |
| * onPointerUpWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that a finger left the sensor area. This operation can be invoked regardless |
| * of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| public void onPointerUpWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException; |
| /** |
| * onContextChanged: |
| * |
| * This may be called while an authenticate, detect interaction, or enrollment operation is |
| * running when the context changes. |
| */ |
| public void onContextChanged(android.hardware.biometrics.common.OperationContext context) throws android.os.RemoteException; |
| /** |
| * onPointerCancelWithContext: |
| * |
| * This operation only applies to sensors that are configured as |
| * FingerprintSensorType::UNDER_DISPLAY_*. If invoked for sensors of other types, the HAL must |
| * treat this as a no-op and return immediately. |
| * |
| * Notifies the HAL that if there were fingers within the sensor area, they are no longer being |
| * tracked. The fingers may or may not still be on the sensor. This operation can be invoked |
| * regardless of the current state of the HAL. |
| * |
| * @param context See PointerContext |
| */ |
| public void onPointerCancelWithContext(android.hardware.biometrics.fingerprint.PointerContext context) throws android.os.RemoteException; |
| /** |
| * setIgnoreDisplayTouches: |
| * |
| * This operation only applies to sensors that have SensorProps#halHandlesDisplayTouches |
| * set to true. For all other sensors this is a no-op. |
| * |
| * Instructs the HAL whether to ignore display touches. This can be useful to avoid unintended |
| * fingerprint captures during certain UI interactions. For example, when entering a lockscreen |
| * PIN, some of the touches might overlap with the fingerprint sensor. Those touches should be |
| * ignored to avoid unintended authentication attempts. |
| * |
| * This flag must default to false when the HAL starts. |
| * |
| * The framework is responsible for both setting the flag to true and resetting it to false |
| * whenever it's appropriate. |
| * |
| * @param shouldIgnore whether the display touches should be ignored. |
| * |
| * @deprecated use isHardwareIgnoringTouches in OperationContext from onContextChanged instead |
| */ |
| @Deprecated |
| public void setIgnoreDisplayTouches(boolean shouldIgnore) throws android.os.RemoteException; |
| public int getInterfaceVersion() throws android.os.RemoteException; |
| public String getInterfaceHash() throws android.os.RemoteException; |
| } |