diff options
66 files changed, 471 insertions, 235 deletions
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 c985d5d2e597..f7b736885f71 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 <T> probe type */ -public class CallbackWithProbe<T extends Probe> implements BaseClientMonitor.Callback { +public class CallbackWithProbe<T extends Probe> 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 e29caa8461cf..86d72ba1c06f 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<T> extends HalClientMonitor<T> 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 0eb5aaf143c4..35a0f575ec97 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<T> extends AcquisitionClient<T> /** * 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<T> extends AcquisitionClient<T> * 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 1248c8b6d4d9..e1f7e2ab5461 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<Callback> 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)"); @@ -134,18 +75,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 * @param listener recipient of related events (e.g. authentication) @@ -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 39c5944d65c7..1a6da94f683e 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 e8b50d90b586..812ca8ac62fe 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 000000000000..8ea4ee911cb1 --- /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 000000000000..b82f5fa129d6 --- /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<ClientMonitorCallback> 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 c83323a3eb3f..3b7adc1a6176 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<T> extends AcquisitionClient<T> 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 c2f909b08bb6..3060f30bc084 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 3d74f369efde..6fb6d08cd602 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<T> extends HalClientMonitor<T> { } @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 63cd4125262d..c8830f8049a2 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<T> 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 82a843727793..0636893eabf7 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<S extends BiometricAuthenticator.Ide private final boolean mHasEnrollmentsBeforeStarting; private BaseClientMonitor mCurrentTask; - private final Callback mEnumerateCallback = new Callback() { + private final ClientMonitorCallback mEnumerateCallback = new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { final List<BiometricAuthenticator.Identifier> unknownHALTemplates = @@ -90,7 +90,7 @@ public abstract class InternalCleanupClient<S extends BiometricAuthenticator.Ide } }; - private final Callback mRemoveCallback = new Callback() { + private final ClientMonitorCallback mRemoveCallback = new ClientMonitorCallback() { @Override public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { Slog.d(TAG, "Remove onClientFinished: " + clientMonitor + ", success: " + success); @@ -139,7 +139,7 @@ public abstract class InternalCleanupClient<S extends BiometricAuthenticator.Ide } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); // Start enumeration. Removal will start if necessary, when enumeration is completed. 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 ced464e478e5..05ea19a3aa14 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InternalEnumerateClient.java @@ -72,7 +72,7 @@ public abstract class InternalEnumerateClient<T> extends HalClientMonitor<T> } @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 d5093c756415..4f645efcccf0 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 cede4a725246..ee6bb0f0886a 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<S extends BiometricAuthenticator.Identi } @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/InvalidationRequesterClient.java b/services/core/java/com/android/server/biometrics/sensors/InvalidationRequesterClient.java index 5ba1b0000a7c..b2661a28012d 100644 --- a/services/core/java/com/android/server/biometrics/sensors/InvalidationRequesterClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/InvalidationRequesterClient.java @@ -84,7 +84,7 @@ public class InvalidationRequesterClient<S extends BiometricAuthenticator.Identi } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); mUtils.setInvalidationInProgress(getContext(), getTargetUserId(), true /* inProgress */); 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 2a6677e55d60..e79819b401ea 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RemovalClient.java @@ -17,7 +17,6 @@ package com.android.server.biometrics.sensors; import android.annotation.NonNull; -import android.annotation.Nullable; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.BiometricsProtoEnums; @@ -59,7 +58,7 @@ public abstract class RemovalClient<S extends BiometricAuthenticator.Identifier, } @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/RevokeChallengeClient.java b/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java index 1edf5afef3b2..21a6ddfcde66 100644 --- a/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/RevokeChallengeClient.java @@ -38,7 +38,7 @@ public abstract class RevokeChallengeClient<T> extends HalClientMonitor<T> { } @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 603cc22968a9..4f900208841e 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 77e431c81192..1e9b72b6f4d5 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 66b942b085a4..89982691ae38 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 757a52cb8d8c..dc21a04fb446 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<ISession> 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 2158dfe7bde5..72a20db077dd 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<ISession> 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 b5f89b497273..5c57dbbffedb 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<ISession> { 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<ISession> { } @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<ISession> { @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 af826c2f68ba..584b58cdd7c7 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<ISession> { // 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 315ede8bc5df..acf5720cd0cf 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<ISession> 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 ae507abea537..9d7a5529f473 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<Face> 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 1e1b532961df..fd44c5cf4afc 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<ISession> 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 4515d0421a58..ee6982abd9ed 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<ISession> 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 2b5f49546d69..4a3da0d929dc 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<IFace, ISession> { @@ -43,7 +44,7 @@ public class FaceStartUserClient extends StartUserClient<IFace, ISession> { } @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 06328e311b06..88b92359268c 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<ISession> { @@ -36,7 +37,7 @@ public class FaceStopUserClient extends StopUserClient<ISession> { } @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 b45578b4d447..e7483b3eeae3 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 e957794372aa..9a52db19ecda 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 80faf3ea17c5..1e0e7992bf87 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<IBiometricsFace> { } @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 5c69d6fb65c9..8068e14cf0f0 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<IBiometricsFace> { @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 f418104834e3..e29a1923e47e 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<IBiomet private static final String TAG = "FaceGenerateChallengeClient"; static final int CHALLENGE_TIMEOUT_SEC = 600; // 10 minutes - private static final Callback EMPTY_CALLBACK = new Callback() { + private static final ClientMonitorCallback EMPTY_CALLBACK = new ClientMonitorCallback() { }; private final long mCreatedAt; @@ -94,7 +95,7 @@ public class FaceGenerateChallengeClient extends GenerateChallengeClient<IBiomet } private void sendChallengeResult(@NonNull ClientMonitorCallbackConverter receiver, - @NonNull Callback ownerCallback) { + @NonNull ClientMonitorCallback ownerCallback) { Preconditions.checkState(mChallengeResult != null, "result not available"); try { receiver.onChallengeGenerated(getSensorId(), getTargetUserId(), mChallengeResult); 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 7821601c8433..0a9d96d00eb6 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 @@ -28,6 +28,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; @@ -66,7 +67,7 @@ public class FaceGetFeatureClient extends HalClientMonitor<IBiometricsFace> { } @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 9d977d60e705..ee01c43a2e73 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<IBiometricsFace> { } @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 cc3d8f0e28ba..ee28f7b0f304 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<IBiometricsFace> { } @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 5343d0d17273..8ee8ce522035 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<IBiometricsFace } @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/FingerprintStateCallback.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintStateCallback.java index be0e6edb2a42..04fd534adb3b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintStateCallback.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintStateCallback.java @@ -31,6 +31,7 @@ import android.util.Slog; 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.EnrollClient; import com.android.server.biometrics.sensors.EnrollmentModifier; @@ -39,7 +40,7 @@ import java.util.concurrent.CopyOnWriteArrayList; /** * A callback for receiving notifications about changes in fingerprint state. */ -public class FingerprintStateCallback implements BaseClientMonitor.Callback { +public class FingerprintStateCallback implements ClientMonitorCallback { @NonNull private final CopyOnWriteArrayList<IFingerprintStateListener> 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 535705c63cab..0bdc4ebad66e 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 2b50b96c69a1..b29fbb66fa50 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 96f485394c70..f3d0121c98eb 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<ISession> 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<ISession> 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 ac3ce896049b..1f0482db228b 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<ISession> 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 e3f26df1a457..169c3ebec1a7 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<ISession> 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 ed2345e3362e..52bd234fcc5d 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<ISession> { // 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 eb16c763dea6..efc93045f957 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<Fingerprint> 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 878ef46d2b2e..ee8d170af407 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<ISession> 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 ee81620fdf77..9f11df6b939b 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<IFingerprint, ISession> { @@ -44,7 +45,7 @@ public class FingerprintStartUserClient extends StartUserClient<IFingerprint, IS } @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/FingerprintStopUserClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintStopUserClient.java index 7055d653dd16..9d381459566a 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 @@ -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 FingerprintStopUserClient extends StopUserClient<ISession> { @@ -36,7 +37,7 @@ public class FingerprintStopUserClient extends StopUserClient<ISession> { } @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 79c6b1b30d5b..033855f822a4 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 6feb5fa418bb..f160dfff5249 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 d9b290febd9d..87d47c1cffc5 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<IBiometricsFi } @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<IBiometricsFi @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/hidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient.java index f1dec6648740..9137212253e8 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 @@ -32,6 +32,7 @@ import android.util.Slog; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.sensors.AcquisitionClient; import com.android.server.biometrics.sensors.AuthenticationConsumer; +import com.android.server.biometrics.sensors.ClientMonitorCallback; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.PerformanceTracker; import com.android.server.biometrics.sensors.SensorOverlays; @@ -82,7 +83,7 @@ class FingerprintDetectClient extends AcquisitionClient<IBiometricsFingerprint> } @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 dd92e3ed3026..82b046d0ffd2 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<IBiometricsFingerprint @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/hidl/FingerprintResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient.java index a39f4f8c4d7e..ed28e3ff481e 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient.java @@ -22,6 +22,7 @@ import android.hardware.biometrics.BiometricsProtoEnums; import com.android.server.biometrics.BiometricsProto; import com.android.server.biometrics.sensors.BaseClientMonitor; +import com.android.server.biometrics.sensors.ClientMonitorCallback; /** * Clears lockout, which is handled in the framework (and not the HAL) for the @@ -40,7 +41,7 @@ public class FingerprintResetLockoutClient extends BaseClientMonitor { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); mLockoutTracker.resetFailedAttemptsForUser(true /* clearAttemptCounter */, getTargetUserId()); 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 a2c18923c00e..d317984c140d 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 @@ -27,6 +27,7 @@ import android.os.SELinux; 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; @@ -62,7 +63,7 @@ public class FingerprintUpdateActiveUserClient extends HalClientMonitor<IBiometr } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); if (mCurrentUserId.get() == getTargetUserId() && !mForceUpdateAuthenticatorId) { 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 a06a78288535..fc55a9f4cf80 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 @@ -52,7 +52,7 @@ public class AcquisitionClientTest { @Mock private ClientMonitorCallbackConverter mClientCallback; @Mock - private BaseClientMonitor.Callback mSchedulerCallback; + private ClientMonitorCallback mSchedulerCallback; @Before public void setUp() { @@ -96,7 +96,7 @@ public class AcquisitionClientTest { } @Override - public void start(@NonNull Callback callback) { + public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); startHalOperation(); } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java new file mode 100644 index 000000000000..51d234d5afeb --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java @@ -0,0 +1,130 @@ +/* + * 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 static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.os.IBinder; +import android.os.RemoteException; +import android.platform.test.annotations.Presubmit; + +import androidx.annotation.NonNull; +import androidx.test.filters.SmallTest; + +import com.android.server.biometrics.log.BiometricLogger; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +@Presubmit +@SmallTest +public class BaseClientMonitorTest { + + @Mock + private Context mContext; + @Mock + private IBinder mToken; + private @Mock ClientMonitorCallbackConverter mListener; + @Mock + private BiometricLogger mLogger; + @Mock + private ClientMonitorCallback mCallback; + + private TestClientMonitor mClientMonitor; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mClientMonitor = new TestClientMonitor(); + } + + @Test + public void preparesForDeath() throws RemoteException { + verify(mToken).linkToDeath(eq(mClientMonitor), anyInt()); + + mClientMonitor.binderDied(); + + assertThat(mClientMonitor.mCanceled).isTrue(); + assertThat(mClientMonitor.getListener()).isNull(); + } + + @Test + public void ignoresDeathWhenDone() { + mClientMonitor.markAlreadyDone(); + mClientMonitor.binderDied(); + + assertThat(mClientMonitor.mCanceled).isFalse(); + } + + @Test + public void start() { + mClientMonitor.start(mCallback); + + verify(mCallback).onClientStarted(eq(mClientMonitor)); + } + + @Test + public void destroy() { + mClientMonitor.destroy(); + mClientMonitor.destroy(); + + assertThat(mClientMonitor.isAlreadyDone()).isTrue(); + verify(mToken).unlinkToDeath(eq(mClientMonitor), anyInt()); + } + + @Test + public void hasRequestId() { + assertThat(mClientMonitor.hasRequestId()).isFalse(); + + final int id = 200; + mClientMonitor.setRequestId(id); + assertThat(mClientMonitor.hasRequestId()).isTrue(); + assertThat(mClientMonitor.getRequestId()).isEqualTo(id); + } + + private class TestClientMonitor extends BaseClientMonitor implements Interruptable { + public boolean mCanceled = false; + + TestClientMonitor() { + super(mContext, mToken, mListener, 9 /* userId */, "foo" /* owner */, 2 /* cookie */, + 5 /* sensorId */, mLogger); + } + + @Override + public int getProtoEnum() { + return 0; + } + + @Override + public void cancel() { + mCanceled = true; + } + + @Override + public void cancelWithoutStarting(@NonNull ClientMonitorCallback callback) { + mCanceled = true; + } + } +} diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java index d4bac2c0402d..8751cf3810bf 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java @@ -61,11 +61,11 @@ public class BiometricSchedulerOperationTest { @Mock private InterruptableMonitor<FakeHal> mClientMonitor; @Mock - private BaseClientMonitor.Callback mClientCallback; + private ClientMonitorCallback mClientCallback; @Mock private FakeHal mHal; @Captor - ArgumentCaptor<BaseClientMonitor.Callback> mStartCallback; + ArgumentCaptor<ClientMonitorCallback> 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<BaseClientMonitor.Callback> cbCaptor = - ArgumentCaptor.forClass(BaseClientMonitor.Callback.class); + ArgumentCaptor<ClientMonitorCallback> 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 ac0831983262..c99d656892f4 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<Object> 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 09b5c5cac466..587bb600f409 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)); + } + + @Test + public void testNullCallbacks() { + testCallbacks(null, mock(ClientMonitorCallback.class), + null, mock(ClientMonitorCallback.class)); + } - BaseClientMonitor.CompositeCallback callback = new BaseClientMonitor.CompositeCallback( - callback1, callback2, callback3); + private void testCallbacks(ClientMonitorCallback... callbacks) { + final ClientMonitorCallback[] expected = Arrays.stream(callbacks) + .filter(Objects::nonNull).toArray(ClientMonitorCallback[]::new); - BaseClientMonitor clientMonitor = mock(BaseClientMonitor.class); + ClientMonitorCompositeCallback callback = new ClientMonitorCompositeCallback(callbacks); - callback.onClientStarted(clientMonitor); - verify(callback1).onClientStarted(eq(clientMonitor)); - verify(callback2).onClientStarted(eq(clientMonitor)); + callback.onClientStarted(mClientMonitor); + final InOrder order = inOrder(expected); + for (ClientMonitorCallback cb : expected) { + order.verify(cb).onClientStarted(eq(mClientMonitor)); + } - callback.onClientFinished(clientMonitor, true /* success */); - verify(callback1).onClientFinished(eq(clientMonitor), eq(true)); - verify(callback2).onClientFinished(eq(clientMonitor), eq(true)); + 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 407f5fb04adf..a11709aff87f 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<Object, Object> { private final boolean mShouldFinish; - Callback mCallback; + ClientMonitorCallback mCallback; public TestStartUserClient(@NonNull Context context, @NonNull LazyDaemon<Object> 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 55dc03595b3d..931fad14888e 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; |