diff --git a/services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java b/services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java index c985d5d2e5979..f7b736885f716 100644 --- a/services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java +++ b/services/core/java/com/android/server/biometrics/log/CallbackWithProbe.java @@ -19,6 +19,7 @@ package com.android.server.biometrics.log; import android.annotation.NonNull; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; /** * Client monitor callback that exposes a probe. @@ -27,7 +28,7 @@ import com.android.server.biometrics.sensors.BaseClientMonitor; * * @param probe type */ -public class CallbackWithProbe implements BaseClientMonitor.Callback { +public class CallbackWithProbe implements ClientMonitorCallback { private final boolean mStartWithClient; private final T mProbe; 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 e29caa8461cf2..86d72ba1c06f0 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -138,7 +138,7 @@ public abstract class AcquisitionClient extends HalClientMonitor implement } @Override - public void cancelWithoutStarting(@NonNull Callback callback) { + public void cancelWithoutStarting(@NonNull ClientMonitorCallback callback) { Slog.d(TAG, "cancelWithoutStarting: " + this); final int errorCode = BiometricConstants.BIOMETRIC_ERROR_CANCELED; 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 0eb5aaf143c4d..35a0f575ec977 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationClient.java @@ -91,7 +91,7 @@ public abstract class AuthenticationClient extends AcquisitionClient /** * Handles lifecycle, e.g. {@link BiometricScheduler}, - * {@link com.android.server.biometrics.sensors.BaseClientMonitor.Callback} after authentication + * {@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. @@ -440,7 +440,7 @@ public abstract class AuthenticationClient extends AcquisitionClient * Start authentication */ @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); final @LockoutTracker.LockoutMode int lockoutMode = diff --git a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java index 1248c8b6d4d93..e1f7e2ab54617 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java @@ -29,8 +29,6 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.server.biometrics.log.BiometricLogger; -import java.util.ArrayList; -import java.util.List; import java.util.NoSuchElementException; /** @@ -46,63 +44,6 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { // Counter used to distinguish between ClientMonitor instances to help debugging. private static int sCount = 0; - /** - * Interface that ClientMonitor holders should use to receive callbacks. - */ - public interface Callback { - /** - * Invoked when the ClientMonitor operation has been started (e.g. reached the head of - * the queue and becomes the current operation). - * - * @param clientMonitor Reference of the ClientMonitor that is starting. - */ - default void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - } - - /** - * Invoked when the ClientMonitor operation is complete. This abstracts away asynchronous - * (i.e. Authenticate, Enroll, Enumerate, Remove) and synchronous (i.e. generateChallenge, - * revokeChallenge) so that a scheduler can process ClientMonitors regardless of their - * implementation. - * - * @param clientMonitor Reference of the ClientMonitor that finished. - * @param success True if the operation completed successfully. - */ - default void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { - } - } - - /** Holder for wrapping multiple handlers into a single Callback. */ - public static class CompositeCallback implements Callback { - @NonNull - private final List mCallbacks; - - public CompositeCallback(@NonNull Callback... callbacks) { - mCallbacks = new ArrayList<>(); - - for (Callback callback : callbacks) { - if (callback != null) { - mCallbacks.add(callback); - } - } - } - - @Override - public final void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { - for (int i = 0; i < mCallbacks.size(); i++) { - mCallbacks.get(i).onClientStarted(clientMonitor); - } - } - - @Override - public final void onClientFinished(@NonNull BaseClientMonitor clientMonitor, - boolean success) { - for (int i = mCallbacks.size() - 1; i >= 0; i--) { - mCallbacks.get(i).onClientFinished(clientMonitor, success); - } - } - } - private final int mSequentialId; @NonNull private final Context mContext; private final int mTargetUserId; @@ -120,7 +61,7 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { // Use an empty callback by default since delayed operations can receive events // before they are started and cause NPE in subclasses that access this field directly. - @NonNull protected Callback mCallback = new Callback() { + @NonNull protected ClientMonitorCallback mCallback = new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { Slog.e(TAG, "mCallback onClientStarted: called before set (should not happen)"); @@ -133,18 +74,6 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } }; - /** - * @return A ClientMonitorEnum constant defined in biometrics.proto - */ - public abstract int getProtoEnum(); - - /** - * @return True if the ClientMonitor should cancel any current and pending interruptable clients - */ - public boolean interruptsPrecedingClients() { - return false; - } - /** * @param context system_server context * @param token a unique token for the client @@ -189,11 +118,19 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } } + /** A ClientMonitorEnum constant defined in biometrics.proto */ + public abstract int getProtoEnum(); + + /** True if the ClientMonitor should cancel any current and pending interruptable clients. */ + public boolean interruptsPrecedingClients() { + return false; + } + /** * Starts the ClientMonitor's lifecycle. * @param callback invoked when the operation is complete (succeeds, fails, etc) */ - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { mCallback = wrapCallbackForStart(callback); mCallback.onClientStarted(this); } @@ -204,7 +141,7 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { * Returns the original callback unless overridden. */ @NonNull - protected Callback wrapCallbackForStart(@NonNull Callback callback) { + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { return callback; } @@ -329,7 +266,7 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } @VisibleForTesting - public Callback getCallback() { + public ClientMonitorCallback getCallback() { return mCallback; } diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java b/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java index 39c5944d65c73..1a6da94f683e5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java +++ b/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java @@ -160,7 +160,7 @@ public class BiometricScheduler { // Internal callback, notified when an operation is complete. Notifies the requester // that the operation is complete, before performing internal scheduler work (such as // starting the next client). - private final BaseClientMonitor.Callback mInternalCallback = new BaseClientMonitor.Callback() { + private final ClientMonitorCallback mInternalCallback = new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { Slog.d(getTag(), "[Started] " + clientMonitor); @@ -247,7 +247,7 @@ public class BiometricScheduler { } @VisibleForTesting - public BaseClientMonitor.Callback getInternalCallback() { + public ClientMonitorCallback getInternalCallback() { return mInternalCallback; } @@ -368,7 +368,7 @@ public class BiometricScheduler { * @param clientCallback optional callback, invoked when the client state changes. */ public void scheduleClientMonitor(@NonNull BaseClientMonitor clientMonitor, - @Nullable BaseClientMonitor.Callback clientCallback) { + @Nullable ClientMonitorCallback clientCallback) { // If the incoming operation should interrupt preceding clients, mark any interruptable // pending clients as canceling. Once they reach the head of the queue, the scheduler will // send ERROR_CANCELED and skip the operation. diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java index e8b50d90b5865..812ca8ac62fe2 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java +++ b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java @@ -65,7 +65,7 @@ public class BiometricSchedulerOperation { protected static final int STATE_WAITING_FOR_COOKIE = 4; /** - * The {@link BaseClientMonitor.Callback} has been invoked and the client is finished. + * The {@link ClientMonitorCallback} has been invoked and the client is finished. */ protected static final int STATE_FINISHED = 5; @@ -83,7 +83,7 @@ public class BiometricSchedulerOperation { @NonNull private final BaseClientMonitor mClientMonitor; @Nullable - private final BaseClientMonitor.Callback mClientCallback; + private final ClientMonitorCallback mClientCallback; @OperationState private int mState; @VisibleForTesting @@ -92,14 +92,14 @@ public class BiometricSchedulerOperation { BiometricSchedulerOperation( @NonNull BaseClientMonitor clientMonitor, - @Nullable BaseClientMonitor.Callback callback + @Nullable ClientMonitorCallback callback ) { this(clientMonitor, callback, STATE_WAITING_IN_QUEUE); } protected BiometricSchedulerOperation( @NonNull BaseClientMonitor clientMonitor, - @Nullable BaseClientMonitor.Callback callback, + @Nullable ClientMonitorCallback callback, @OperationState int state ) { mClientMonitor = clientMonitor; @@ -139,7 +139,7 @@ public class BiometricSchedulerOperation { * @param callback lifecycle callback * @return if this operation started */ - public boolean start(@NonNull BaseClientMonitor.Callback callback) { + public boolean start(@NonNull ClientMonitorCallback callback) { checkInState("start", STATE_WAITING_IN_QUEUE, STATE_WAITING_FOR_COOKIE, @@ -159,7 +159,7 @@ public class BiometricSchedulerOperation { * @param cookie cookie indicting the operation should begin * @return if this operation started */ - public boolean startWithCookie(@NonNull BaseClientMonitor.Callback callback, int cookie) { + public boolean startWithCookie(@NonNull ClientMonitorCallback callback, int cookie) { checkInState("start", STATE_WAITING_IN_QUEUE, STATE_WAITING_FOR_COOKIE, @@ -173,8 +173,8 @@ public class BiometricSchedulerOperation { return doStart(callback); } - private boolean doStart(@NonNull BaseClientMonitor.Callback callback) { - final BaseClientMonitor.Callback cb = getWrappedCallback(callback); + private boolean doStart(@NonNull ClientMonitorCallback callback) { + final ClientMonitorCallback cb = getWrappedCallback(callback); if (mState == STATE_WAITING_IN_QUEUE_CANCELING) { Slog.d(TAG, "Operation marked for cancellation, cancelling now: " + this); @@ -239,9 +239,9 @@ public class BiometricSchedulerOperation { * * @param handler handler to use for the cancellation watchdog * @param callback lifecycle callback (only used if this operation hasn't started, otherwise - * the callback used from {@link #start(BaseClientMonitor.Callback)} is used) + * the callback used from {@link #start(ClientMonitorCallback)} is used) */ - public void cancel(@NonNull Handler handler, @NonNull BaseClientMonitor.Callback callback) { + public void cancel(@NonNull Handler handler, @NonNull ClientMonitorCallback callback) { checkNotInState("cancel", STATE_FINISHED); final int currentState = mState; @@ -270,14 +270,14 @@ public class BiometricSchedulerOperation { } @NonNull - private BaseClientMonitor.Callback getWrappedCallback() { + private ClientMonitorCallback getWrappedCallback() { return getWrappedCallback(null); } @NonNull - private BaseClientMonitor.Callback getWrappedCallback( - @Nullable BaseClientMonitor.Callback callback) { - final BaseClientMonitor.Callback destroyCallback = new BaseClientMonitor.Callback() { + private ClientMonitorCallback getWrappedCallback( + @Nullable ClientMonitorCallback callback) { + final ClientMonitorCallback destroyCallback = new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -286,7 +286,7 @@ public class BiometricSchedulerOperation { mState = STATE_FINISHED; } }; - return new BaseClientMonitor.CompositeCallback(destroyCallback, callback, mClientCallback); + return new ClientMonitorCompositeCallback(destroyCallback, callback, mClientCallback); } /** {@link BaseClientMonitor#getSensorId()}. */ diff --git a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java new file mode 100644 index 0000000000000..8ea4ee911cb10 --- /dev/null +++ b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java @@ -0,0 +1,43 @@ +/* + * 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; + +import android.annotation.NonNull; + +/** + * Interface that ClientMonitor holders should use to receive callbacks. + */ +public interface ClientMonitorCallback { + /** + * Invoked when the ClientMonitor operation has been started (e.g. reached the head of + * the queue and becomes the current operation). + * + * @param clientMonitor Reference of the ClientMonitor that is starting. + */ + default void onClientStarted(@NonNull BaseClientMonitor clientMonitor) {} + + /** + * Invoked when the ClientMonitor operation is complete. This abstracts away asynchronous + * (i.e. Authenticate, Enroll, Enumerate, Remove) and synchronous (i.e. generateChallenge, + * revokeChallenge) so that a scheduler can process ClientMonitors regardless of their + * implementation. + * + * @param clientMonitor Reference of the ClientMonitor that finished. + * @param success True if the operation completed successfully. + */ + default void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) {} +} diff --git a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java new file mode 100644 index 0000000000000..b82f5fa129d67 --- /dev/null +++ b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java @@ -0,0 +1,53 @@ +/* + * 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; + +import android.annotation.NonNull; + +import java.util.ArrayList; +import java.util.List; + +/** Holder for wrapping multiple handlers into a single Callback. */ +public class ClientMonitorCompositeCallback implements ClientMonitorCallback { + @NonNull + private final List mCallbacks; + + public ClientMonitorCompositeCallback(@NonNull ClientMonitorCallback... callbacks) { + mCallbacks = new ArrayList<>(); + + for (ClientMonitorCallback callback : callbacks) { + if (callback != null) { + mCallbacks.add(callback); + } + } + } + + @Override + public final void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { + for (int i = 0; i < mCallbacks.size(); i++) { + mCallbacks.get(i).onClientStarted(clientMonitor); + } + } + + @Override + public final void onClientFinished(@NonNull BaseClientMonitor clientMonitor, + boolean success) { + for (int i = mCallbacks.size() - 1; i >= 0; i--) { + mCallbacks.get(i).onClientFinished(clientMonitor, success); + } + } +} 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 c83323a3eb3fb..3b7adc1a61763 100644 --- a/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java @@ -98,7 +98,7 @@ public abstract class EnrollClient extends AcquisitionClient implements En } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); if (hasReachedEnrollmentLimit()) { diff --git a/services/core/java/com/android/server/biometrics/sensors/EnrollmentModifier.java b/services/core/java/com/android/server/biometrics/sensors/EnrollmentModifier.java index c2f909b08bb69..3060f30bc0840 100644 --- a/services/core/java/com/android/server/biometrics/sensors/EnrollmentModifier.java +++ b/services/core/java/com/android/server/biometrics/sensors/EnrollmentModifier.java @@ -23,7 +23,7 @@ public interface EnrollmentModifier { /** * Callers should typically check this after - * {@link BaseClientMonitor.Callback#onClientFinished(BaseClientMonitor, boolean)} + * {@link ClientMonitorCallback#onClientFinished(BaseClientMonitor, boolean)} * * @return true if the user has gone from: * 1) none-enrolled --> enrolled 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 3d74f369efde4..6fb6d08cd602e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/GenerateChallengeClient.java @@ -47,7 +47,7 @@ public abstract class GenerateChallengeClient extends HalClientMonitor { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); 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 63cd4125262dd..c8830f8049a21 100644 --- a/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/HalClientMonitor.java @@ -45,7 +45,7 @@ public abstract class HalClientMonitor extends BaseClientMonitor { /** * 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(Callback)}. + * {@link #start(ClientMonitorCallback)}. */ public abstract void unableToStart(); 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 82a8437277937..0636893eabf73 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InternalCleanupClient.java @@ -64,7 +64,7 @@ public abstract class InternalCleanupClient unknownHALTemplates = @@ -90,7 +90,7 @@ public abstract class InternalCleanupClient extends HalClientMonitor } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); // The biometric template ids will be removed when we get confirmation from the HAL diff --git a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java b/services/core/java/com/android/server/biometrics/sensors/Interruptable.java index d5093c7564154..4f645efcccf0f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java +++ b/services/core/java/com/android/server/biometrics/sensors/Interruptable.java @@ -29,15 +29,15 @@ public interface Interruptable { /** * Notifies the client that it needs to finish before - * {@link BaseClientMonitor#start(BaseClientMonitor.Callback)} was invoked. This usually happens + * {@link BaseClientMonitor#start(ClientMonitorCallback)} was invoked. This usually happens * if the client is still waiting in the pending queue and got notified that a subsequent * operation is preempting it. * * This method must invoke - * {@link BaseClientMonitor.Callback#onClientFinished(BaseClientMonitor, boolean)} on the + * {@link ClientMonitorCallback#onClientFinished(BaseClientMonitor, boolean)} on the * given callback (with success). * * @param callback invoked when the operation is completed. */ - void cancelWithoutStarting(@NonNull BaseClientMonitor.Callback callback); + void cancelWithoutStarting(@NonNull ClientMonitorCallback callback); } 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 cede4a7252467..ee6bb0f0886ae 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InvalidationClient.java @@ -62,7 +62,7 @@ public abstract class InvalidationClient extends HalClientMonitor { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); diff --git a/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java b/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java index 603cc22968a99..4f900208841e3 100644 --- a/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java +++ b/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java @@ -56,7 +56,7 @@ public class UserAwareBiometricScheduler extends BiometricScheduler { @NonNull private final UserSwitchCallback mUserSwitchCallback; @Nullable private StopUserClient mStopUserClient; - private class ClientFinishedCallback implements BaseClientMonitor.Callback { + private class ClientFinishedCallback implements ClientMonitorCallback { private final BaseClientMonitor mOwner; ClientFinishedCallback(BaseClientMonitor owner) { diff --git a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java index 77e431c811923..1e9b72b6f4d59 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/ServiceProvider.java @@ -29,7 +29,7 @@ import android.os.IBinder; import android.util.proto.ProtoOutputStream; import android.view.Surface; -import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.LockoutTracker; @@ -137,7 +137,7 @@ public interface ServiceProvider { void startPreparedClient(int sensorId, int cookie); void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback); + @Nullable ClientMonitorCallback callback); void dumpProtoState(int sensorId, @NonNull ProtoOutputStream proto, boolean clearSchedulerBuffer); 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 66b942b085a4b..89982691ae388 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 @@ -35,6 +35,7 @@ import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.HashSet; @@ -221,7 +222,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { Utils.checkPermission(mContext, TEST_BIOMETRIC); Slog.d(TAG, "cleanupInternalState: " + userId); - mProvider.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { + mProvider.scheduleInternalCleanup(mSensorId, userId, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { try { 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 757a52cb8d8c0..dc21a04fb4464 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 @@ -39,7 +39,9 @@ import com.android.internal.R; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BiometricNotificationUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; import com.android.server.biometrics.sensors.LockoutTracker; @@ -97,15 +99,15 @@ class FaceAuthenticationClient extends AuthenticationClient implements } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); mState = STATE_STARTED; } @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback( + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback( getLogger().createALSCallback(true /* startWithClient */), callback); } 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 2158dfe7bde5e..72a20db077dd7 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 @@ -30,6 +30,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.sensors.AcquisitionClient; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.DetectionConsumer; @@ -58,7 +59,7 @@ public class FaceDetectClient extends AcquisitionClient implements Det } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 b5f89b497273a..5c57dbbffedbf 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 @@ -41,7 +41,9 @@ import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.BiometricUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.face.FaceService; import com.android.server.biometrics.sensors.face.FaceUtils; @@ -67,8 +69,8 @@ public class FaceEnrollClient extends EnrollClient { private final int mMaxTemplatesPerUser; private final boolean mDebugConsent; - private final BaseClientMonitor.Callback mPreviewHandleDeleterCallback = - new BaseClientMonitor.Callback() { + private final ClientMonitorCallback mPreviewHandleDeleterCallback = + new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { } @@ -101,7 +103,7 @@ public class FaceEnrollClient extends EnrollClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); BiometricNotificationUtils.cancelReEnrollNotification(getContext()); @@ -109,8 +111,8 @@ public class FaceEnrollClient extends EnrollClient { @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback(mPreviewHandleDeleterCallback, + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback(mPreviewHandleDeleterCallback, getLogger().createALSCallback(true /* startWithClient */), callback); } 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 af826c2f68ba5..584b58cdd7c7b 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 @@ -24,6 +24,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.Map; @@ -48,7 +49,7 @@ class FaceGetAuthenticatorIdClient extends HalClientMonitor { // Nothing to do here } - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 315ede8bc5df7..acf5720cd0cf5 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 @@ -29,6 +29,7 @@ import android.provider.Settings; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.HalClientMonitor; @@ -60,7 +61,7 @@ public class FaceGetFeatureClient extends HalClientMonitor implements } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java index ae507abea537d..9d7a5529f4736 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java @@ -49,6 +49,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.InvalidationRequesterClient; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -217,7 +218,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { } private void scheduleForSensor(int sensorId, @NonNull BaseClientMonitor client, - BaseClientMonitor.Callback callback) { + ClientMonitorCallback callback) { if (!mSensors.contains(sensorId)) { throw new IllegalStateException("Unable to schedule client: " + client + " for sensor: " + sensorId); @@ -341,7 +342,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { opPackageName, id, FaceUtils.getInstance(sensorId), disabledFeatures, ENROLL_TIMEOUT_SEC, previewSurface, sensorId, maxTemplatesPerUser, debugConsent); - scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() { + scheduleForSensor(sensorId, client, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -511,7 +512,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider { @Override public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { + @Nullable ClientMonitorCallback callback) { mHandler.post(() -> { final List enrolledList = getEnrolledFaces(sensorId, userId); final FaceInternalCleanupClient client = 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 1e1b532961dfc..fd44c5cf4afc5 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 @@ -27,6 +27,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.HardwareAuthTokenUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutCache; @@ -64,7 +65,7 @@ public class FaceResetLockoutClient extends HalClientMonitor implement } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 4515d0421a580..ee6982abd9ed1 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 @@ -28,6 +28,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.HardwareAuthTokenUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.HalClientMonitor; @@ -65,7 +66,7 @@ public class FaceSetFeatureClient extends HalClientMonitor implements } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 2b5f49546d696..4a3da0d929dcb 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 @@ -27,6 +27,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StartUserClient; public class FaceStartUserClient extends StartUserClient { @@ -43,7 +44,7 @@ public class FaceStartUserClient extends StartUserClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 06328e311b067..88b92359268c9 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 @@ -24,6 +24,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StopUserClient; public class FaceStopUserClient extends StopUserClient { @@ -36,7 +37,7 @@ public class FaceStopUserClient extends StopUserClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java index b45578b4d4477..e7483b3eeae3b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/BiometricTestSessionImpl.java @@ -32,6 +32,7 @@ import android.util.Slog; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.face.FaceUtils; import java.util.ArrayList; @@ -197,7 +198,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mFace10.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { + mFace10.scheduleInternalCleanup(mSensorId, userId, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { try { 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 e957794372aac..9a52db19ecdad 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 @@ -60,6 +60,7 @@ import com.android.server.biometrics.sensors.AuthenticationConsumer; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.BiometricScheduler; +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; @@ -534,7 +535,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), userId, opPackageName, mSensorId, sSystemClock.millis()); mGeneratedChallengeCache = client; - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { if (client != clientMonitor) { @@ -562,7 +563,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { final FaceRevokeChallengeClient client = new FaceRevokeChallengeClient(mContext, mLazyDaemon, token, userId, opPackageName, mSensorId); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -591,7 +592,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { opPackageName, id, FaceUtils.getLegacyInstance(mSensorId), disabledFeatures, ENROLL_TIMEOUT_SEC, previewSurface, mSensorId); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -742,7 +743,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { final int faceId = faces.get(0).getBiometricId(); final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext, mLazyDaemon, token, listener, userId, opPackageName, mSensorId, feature, faceId); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientFinished( @NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -760,7 +761,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { } private void scheduleInternalCleanup(int userId, - @Nullable BaseClientMonitor.Callback callback) { + @Nullable ClientMonitorCallback callback) { mHandler.post(() -> { scheduleUpdateActiveUserWithoutHandler(userId); @@ -774,7 +775,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @Override public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { + @Nullable ClientMonitorCallback callback) { scheduleInternalCleanup(userId, callback); } @@ -890,7 +891,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { final FaceUpdateActiveUserClient client = new FaceUpdateActiveUserClient(mContext, mLazyDaemon, targetUserId, mContext.getOpPackageName(), mSensorId, hasEnrolled, mAuthenticatorIds); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { 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 80faf3ea17c55..1e0e7992bf874 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 @@ -34,7 +34,9 @@ import com.android.internal.R; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BiometricNotificationUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.face.UsageStats; @@ -87,15 +89,15 @@ class FaceAuthenticationClient extends AuthenticationClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); mState = STATE_STARTED; } @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback( + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback( getLogger().createALSCallback(true /* startWithClient */), callback); } 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 5c69d6fb65c99..8068e14cf0f0c 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 @@ -33,7 +33,9 @@ import android.view.Surface; import com.android.internal.R; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BiometricUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import java.util.ArrayList; @@ -69,8 +71,8 @@ public class FaceEnrollClient extends EnrollClient { @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback( + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback( getLogger().createALSCallback(true /* startWithClient */), callback); } 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 f418104834e3b..e29a1923e47e6 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 @@ -25,6 +25,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.internal.util.Preconditions; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.GenerateChallengeClient; @@ -39,7 +40,7 @@ public class FaceGenerateChallengeClient extends GenerateChallengeClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 9d977d60e7059..ee01c43a2e732 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 @@ -24,6 +24,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.ArrayList; @@ -57,7 +58,7 @@ public class FaceResetLockoutClient extends HalClientMonitor { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 cc3d8f0e28ba5..ee28f7b0f3047 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 @@ -26,6 +26,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.HalClientMonitor; @@ -71,7 +72,7 @@ public class FaceSetFeatureClient extends HalClientMonitor { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); 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 5343d0d172737..8ee8ce5220352 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 @@ -25,6 +25,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.io.File; @@ -49,7 +50,7 @@ public class FaceUpdateActiveUserClient extends HalClientMonitor mFingerprintStateListeners = new CopyOnWriteArrayList<>(); diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java index 535705c63cab0..0bdc4ebad66e5 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java @@ -30,7 +30,7 @@ import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; import android.util.proto.ProtoOutputStream; -import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.LockoutTracker; @@ -121,7 +121,7 @@ public interface ServiceProvider { @NonNull String opPackageName); void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback); + @Nullable ClientMonitorCallback callback); boolean isHardwareDetected(int sensorId); 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 2b50b96c69a17..b29fbb66fa50d 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 @@ -32,6 +32,7 @@ import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.fingerprint.FingerprintStateCallback; import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; @@ -204,7 +205,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub { Utils.checkPermission(mContext, TEST_BIOMETRIC); Slog.d(TAG, "cleanupInternalState: " + userId); - mProvider.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { + mProvider.scheduleInternalCleanup(mSensorId, userId, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { try { 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 96f485394c701..f3d0121c98eb2 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 @@ -37,7 +37,9 @@ import com.android.server.biometrics.log.CallbackWithProbe; import com.android.server.biometrics.log.Probe; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BiometricNotificationUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; import com.android.server.biometrics.sensors.LockoutTracker; @@ -86,7 +88,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); if (mSensorProps.isAnyUdfpsType()) { @@ -99,8 +101,8 @@ class FingerprintAuthenticationClient extends AuthenticationClient imp @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback(mALSProbeCallback, callback); + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback(mALSProbeCallback, callback); } @Override 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 ac3ce896049bc..1f0482db228b3 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 @@ -30,6 +30,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.sensors.AcquisitionClient; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.DetectionConsumer; import com.android.server.biometrics.sensors.SensorOverlays; @@ -61,7 +62,7 @@ class FingerprintDetectClient extends AcquisitionClient implements Det } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 e3f26df1a4572..169c3ebec1a74 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 @@ -37,7 +37,9 @@ import android.util.Slog; import com.android.server.biometrics.HardwareAuthTokenUtils; import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.BiometricUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.SensorOverlays; import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; @@ -82,8 +84,8 @@ class FingerprintEnrollClient extends EnrollClient implements Udfps { @NonNull @Override - protected Callback wrapCallbackForStart(@NonNull Callback callback) { - return new CompositeCallback( + protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) { + return new ClientMonitorCompositeCallback( getLogger().createALSCallback(true /* startWithClient */), callback); } 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 ed2345e3362ef..52bd234fcc5dd 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 @@ -24,6 +24,7 @@ import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.BiometricsProto; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.HalClientMonitor; import java.util.Map; @@ -48,7 +49,7 @@ class FingerprintGetAuthenticatorIdClient extends HalClientMonitor { // Nothing to do here } - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java index eb16c763dea6d..efc93045f9577 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java @@ -55,7 +55,9 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.InvalidationRequesterClient; import com.android.server.biometrics.sensors.LockoutResetDispatcher; import com.android.server.biometrics.sensors.PerformanceTracker; @@ -248,7 +250,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi } private void scheduleForSensor(int sensorId, @NonNull BaseClientMonitor client, - BaseClientMonitor.Callback callback) { + ClientMonitorCallback callback) { if (!mSensors.contains(sensorId)) { throw new IllegalStateException("Unable to schedule client: " + client + " for sensor: " + sensorId); @@ -361,7 +363,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi opPackageName, FingerprintUtils.getInstance(sensorId), sensorId, mSensors.get(sensorId).getSensorProperties(), mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason); - scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() { + scheduleForSensor(sensorId, client, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { @@ -484,7 +486,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi @Override public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { + @Nullable ClientMonitorCallback callback) { mHandler.post(() -> { final List enrolledList = getEnrolledFingerprints(sensorId, userId); final FingerprintInternalCleanupClient client = @@ -493,7 +495,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mContext.getOpPackageName(), sensorId, enrolledList, FingerprintUtils.getInstance(sensorId), mSensors.get(sensorId).getAuthenticatorIds()); - scheduleForSensor(sensorId, client, new BaseClientMonitor.CompositeCallback(callback, + scheduleForSensor(sensorId, client, new ClientMonitorCompositeCallback(callback, mFingerprintStateCallback)); }); } 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 878ef46d2b2e0..ee8d170af4074 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 @@ -27,6 +27,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.HardwareAuthTokenUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ErrorConsumer; import com.android.server.biometrics.sensors.HalClientMonitor; import com.android.server.biometrics.sensors.LockoutCache; @@ -64,7 +65,7 @@ class FingerprintResetLockoutClient extends HalClientMonitor implement } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 ee81620fdf770..9f11df6b939b9 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 @@ -27,6 +27,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.StartUserClient; public class FingerprintStartUserClient extends StartUserClient { @@ -44,7 +45,7 @@ public class FingerprintStartUserClient extends StartUserClient { @@ -36,7 +37,7 @@ public class FingerprintStopUserClient extends StopUserClient { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java index 79c6b1b30d5bf..033855f822a4f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/BiometricTestSessionImpl.java @@ -31,6 +31,7 @@ import android.util.Slog; import com.android.server.biometrics.Utils; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.fingerprint.FingerprintStateCallback; import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils; @@ -201,7 +202,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub { public void cleanupInternalState(int userId) { Utils.checkPermission(mContext, TEST_BIOMETRIC); - mFingerprint21.scheduleInternalCleanup(mSensorId, userId, new BaseClientMonitor.Callback() { + mFingerprint21.scheduleInternalCleanup(mSensorId, userId, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { try { 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 6feb5fa418bbc..f160dfff52491 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 @@ -62,7 +62,9 @@ import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.AuthenticationConsumer; import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricScheduler; +import com.android.server.biometrics.sensors.ClientMonitorCallback; 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; @@ -492,7 +494,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider new FingerprintUpdateActiveUserClient(mContext, mLazyDaemon, targetUserId, mContext.getOpPackageName(), mSensorProperties.sensorId, this::getCurrentUser, hasEnrolled, mAuthenticatorIds, force); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { @@ -577,7 +579,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider FingerprintUtils.getLegacyInstance(mSensorId), ENROLL_TIMEOUT_SEC, mSensorProperties.sensorId, mUdfpsOverlayController, mSidefpsController, enrollReason); - mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() { + mScheduler.scheduleClientMonitor(client, new ClientMonitorCallback() { @Override public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) { mFingerprintStateCallback.onClientStarted(clientMonitor); @@ -699,7 +701,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider } private void scheduleInternalCleanup(int userId, - @Nullable BaseClientMonitor.Callback callback) { + @Nullable ClientMonitorCallback callback) { mHandler.post(() -> { scheduleUpdateActiveUserWithoutHandler(userId); @@ -715,8 +717,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider @Override public void scheduleInternalCleanup(int sensorId, int userId, - @Nullable BaseClientMonitor.Callback callback) { - scheduleInternalCleanup(userId, new BaseClientMonitor.CompositeCallback(callback, + @Nullable ClientMonitorCallback callback) { + scheduleInternalCleanup(userId, new ClientMonitorCompositeCallback(callback, mFingerprintStateCallback)); } 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 d9b290febd9d2..87d47c1cffc54 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 @@ -36,7 +36,9 @@ import com.android.server.biometrics.log.CallbackWithProbe; import com.android.server.biometrics.log.Probe; import com.android.server.biometrics.sensors.AuthenticationClient; import com.android.server.biometrics.sensors.BiometricNotificationUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.LockoutTracker; import com.android.server.biometrics.sensors.SensorOverlays; import com.android.server.biometrics.sensors.fingerprint.Udfps; @@ -86,7 +88,7 @@ class FingerprintAuthenticationClient extends AuthenticationClient } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } 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 dd92e3ed3026a..82b046d0ffd2b 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 @@ -33,7 +33,9 @@ import android.util.Slog; import com.android.server.biometrics.sensors.BiometricNotificationUtils; import com.android.server.biometrics.sensors.BiometricUtils; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; +import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback; import com.android.server.biometrics.sensors.EnrollClient; import com.android.server.biometrics.sensors.SensorOverlays; import com.android.server.biometrics.sensors.fingerprint.Udfps; @@ -75,8 +77,8 @@ public class FingerprintEnrollClient extends EnrollClient mClientMonitor; @Mock - private BaseClientMonitor.Callback mClientCallback; + private ClientMonitorCallback mClientCallback; @Mock private FakeHal mHal; @Captor - ArgumentCaptor mStartCallback; + ArgumentCaptor mStartCallback; private Handler mHandler; private BiometricSchedulerOperation mOperation; @@ -89,7 +89,7 @@ public class BiometricSchedulerOperationTest { assertThat(mOperation.isFinished()).isFalse(); final boolean started = mOperation.startWithCookie( - mock(BaseClientMonitor.Callback.class), cookie); + mock(ClientMonitorCallback.class), cookie); assertThat(started).isTrue(); verify(mClientMonitor).start(mStartCallback.capture()); @@ -106,7 +106,7 @@ public class BiometricSchedulerOperationTest { assertThat(mOperation.isReadyToStart()).isEqualTo(goodCookie); final boolean started = mOperation.startWithCookie( - mock(BaseClientMonitor.Callback.class), badCookie); + mock(ClientMonitorCallback.class), badCookie); assertThat(started).isFalse(); assertThat(mOperation.isStarted()).isFalse(); @@ -119,7 +119,7 @@ public class BiometricSchedulerOperationTest { when(mClientMonitor.getCookie()).thenReturn(0); when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - final BaseClientMonitor.Callback cb = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback cb = mock(ClientMonitorCallback.class); mOperation.start(cb); verify(mClientMonitor).start(mStartCallback.capture()); mStartCallback.getValue().onClientStarted(mClientMonitor); @@ -146,7 +146,7 @@ public class BiometricSchedulerOperationTest { when(mClientMonitor.getCookie()).thenReturn(0); when(mClientMonitor.getFreshDaemon()).thenReturn(null); - final BaseClientMonitor.Callback cb = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback cb = mock(ClientMonitorCallback.class); mOperation.start(cb); verify(mClientMonitor, never()).start(any()); @@ -164,17 +164,17 @@ public class BiometricSchedulerOperationTest { public void doesNotStartWithCookie() { when(mClientMonitor.getCookie()).thenReturn(9); assertThrows(IllegalStateException.class, - () -> mOperation.start(mock(BaseClientMonitor.Callback.class))); + () -> mOperation.start(mock(ClientMonitorCallback.class))); } @Test public void cannotRestart() { when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - mOperation.start(mock(BaseClientMonitor.Callback.class)); + mOperation.start(mock(ClientMonitorCallback.class)); assertThrows(IllegalStateException.class, - () -> mOperation.start(mock(BaseClientMonitor.Callback.class))); + () -> mOperation.start(mock(ClientMonitorCallback.class))); } @Test @@ -187,14 +187,14 @@ public class BiometricSchedulerOperationTest { verify(mClientMonitor).unableToStart(); verify(mClientMonitor).destroy(); assertThrows(IllegalStateException.class, - () -> mOperation.start(mock(BaseClientMonitor.Callback.class))); + () -> mOperation.start(mock(ClientMonitorCallback.class))); } @Test public void cannotAbortRunning() { when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - mOperation.start(mock(BaseClientMonitor.Callback.class)); + mOperation.start(mock(ClientMonitorCallback.class)); assertThrows(IllegalStateException.class, () -> mOperation.abort()); } @@ -203,8 +203,8 @@ public class BiometricSchedulerOperationTest { public void cancel() { when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - final BaseClientMonitor.Callback startCb = mock(BaseClientMonitor.Callback.class); - final BaseClientMonitor.Callback cancelCb = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback startCb = mock(ClientMonitorCallback.class); + final ClientMonitorCallback cancelCb = mock(ClientMonitorCallback.class); mOperation.start(startCb); verify(mClientMonitor).start(mStartCallback.capture()); mStartCallback.getValue().onClientStarted(mClientMonitor); @@ -230,12 +230,12 @@ public class BiometricSchedulerOperationTest { public void cancelWithoutStarting() { when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - final BaseClientMonitor.Callback cancelCb = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback cancelCb = mock(ClientMonitorCallback.class); mOperation.cancel(mHandler, cancelCb); assertThat(mOperation.isCanceling()).isTrue(); - ArgumentCaptor cbCaptor = - ArgumentCaptor.forClass(BaseClientMonitor.Callback.class); + ArgumentCaptor cbCaptor = + ArgumentCaptor.forClass(ClientMonitorCallback.class); verify(mClientMonitor).cancelWithoutStarting(cbCaptor.capture()); cbCaptor.getValue().onClientFinished(mClientMonitor, true); @@ -278,7 +278,7 @@ public class BiometricSchedulerOperationTest { } mOperation.markCanceling(); - final BaseClientMonitor.Callback cb = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback cb = mock(ClientMonitorCallback.class); if (withCookie != null) { mOperation.startWithCookie(cb, withCookie); } else { @@ -307,12 +307,12 @@ public class BiometricSchedulerOperationTest { private void cancelWatchdog(boolean start) { when(mClientMonitor.getFreshDaemon()).thenReturn(mHal); - mOperation.start(mock(BaseClientMonitor.Callback.class)); + mOperation.start(mock(ClientMonitorCallback.class)); if (start) { verify(mClientMonitor).start(mStartCallback.capture()); mStartCallback.getValue().onClientStarted(mClientMonitor); } - mOperation.cancel(mHandler, mock(BaseClientMonitor.Callback.class)); + mOperation.cancel(mHandler, mock(ClientMonitorCallback.class)); assertThat(mOperation.isCanceling()).isTrue(); 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 ac0831983262c..c99d656892f40 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 @@ -114,13 +114,13 @@ public class BiometricSchedulerTest { final TestHalClientMonitor client2 = new TestHalClientMonitor( mContext, mToken, () -> mock(Object.class)); - final BaseClientMonitor.Callback callback1 = mock(BaseClientMonitor.Callback.class); - final BaseClientMonitor.Callback callback2 = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback callback1 = mock(ClientMonitorCallback.class); + final ClientMonitorCallback callback2 = mock(ClientMonitorCallback.class); // Pretend the scheduler is busy so the first operation doesn't start right away. We want // to pretend like there are two operations in the queue before kicking things off mScheduler.mCurrentOperation = new BiometricSchedulerOperation( - mock(BaseClientMonitor.class), mock(BaseClientMonitor.Callback.class)); + mock(BaseClientMonitor.class), mock(ClientMonitorCallback.class)); mScheduler.scheduleClientMonitor(client1, callback1); assertEquals(1, mScheduler.mPendingOperations.size()); @@ -152,13 +152,13 @@ public class BiometricSchedulerTest { final TestHalClientMonitor client2 = new TestHalClientMonitor(mContext, mToken, () -> daemon2); - final BaseClientMonitor.Callback callback1 = mock(BaseClientMonitor.Callback.class); - final BaseClientMonitor.Callback callback2 = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback callback1 = mock(ClientMonitorCallback.class); + final ClientMonitorCallback callback2 = mock(ClientMonitorCallback.class); // Pretend the scheduler is busy so the first operation doesn't start right away. We want // to pretend like there are two operations in the queue before kicking things off mScheduler.mCurrentOperation = new BiometricSchedulerOperation( - mock(BaseClientMonitor.class), mock(BaseClientMonitor.Callback.class)); + mock(BaseClientMonitor.class), mock(ClientMonitorCallback.class)); mScheduler.scheduleClientMonitor(client1, callback1); assertEquals(1, mScheduler.mPendingOperations.size()); @@ -187,7 +187,7 @@ public class BiometricSchedulerTest { final HalClientMonitor.LazyDaemon lazyDaemon1 = () -> mock(Object.class); final TestAuthenticationClient client1 = new TestAuthenticationClient(mContext, lazyDaemon1, mToken, mock(ClientMonitorCallbackConverter.class)); - final BaseClientMonitor.Callback callback1 = mock(BaseClientMonitor.Callback.class); + final ClientMonitorCallback callback1 = mock(ClientMonitorCallback.class); // Schedule a BiometricPrompt authentication request mScheduler.scheduleClientMonitor(client1, callback1); @@ -628,7 +628,7 @@ public class BiometricSchedulerTest { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); assertFalse(mStarted); mStarted = true; diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/CompositeCallbackTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/CompositeCallbackTest.java index 09b5c5cac466a..587bb600f4098 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/CompositeCallbackTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/CompositeCallbackTest.java @@ -17,36 +17,62 @@ package com.android.server.biometrics.sensors; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; +import org.junit.Before; import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Objects; @Presubmit @SmallTest public class CompositeCallbackTest { + @Mock + private BaseClientMonitor mClientMonitor; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } + @Test - public void testNullCallback() { - BaseClientMonitor.Callback callback1 = mock(BaseClientMonitor.Callback.class); - BaseClientMonitor.Callback callback2 = mock(BaseClientMonitor.Callback.class); - BaseClientMonitor.Callback callback3 = null; + public void testCallbacks() { + testCallbacks(mock(ClientMonitorCallback.class), mock(ClientMonitorCallback.class)); + } - BaseClientMonitor.CompositeCallback callback = new BaseClientMonitor.CompositeCallback( - callback1, callback2, callback3); + @Test + public void testNullCallbacks() { + testCallbacks(null, mock(ClientMonitorCallback.class), + null, mock(ClientMonitorCallback.class)); + } - BaseClientMonitor clientMonitor = mock(BaseClientMonitor.class); + private void testCallbacks(ClientMonitorCallback... callbacks) { + final ClientMonitorCallback[] expected = Arrays.stream(callbacks) + .filter(Objects::nonNull).toArray(ClientMonitorCallback[]::new); - callback.onClientStarted(clientMonitor); - verify(callback1).onClientStarted(eq(clientMonitor)); - verify(callback2).onClientStarted(eq(clientMonitor)); + ClientMonitorCompositeCallback callback = new ClientMonitorCompositeCallback(callbacks); - callback.onClientFinished(clientMonitor, true /* success */); - verify(callback1).onClientFinished(eq(clientMonitor), eq(true)); - verify(callback2).onClientFinished(eq(clientMonitor), eq(true)); + callback.onClientStarted(mClientMonitor); + final InOrder order = inOrder(expected); + for (ClientMonitorCallback cb : expected) { + order.verify(cb).onClientStarted(eq(mClientMonitor)); + } + + callback.onClientFinished(mClientMonitor, true /* success */); + Collections.reverse(Arrays.asList(expected)); + for (ClientMonitorCallback cb : expected) { + order.verify(cb).onClientFinished(eq(mClientMonitor), eq(true)); + } } } 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 407f5fb04adf7..a11709aff87fe 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 @@ -155,7 +155,7 @@ public class UserAwareBiometricSchedulerTest { assertNull(mScheduler.mCurrentOperation); final BiometricSchedulerOperation fakeOperation = new BiometricSchedulerOperation( - mock(BaseClientMonitor.class), new BaseClientMonitor.Callback() {}); + mock(BaseClientMonitor.class), new ClientMonitorCallback() {}); mScheduler.mCurrentOperation = fakeOperation; startUserClient.mCallback.onClientFinished(startUserClient, true); assertSame(fakeOperation, mScheduler.mCurrentOperation); @@ -234,7 +234,7 @@ public class UserAwareBiometricSchedulerTest { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); onUserStopped(); } @@ -248,7 +248,7 @@ public class UserAwareBiometricSchedulerTest { private static class TestStartUserClient extends StartUserClient { private final boolean mShouldFinish; - Callback mCallback; + ClientMonitorCallback mCallback; public TestStartUserClient(@NonNull Context context, @NonNull LazyDaemon lazyDaemon, @Nullable IBinder token, int userId, @@ -263,7 +263,7 @@ public class UserAwareBiometricSchedulerTest { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); mCallback = callback; diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClientTest.java index 55dc03595b3d9..931fad14888e1 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClientTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClientTest.java @@ -34,7 +34,7 @@ import android.platform.test.annotations.Presubmit; import androidx.test.core.app.ApplicationProvider; import androidx.test.filters.SmallTest; -import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import org.junit.Before; @@ -61,7 +61,7 @@ public class FaceGenerateChallengeClientTest { @Mock private IFaceServiceReceiver mOtherReceiver; @Mock - private BaseClientMonitor.Callback mMonitorCallback; + private ClientMonitorCallback mMonitorCallback; private FaceGenerateChallengeClient mClient;