Extract nested types from BaseClientMonitor.
This is mostly and ide refactored operation to rename the previously nested classes for clarity, and it adds a couple basic tests. Bug: 208303000 Test: atest CompositeCallbackTest BaseClientMonitorTest Change-Id: Iccc7fb8f5285f8fbf716d18711f98ec2f6914537
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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)");
|
||||
@@ -133,18 +74,6 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @return A ClientMonitorEnum constant defined in biometrics.proto
|
||||
*/
|
||||
public abstract int getProtoEnum();
|
||||
|
||||
/**
|
||||
* @return True if the ClientMonitor should cancel any current and pending interruptable clients
|
||||
*/
|
||||
public boolean interruptsPrecedingClients() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context system_server context
|
||||
* @param token a unique token for the client
|
||||
@@ -189,11 +118,19 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient {
|
||||
}
|
||||
}
|
||||
|
||||
/** A ClientMonitorEnum constant defined in biometrics.proto */
|
||||
public abstract int getProtoEnum();
|
||||
|
||||
/** True if the ClientMonitor should cancel any current and pending interruptable clients. */
|
||||
public boolean interruptsPrecedingClients() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the ClientMonitor's lifecycle.
|
||||
* @param callback invoked when the operation is complete (succeeds, fails, etc)
|
||||
*/
|
||||
public void start(@NonNull Callback callback) {
|
||||
public void start(@NonNull ClientMonitorCallback callback) {
|
||||
mCallback = wrapCallbackForStart(callback);
|
||||
mCallback.onClientStarted(this);
|
||||
}
|
||||
@@ -204,7 +141,7 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient {
|
||||
* Returns the original callback unless overridden.
|
||||
*/
|
||||
@NonNull
|
||||
protected Callback wrapCallbackForStart(@NonNull Callback callback) {
|
||||
protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) {
|
||||
return callback;
|
||||
}
|
||||
|
||||
@@ -329,7 +266,7 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient {
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public Callback getCallback() {
|
||||
public ClientMonitorCallback getCallback() {
|
||||
return mCallback;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()}. */
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 */);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -17,36 +17,62 @@
|
||||
package com.android.server.biometrics.sensors;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InOrder;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
|
||||
@Presubmit
|
||||
@SmallTest
|
||||
public class CompositeCallbackTest {
|
||||
|
||||
@Mock
|
||||
private BaseClientMonitor mClientMonitor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullCallback() {
|
||||
BaseClientMonitor.Callback callback1 = mock(BaseClientMonitor.Callback.class);
|
||||
BaseClientMonitor.Callback callback2 = mock(BaseClientMonitor.Callback.class);
|
||||
BaseClientMonitor.Callback callback3 = null;
|
||||
public void testCallbacks() {
|
||||
testCallbacks(mock(ClientMonitorCallback.class), mock(ClientMonitorCallback.class));
|
||||
}
|
||||
|
||||
BaseClientMonitor.CompositeCallback callback = new BaseClientMonitor.CompositeCallback(
|
||||
callback1, callback2, callback3);
|
||||
@Test
|
||||
public void testNullCallbacks() {
|
||||
testCallbacks(null, mock(ClientMonitorCallback.class),
|
||||
null, mock(ClientMonitorCallback.class));
|
||||
}
|
||||
|
||||
BaseClientMonitor clientMonitor = mock(BaseClientMonitor.class);
|
||||
private void testCallbacks(ClientMonitorCallback... callbacks) {
|
||||
final ClientMonitorCallback[] expected = Arrays.stream(callbacks)
|
||||
.filter(Objects::nonNull).toArray(ClientMonitorCallback[]::new);
|
||||
|
||||
callback.onClientStarted(clientMonitor);
|
||||
verify(callback1).onClientStarted(eq(clientMonitor));
|
||||
verify(callback2).onClientStarted(eq(clientMonitor));
|
||||
ClientMonitorCompositeCallback callback = new ClientMonitorCompositeCallback(callbacks);
|
||||
|
||||
callback.onClientFinished(clientMonitor, true /* success */);
|
||||
verify(callback1).onClientFinished(eq(clientMonitor), eq(true));
|
||||
verify(callback2).onClientFinished(eq(clientMonitor), eq(true));
|
||||
callback.onClientStarted(mClientMonitor);
|
||||
final InOrder order = inOrder(expected);
|
||||
for (ClientMonitorCallback cb : expected) {
|
||||
order.verify(cb).onClientStarted(eq(mClientMonitor));
|
||||
}
|
||||
|
||||
callback.onClientFinished(mClientMonitor, true /* success */);
|
||||
Collections.reverse(Arrays.asList(expected));
|
||||
for (ClientMonitorCallback cb : expected) {
|
||||
order.verify(cb).onClientFinished(eq(mClientMonitor), eq(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user