From 82a7c8e59bdf7a11d4a5e9ef26f69918083ea959 Mon Sep 17 00:00:00 2001 From: Joe Bolinger Date: Wed, 19 Jan 2022 12:11:33 -0800 Subject: [PATCH 1/2] Remove useless type. Replace with standard jvm type. Bug: 204585936 Test: Builds Change-Id: Icd0be731236d417d5c3675982c6ee0a035f4240f --- .../biometrics/sensors/AcquisitionClient.java | 4 +++- .../sensors/AuthenticationClient.java | 3 ++- .../biometrics/sensors/EnrollClient.java | 3 ++- .../sensors/GenerateChallengeClient.java | 4 +++- .../biometrics/sensors/HalClientMonitor.java | 17 ++++--------- .../sensors/InternalCleanupClient.java | 7 +++--- .../sensors/InternalEnumerateClient.java | 3 ++- .../sensors/InvalidationClient.java | 3 ++- .../biometrics/sensors/RemovalClient.java | 3 ++- .../sensors/RevokeChallengeClient.java | 4 +++- .../biometrics/sensors/StartUserClient.java | 4 +++- .../biometrics/sensors/StopUserClient.java | 4 +++- .../face/aidl/FaceAuthenticationClient.java | 3 ++- .../sensors/face/aidl/FaceDetectClient.java | 4 +++- .../sensors/face/aidl/FaceEnrollClient.java | 3 ++- .../aidl/FaceGenerateChallengeClient.java | 4 +++- .../aidl/FaceGetAuthenticatorIdClient.java | 3 ++- .../face/aidl/FaceGetFeatureClient.java | 3 ++- .../face/aidl/FaceInternalCleanupClient.java | 7 +++--- .../aidl/FaceInternalEnumerateClient.java | 3 ++- .../face/aidl/FaceInvalidationClient.java | 3 ++- .../sensors/face/aidl/FaceRemovalClient.java | 3 ++- .../face/aidl/FaceResetLockoutClient.java | 4 +++- .../face/aidl/FaceRevokeChallengeClient.java | 4 +++- .../face/aidl/FaceSetFeatureClient.java | 4 +++- .../face/aidl/FaceStartUserClient.java | 4 +++- .../sensors/face/aidl/FaceStopUserClient.java | 4 +++- .../biometrics/sensors/face/aidl/Sensor.java | 6 ++--- .../biometrics/sensors/face/hidl/Face10.java | 4 ++-- .../face/hidl/FaceAuthenticationClient.java | 3 ++- .../sensors/face/hidl/FaceEnrollClient.java | 3 ++- .../hidl/FaceGenerateChallengeClient.java | 3 ++- .../face/hidl/FaceGetFeatureClient.java | 4 +++- .../face/hidl/FaceInternalCleanupClient.java | 7 +++--- .../hidl/FaceInternalEnumerateClient.java | 3 ++- .../sensors/face/hidl/FaceRemovalClient.java | 3 ++- .../face/hidl/FaceResetLockoutClient.java | 3 ++- .../face/hidl/FaceRevokeChallengeClient.java | 4 +++- .../face/hidl/FaceSetFeatureClient.java | 3 ++- .../face/hidl/FaceUpdateActiveUserClient.java | 3 ++- .../aidl/FingerprintAuthenticationClient.java | 3 ++- .../aidl/FingerprintDetectClient.java | 4 +++- .../aidl/FingerprintEnrollClient.java | 4 +++- .../FingerprintGenerateChallengeClient.java | 4 +++- .../FingerprintGetAuthenticatorIdClient.java | 3 ++- .../FingerprintInternalCleanupClient.java | 7 +++--- .../FingerprintInternalEnumerateClient.java | 3 ++- .../aidl/FingerprintInvalidationClient.java | 3 ++- .../aidl/FingerprintRemovalClient.java | 3 ++- .../aidl/FingerprintResetLockoutClient.java | 4 +++- .../FingerprintRevokeChallengeClient.java | 4 +++- .../aidl/FingerprintStartUserClient.java | 4 +++- .../aidl/FingerprintStopUserClient.java | 4 +++- .../sensors/fingerprint/aidl/Sensor.java | 6 ++--- .../fingerprint/hidl/Fingerprint21.java | 4 ++-- .../hidl/FingerprintAuthenticationClient.java | 3 ++- .../hidl/FingerprintDetectClient.java | 3 ++- .../hidl/FingerprintEnrollClient.java | 4 +++- .../FingerprintGenerateChallengeClient.java | 4 +++- .../FingerprintInternalCleanupClient.java | 7 +++--- .../FingerprintInternalEnumerateClient.java | 3 ++- .../hidl/FingerprintRemovalClient.java | 3 ++- .../FingerprintRevokeChallengeClient.java | 4 +++- .../FingerprintUpdateActiveUserClient.java | 2 +- .../sensors/AcquisitionClientTest.java | 4 +++- .../sensors/BiometricSchedulerTest.java | 24 ++++++++++--------- .../UserAwareBiometricSchedulerTest.java | 6 +++-- 67 files changed, 186 insertions(+), 105 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java index 86d72ba1c06f0..3936d5bff1922 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -29,6 +29,8 @@ import android.os.VibrationEffect; import android.os.Vibrator; import android.util.Slog; +import java.util.function.Supplier; + /** * Abstract {@link HalClientMonitor} subclass that operations eligible/interested in acquisition * messages should extend. @@ -57,7 +59,7 @@ public abstract class AcquisitionClient extends HalClientMonitor implement */ protected abstract void stopHalOperation(); - public AcquisitionClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public AcquisitionClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int cookie, int sensorId, boolean shouldVibrate, int statsModality, int statsAction, int statsClient) { diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java index 35a0f575ec977..6e3e8821d116a 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java @@ -42,6 +42,7 @@ import com.android.server.biometrics.Utils; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; /** * A class to keep track of the authentication state for a given client. @@ -105,7 +106,7 @@ public abstract class AuthenticationClient extends AcquisitionClient */ public abstract boolean wasUserDetected(); - public AuthenticationClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public AuthenticationClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation, int sensorId, boolean isStrongBiometric, diff --git a/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java index 3b7adc1a61763..74f4931cf2aaa 100644 --- a/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java @@ -29,6 +29,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import java.util.Arrays; +import java.util.function.Supplier; /** * A class to keep track of the enrollment state for a given client. @@ -49,7 +50,7 @@ public abstract class EnrollClient extends AcquisitionClient implements En */ protected abstract boolean hasReachedEnrollmentLimit(); - public EnrollClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public EnrollClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils, int timeoutSec, int statsModality, int sensorId, boolean shouldVibrate) { diff --git a/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java index 6fb6d08cd602e..9689418b1f1ac 100644 --- a/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java @@ -25,11 +25,13 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import java.util.function.Supplier; + public abstract class GenerateChallengeClient extends HalClientMonitor { private static final String TAG = "GenerateChallengeClient"; - public GenerateChallengeClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public GenerateChallengeClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java index c8830f8049a21..603af9c86cddf 100644 --- a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java @@ -22,20 +22,13 @@ import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.os.IBinder; +import java.util.function.Supplier; + /** * Abstract {@link BaseClientMonitor} implementation that supports HAL operations. * @param HAL template */ public abstract class HalClientMonitor extends BaseClientMonitor { - /** - * Interface that allows ClientMonitor subclasses to retrieve a fresh instance to the HAL. - */ - public interface LazyDaemon { - /** - * @return A fresh instance to the biometric HAL - */ - T getDaemon(); - } /** * Starts the HAL operation specific to the ClientMonitor subclass. @@ -50,7 +43,7 @@ public abstract class HalClientMonitor extends BaseClientMonitor { public abstract void unableToStart(); @NonNull - protected final LazyDaemon mLazyDaemon; + protected final Supplier mLazyDaemon; /** * @param context system_server context @@ -65,7 +58,7 @@ public abstract class HalClientMonitor extends BaseClientMonitor { * @param statsAction One of {@link BiometricsProtoEnums} ACTION_* constants * @param statsClient One of {@link BiometricsProtoEnums} CLIENT_* constants */ - public HalClientMonitor(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public HalClientMonitor(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int cookie, int sensorId, int statsModality, int statsAction, int statsClient) { @@ -76,6 +69,6 @@ public abstract class HalClientMonitor extends BaseClientMonitor { @Nullable public T getFreshDaemon() { - return mLazyDaemon.getDaemon(); + return mLazyDaemon.get(); } } diff --git a/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java index 0636893eabf73..0e6d11ec51825 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java @@ -28,6 +28,7 @@ import com.android.server.biometrics.BiometricsProto; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Supplier; /** * Wraps {@link InternalEnumerateClient} and {@link RemovalClient}. Keeps track of all the @@ -99,14 +100,14 @@ public abstract class InternalCleanupClient getEnumerateClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int userId, String owner, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId); protected abstract RemovalClient getRemovalClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int biometricId, int userId, String owner, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds); - protected InternalCleanupClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + protected InternalCleanupClient(@NonNull Context context, @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, int statsModality, @NonNull List enrolledList, @NonNull BiometricUtils utils, @NonNull Map authenticatorIds) { diff --git a/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java index 05ea19a3aa14e..5f97f3711a608 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java @@ -27,6 +27,7 @@ import com.android.server.biometrics.BiometricsProto; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; /** * Internal class to help clean up unknown templates in the HAL and Framework @@ -43,7 +44,7 @@ public abstract class InternalEnumerateClient extends HalClientMonitor // List of templates to remove from the HAL private List mUnknownHALTemplates = new ArrayList<>(); - protected InternalEnumerateClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + protected InternalEnumerateClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId, int statsModality) { diff --git a/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java b/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java index ee6bb0f0886ae..697d77cfbee67 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java @@ -27,6 +27,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import java.util.Map; +import java.util.function.Supplier; /** * ClientMonitor subclass for requesting authenticatorId invalidation. See @@ -40,7 +41,7 @@ public abstract class InvalidationClient mAuthenticatorIds; @NonNull private final IInvalidationCallback mInvalidationCallback; - public InvalidationClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public InvalidationClient(@NonNull Context context, @NonNull Supplier lazyDaemon, int userId, int sensorId, @NonNull Map authenticatorIds, @NonNull IInvalidationCallback callback) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, diff --git a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java index e79819b401eac..a0cef94fcf48b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java @@ -27,6 +27,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import java.util.Map; +import java.util.function.Supplier; /** * A class to keep track of the remove state for a given client. @@ -40,7 +41,7 @@ public abstract class RemovalClient mAuthenticatorIds; private final boolean mHasEnrollmentsBeforeStarting; - public RemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public RemovalClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds, int statsModality) { diff --git a/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java index 21a6ddfcde66e..7d8386337eceb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java @@ -23,9 +23,11 @@ import android.os.IBinder; import com.android.server.biometrics.BiometricsProto; +import java.util.function.Supplier; + public abstract class RevokeChallengeClient extends HalClientMonitor { - public RevokeChallengeClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public RevokeChallengeClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, null /* listener */, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_UNKNOWN, diff --git a/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java index 3d6932639c1c2..a74fe4f63cb62 100644 --- a/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java @@ -25,6 +25,8 @@ import android.os.IBinder; import com.android.internal.annotations.VisibleForTesting; import com.android.server.biometrics.BiometricsProto; +import java.util.function.Supplier; + /** * Abstract class for starting a new user. * @param Interface to request a new user. @@ -43,7 +45,7 @@ public abstract class StartUserClient extends HalClientMonitor { @NonNull @VisibleForTesting protected final UserStartedCallback mUserStartedCallback; - public StartUserClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public StartUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStartedCallback callback) { super(context, lazyDaemon, token, null /* listener */, userId, context.getOpPackageName(), diff --git a/services/core/java/com/android/server/biometrics/sensors/StopUserClient.java b/services/core/java/com/android/server/biometrics/sensors/StopUserClient.java index 1f6e1e95050d4..3eafbb8ea9d72 100644 --- a/services/core/java/com/android/server/biometrics/sensors/StopUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/StopUserClient.java @@ -25,6 +25,8 @@ import android.os.IBinder; import com.android.internal.annotations.VisibleForTesting; import com.android.server.biometrics.BiometricsProto; +import java.util.function.Supplier; + /** * Abstract class for stopping a user. * @param Interface for stopping the user. @@ -43,7 +45,7 @@ public abstract class StopUserClient extends HalClientMonitor { getCallback().onClientFinished(this, true /* success */); } - public StopUserClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public StopUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, null /* listener */, userId, context.getOpPackageName(), diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java index dc21a04fb4464..f9a0efc4b1014 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java @@ -48,6 +48,7 @@ import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.face.UsageStats; import java.util.ArrayList; +import java.util.function.Supplier; /** * Face-specific authentication client for the {@link IFace} AIDL HAL interface. @@ -69,7 +70,7 @@ class FaceAuthenticationClient extends AuthenticationClient implements @FaceManager.FaceAcquired private int mLastAcquire = FaceManager.FACE_ACQUIRED_UNKNOWN; FaceAuthenticationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, String owner, int cookie, boolean requireConfirmation, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java index 72a20db077dd7..84ce8df08ef27 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java @@ -34,6 +34,8 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.DetectionConsumer; +import java.util.function.Supplier; + /** * Performs face detection without exposing any matching information (e.g. accept/reject have the * same haptic, lockout counter is not increased). @@ -46,7 +48,7 @@ public class FaceDetectClient extends AcquisitionClient implements Det @Nullable private ICancellationSignal mCancellationSignal; @Nullable private SensorPrivacyManager mSensorPrivacyManager; - public FaceDetectClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public FaceDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, boolean isStrongBiometric, int statsClient) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java index 5c57dbbffedbf..b1be9fbe443dd 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java @@ -51,6 +51,7 @@ import com.android.server.biometrics.sensors.face.FaceUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; /** * Face-specific enroll client for the {@link IFace} AIDL HAL interface. @@ -82,7 +83,7 @@ public class FaceEnrollClient extends EnrollClient { } }; - FaceEnrollClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceEnrollClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String opPackageName, long requestId, @NonNull BiometricUtils utils, @NonNull int[] disabledFeatures, int timeoutSec, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java index 7cdeebb87fece..aebbc5348f95b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java @@ -27,6 +27,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.GenerateChallengeClient; +import java.util.function.Supplier; + /** * Face-specific generateChallenge client for the {@link IFace} AIDL HAL interface. */ @@ -34,7 +36,7 @@ public class FaceGenerateChallengeClient extends GenerateChallengeClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetAuthenticatorIdClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetAuthenticatorIdClient.java index 584b58cdd7c7b..98aed7e6d6343 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetAuthenticatorIdClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetAuthenticatorIdClient.java @@ -28,6 +28,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.Map; +import java.util.function.Supplier; class FaceGetAuthenticatorIdClient extends HalClientMonitor { @@ -35,7 +36,7 @@ class FaceGetAuthenticatorIdClient extends HalClientMonitor { private final Map mAuthenticatorIds; - FaceGetAuthenticatorIdClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceGetAuthenticatorIdClient(@NonNull Context context, @NonNull Supplier lazyDaemon, int userId, @NonNull String opPackageName, int sensorId, Map authenticatorIds) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, opPackageName, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java index acf5720cd0cf5..3401587caa341 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java @@ -36,6 +36,7 @@ import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; /** * Face-specific get feature client for the {@link IFace} AIDL HAL interface. @@ -46,7 +47,7 @@ public class FaceGetFeatureClient extends HalClientMonitor implements private final int mUserId; - FaceGetFeatureClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceGetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java index c6696aed6520d..19095c59896f0 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.RemovalClient; import java.util.List; import java.util.Map; +import java.util.function.Supplier; /** * Face-specific internal cleanup client for the {@link IFace} AIDL HAL interface. @@ -38,7 +39,7 @@ import java.util.Map; class FaceInternalCleanupClient extends InternalCleanupClient { FaceInternalCleanupClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull BiometricUtils utils, @NonNull Map authenticatorIds) { super(context, lazyDaemon, userId, owner, sensorId, BiometricsProtoEnums.MODALITY_FACE, @@ -47,7 +48,7 @@ class FaceInternalCleanupClient extends InternalCleanupClient { @Override protected InternalEnumerateClient getEnumerateClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int userId, String owner, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FaceInternalEnumerateClient(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId); @@ -55,7 +56,7 @@ class FaceInternalCleanupClient extends InternalCleanupClient { @Override protected RemovalClient getRemovalClient(Context context, - LazyDaemon lazyDaemon, IBinder token, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { // Internal remove does not need to send results to anyone. Cleanup (enumerate + remove) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java index 0ece884ecff81..de5f1154fd2b4 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalEnumerateClient; import java.util.List; +import java.util.function.Supplier; /** * Face-specific internal enumerate client for the {@link IFace} AIDL HAL interface. @@ -38,7 +39,7 @@ class FaceInternalEnumerateClient extends InternalEnumerateClient { private static final String TAG = "FaceInternalEnumerateClient"; FaceInternalEnumerateClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, int userId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java index 405e2b23b3af0..416921a0b098b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java @@ -27,12 +27,13 @@ import android.util.Slog; import com.android.server.biometrics.sensors.InvalidationClient; import java.util.Map; +import java.util.function.Supplier; public class FaceInvalidationClient extends InvalidationClient { private static final String TAG = "FaceInvalidationClient"; public FaceInvalidationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, int sensorId, + @NonNull Supplier lazyDaemon, int userId, int sensorId, @NonNull Map authenticatorIds, @NonNull IInvalidationCallback callback) { super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java index ba678f3b19ae1..1995c378fff90 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; +import java.util.function.Supplier; /** * Face-specific removal client for the {@link IFace} AIDL HAL interface. @@ -40,7 +41,7 @@ class FaceRemovalClient extends RemovalClient { final int[] mBiometricIds; - FaceRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceRemovalClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int[] biometricIds, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java index fd44c5cf4afc5..0a3e7651bac4f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java @@ -34,6 +34,8 @@ import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; +import java.util.function.Supplier; + /** * Face-specific resetLockout client for the {@link IFace} AIDL HAL interface. * Updates the framework's lockout cache and notifies clients such as Keyguard when lockout is @@ -48,7 +50,7 @@ public class FaceResetLockoutClient extends HalClientMonitor implement private final LockoutResetDispatcher mLockoutResetDispatcher; FaceResetLockoutClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, String owner, int sensorId, + @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, @NonNull byte[] hardwareAuthToken, @NonNull LockoutCache lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java index 7a69c443411f6..5e902ac480a5f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java @@ -26,6 +26,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.RevokeChallengeClient; +import java.util.function.Supplier; + /** * Face-specific revokeChallenge client for the {@link IFace} AIDL HAL interface. */ @@ -36,7 +38,7 @@ public class FaceRevokeChallengeClient extends RevokeChallengeClient { private final long mChallenge; FaceRevokeChallengeClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId, long challenge) { super(context, lazyDaemon, token, userId, owner, sensorId); mChallenge = challenge; diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java index ee6982abd9ed1..962f900c87fd2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java @@ -33,6 +33,8 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.HalClientMonitor; +import java.util.function.Supplier; + /** * Face-specific get feature client for the {@link IFace} AIDL HAL interface. */ @@ -44,7 +46,7 @@ public class FaceSetFeatureClient extends HalClientMonitor implements private final boolean mEnabled; private final HardwareAuthToken mHardwareAuthToken; - FaceSetFeatureClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceSetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, boolean enabled, byte[] hardwareAuthToken) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java index 4a3da0d929dcb..9b559034b9aff 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java @@ -30,12 +30,14 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StartUserClient; +import java.util.function.Supplier; + public class FaceStartUserClient extends StartUserClient { private static final String TAG = "FaceStartUserClient"; @NonNull private final ISessionCallback mSessionCallback; - public FaceStartUserClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public FaceStartUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull ISessionCallback sessionCallback, @NonNull UserStartedCallback callback) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java index 88b92359268c9..55da0d284af90 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java @@ -27,10 +27,12 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StopUserClient; +import java.util.function.Supplier; + public class FaceStopUserClient extends StopUserClient { private static final String TAG = "FaceStopUserClient"; - public FaceStopUserClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + public FaceStopUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, userId, sensorId, callback); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index 206b8f0779e8e..6ae3a9e3a821c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -53,7 +53,6 @@ import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricScheduler; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.Interruptable; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; @@ -67,6 +66,7 @@ import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; /** * Maintains the state of a single sensor within an instance of the {@link IFace} HAL. @@ -84,7 +84,7 @@ public class Sensor { @NonNull private final UserAwareBiometricScheduler mScheduler; @NonNull private final LockoutCache mLockoutCache; @NonNull private final Map mAuthenticatorIds; - @NonNull private final HalClientMonitor.LazyDaemon mLazySession; + @NonNull private final Supplier mLazySession; @Nullable private Session mCurrentSession; static class Session { @@ -545,7 +545,7 @@ public class Sensor { mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; } - @NonNull HalClientMonitor.LazyDaemon getLazySession() { + @NonNull Supplier getLazySession() { return mLazySession; } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java index 9a52db19ecdad..586abe2d6298e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java @@ -64,7 +64,6 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.PerformanceTracker; @@ -89,6 +88,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Supplier; /** * Supports a single instance of the {@link android.hardware.biometrics.face.V1_0} or its extended @@ -111,7 +111,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @NonNull private final Context mContext; @NonNull private final BiometricScheduler mScheduler; @NonNull private final Handler mHandler; - @NonNull private final HalClientMonitor.LazyDaemon mLazyDaemon; + @NonNull private final Supplier mLazyDaemon; @NonNull private final LockoutHalImpl mLockoutTracker; @NonNull private final UsageStats mUsageStats; @NonNull private final Map mAuthenticatorIds; diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java index 1e0e7992bf874..9038435c10217 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient.java @@ -41,6 +41,7 @@ import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.face.UsageStats; import java.util.ArrayList; +import java.util.function.Supplier; /** * Face-specific authentication client supporting the {@link android.hardware.biometrics.face.V1_0} @@ -61,7 +62,7 @@ class FaceAuthenticationClient extends AuthenticationClient { private SensorPrivacyManager mSensorPrivacyManager; FaceAuthenticationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, String owner, int cookie, boolean requireConfirmation, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceEnrollClient.java index 8068e14cf0f0c..92f7253779ed8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceEnrollClient.java @@ -40,6 +40,7 @@ import com.android.server.biometrics.sensors.EnrollClient; import java.util.ArrayList; import java.util.Arrays; +import java.util.function.Supplier; /** * Face-specific enroll client supporting the {@link android.hardware.biometrics.face.V1_0} HIDL @@ -53,7 +54,7 @@ public class FaceEnrollClient extends EnrollClient { @NonNull private final int[] mEnrollIgnoreList; @NonNull private final int[] mEnrollIgnoreListVendor; - FaceEnrollClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceEnrollClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, long requestId, @NonNull BiometricUtils utils, @NonNull int[] disabledFeatures, int timeoutSec, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient.java index e29a1923e47e6..b66ad608b4caf 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.GenerateChallengeClient; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; /** * Face-specific generateChallenge client supporting the @@ -48,7 +49,7 @@ public class FaceGenerateChallengeClient extends GenerateChallengeClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, long now) { super(context, lazyDaemon, token, listener, userId, owner, sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGetFeatureClient.java index 0a9d96d00eb6f..1b387bf7879af 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceGetFeatureClient.java @@ -32,6 +32,8 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.HalClientMonitor; +import java.util.function.Supplier; + /** * Face-specific getFeature client supporting the {@link android.hardware.biometrics.face.V1_0} * HIDL interface. @@ -44,7 +46,7 @@ public class FaceGetFeatureClient extends HalClientMonitor { private final int mFaceId; private boolean mValue; - FaceGetFeatureClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceGetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, int faceId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalCleanupClient.java index 1e3b92dcbf619..93a2913fbfa16 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalCleanupClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.RemovalClient; import java.util.List; import java.util.Map; +import java.util.function.Supplier; /** * Face-specific internal cleanup client supporting the @@ -38,7 +39,7 @@ import java.util.Map; class FaceInternalCleanupClient extends InternalCleanupClient { FaceInternalCleanupClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull BiometricUtils utils, @NonNull Map authenticatorIds) { super(context, lazyDaemon, userId, owner, sensorId, BiometricsProtoEnums.MODALITY_FACE, @@ -47,7 +48,7 @@ class FaceInternalCleanupClient extends InternalCleanupClient getEnumerateClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int userId, String owner, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FaceInternalEnumerateClient(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId); @@ -55,7 +56,7 @@ class FaceInternalCleanupClient extends InternalCleanupClient getRemovalClient(Context context, - LazyDaemon lazyDaemon, IBinder token, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { // Internal remove does not need to send results to anyone. Cleanup (enumerate + remove) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalEnumerateClient.java index f2a9afce1ff75..f1788de385657 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceInternalEnumerateClient.java @@ -29,6 +29,7 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalEnumerateClient; import java.util.List; +import java.util.function.Supplier; /** * Face-specific internal enumerate client supporting the @@ -38,7 +39,7 @@ class FaceInternalEnumerateClient extends InternalEnumerateClient lazyDaemon, @NonNull IBinder token, int userId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java index 3ae201134debb..cbc23e49f4d8f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRemovalClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; +import java.util.function.Supplier; /** * Face-specific removal client supporting the {@link android.hardware.biometrics.face.V1_0} @@ -40,7 +41,7 @@ class FaceRemovalClient extends RemovalClient { private final int mBiometricId; - FaceRemovalClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceRemovalClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceResetLockoutClient.java index ee01c43a2e732..88e2318b05702 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceResetLockoutClient.java @@ -28,6 +28,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.ArrayList; +import java.util.function.Supplier; /** * Face-specific resetLockout client supporting the {@link android.hardware.biometrics.face.V1_0} @@ -40,7 +41,7 @@ public class FaceResetLockoutClient extends HalClientMonitor { private final ArrayList mHardwareAuthToken; FaceResetLockoutClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, String owner, int sensorId, + @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, @NonNull byte[] hardwareAuthToken) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_UNKNOWN, diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient.java index 5ec7a9819b27d..ab8d16145fab7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient.java @@ -25,6 +25,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.RevokeChallengeClient; +import java.util.function.Supplier; + /** * Face-specific revokeChallenge client supporting the {@link android.hardware.biometrics.face.V1_0} * HIDL interface. @@ -34,7 +36,7 @@ public class FaceRevokeChallengeClient extends RevokeChallengeClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, userId, owner, sensorId); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceSetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceSetFeatureClient.java index ee28f7b0f3047..b2b52e713ec93 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceSetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceSetFeatureClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.ArrayList; +import java.util.function.Supplier; /** * Face-specific setFeature client supporting the {@link android.hardware.biometrics.face.V1_0} @@ -45,7 +46,7 @@ public class FaceSetFeatureClient extends HalClientMonitor { private final ArrayList mHardwareAuthToken; private final int mFaceId; - FaceSetFeatureClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FaceSetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, boolean enabled, byte[] hardwareAuthToken, int faceId) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient.java index 8ee8ce5220352..04b93274e42b2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.HalClientMonitor; import java.io.File; import java.util.Map; +import java.util.function.Supplier; public class FaceUpdateActiveUserClient extends HalClientMonitor { private static final String TAG = "FaceUpdateActiveUserClient"; @@ -39,7 +40,7 @@ public class FaceUpdateActiveUserClient extends HalClientMonitor mAuthenticatorIds; FaceUpdateActiveUserClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, boolean hasEnrolledBiometrics, @NonNull Map authenticatorIds) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java index f3d0121c98eb2..62a8a47da9114 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java @@ -47,6 +47,7 @@ import com.android.server.biometrics.sensors.SensorOverlays; import com.android.server.biometrics.sensors.fingerprint.Udfps; import java.util.ArrayList; +import java.util.function.Supplier; /** * Fingerprint-specific authentication client supporting the @@ -65,7 +66,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp private boolean mIsPointerDown; FingerprintAuthenticationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java index 1f0482db228b3..55960f61d4aeb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java @@ -35,6 +35,8 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.DetectionConsumer; import com.android.server.biometrics.sensors.SensorOverlays; +import java.util.function.Supplier; + /** * Performs fingerprint detection without exposing any matching information (e.g. accept/reject * have the same haptic, lockout counter is not increased). @@ -47,7 +49,7 @@ class FingerprintDetectClient extends AcquisitionClient implements Det @NonNull private final SensorOverlays mSensorOverlays; @Nullable private ICancellationSignal mCancellationSignal; - FingerprintDetectClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, + FingerprintDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java index 169c3ebec1a74..ee47e9586265b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java @@ -46,6 +46,8 @@ import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; import com.android.server.biometrics.sensors.fingerprint.Udfps; import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper; +import java.util.function.Supplier; + class FingerprintEnrollClient extends EnrollClient implements Udfps { private static final String TAG = "FingerprintEnrollClient"; @@ -59,7 +61,7 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { private boolean mIsPointerDown; FingerprintEnrollClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, long requestId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java index 4f54f8ade7c00..37131768f6d86 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java @@ -27,6 +27,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.GenerateChallengeClient; +import java.util.function.Supplier; + /** * Fingerprint-specific generateChallenge client for the {@link IFingerprint} AIDL HAL interface. */ @@ -34,7 +36,7 @@ class FingerprintGenerateChallengeClient extends GenerateChallengeClient lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGetAuthenticatorIdClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGetAuthenticatorIdClient.java index 52bd234fcc5dd..bfb979bc98641 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGetAuthenticatorIdClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGetAuthenticatorIdClient.java @@ -28,6 +28,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.Map; +import java.util.function.Supplier; class FingerprintGetAuthenticatorIdClient extends HalClientMonitor { @@ -36,7 +37,7 @@ class FingerprintGetAuthenticatorIdClient extends HalClientMonitor { private final Map mAuthenticatorIds; FingerprintGetAuthenticatorIdClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, Map authenticatorIds) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_FINGERPRINT, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java index 0de3f4f8cce23..a608ba572f571 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; import java.util.List; import java.util.Map; +import java.util.function.Supplier; /** * Fingerprint-specific internal cleanup client supporting the @@ -39,7 +40,7 @@ import java.util.Map; class FingerprintInternalCleanupClient extends InternalCleanupClient { FingerprintInternalCleanupClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull FingerprintUtils utils, @NonNull Map authenticatorIds) { super(context, lazyDaemon, userId, owner, sensorId, @@ -48,7 +49,7 @@ class FingerprintInternalCleanupClient extends InternalCleanupClient getEnumerateClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int userId, String owner, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FingerprintInternalEnumerateClient(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId); @@ -56,7 +57,7 @@ class FingerprintInternalCleanupClient extends InternalCleanupClient getRemovalClient(Context context, - LazyDaemon lazyDaemon, IBinder token, int biometricId, int userId, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { return new FingerprintRemovalClient(context, lazyDaemon, token, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java index e20544a86d010..e2ec823f00667 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java @@ -29,6 +29,7 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalEnumerateClient; import java.util.List; +import java.util.function.Supplier; /** * Fingerprint-specific internal client supporting the @@ -38,7 +39,7 @@ class FingerprintInternalEnumerateClient extends InternalEnumerateClient lazyDaemon, @NonNull IBinder token, int userId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInvalidationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInvalidationClient.java index 6cd2ef1aa0e6c..91e3e2a4b8f7f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInvalidationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInvalidationClient.java @@ -27,12 +27,13 @@ import android.util.Slog; import com.android.server.biometrics.sensors.InvalidationClient; import java.util.Map; +import java.util.function.Supplier; public class FingerprintInvalidationClient extends InvalidationClient { private static final String TAG = "FingerprintInvalidationClient"; public FingerprintInvalidationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, int sensorId, + @NonNull Supplier lazyDaemon, int userId, int sensorId, @NonNull Map authenticatorIds, @NonNull IInvalidationCallback callback) { super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java index 9a9d6ab19eb6e..2cef8570387cf 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java @@ -31,6 +31,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; +import java.util.function.Supplier; /** * Fingerprint-specific removal client supporting the @@ -42,7 +43,7 @@ class FingerprintRemovalClient extends RemovalClient { private final int[] mBiometricIds; FingerprintRemovalClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int[] biometricIds, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java index ee8d170af4074..9c7df589d29f2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java @@ -34,6 +34,8 @@ import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; +import java.util.function.Supplier; + /** * Fingerprint-specific resetLockout client for the {@link IFingerprint} AIDL HAL interface. * Updates the framework's lockout cache and notifies clients such as Keyguard when lockout is @@ -48,7 +50,7 @@ class FingerprintResetLockoutClient extends HalClientMonitor implement private final LockoutResetDispatcher mLockoutResetDispatcher; FingerprintResetLockoutClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, String owner, int sensorId, + @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, @NonNull byte[] hardwareAuthToken, @NonNull LockoutCache lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java index 9e6f1bc2ff677..28292010fe748 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java @@ -26,6 +26,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.RevokeChallengeClient; +import java.util.function.Supplier; + /** * Fingerprint-specific revokeChallenge client for the {@link IFingerprint} AIDL HAL interface. */ @@ -36,7 +38,7 @@ class FingerprintRevokeChallengeClient extends RevokeChallengeClient { private final long mChallenge; FingerprintRevokeChallengeClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId, long challenge) { super(context, lazyDaemon, token, userId, owner, sensorId); mChallenge = challenge; diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java index 9f11df6b939b9..ef53df4ca594f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java @@ -30,13 +30,15 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StartUserClient; +import java.util.function.Supplier; + public class FingerprintStartUserClient extends StartUserClient { private static final String TAG = "FingerprintStartUserClient"; @NonNull private final ISessionCallback mSessionCallback; public FingerprintStartUserClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull ISessionCallback sessionCallback, @NonNull UserStartedCallback callback) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStopUserClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStopUserClient.java index 9d381459566a1..d9b0dfcc90bd9 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStopUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStopUserClient.java @@ -27,11 +27,13 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StopUserClient; +import java.util.function.Supplier; + public class FingerprintStopUserClient extends StopUserClient { private static final String TAG = "FingerprintStopUserClient"; public FingerprintStopUserClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @Nullable IBinder token, int userId, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, userId, sensorId, callback); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java index 59e4b582ca84e..e1e73a32661a3 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java @@ -51,7 +51,6 @@ import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricScheduler; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -66,6 +65,7 @@ import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDisp import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; /** * Maintains the state of a single sensor within an instance of the @@ -87,7 +87,7 @@ class Sensor { @NonNull private final Map mAuthenticatorIds; @Nullable private Session mCurrentSession; - @NonNull private final HalClientMonitor.LazyDaemon mLazySession; + @NonNull private final Supplier mLazySession; static class Session { @NonNull private final String mTag; @@ -500,7 +500,7 @@ class Sensor { mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; } - @NonNull HalClientMonitor.LazyDaemon getLazySession() { + @NonNull Supplier getLazySession() { return mLazySession; } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java index f160dfff52491..29d460fc12043 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java @@ -67,7 +67,6 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.PerformanceTracker; @@ -90,6 +89,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Supplier; /** * Supports a single instance of the {@link android.hardware.biometrics.fingerprint.V2_1} or @@ -111,7 +111,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider private final LockoutResetDispatcher mLockoutResetDispatcher; private final LockoutFrameworkImpl mLockoutTracker; private final BiometricTaskStackListener mTaskStackListener; - private final HalClientMonitor.LazyDaemon mLazyDaemon; + private final Supplier mLazyDaemon; private final Map mAuthenticatorIds; @Nullable private IBiometricsFingerprint mDaemon; diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java index 87d47c1cffc54..589bfcfba9928 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient.java @@ -45,6 +45,7 @@ import com.android.server.biometrics.sensors.fingerprint.Udfps; import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper; import java.util.ArrayList; +import java.util.function.Supplier; /** * Fingerprint-specific authentication client supporting the @@ -64,7 +65,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient.java index 9137212253e8b..88487462e51a1 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient.java @@ -40,6 +40,7 @@ import com.android.server.biometrics.sensors.fingerprint.Udfps; import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper; import java.util.ArrayList; +import java.util.function.Supplier; /** * Performs fingerprint detection without exposing any matching information (e.g. accept/reject @@ -55,7 +56,7 @@ class FingerprintDetectClient extends AcquisitionClient private boolean mIsPointerDown; public FingerprintDetectClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, @Nullable IUdfpsOverlayController udfpsOverlayController, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java index 82b046d0ffd2b..c69deac371d90 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java @@ -41,6 +41,8 @@ import com.android.server.biometrics.sensors.SensorOverlays; import com.android.server.biometrics.sensors.fingerprint.Udfps; import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper; +import java.util.function.Supplier; + /** * Fingerprint-specific enroll client supporting the * {@link android.hardware.biometrics.fingerprint.V2_1} and @@ -56,7 +58,7 @@ public class FingerprintEnrollClient extends EnrollClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils, int timeoutSec, int sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient.java index db2f0455a4755..591f542396ef5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient.java @@ -26,6 +26,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.GenerateChallengeClient; +import java.util.function.Supplier; + /** * Fingerprint-specific generateChallenge/preEnroll client supporting the * {@link android.hardware.biometrics.fingerprint.V2_1} and @@ -37,7 +39,7 @@ public class FingerprintGenerateChallengeClient private static final String TAG = "FingerprintGenerateChallengeClient"; FingerprintGenerateChallengeClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, sensorId); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient.java index a42a8ae24926d..403602b8839db 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.RemovalClient; import java.util.List; import java.util.Map; +import java.util.function.Supplier; /** * Fingerprint-specific internal cleanup client supporting the @@ -40,7 +41,7 @@ class FingerprintInternalCleanupClient extends InternalCleanupClient { FingerprintInternalCleanupClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, int userId, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull BiometricUtils utils, @NonNull Map authenticatorIds) { @@ -50,7 +51,7 @@ class FingerprintInternalCleanupClient @Override protected InternalEnumerateClient getEnumerateClient( - Context context, LazyDaemon lazyDaemon, IBinder token, + Context context, Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FingerprintInternalEnumerateClient(context, lazyDaemon, token, userId, owner, @@ -59,7 +60,7 @@ class FingerprintInternalCleanupClient @Override protected RemovalClient getRemovalClient(Context context, - LazyDaemon lazyDaemon, IBinder token, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { // Internal remove does not need to send results to anyone. Cleanup (enumerate + remove) diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalEnumerateClient.java index 7117cf382a60b..def8ed0735f59 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalEnumerateClient.java @@ -29,6 +29,7 @@ import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.InternalEnumerateClient; import java.util.List; +import java.util.function.Supplier; /** * Fingerprint-specific internal enumerate client supporting the @@ -39,7 +40,7 @@ class FingerprintInternalEnumerateClient extends InternalEnumerateClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java index 2f360f31a325f..77c201c5ec97c 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRemovalClient.java @@ -30,6 +30,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; +import java.util.function.Supplier; /** * Fingerprint-specific removal client supporting the @@ -42,7 +43,7 @@ class FingerprintRemovalClient extends RemovalClient lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRevokeChallengeClient.java index b6b29b32d909e..0180a466d7d60 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintRevokeChallengeClient.java @@ -25,6 +25,8 @@ import android.util.Slog; import com.android.server.biometrics.sensors.RevokeChallengeClient; +import java.util.function.Supplier; + /** * Fingerprint-specific revokeChallenge client supporting the * {@link android.hardware.biometrics.fingerprint.V2_1} and @@ -36,7 +38,7 @@ public class FingerprintRevokeChallengeClient private static final String TAG = "FingerprintRevokeChallengeClient"; FingerprintRevokeChallengeClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, userId, owner, sensorId); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient.java index d317984c140d1..cb9c33eb9956a 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient.java @@ -49,7 +49,7 @@ public class FingerprintUpdateActiveUserClient extends HalClientMonitor lazyDaemon, int userId, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, Supplier currentUserId, boolean hasEnrolledBiometrics, @NonNull Map authenticatorIds, boolean forceUpdateAuthenticatorId) { diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AcquisitionClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AcquisitionClientTest.java index fc55a9f4cf801..9bb722f8a853e 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AcquisitionClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AcquisitionClientTest.java @@ -39,6 +39,8 @@ import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.function.Supplier; + @Presubmit @SmallTest public class AcquisitionClientTest { @@ -87,7 +89,7 @@ public class AcquisitionClientTest { boolean mHalOperationRunning; public TestAcquisitionClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter callback) { super(context, lazyDaemon, token, callback, 0 /* userId */, "Test", 0 /* cookie */, TEST_SENSOR_ID /* sensorId */, true /* shouldVibrate */, 0 /* statsModality */, diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java index c99d656892f40..ecd9abcb80e64 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java @@ -61,6 +61,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.function.Supplier; + @Presubmit @SmallTest @RunWith(AndroidTestingRunner.class) @@ -93,7 +95,7 @@ public class BiometricSchedulerTest { @Test public void testClientDuplicateFinish_ignoredBySchedulerAndDoesNotCrash() { - final HalClientMonitor.LazyDaemon nonNullDaemon = () -> mock(Object.class); + final Supplier nonNullDaemon = () -> mock(Object.class); final HalClientMonitor client1 = new TestHalClientMonitor(mContext, mToken, nonNullDaemon); @@ -184,7 +186,7 @@ public class BiometricSchedulerTest { @Test public void testCancelNotInvoked_whenOperationWaitingForCookie() { - final HalClientMonitor.LazyDaemon lazyDaemon1 = () -> mock(Object.class); + final Supplier lazyDaemon1 = () -> mock(Object.class); final TestAuthenticationClient client1 = new TestAuthenticationClient(mContext, lazyDaemon1, mToken, mock(ClientMonitorCallbackConverter.class)); final ClientMonitorCallback callback1 = mock(ClientMonitorCallback.class); @@ -296,7 +298,7 @@ public class BiometricSchedulerTest { @Test public void testCancelPendingAuth() throws RemoteException { - final HalClientMonitor.LazyDaemon lazyDaemon = () -> mock(Object.class); + final Supplier lazyDaemon = () -> mock(Object.class); final TestHalClientMonitor client1 = new TestHalClientMonitor(mContext, mToken, lazyDaemon); final ClientMonitorCallbackConverter callback = mock(ClientMonitorCallbackConverter.class); final TestAuthenticationClient client2 = new TestAuthenticationClient(mContext, lazyDaemon, @@ -360,7 +362,7 @@ public class BiometricSchedulerTest { private void testCancelsAuthDetectWhenRequestId(@Nullable Long requestId, long cancelRequestId, boolean started) { - final HalClientMonitor.LazyDaemon lazyDaemon = () -> mock(Object.class); + final Supplier lazyDaemon = () -> mock(Object.class); final ClientMonitorCallbackConverter callback = mock(ClientMonitorCallbackConverter.class); testCancelsWhenRequestId(requestId, cancelRequestId, started, new TestAuthenticationClient(mContext, lazyDaemon, mToken, callback)); @@ -383,7 +385,7 @@ public class BiometricSchedulerTest { private void testCancelsEnrollWhenRequestId(@Nullable Long requestId, long cancelRequestId, boolean started) { - final HalClientMonitor.LazyDaemon lazyDaemon = () -> mock(Object.class); + final Supplier lazyDaemon = () -> mock(Object.class); final ClientMonitorCallbackConverter callback = mock(ClientMonitorCallbackConverter.class); testCancelsWhenRequestId(requestId, cancelRequestId, started, new TestEnrollClient(mContext, lazyDaemon, mToken, callback)); @@ -441,7 +443,7 @@ public class BiometricSchedulerTest { public void testCancelsPending_whenAuthRequestIdsSet() { final long requestId1 = 10; final long requestId2 = 20; - final HalClientMonitor.LazyDaemon lazyDaemon = () -> mock(Object.class); + final Supplier lazyDaemon = () -> mock(Object.class); final ClientMonitorCallbackConverter callback = mock(ClientMonitorCallbackConverter.class); final TestAuthenticationClient client1 = new TestAuthenticationClient( mContext, lazyDaemon, mToken, callback); @@ -500,7 +502,7 @@ public class BiometricSchedulerTest { @Test public void testClientDestroyed_afterFinish() { - final HalClientMonitor.LazyDaemon nonNullDaemon = () -> mock(Object.class); + final Supplier nonNullDaemon = () -> mock(Object.class); final TestHalClientMonitor client = new TestHalClientMonitor(mContext, mToken, nonNullDaemon); mScheduler.scheduleClientMonitor(client); @@ -520,7 +522,7 @@ public class BiometricSchedulerTest { int mNumCancels = 0; public TestAuthenticationClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener) { super(context, lazyDaemon, token, listener, 0 /* targetUserId */, 0 /* operationId */, false /* restricted */, TAG, 1 /* cookie */, false /* requireConfirmation */, @@ -567,7 +569,7 @@ public class BiometricSchedulerTest { int mNumCancels = 0; TestEnrollClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener) { super(context, lazyDaemon, token, listener, 0 /* userId */, new byte[69], "test" /* owner */, mock(BiometricUtils.class), @@ -604,12 +606,12 @@ public class BiometricSchedulerTest { private boolean mDestroyed; TestHalClientMonitor(@NonNull Context context, @NonNull IBinder token, - @NonNull LazyDaemon lazyDaemon) { + @NonNull Supplier lazyDaemon) { this(context, token, lazyDaemon, 0 /* cookie */, BiometricsProto.CM_UPDATE_ACTIVE_USER); } TestHalClientMonitor(@NonNull Context context, @NonNull IBinder token, - @NonNull LazyDaemon lazyDaemon, int cookie, int protoEnum) { + @NonNull Supplier lazyDaemon, int cookie, int protoEnum) { super(context, lazyDaemon, token /* token */, null /* listener */, 0 /* userId */, TAG, cookie, TEST_SENSOR_ID, 0 /* statsModality */, 0 /* statsAction */, 0 /* statsClient */); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java index a11709aff87fe..25904e026b608 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java @@ -47,6 +47,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.function.Supplier; + @Presubmit @RunWith(AndroidTestingRunner.class) @RunWithLooper @@ -223,7 +225,7 @@ public class UserAwareBiometricSchedulerTest { private static class TestStopUserClient extends StopUserClient { public TestStopUserClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @Nullable IBinder token, int userId, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, userId, sensorId, callback); } @@ -251,7 +253,7 @@ public class UserAwareBiometricSchedulerTest { ClientMonitorCallback mCallback; public TestStartUserClient(@NonNull Context context, - @NonNull LazyDaemon lazyDaemon, @Nullable IBinder token, int userId, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStartedCallback callback, boolean shouldFinish) { super(context, lazyDaemon, token, userId, sensorId, callback); mShouldFinish = shouldFinish; From 40c2f1a3178e65b4bce56ba5f4fb90f65a5f3a9a Mon Sep 17 00:00:00 2001 From: Joe Bolinger Date: Wed, 19 Jan 2022 12:59:00 -0800 Subject: [PATCH 2/2] Use new context HAL methods for all biometric operations. Bug: 204584403 Bug: 204585936 Test: manual (via BP test app) Test: atest com.android.server.biometrics.sensors Change-Id: I653cc16595ffbc3346ad5009b4b742cd14aecc12 --- .../biometrics/sensors/AcquisitionClient.java | 10 +-- .../sensors/AuthenticationClient.java | 32 ++++----- .../biometrics/sensors/HalClientMonitor.java | 26 ++++---- .../biometrics/sensors/StartUserClient.java | 2 +- .../sensors/face/aidl/AidlSession.java | 66 +++++++++++++++++++ .../face/aidl/BiometricTestSessionImpl.java | 10 +-- .../face/aidl/FaceAuthenticationClient.java | 26 ++++++-- .../sensors/face/aidl/FaceDetectClient.java | 25 +++++-- .../sensors/face/aidl/FaceEnrollClient.java | 34 ++++++++-- .../aidl/FaceGenerateChallengeClient.java | 7 +- .../aidl/FaceGetAuthenticatorIdClient.java | 8 +-- .../face/aidl/FaceGetFeatureClient.java | 7 +- .../face/aidl/FaceInternalCleanupClient.java | 13 ++-- .../aidl/FaceInternalEnumerateClient.java | 7 +- .../face/aidl/FaceInvalidationClient.java | 7 +- .../sensors/face/aidl/FaceRemovalClient.java | 7 +- .../face/aidl/FaceResetLockoutClient.java | 7 +- .../face/aidl/FaceRevokeChallengeClient.java | 7 +- .../face/aidl/FaceSetFeatureClient.java | 8 +-- .../face/aidl/FaceStartUserClient.java | 10 +-- .../sensors/face/aidl/FaceStopUserClient.java | 8 +-- .../biometrics/sensors/face/aidl/Sensor.java | 52 ++++++--------- .../sensors/fingerprint/aidl/AidlSession.java | 65 ++++++++++++++++++ .../aidl/BiometricTestSessionImpl.java | 10 +-- .../aidl/FingerprintAuthenticationClient.java | 53 +++++++++++++-- .../aidl/FingerprintDetectClient.java | 25 +++++-- .../aidl/FingerprintEnrollClient.java | 57 +++++++++++++--- .../FingerprintGenerateChallengeClient.java | 7 +- .../FingerprintGetAuthenticatorIdClient.java | 7 +- .../FingerprintInternalCleanupClient.java | 13 ++-- .../FingerprintInternalEnumerateClient.java | 7 +- .../aidl/FingerprintInvalidationClient.java | 7 +- .../aidl/FingerprintRemovalClient.java | 7 +- .../aidl/FingerprintResetLockoutClient.java | 7 +- .../FingerprintRevokeChallengeClient.java | 7 +- .../aidl/FingerprintStartUserClient.java | 7 +- .../aidl/FingerprintStopUserClient.java | 8 +-- .../sensors/fingerprint/aidl/Sensor.java | 51 +++++--------- .../UserAwareBiometricSchedulerTest.java | 5 +- .../sensors/face/aidl/SensorTest.java | 4 +- .../sensors/fingerprint/aidl/SensorTest.java | 4 +- 41 files changed, 483 insertions(+), 247 deletions(-) create mode 100644 services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlSession.java create mode 100644 services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/AidlSession.java diff --git a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java index 3936d5bff1922..8b8103e6e2c93 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -54,11 +54,6 @@ public abstract class AcquisitionClient extends HalClientMonitor implement private boolean mShouldSendErrorToClient = true; private boolean mAlreadyCancelled; - /** - * Stops the HAL operation specific to the ClientMonitor subclass. - */ - protected abstract void stopHalOperation(); - public AcquisitionClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int cookie, int sensorId, boolean shouldVibrate, @@ -69,6 +64,11 @@ public abstract class AcquisitionClient extends HalClientMonitor implement mShouldVibrate = shouldVibrate; } + /** + * Stops the HAL operation specific to the ClientMonitor subclass. + */ + protected abstract void stopHalOperation(); + @Override public void unableToStart() { try { diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java index 6e3e8821d116a..b715faf3ca8f8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java @@ -90,22 +90,6 @@ public abstract class AuthenticationClient extends AcquisitionClient // the state. We should think of a way to improve this in the future. protected @State int mState = STATE_NEW; - /** - * Handles lifecycle, e.g. {@link BiometricScheduler}, - * {@link ClientMonitorCallback} after authentication - * results are known. Note that this happens asynchronously from (but shortly after) - * {@link #onAuthenticated(BiometricAuthenticator.Identifier, boolean, ArrayList)} and allows - * {@link CoexCoordinator} a chance to invoke/delay this event. - * @param authenticated - */ - protected abstract void handleLifecycleAfterAuth(boolean authenticated); - - /** - * @return true if a user was detected (i.e. face was found, fingerprint sensor was touched. - * etc) - */ - public abstract boolean wasUserDetected(); - public AuthenticationClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, @NonNull String owner, @@ -475,6 +459,22 @@ public abstract class AuthenticationClient extends AcquisitionClient } } + /** + * Handles lifecycle, e.g. {@link BiometricScheduler}, + * {@link com.android.server.biometrics.sensors.BaseClientMonitor.Callback} after authentication + * results are known. Note that this happens asynchronously from (but shortly after) + * {@link #onAuthenticated(BiometricAuthenticator.Identifier, boolean, ArrayList)} and allows + * {@link CoexCoordinator} a chance to invoke/delay this event. + * @param authenticated + */ + protected abstract void handleLifecycleAfterAuth(boolean authenticated); + + /** + * @return true if a user was detected (i.e. face was found, fingerprint sensor was touched. + * etc) + */ + public abstract boolean wasUserDetected(); + public @State int getState() { return mState; } diff --git a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java index 603af9c86cddf..66a1c6e876aba 100644 --- a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java @@ -29,19 +29,7 @@ import java.util.function.Supplier; * @param HAL template */ public abstract class HalClientMonitor extends BaseClientMonitor { - - /** - * Starts the HAL operation specific to the ClientMonitor subclass. - */ - protected abstract void startHalOperation(); - - /** - * Invoked if the scheduler is unable to start the ClientMonitor (for example the HAL is null). - * If such a problem is detected, the scheduler will not invoke - * {@link #start(ClientMonitorCallback)}. - */ - public abstract void unableToStart(); - + @NonNull protected final Supplier mLazyDaemon; @@ -71,4 +59,16 @@ public abstract class HalClientMonitor extends BaseClientMonitor { public T getFreshDaemon() { return mLazyDaemon.get(); } + + /** + * Starts the HAL operation specific to the ClientMonitor subclass. + */ + protected abstract void startHalOperation(); + + /** + * Invoked if the scheduler is unable to start the ClientMonitor (for example the HAL is null). + * If such a problem is detected, the scheduler will not invoke + * {@link #start(ClientMonitorCallback)}. + */ + public abstract void unableToStart(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java index a74fe4f63cb62..1bc3248cd0e7f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/StartUserClient.java @@ -39,7 +39,7 @@ public abstract class StartUserClient extends HalClientMonitor { * @param New user object. */ public interface UserStartedCallback { - void onUserStarted(int newUserId, U newUser); + void onUserStarted(int newUserId, U newUser, int halInterfaceVersion); } @NonNull @VisibleForTesting diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlSession.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlSession.java new file mode 100644 index 0000000000000..006667ac659ff --- /dev/null +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/AidlSession.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.biometrics.sensors.face.aidl; + +import android.annotation.NonNull; +import android.hardware.biometrics.face.ISession; + +import static com.android.server.biometrics.sensors.face.aidl.Sensor.HalSessionCallback; + +/** + * A holder for an AIDL {@link ISession} with additional metadata about the current user + * and the backend. + */ +public class AidlSession { + + private final int mHalInterfaceVersion; + @NonNull + private final ISession mSession; + private final int mUserId; + @NonNull private final HalSessionCallback mHalSessionCallback; + + public AidlSession(int halInterfaceVersion, @NonNull ISession session, int userId, + HalSessionCallback halSessionCallback) { + mHalInterfaceVersion = halInterfaceVersion; + mSession = session; + mUserId = userId; + mHalSessionCallback = halSessionCallback; + } + + /** The underlying {@link ISession}. */ + @NonNull public ISession getSession() { + return mSession; + } + + /** The user id associated with the session. */ + public int getUserId() { + return mUserId; + } + + /** The HAL callback, which should only be used in tests {@See BiometricTestSessionImpl}. */ + HalSessionCallback getHalSessionCallback() { + return mHalSessionCallback; + } + + /** + * If this backend implements the *WithContext methods for enroll, authenticate, and + * detectInteraction. These variants should always be called if they are available. + */ + public boolean hasContextMethods() { + return mHalInterfaceVersion >= 2; + } +} diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java index 89982691ae388..9bd7476abca21 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/BiometricTestSessionImpl.java @@ -165,7 +165,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { } mEnrollmentIds.add(nextRandomId); - mSensor.getSessionForUser(userId).mHalSessionCallback + mSensor.getSessionForUser(userId).getHalSessionCallback() .onEnrollmentProgress(nextRandomId, 0 /* remaining */); } @@ -181,7 +181,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { return; } final int fid = faces.get(0).getBiometricId(); - mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationSucceeded(fid, + mSensor.getSessionForUser(userId).getHalSessionCallback().onAuthenticationSucceeded(fid, HardwareAuthTokenUtils.toHardwareAuthToken(new byte[69])); } @@ -189,7 +189,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void rejectAuthentication(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationFailed(); + mSensor.getSessionForUser(userId).getHalSessionCallback().onAuthenticationFailed(); } // TODO(b/178414967): replace with notifyAuthenticationFrame and notifyEnrollmentFrame. @@ -205,7 +205,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { // TODO(b/178414967): Currently onAuthenticationFrame and onEnrollmentFrame are the same. // This will need to call the correct callback once the onAcquired callback is removed. - mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationFrame( + mSensor.getSessionForUser(userId).getHalSessionCallback().onAuthenticationFrame( authenticationFrame); } @@ -213,7 +213,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void notifyError(int userId, int errorCode) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mSensor.getSessionForUser(userId).mHalSessionCallback.onError((byte) errorCode, + mSensor.getSessionForUser(userId).getHalSessionCallback().onError((byte) errorCode, 0 /* vendorCode */); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java index f9a0efc4b1014..c4e050215134f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java @@ -27,8 +27,9 @@ import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.face.FaceAuthenticationFrame; import android.hardware.face.FaceManager; import android.os.IBinder; @@ -53,7 +54,8 @@ import java.util.function.Supplier; /** * Face-specific authentication client for the {@link IFace} AIDL HAL interface. */ -class FaceAuthenticationClient extends AuthenticationClient implements LockoutConsumer { +class FaceAuthenticationClient extends AuthenticationClient + implements LockoutConsumer { private static final String TAG = "FaceAuthenticationClient"; @NonNull private final UsageStats mUsageStats; @@ -70,7 +72,7 @@ class FaceAuthenticationClient extends AuthenticationClient implements @FaceManager.FaceAcquired private int mLastAcquire = FaceManager.FACE_ACQUIRED_UNKNOWN; FaceAuthenticationClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, String owner, int cookie, boolean requireConfirmation, int sensorId, @@ -123,7 +125,7 @@ class FaceAuthenticationClient extends AuthenticationClient implements 0 /* vendorCode */); mCallback.onClientFinished(this, false /* success */); } else { - mCancellationSignal = getFreshDaemon().authenticate(mOperationId); + mCancellationSignal = doAuthenticate(); } } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting auth", e); @@ -132,6 +134,22 @@ class FaceAuthenticationClient extends AuthenticationClient implements } } + private ICancellationSignal doAuthenticate() throws RemoteException { + final AidlSession session = getFreshDaemon(); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().authenticateWithContext(mOperationId, context); + } else { + return session.getSession().authenticate(mOperationId); + } + } + @Override protected void stopHalOperation() { if (mCancellationSignal != null) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java index 84ce8df08ef27..3f3db4342a7a9 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java @@ -23,7 +23,8 @@ import android.hardware.SensorPrivacyManager; import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; -import android.hardware.biometrics.face.ISession; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -40,7 +41,7 @@ import java.util.function.Supplier; * Performs face detection without exposing any matching information (e.g. accept/reject have the * same haptic, lockout counter is not increased). */ -public class FaceDetectClient extends AcquisitionClient implements DetectionConsumer { +public class FaceDetectClient extends AcquisitionClient implements DetectionConsumer { private static final String TAG = "FaceDetectClient"; @@ -48,7 +49,7 @@ public class FaceDetectClient extends AcquisitionClient implements Det @Nullable private ICancellationSignal mCancellationSignal; @Nullable private SensorPrivacyManager mSensorPrivacyManager; - public FaceDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, boolean isStrongBiometric, int statsClient) { @@ -89,13 +90,29 @@ public class FaceDetectClient extends AcquisitionClient implements Det } try { - mCancellationSignal = getFreshDaemon().detectInteraction(); + mCancellationSignal = doDetectInteraction(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting face detect", e); mCallback.onClientFinished(this, false /* success */); } } + private ICancellationSignal doDetectInteraction() throws RemoteException { + final AidlSession session = getFreshDaemon(); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().detectInteractionWithContext(context); + } else { + return session.getSession().detectInteraction(); + } + } + @Override public void onInteractionDetected() { vibrateSuccess(); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java index b1be9fbe443dd..8dc53b6346a46 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java @@ -22,14 +22,16 @@ import android.content.Context; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; import android.hardware.biometrics.face.EnrollmentType; import android.hardware.biometrics.face.Feature; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.common.NativeHandle; import android.hardware.face.Face; import android.hardware.face.FaceEnrollFrame; import android.hardware.face.FaceManager; +import android.hardware.keymaster.HardwareAuthToken; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -56,7 +58,7 @@ import java.util.function.Supplier; /** * Face-specific enroll client for the {@link IFace} AIDL HAL interface. */ -public class FaceEnrollClient extends EnrollClient { +public class FaceEnrollClient extends EnrollClient { private static final String TAG = "FaceEnrollClient"; @@ -83,7 +85,7 @@ public class FaceEnrollClient extends EnrollClient { } }; - FaceEnrollClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceEnrollClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String opPackageName, long requestId, @NonNull BiometricUtils utils, @NonNull int[] disabledFeatures, int timeoutSec, @@ -178,14 +180,12 @@ public class FaceEnrollClient extends EnrollClient { featureList.add(Feature.REQUIRE_DIVERSE_POSES); } - byte[] features = new byte[featureList.size()]; + final byte[] features = new byte[featureList.size()]; for (int i = 0; i < featureList.size(); i++) { features[i] = featureList.get(i); } - mCancellationSignal = getFreshDaemon().enroll( - HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken), - EnrollmentType.DEFAULT, features, mHwPreviewHandle); + mCancellationSignal = doEnroll(features); } catch (RemoteException | IllegalArgumentException e) { Slog.e(TAG, "Exception when requesting enroll", e); onError(BiometricFaceConstants.FACE_ERROR_UNABLE_TO_PROCESS, 0 /* vendorCode */); @@ -193,6 +193,26 @@ public class FaceEnrollClient extends EnrollClient { } } + private ICancellationSignal doEnroll(byte[] features) throws RemoteException { + final AidlSession session = getFreshDaemon(); + final HardwareAuthToken hat = + HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().enrollWithContext( + hat, EnrollmentType.DEFAULT, features, mHwPreviewHandle, context); + } else { + return session.getSession().enroll(hat, EnrollmentType.DEFAULT, features, + mHwPreviewHandle); + } + } + @Override protected void stopHalOperation() { if (mCancellationSignal != null) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java index aebbc5348f95b..bdad268b9422d 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.face.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -32,11 +31,11 @@ import java.util.function.Supplier; /** * Face-specific generateChallenge client for the {@link IFace} AIDL HAL interface. */ -public class FaceGenerateChallengeClient extends GenerateChallengeClient { +public class FaceGenerateChallengeClient extends GenerateChallengeClient { private static final String TAG = "FaceGenerateChallengeClient"; FaceGenerateChallengeClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, sensorId); @@ -45,7 +44,7 @@ public class FaceGenerateChallengeClient extends GenerateChallengeClient { +class FaceGetAuthenticatorIdClient extends HalClientMonitor { private static final String TAG = "FaceGetAuthenticatorIdClient"; private final Map mAuthenticatorIds; - FaceGetAuthenticatorIdClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceGetAuthenticatorIdClient(@NonNull Context context, + @NonNull Supplier lazyDaemon, int userId, @NonNull String opPackageName, int sensorId, Map authenticatorIds) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, opPackageName, @@ -58,7 +58,7 @@ class FaceGetAuthenticatorIdClient extends HalClientMonitor { @Override protected void startHalOperation() { try { - getFreshDaemon().getAuthenticatorId(); + getFreshDaemon().getSession().getAuthenticatorId(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java index 3401587caa341..79479bebc7592 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceGetFeatureClient.java @@ -22,7 +22,6 @@ import android.content.Context; import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.os.IBinder; import android.os.RemoteException; import android.provider.Settings; @@ -41,13 +40,13 @@ import java.util.function.Supplier; /** * Face-specific get feature client for the {@link IFace} AIDL HAL interface. */ -public class FaceGetFeatureClient extends HalClientMonitor implements ErrorConsumer { +public class FaceGetFeatureClient extends HalClientMonitor implements ErrorConsumer { private static final String TAG = "FaceGetFeatureClient"; private final int mUserId; - FaceGetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceGetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId, @@ -70,7 +69,7 @@ public class FaceGetFeatureClient extends HalClientMonitor implements @Override protected void startHalOperation() { try { - getFreshDaemon().getFeatures(); + getFreshDaemon().getSession().getFeatures(); } catch (RemoteException e) { Slog.e(TAG, "Unable to getFeature", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java index 19095c59896f0..a2b0339b282fa 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalCleanupClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.face.Face; import android.os.IBinder; @@ -36,10 +35,10 @@ import java.util.function.Supplier; /** * Face-specific internal cleanup client for the {@link IFace} AIDL HAL interface. */ -class FaceInternalCleanupClient extends InternalCleanupClient { +class FaceInternalCleanupClient extends InternalCleanupClient { FaceInternalCleanupClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull BiometricUtils utils, @NonNull Map authenticatorIds) { super(context, lazyDaemon, userId, owner, sensorId, BiometricsProtoEnums.MODALITY_FACE, @@ -47,16 +46,16 @@ class FaceInternalCleanupClient extends InternalCleanupClient { } @Override - protected InternalEnumerateClient getEnumerateClient(Context context, - Supplier lazyDaemon, IBinder token, int userId, String owner, + protected InternalEnumerateClient getEnumerateClient(Context context, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FaceInternalEnumerateClient(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId); } @Override - protected RemovalClient getRemovalClient(Context context, - Supplier lazyDaemon, IBinder token, + protected RemovalClient getRemovalClient(Context context, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { // Internal remove does not need to send results to anyone. Cleanup (enumerate + remove) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java index de5f1154fd2b4..88c9d3bd10352 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInternalEnumerateClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.face.Face; import android.os.IBinder; import android.os.RemoteException; @@ -35,11 +34,11 @@ import java.util.function.Supplier; /** * Face-specific internal enumerate client for the {@link IFace} AIDL HAL interface. */ -class FaceInternalEnumerateClient extends InternalEnumerateClient { +class FaceInternalEnumerateClient extends InternalEnumerateClient { private static final String TAG = "FaceInternalEnumerateClient"; FaceInternalEnumerateClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, @@ -49,7 +48,7 @@ class FaceInternalEnumerateClient extends InternalEnumerateClient { @Override protected void startHalOperation() { try { - getFreshDaemon().enumerateEnrollments(); + getFreshDaemon().getSession().enumerateEnrollments(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting enumerate", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java index 416921a0b098b..04ea2cfc6effa 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceInvalidationClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.face.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.IInvalidationCallback; -import android.hardware.biometrics.face.ISession; import android.hardware.face.Face; import android.os.RemoteException; import android.util.Slog; @@ -29,11 +28,11 @@ import com.android.server.biometrics.sensors.InvalidationClient; import java.util.Map; import java.util.function.Supplier; -public class FaceInvalidationClient extends InvalidationClient { +public class FaceInvalidationClient extends InvalidationClient { private static final String TAG = "FaceInvalidationClient"; public FaceInvalidationClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, int sensorId, + @NonNull Supplier lazyDaemon, int userId, int sensorId, @NonNull Map authenticatorIds, @NonNull IInvalidationCallback callback) { super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback); } @@ -41,7 +40,7 @@ public class FaceInvalidationClient extends InvalidationClient { @Override protected void startHalOperation() { try { - getFreshDaemon().invalidateAuthenticatorId(); + getFreshDaemon().getSession().invalidateAuthenticatorId(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java index 1995c378fff90..130a05a861d93 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRemovalClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.face.Face; import android.os.IBinder; import android.os.RemoteException; @@ -36,12 +35,12 @@ import java.util.function.Supplier; /** * Face-specific removal client for the {@link IFace} AIDL HAL interface. */ -class FaceRemovalClient extends RemovalClient { +class FaceRemovalClient extends RemovalClient { private static final String TAG = "FaceRemovalClient"; final int[] mBiometricIds; - FaceRemovalClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceRemovalClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int[] biometricIds, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @@ -54,7 +53,7 @@ class FaceRemovalClient extends RemovalClient { @Override protected void startHalOperation() { try { - getFreshDaemon().removeEnrollments(mBiometricIds); + getFreshDaemon().getSession().removeEnrollments(mBiometricIds); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java index 0a3e7651bac4f..67bf3f5b2e4f8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.keymaster.HardwareAuthToken; import android.os.RemoteException; import android.util.Slog; @@ -41,7 +40,7 @@ import java.util.function.Supplier; * Updates the framework's lockout cache and notifies clients such as Keyguard when lockout is * cleared. */ -public class FaceResetLockoutClient extends HalClientMonitor implements ErrorConsumer { +public class FaceResetLockoutClient extends HalClientMonitor implements ErrorConsumer { private static final String TAG = "FaceResetLockoutClient"; @@ -50,7 +49,7 @@ public class FaceResetLockoutClient extends HalClientMonitor implement private final LockoutResetDispatcher mLockoutResetDispatcher; FaceResetLockoutClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, + @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, @NonNull byte[] hardwareAuthToken, @NonNull LockoutCache lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, @@ -75,7 +74,7 @@ public class FaceResetLockoutClient extends HalClientMonitor implement @Override protected void startHalOperation() { try { - getFreshDaemon().resetLockout(mHardwareAuthToken); + getFreshDaemon().getSession().resetLockout(mHardwareAuthToken); } catch (RemoteException e) { Slog.e(TAG, "Unable to reset lockout", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java index 5e902ac480a5f..acd2e0589ccc8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.face.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -31,14 +30,14 @@ import java.util.function.Supplier; /** * Face-specific revokeChallenge client for the {@link IFace} AIDL HAL interface. */ -public class FaceRevokeChallengeClient extends RevokeChallengeClient { +public class FaceRevokeChallengeClient extends RevokeChallengeClient { private static final String TAG = "FaceRevokeChallengeClient"; private final long mChallenge; FaceRevokeChallengeClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId, long challenge) { super(context, lazyDaemon, token, userId, owner, sensorId); mChallenge = challenge; @@ -47,7 +46,7 @@ public class FaceRevokeChallengeClient extends RevokeChallengeClient { @Override protected void startHalOperation() { try { - getFreshDaemon().revokeChallenge(mChallenge); + getFreshDaemon().getSession().revokeChallenge(mChallenge); } catch (RemoteException e) { Slog.e(TAG, "Unable to revokeChallenge", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java index 962f900c87fd2..9d535a26e12d5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.face.IFace; -import android.hardware.biometrics.face.ISession; import android.hardware.keymaster.HardwareAuthToken; import android.os.IBinder; import android.os.RemoteException; @@ -38,7 +37,7 @@ import java.util.function.Supplier; /** * Face-specific get feature client for the {@link IFace} AIDL HAL interface. */ -public class FaceSetFeatureClient extends HalClientMonitor implements ErrorConsumer { +public class FaceSetFeatureClient extends HalClientMonitor implements ErrorConsumer { private static final String TAG = "FaceSetFeatureClient"; @@ -46,7 +45,7 @@ public class FaceSetFeatureClient extends HalClientMonitor implements private final boolean mEnabled; private final HardwareAuthToken mHardwareAuthToken; - FaceSetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FaceSetFeatureClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, int feature, boolean enabled, byte[] hardwareAuthToken) { @@ -76,8 +75,7 @@ public class FaceSetFeatureClient extends HalClientMonitor implements @Override protected void startHalOperation() { try { - getFreshDaemon() - .setFeature(mHardwareAuthToken, + getFreshDaemon().getSession().setFeature(mHardwareAuthToken, AidlConversionUtils.convertFrameworkToAidlFeature(mFeature), mEnabled); } catch (RemoteException | IllegalArgumentException e) { Slog.e(TAG, "Unable to set feature: " + mFeature + " to enabled: " + mEnabled, e); diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java index 9b559034b9aff..f5a98ff5881b9 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStartUserClient.java @@ -37,7 +37,8 @@ public class FaceStartUserClient extends StartUserClient { @NonNull private final ISessionCallback mSessionCallback; - public FaceStartUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + public FaceStartUserClient(@NonNull Context context, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull ISessionCallback sessionCallback, @NonNull UserStartedCallback callback) { @@ -54,10 +55,12 @@ public class FaceStartUserClient extends StartUserClient { @Override protected void startHalOperation() { try { - final ISession newSession = getFreshDaemon().createSession(getSensorId(), + final IFace hal = getFreshDaemon(); + final int version = hal.getInterfaceVersion(); + final ISession newSession = hal.createSession(getSensorId(), getTargetUserId(), mSessionCallback); Binder.allowBlocking(newSession.asBinder()); - mUserStartedCallback.onUserStarted(getTargetUserId(), newSession); + mUserStartedCallback.onUserStarted(getTargetUserId(), newSession, version); getCallback().onClientFinished(this, true /* success */); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); @@ -67,6 +70,5 @@ public class FaceStartUserClient extends StartUserClient { @Override public void unableToStart() { - } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java index 55da0d284af90..48b4856fa4b6a 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceStopUserClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.face.aidl; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; -import android.hardware.biometrics.face.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -29,10 +28,10 @@ import com.android.server.biometrics.sensors.StopUserClient; import java.util.function.Supplier; -public class FaceStopUserClient extends StopUserClient { +public class FaceStopUserClient extends StopUserClient { private static final String TAG = "FaceStopUserClient"; - public FaceStopUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + public FaceStopUserClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, userId, sensorId, callback); @@ -47,7 +46,7 @@ public class FaceStopUserClient extends StopUserClient { @Override protected void startHalOperation() { try { - getFreshDaemon().close(); + getFreshDaemon().getSession().close(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); getCallback().onClientFinished(this, false /* success */); @@ -56,6 +55,5 @@ public class FaceStopUserClient extends StopUserClient { @Override public void unableToStart() { - } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index 6ae3a9e3a821c..33e6fa4ebf934 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -84,24 +84,9 @@ public class Sensor { @NonNull private final UserAwareBiometricScheduler mScheduler; @NonNull private final LockoutCache mLockoutCache; @NonNull private final Map mAuthenticatorIds; - @NonNull private final Supplier mLazySession; - @Nullable private Session mCurrentSession; - static class Session { - @NonNull final HalSessionCallback mHalSessionCallback; - @NonNull private final String mTag; - @NonNull private final ISession mSession; - private final int mUserId; - - Session(@NonNull String tag, @NonNull ISession session, int userId, - @NonNull HalSessionCallback halSessionCallback) { - mTag = tag; - mSession = session; - mUserId = userId; - mHalSessionCallback = halSessionCallback; - Slog.d(mTag, "New session created for user: " + userId); - } - } + @NonNull private final Supplier mLazySession; + @Nullable private AidlSession mCurrentSession; static class HalSessionCallback extends ISessionCallback.Stub { /** @@ -496,7 +481,7 @@ public class Sensor { mSensorProperties = sensorProperties; mScheduler = new UserAwareBiometricScheduler(tag, BiometricScheduler.SENSOR_TYPE_FACE, null /* gestureAvailabilityDispatcher */, - () -> mCurrentSession != null ? mCurrentSession.mUserId : UserHandle.USER_NULL, + () -> mCurrentSession != null ? mCurrentSession.getUserId() : UserHandle.USER_NULL, new UserAwareBiometricScheduler.UserSwitchCallback() { @NonNull @Override @@ -508,21 +493,22 @@ public class Sensor { @NonNull @Override public StartUserClient getStartUserClient(int newUserId) { - final HalSessionCallback.Callback callback = () -> { - Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE"); - mCurrentSession = null; - }; - final int sensorId = mSensorProperties.sensorId; final HalSessionCallback resultController = new HalSessionCallback(mContext, mHandler, mTag, mScheduler, sensorId, newUserId, mLockoutCache, - lockoutResetDispatcher, callback); + lockoutResetDispatcher, () -> { + Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE"); + mCurrentSession = null; + }); final StartUserClient.UserStartedCallback userStartedCallback = - (userIdStarted, newSession) -> { - mCurrentSession = new Session(mTag, newSession, userIdStarted, - resultController); + (userIdStarted, newSession, halInterfaceVersion) -> { + Slog.d(mTag, "New session created for user: " + + userIdStarted + " with hal version: " + + halInterfaceVersion); + mCurrentSession = new AidlSession(halInterfaceVersion, + newSession, userIdStarted, resultController); if (FaceUtils.getLegacyInstance(sensorId) .isInvalidationInProgress(mContext, userIdStarted)) { Slog.w(mTag, @@ -542,10 +528,10 @@ public class Sensor { }); mLockoutCache = new LockoutCache(); mAuthenticatorIds = new HashMap<>(); - mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; + mLazySession = () -> mCurrentSession != null ? mCurrentSession : null; } - @NonNull Supplier getLazySession() { + @NonNull Supplier getLazySession() { return mLazySession; } @@ -553,8 +539,8 @@ public class Sensor { return mSensorProperties; } - @Nullable Session getSessionForUser(int userId) { - if (mCurrentSession != null && mCurrentSession.mUserId == userId) { + @Nullable AidlSession getSessionForUser(int userId) { + if (mCurrentSession != null && mCurrentSession.getUserId() == userId) { return mCurrentSession; } else { return null; @@ -583,10 +569,10 @@ public class Sensor { if (enabled != mTestHalEnabled) { // The framework should retrieve a new session from the HAL. try { - if (mCurrentSession != null && mCurrentSession.mSession != null) { + if (mCurrentSession != null) { // TODO(181984005): This should be scheduled instead of directly invoked Slog.d(mTag, "Closing old session"); - mCurrentSession.mSession.close(); + mCurrentSession.getSession().close(); } } catch (RemoteException e) { Slog.e(mTag, "RemoteException", e); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/AidlSession.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/AidlSession.java new file mode 100644 index 0000000000000..727101a69b065 --- /dev/null +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/AidlSession.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.biometrics.sensors.fingerprint.aidl; + +import android.annotation.NonNull; +import android.hardware.biometrics.fingerprint.ISession; + +import static com.android.server.biometrics.sensors.fingerprint.aidl.Sensor.HalSessionCallback; + +/** + * A holder for an AIDL {@link ISession} with additional metadata about the current user + * and the backend. + */ +public class AidlSession { + + private final int mHalInterfaceVersion; + @NonNull private final ISession mSession; + private final int mUserId; + @NonNull private final HalSessionCallback mHalSessionCallback; + + public AidlSession(int halInterfaceVersion, @NonNull ISession session, int userId, + HalSessionCallback halSessionCallback) { + mHalInterfaceVersion = halInterfaceVersion; + mSession = session; + mUserId = userId; + mHalSessionCallback = halSessionCallback; + } + + /** The underlying {@link ISession}. */ + @NonNull public ISession getSession() { + return mSession; + } + + /** The user id associated with the session. */ + public int getUserId() { + return mUserId; + } + + /** The HAL callback, which should only be used in tests {@See BiometricTestSessionImpl}. */ + HalSessionCallback getHalSessionCallback() { + return mHalSessionCallback; + } + + /** + * If this backend implements the *WithContext methods for enroll, authenticate, and + * detectInteraction. These variants should always be called if they are available. + */ + public boolean hasContextMethods() { + return mHalInterfaceVersion >= 2; + } +} diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java index b29fbb66fa50d..0528cd489ae5e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/BiometricTestSessionImpl.java @@ -157,7 +157,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub { } mEnrollmentIds.add(nextRandomId); - mSensor.getSessionForUser(userId).mHalSessionCallback + mSensor.getSessionForUser(userId).getHalSessionCallback() .onEnrollmentProgress(nextRandomId, 0 /* remaining */); } @@ -173,7 +173,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub { return; } final int fid = fingerprints.get(0).getBiometricId(); - mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationSucceeded(fid, + mSensor.getSessionForUser(userId).getHalSessionCallback().onAuthenticationSucceeded(fid, HardwareAuthTokenUtils.toHardwareAuthToken(new byte[69])); } @@ -181,14 +181,14 @@ class BiometricTestSessionImpl extends ITestSession.Stub { public void rejectAuthentication(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mSensor.getSessionForUser(userId).mHalSessionCallback.onAuthenticationFailed(); + mSensor.getSessionForUser(userId).getHalSessionCallback().onAuthenticationFailed(); } @Override public void notifyAcquired(int userId, int acquireInfo) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mSensor.getSessionForUser(userId).mHalSessionCallback + mSensor.getSessionForUser(userId).getHalSessionCallback() .onAcquired((byte) acquireInfo, 0 /* vendorCode */); } @@ -196,7 +196,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub { public void notifyError(int userId, int errorCode) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mSensor.getSessionForUser(userId).mHalSessionCallback.onError((byte) errorCode, + mSensor.getSessionForUser(userId).getHalSessionCallback().onError((byte) errorCode, 0 /* vendorCode */); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java index 62a8a47da9114..2c1c80ccabb3e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java @@ -25,7 +25,9 @@ import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricFingerprintConstants.FingerprintAcquired; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; -import android.hardware.biometrics.fingerprint.ISession; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; +import android.hardware.biometrics.fingerprint.PointerContext; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; @@ -53,7 +55,7 @@ import java.util.function.Supplier; * Fingerprint-specific authentication client supporting the * {@link android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface. */ -class FingerprintAuthenticationClient extends AuthenticationClient implements +class FingerprintAuthenticationClient extends AuthenticationClient implements Udfps, LockoutConsumer { private static final String TAG = "FingerprintAuthenticationClient"; @@ -66,7 +68,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp private boolean mIsPointerDown; FingerprintAuthenticationClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId, boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation, @@ -159,7 +161,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp mSensorOverlays.show(getSensorId(), getShowOverlayReason(), this); try { - mCancellationSignal = getFreshDaemon().authenticate(mOperationId); + mCancellationSignal = doAuthenticate(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE, @@ -169,6 +171,22 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp } } + private ICancellationSignal doAuthenticate() throws RemoteException { + final AidlSession session = getFreshDaemon(); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().authenticateWithContext(mOperationId, context); + } else { + return session.getSession().authenticate(mOperationId); + } + } + @Override protected void stopHalOperation() { mSensorOverlays.hide(getSensorId()); @@ -192,7 +210,20 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp mIsPointerDown = true; mState = STATE_STARTED; mALSProbeCallback.getProbe().enable(); - getFreshDaemon().onPointerDown(0 /* pointerId */, x, y, minor, major); + + final AidlSession session = getFreshDaemon(); + if (session.hasContextMethods()) { + final PointerContext context = new PointerContext(); + context.pointerId = 0; + context.x = x; + context.y = y; + context.minor = minor; + context.major = major; + context.isAoD = false; // TODO; get value + session.getSession().onPointerDownWithContext(context); + } else { + session.getSession().onPointerDown(0 /* pointerId */, x, y, minor, major); + } if (getListener() != null) { getListener().onUdfpsPointerDown(getSensorId()); @@ -208,7 +239,15 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp mIsPointerDown = false; mState = STATE_STARTED_PAUSED_ATTEMPTED; mALSProbeCallback.getProbe().disable(); - getFreshDaemon().onPointerUp(0 /* pointerId */); + + final AidlSession session = getFreshDaemon(); + if (session.hasContextMethods()) { + final PointerContext context = new PointerContext(); + context.pointerId = 0; + session.getSession().onPointerUpWithContext(context); + } else { + session.getSession().onPointerUp(0 /* pointerId */); + } if (getListener() != null) { getListener().onUdfpsPointerUp(getSensorId()); @@ -226,7 +265,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp @Override public void onUiReady() { try { - getFreshDaemon().onUiReady(); + getFreshDaemon().getSession().onUiReady(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java index 55960f61d4aeb..6645332c1facb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java @@ -22,7 +22,8 @@ import android.content.Context; import android.hardware.biometrics.BiometricOverlayConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; -import android.hardware.biometrics.fingerprint.ISession; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.os.RemoteException; @@ -41,7 +42,7 @@ import java.util.function.Supplier; * Performs fingerprint detection without exposing any matching information (e.g. accept/reject * have the same haptic, lockout counter is not increased). */ -class FingerprintDetectClient extends AcquisitionClient implements DetectionConsumer { +class FingerprintDetectClient extends AcquisitionClient implements DetectionConsumer { private static final String TAG = "FingerprintDetectClient"; @@ -49,7 +50,7 @@ class FingerprintDetectClient extends AcquisitionClient implements Det @NonNull private final SensorOverlays mSensorOverlays; @Nullable private ICancellationSignal mCancellationSignal; - FingerprintDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, + FingerprintDetectClient(@NonNull Context context, @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId, @@ -86,7 +87,7 @@ class FingerprintDetectClient extends AcquisitionClient implements Det mSensorOverlays.show(getSensorId(), BiometricOverlayConstants.REASON_AUTH_KEYGUARD, this); try { - mCancellationSignal = getFreshDaemon().detectInteraction(); + mCancellationSignal = doDetectInteraction(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting finger detect", e); mSensorOverlays.hide(getSensorId()); @@ -94,6 +95,22 @@ class FingerprintDetectClient extends AcquisitionClient implements Det } } + private ICancellationSignal doDetectInteraction() throws RemoteException { + final AidlSession session = getFreshDaemon(); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().detectInteractionWithContext(context); + } else { + return session.getSession().detectInteraction(); + } + } + @Override public void onInteractionDetected() { vibrateSuccess(); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java index ee47e9586265b..d0c5bb8851e64 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java @@ -24,12 +24,15 @@ import android.hardware.biometrics.BiometricFingerprintConstants; import android.hardware.biometrics.BiometricFingerprintConstants.FingerprintAcquired; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.common.ICancellationSignal; -import android.hardware.biometrics.fingerprint.ISession; +import android.hardware.biometrics.common.OperationContext; +import android.hardware.biometrics.common.OperationReason; +import android.hardware.biometrics.fingerprint.PointerContext; import android.hardware.fingerprint.Fingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; +import android.hardware.keymaster.HardwareAuthToken; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -48,7 +51,7 @@ import com.android.server.biometrics.sensors.fingerprint.UdfpsHelper; import java.util.function.Supplier; -class FingerprintEnrollClient extends EnrollClient implements Udfps { +class FingerprintEnrollClient extends EnrollClient implements Udfps { private static final String TAG = "FingerprintEnrollClient"; @@ -61,7 +64,7 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { private boolean mIsPointerDown; FingerprintEnrollClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, long requestId, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @@ -158,8 +161,7 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { BiometricNotificationUtils.cancelBadCalibrationNotification(getContext()); try { - mCancellationSignal = getFreshDaemon().enroll( - HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken)); + mCancellationSignal = doEnroll(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting enroll", e); onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_UNABLE_TO_PROCESS, @@ -168,11 +170,42 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { } } + private ICancellationSignal doEnroll() throws RemoteException { + final AidlSession session = getFreshDaemon(); + final HardwareAuthToken hat = + HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken); + + if (session.hasContextMethods()) { + final OperationContext context = new OperationContext(); + // TODO: add reason, id, and isAoD + context.id = 0; + context.reason = OperationReason.UNKNOWN; + context.isAoD = false; + context.isCrypto = isCryptoOperation(); + return session.getSession().enrollWithContext(hat, context); + } else { + return session.getSession().enroll(hat); + } + } + @Override public void onPointerDown(int x, int y, float minor, float major) { try { mIsPointerDown = true; - getFreshDaemon().onPointerDown(0 /* pointerId */, x, y, minor, major); + + final AidlSession session = getFreshDaemon(); + if (session.hasContextMethods()) { + final PointerContext context = new PointerContext(); + context.pointerId = 0; + context.x = x; + context.y = y; + context.minor = minor; + context.major = major; + context.isAoD = false; + session.getSession().onPointerDownWithContext(context); + } else { + session.getSession().onPointerDown(0 /* pointerId */, x, y, minor, major); + } } catch (RemoteException e) { Slog.e(TAG, "Unable to send pointer down", e); } @@ -182,7 +215,15 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { public void onPointerUp() { try { mIsPointerDown = false; - getFreshDaemon().onPointerUp(0 /* pointerId */); + + final AidlSession session = getFreshDaemon(); + if (session.hasContextMethods()) { + final PointerContext context = new PointerContext(); + context.pointerId = 0; + session.getSession().onPointerUpWithContext(context); + } else { + session.getSession().onPointerUp(0 /* pointerId */); + } } catch (RemoteException e) { Slog.e(TAG, "Unable to send pointer up", e); } @@ -196,7 +237,7 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { @Override public void onUiReady() { try { - getFreshDaemon().onUiReady(); + getFreshDaemon().getSession().onUiReady(); } catch (RemoteException e) { Slog.e(TAG, "Unable to send UI ready", e); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java index 37131768f6d86..04a7ca086ced7 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintGenerateChallengeClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.fingerprint.IFingerprint; -import android.hardware.biometrics.fingerprint.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -32,11 +31,11 @@ import java.util.function.Supplier; /** * Fingerprint-specific generateChallenge client for the {@link IFingerprint} AIDL HAL interface. */ -class FingerprintGenerateChallengeClient extends GenerateChallengeClient { +class FingerprintGenerateChallengeClient extends GenerateChallengeClient { private static final String TAG = "FingerprintGenerateChallengeClient"; FingerprintGenerateChallengeClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull String owner, int sensorId) { @@ -46,7 +45,7 @@ class FingerprintGenerateChallengeClient extends GenerateChallengeClient { +class FingerprintGetAuthenticatorIdClient extends HalClientMonitor { private static final String TAG = "FingerprintGetAuthenticatorIdClient"; private final Map mAuthenticatorIds; FingerprintGetAuthenticatorIdClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, Map authenticatorIds) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, 0 /* cookie */, sensorId, BiometricsProtoEnums.MODALITY_FINGERPRINT, @@ -58,7 +57,7 @@ class FingerprintGetAuthenticatorIdClient extends HalClientMonitor { @Override protected void startHalOperation() { try { - getFreshDaemon().getAuthenticatorId(); + getFreshDaemon().getSession().getAuthenticatorId(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java index a608ba572f571..0ecad725cbebc 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalCleanupClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; -import android.hardware.biometrics.fingerprint.ISession; import android.hardware.fingerprint.Fingerprint; import android.os.IBinder; @@ -37,10 +36,10 @@ import java.util.function.Supplier; * Fingerprint-specific internal cleanup client supporting the * {@link android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface. */ -class FingerprintInternalCleanupClient extends InternalCleanupClient { +class FingerprintInternalCleanupClient extends InternalCleanupClient { FingerprintInternalCleanupClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, + @NonNull Supplier lazyDaemon, int userId, @NonNull String owner, int sensorId, @NonNull List enrolledList, @NonNull FingerprintUtils utils, @NonNull Map authenticatorIds) { super(context, lazyDaemon, userId, owner, sensorId, @@ -48,16 +47,16 @@ class FingerprintInternalCleanupClient extends InternalCleanupClient getEnumerateClient(Context context, - Supplier lazyDaemon, IBinder token, int userId, String owner, + protected InternalEnumerateClient getEnumerateClient(Context context, + Supplier lazyDaemon, IBinder token, int userId, String owner, List enrolledList, BiometricUtils utils, int sensorId) { return new FingerprintInternalEnumerateClient(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId); } @Override - protected RemovalClient getRemovalClient(Context context, - Supplier lazyDaemon, IBinder token, int biometricId, int userId, + protected RemovalClient getRemovalClient(Context context, + Supplier lazyDaemon, IBinder token, int biometricId, int userId, String owner, BiometricUtils utils, int sensorId, Map authenticatorIds) { return new FingerprintRemovalClient(context, lazyDaemon, token, diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java index e2ec823f00667..06ba6d45b4076 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintInternalEnumerateClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; -import android.hardware.biometrics.fingerprint.ISession; import android.hardware.fingerprint.Fingerprint; import android.os.IBinder; import android.os.RemoteException; @@ -35,11 +34,11 @@ import java.util.function.Supplier; * Fingerprint-specific internal client supporting the * {@link android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface. */ -class FingerprintInternalEnumerateClient extends InternalEnumerateClient { +class FingerprintInternalEnumerateClient extends InternalEnumerateClient { private static final String TAG = "FingerprintInternalEnumerateClient"; protected FingerprintInternalEnumerateClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, @NonNull List enrolledList, @NonNull BiometricUtils utils, int sensorId) { super(context, lazyDaemon, token, userId, owner, enrolledList, utils, sensorId, @@ -49,7 +48,7 @@ class FingerprintInternalEnumerateClient extends InternalEnumerateClient { +public class FingerprintInvalidationClient extends InvalidationClient { private static final String TAG = "FingerprintInvalidationClient"; public FingerprintInvalidationClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, int sensorId, + @NonNull Supplier lazyDaemon, int userId, int sensorId, @NonNull Map authenticatorIds, @NonNull IInvalidationCallback callback) { super(context, lazyDaemon, userId, sensorId, authenticatorIds, callback); } @@ -41,7 +40,7 @@ public class FingerprintInvalidationClient extends InvalidationClient { +class FingerprintRemovalClient extends RemovalClient { private static final String TAG = "FingerprintRemovalClient"; private final int[] mBiometricIds; FingerprintRemovalClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, @Nullable ClientMonitorCallbackConverter listener, int[] biometricIds, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map authenticatorIds) { @@ -55,7 +54,7 @@ class FingerprintRemovalClient extends RemovalClient { @Override protected void startHalOperation() { try { - getFreshDaemon().removeEnrollments(mBiometricIds); + getFreshDaemon().getSession().removeEnrollments(mBiometricIds); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java index 9c7df589d29f2..0e64dab5d3253 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.fingerprint.IFingerprint; -import android.hardware.biometrics.fingerprint.ISession; import android.hardware.keymaster.HardwareAuthToken; import android.os.RemoteException; import android.util.Slog; @@ -41,7 +40,7 @@ import java.util.function.Supplier; * Updates the framework's lockout cache and notifies clients such as Keyguard when lockout is * cleared. */ -class FingerprintResetLockoutClient extends HalClientMonitor implements ErrorConsumer { +class FingerprintResetLockoutClient extends HalClientMonitor implements ErrorConsumer { private static final String TAG = "FingerprintResetLockoutClient"; @@ -50,7 +49,7 @@ class FingerprintResetLockoutClient extends HalClientMonitor implement private final LockoutResetDispatcher mLockoutResetDispatcher; FingerprintResetLockoutClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, + @NonNull Supplier lazyDaemon, int userId, String owner, int sensorId, @NonNull byte[] hardwareAuthToken, @NonNull LockoutCache lockoutTracker, @NonNull LockoutResetDispatcher lockoutResetDispatcher) { super(context, lazyDaemon, null /* token */, null /* listener */, userId, owner, @@ -75,7 +74,7 @@ class FingerprintResetLockoutClient extends HalClientMonitor implement @Override protected void startHalOperation() { try { - getFreshDaemon().resetLockout(mHardwareAuthToken); + getFreshDaemon().getSession().resetLockout(mHardwareAuthToken); } catch (RemoteException e) { Slog.e(TAG, "Unable to reset lockout", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java index 28292010fe748..fd938677105cf 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRevokeChallengeClient.java @@ -19,7 +19,6 @@ package com.android.server.biometrics.sensors.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.fingerprint.IFingerprint; -import android.hardware.biometrics.fingerprint.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; @@ -31,14 +30,14 @@ import java.util.function.Supplier; /** * Fingerprint-specific revokeChallenge client for the {@link IFingerprint} AIDL HAL interface. */ -class FingerprintRevokeChallengeClient extends RevokeChallengeClient { +class FingerprintRevokeChallengeClient extends RevokeChallengeClient { private static final String TAG = "FingerpirntRevokeChallengeClient"; private final long mChallenge; FingerprintRevokeChallengeClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @NonNull IBinder token, + @NonNull Supplier lazyDaemon, @NonNull IBinder token, int userId, @NonNull String owner, int sensorId, long challenge) { super(context, lazyDaemon, token, userId, owner, sensorId); mChallenge = challenge; @@ -47,7 +46,7 @@ class FingerprintRevokeChallengeClient extends RevokeChallengeClient { @Override protected void startHalOperation() { try { - getFreshDaemon().revokeChallenge(mChallenge); + getFreshDaemon().getSession().revokeChallenge(mChallenge); } catch (RemoteException e) { Slog.e(TAG, "Unable to revokeChallenge", e); mCallback.onClientFinished(this, false /* success */); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java index ef53df4ca594f..9dc06e1e0665f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStartUserClient.java @@ -55,10 +55,12 @@ public class FingerprintStartUserClient extends StartUserClient { +public class FingerprintStopUserClient extends StopUserClient { private static final String TAG = "FingerprintStopUserClient"; public FingerprintStopUserClient(@NonNull Context context, - @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, + @NonNull Supplier lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull UserStoppedCallback callback) { super(context, lazyDaemon, token, userId, sensorId, callback); } @@ -47,7 +46,7 @@ public class FingerprintStopUserClient extends StopUserClient { @Override protected void startHalOperation() { try { - getFreshDaemon().close(); + getFreshDaemon().getSession().close(); } catch (RemoteException e) { Slog.e(TAG, "Remote exception", e); getCallback().onClientFinished(this, false /* success */); @@ -56,6 +55,5 @@ public class FingerprintStopUserClient extends StopUserClient { @Override public void unableToStart() { - } } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java index e1e73a32661a3..22762329926b5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java @@ -86,24 +86,8 @@ class Sensor { @NonNull private final LockoutCache mLockoutCache; @NonNull private final Map mAuthenticatorIds; - @Nullable private Session mCurrentSession; - @NonNull private final Supplier mLazySession; - - static class Session { - @NonNull private final String mTag; - @NonNull private final ISession mSession; - private final int mUserId; - @NonNull final HalSessionCallback mHalSessionCallback; - - Session(@NonNull String tag, @NonNull ISession session, int userId, - @NonNull HalSessionCallback halSessionCallback) { - mTag = tag; - mSession = session; - mUserId = userId; - mHalSessionCallback = halSessionCallback; - Slog.d(mTag, "New session created for user: " + userId); - } - } + @Nullable private AidlSession mCurrentSession; + @NonNull private final Supplier mLazySession; static class HalSessionCallback extends ISessionCallback.Stub { @@ -452,7 +436,7 @@ class Sensor { mScheduler = new UserAwareBiometricScheduler(tag, BiometricScheduler.sensorTypeFromFingerprintProperties(mSensorProperties), gestureAvailabilityDispatcher, - () -> mCurrentSession != null ? mCurrentSession.mUserId : UserHandle.USER_NULL, + () -> mCurrentSession != null ? mCurrentSession.getUserId() : UserHandle.USER_NULL, new UserAwareBiometricScheduler.UserSwitchCallback() { @NonNull @Override @@ -464,20 +448,21 @@ class Sensor { @NonNull @Override public StartUserClient getStartUserClient(int newUserId) { - final HalSessionCallback.Callback callback = () -> { - Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE"); - mCurrentSession = null; - }; - final int sensorId = mSensorProperties.sensorId; final HalSessionCallback resultController = new HalSessionCallback(mContext, mHandler, mTag, mScheduler, sensorId, newUserId, mLockoutCache, - lockoutResetDispatcher, callback); + lockoutResetDispatcher, () -> { + Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE"); + mCurrentSession = null; + }); final StartUserClient.UserStartedCallback userStartedCallback = - (userIdStarted, newSession) -> { - mCurrentSession = new Session(mTag, + (userIdStarted, newSession, halInterfaceVersion) -> { + Slog.d(mTag, "New session created for user: " + + userIdStarted + " with hal version: " + + halInterfaceVersion); + mCurrentSession = new AidlSession(halInterfaceVersion, newSession, userIdStarted, resultController); if (FingerprintUtils.getInstance(sensorId) .isInvalidationInProgress(mContext, userIdStarted)) { @@ -497,10 +482,10 @@ class Sensor { } }); mAuthenticatorIds = new HashMap<>(); - mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; + mLazySession = () -> mCurrentSession != null ? mCurrentSession : null; } - @NonNull Supplier getLazySession() { + @NonNull Supplier getLazySession() { return mLazySession; } @@ -508,8 +493,8 @@ class Sensor { return mSensorProperties; } - @Nullable Session getSessionForUser(int userId) { - if (mCurrentSession != null && mCurrentSession.mUserId == userId) { + @Nullable AidlSession getSessionForUser(int userId) { + if (mCurrentSession != null && mCurrentSession.getUserId() == userId) { return mCurrentSession; } else { return null; @@ -539,10 +524,10 @@ class Sensor { if (enabled != mTestHalEnabled) { // The framework should retrieve a new session from the HAL. try { - if (mCurrentSession != null && mCurrentSession.mSession != null) { + if (mCurrentSession != null) { // TODO(181984005): This should be scheduled instead of directly invoked Slog.d(mTag, "Closing old session"); - mCurrentSession.mSession.close(); + mCurrentSession.getSession().close(); } } catch (RemoteException e) { Slog.e(mTag, "RemoteException", e); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java index 25904e026b608..30777cd79a0c1 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java @@ -217,7 +217,7 @@ public class UserAwareBiometricSchedulerTest { int numInvocations; @Override - public void onUserStarted(int newUserId, Object newObject) { + public void onUserStarted(int newUserId, Object newObject, int halInterfaceVersion) { numInvocations++; mCurrentUserId = newUserId; } @@ -270,7 +270,8 @@ public class UserAwareBiometricSchedulerTest { mCallback = callback; if (mShouldFinish) { - mUserStartedCallback.onUserStarted(getTargetUserId(), new Object()); + mUserStartedCallback.onUserStarted( + getTargetUserId(), new Object(), 1 /* halInterfaceVersion */); callback.onClientFinished(this, true /* success */); } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java index 2718bf90d8572..61e4776e9c504 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java @@ -101,8 +101,8 @@ public class SensorTest { mLockoutCache.setLockoutModeForUser(USER_ID, LockoutTracker.LOCKOUT_TIMED); mScheduler.scheduleClientMonitor(new FaceResetLockoutClient(mContext, - () -> mSession, USER_ID, TAG, SENSOR_ID, HAT, mLockoutCache, - mLockoutResetDispatcher)); + () -> new AidlSession(1, mSession, USER_ID, mHalCallback), + USER_ID, TAG, SENSOR_ID, HAT, mLockoutCache, mLockoutResetDispatcher)); mLooper.dispatchAll(); verifyNotLocked(); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java index d4609b55afba7..8b7b484b84624 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java @@ -101,8 +101,8 @@ public class SensorTest { mLockoutCache.setLockoutModeForUser(USER_ID, LockoutTracker.LOCKOUT_TIMED); mScheduler.scheduleClientMonitor(new FingerprintResetLockoutClient(mContext, - () -> mSession, USER_ID, TAG, SENSOR_ID, HAT, mLockoutCache, - mLockoutResetDispatcher)); + () -> new AidlSession(1, mSession, USER_ID, mHalCallback), + USER_ID, TAG, SENSOR_ID, HAT, mLockoutCache, mLockoutResetDispatcher)); mLooper.dispatchAll(); verifyNotLocked();