Merge "Configures FingerprintService to use FingerprintStateCallback to notify clients of fingerprint sensor state changes" into sc-dev
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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 android.hardware.fingerprint;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Interface for handling state changes in fingerprint-related events.
|
||||
* @hide
|
||||
*/
|
||||
public abstract class FingerprintStateListener extends IFingerprintStateListener.Stub {
|
||||
// Operation has not started yet.
|
||||
public static final int STATE_IDLE = 0;
|
||||
|
||||
// Enrollment is in progress.
|
||||
public static final int STATE_ENROLLING = 1;
|
||||
|
||||
// Lockscreen authentication in progress.
|
||||
public static final int STATE_KEYGUARD_AUTH = 2;
|
||||
|
||||
// BiometricPrompt authentication in progress.
|
||||
public static final int STATE_BP_AUTH = 3;
|
||||
|
||||
// Other Authentication State
|
||||
public static final int STATE_AUTH_OTHER = 4;
|
||||
|
||||
@IntDef({STATE_IDLE, STATE_ENROLLING, STATE_KEYGUARD_AUTH, STATE_BP_AUTH, STATE_AUTH_OTHER})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface State {}
|
||||
|
||||
/**
|
||||
* Defines behavior in response to state update
|
||||
* @param newState new state of fingerprint sensor
|
||||
*/
|
||||
public abstract void onStateChanged(@FingerprintStateListener.State int newState);
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import android.hardware.biometrics.ITestSession;
|
||||
import android.hardware.biometrics.ITestSessionCallback;
|
||||
import android.hardware.fingerprint.IFingerprintClientActiveCallback;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
import android.hardware.fingerprint.IFingerprintStateListener;
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
@@ -154,4 +155,7 @@ interface IFingerprintService {
|
||||
|
||||
// Sets the controller for managing the UDFPS overlay.
|
||||
void setUdfpsOverlayController(in IUdfpsOverlayController controller);
|
||||
|
||||
// Registers FingerprintStateListener in list stored by FingerprintService
|
||||
void registerFingerprintStateListener(IFingerprintStateListener listener);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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 android.hardware.fingerprint;
|
||||
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
|
||||
/**
|
||||
* Communication channel for FingerprintManager to register the FingerprintStateListener
|
||||
* in FingerprintService
|
||||
* @hide
|
||||
*/
|
||||
oneway interface IFingerprintStateListener {
|
||||
void onStateChanged(int newState);
|
||||
}
|
||||
@@ -471,8 +471,7 @@ public class BiometricScheduler {
|
||||
* Adds a {@link BaseClientMonitor} to the pending queue
|
||||
*
|
||||
* @param clientMonitor operation to be scheduled
|
||||
* @param clientCallback optional callback, invoked when the client is finished, but
|
||||
* before it has been removed from the queue.
|
||||
* @param clientCallback optional callback, invoked when the client state changes
|
||||
*/
|
||||
public void scheduleClientMonitor(@NonNull BaseClientMonitor clientMonitor,
|
||||
@Nullable BaseClientMonitor.Callback clientCallback) {
|
||||
|
||||
@@ -29,6 +29,11 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR
|
||||
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_USER_CANCELED;
|
||||
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR;
|
||||
import static android.hardware.biometrics.SensorProperties.STRENGTH_STRONG;
|
||||
import static android.hardware.fingerprint.FingerprintStateListener.STATE_AUTH_OTHER;
|
||||
import static android.hardware.fingerprint.FingerprintStateListener.STATE_BP_AUTH;
|
||||
import static android.hardware.fingerprint.FingerprintStateListener.STATE_ENROLLING;
|
||||
import static android.hardware.fingerprint.FingerprintStateListener.STATE_IDLE;
|
||||
import static android.hardware.fingerprint.FingerprintStateListener.STATE_KEYGUARD_AUTH;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -50,9 +55,11 @@ import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
import android.hardware.fingerprint.FingerprintServiceReceiver;
|
||||
import android.hardware.fingerprint.FingerprintStateListener;
|
||||
import android.hardware.fingerprint.IFingerprintClientActiveCallback;
|
||||
import android.hardware.fingerprint.IFingerprintService;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
import android.hardware.fingerprint.IFingerprintStateListener;
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
@@ -75,6 +82,8 @@ import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.server.ServiceThread;
|
||||
import com.android.server.SystemService;
|
||||
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.BiometricServiceCallback;
|
||||
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
|
||||
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
|
||||
@@ -82,6 +91,7 @@ import com.android.server.biometrics.sensors.LockoutTracker;
|
||||
import com.android.server.biometrics.sensors.fingerprint.aidl.FingerprintProvider;
|
||||
import com.android.server.biometrics.sensors.fingerprint.hidl.Fingerprint21;
|
||||
import com.android.server.biometrics.sensors.fingerprint.hidl.Fingerprint21UdfpsMock;
|
||||
import com.android.server.biometrics.sensors.fingerprint.hidl.FingerprintEnrollClient;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -105,6 +115,62 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
private final LockPatternUtils mLockPatternUtils;
|
||||
private final FingerprintServiceWrapper mServiceWrapper;
|
||||
@NonNull private List<ServiceProvider> mServiceProviders;
|
||||
@NonNull private final FingerprintStateCallback mFingerprintStateCallback;
|
||||
@NonNull private @FingerprintStateListener.State int mFingerprintState;
|
||||
|
||||
private List<IFingerprintStateListener> mFingerprintStateListeners = new ArrayList<>();
|
||||
|
||||
/** Callback to receive notifications about changes in fingerprint state. */
|
||||
public final class FingerprintStateCallback implements BaseClientMonitor.Callback {
|
||||
@Override
|
||||
public void onClientStarted(@NonNull BaseClientMonitor client) {
|
||||
final int previousFingerprintState = mFingerprintState;
|
||||
if (client instanceof AuthenticationClient) {
|
||||
AuthenticationClient authClient = (AuthenticationClient) client;
|
||||
if (authClient.isKeyguard()) {
|
||||
mFingerprintState = STATE_KEYGUARD_AUTH;
|
||||
} else if (authClient.isBiometricPrompt()) {
|
||||
mFingerprintState = STATE_BP_AUTH;
|
||||
} else {
|
||||
mFingerprintState = STATE_AUTH_OTHER;
|
||||
}
|
||||
} else if (client instanceof FingerprintEnrollClient) {
|
||||
mFingerprintState = STATE_ENROLLING;
|
||||
} else {
|
||||
Slog.w(TAG, "Other authentication client: " + Utils.getClientName(client));
|
||||
mFingerprintState = STATE_IDLE;
|
||||
}
|
||||
Slog.d(TAG, "Fps state updated from " + previousFingerprintState + " to "
|
||||
+ mFingerprintState + ", client " + client);
|
||||
notifyFingerprintStateListeners(mFingerprintState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor client, boolean success) {
|
||||
mFingerprintState = STATE_IDLE;
|
||||
Slog.d(TAG, "Client finished, fps state updated to " + mFingerprintState
|
||||
+ ", client " + client);
|
||||
notifyFingerprintStateListeners(mFingerprintState);
|
||||
}
|
||||
|
||||
private void notifyFingerprintStateListeners(@FingerprintStateListener.State int newState) {
|
||||
for (IFingerprintStateListener listener : mFingerprintStateListeners) {
|
||||
try {
|
||||
listener.onStateChanged(newState);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Remote exception in fingerprint state change", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers FingerprintStateListener in list stored by FingerprintService
|
||||
* @param listener new FingerprintStateListener being added
|
||||
*/
|
||||
public void registerFingerprintStateListener(IFingerprintStateListener listener) {
|
||||
mFingerprintStateListeners.add(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Receives the incoming binder calls from FingerprintManager.
|
||||
@@ -122,7 +188,8 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
return null;
|
||||
}
|
||||
|
||||
return provider.createTestSession(sensorId, callback, opPackageName);
|
||||
return provider.createTestSession(sensorId, callback, mFingerprintStateCallback,
|
||||
opPackageName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -205,7 +272,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
}
|
||||
|
||||
provider.second.scheduleEnroll(provider.first, token, hardwareAuthToken, userId,
|
||||
receiver, opPackageName, enrollReason);
|
||||
receiver, opPackageName, enrollReason, mFingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
@@ -284,7 +351,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
} else {
|
||||
provider.second.scheduleAuthenticate(provider.first, token, operationId, userId,
|
||||
0 /* cookie */, new ClientMonitorCallbackConverter(receiver), opPackageName,
|
||||
restricted, statsClient, isKeyguard);
|
||||
restricted, statsClient, isKeyguard, mFingerprintStateCallback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,7 +460,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
|
||||
provider.second.scheduleFingerDetect(provider.first, token, userId,
|
||||
new ClientMonitorCallbackConverter(receiver), opPackageName,
|
||||
BiometricsProtoEnums.CLIENT_KEYGUARD);
|
||||
BiometricsProtoEnums.CLIENT_KEYGUARD, mFingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
@@ -411,7 +478,8 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
final boolean restricted = true; // BiometricPrompt is always restricted
|
||||
provider.scheduleAuthenticate(sensorId, token, operationId, userId, cookie,
|
||||
new ClientMonitorCallbackConverter(sensorReceiver), opPackageName, restricted,
|
||||
BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, allowBackgroundAuthentication);
|
||||
BiometricsProtoEnums.CLIENT_BIOMETRIC_PROMPT, allowBackgroundAuthentication,
|
||||
mFingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
@@ -568,6 +636,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
: provider.getSensorProperties()) {
|
||||
pw.println("Dumping for sensorId: " + props.sensorId
|
||||
+ ", provider: " + provider.getClass().getSimpleName());
|
||||
pw.println("Fps state: " + mFingerprintState);
|
||||
provider.dumpInternal(props.sensorId, pw);
|
||||
pw.println();
|
||||
}
|
||||
@@ -813,6 +882,11 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
provider.setUdfpsOverlayController(controller);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFingerprintStateListener(@NonNull IFingerprintStateListener listener) {
|
||||
FingerprintService.this.registerFingerprintStateListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
public FingerprintService(Context context) {
|
||||
@@ -823,6 +897,8 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
mLockoutResetDispatcher = new LockoutResetDispatcher(context);
|
||||
mLockPatternUtils = new LockPatternUtils(context);
|
||||
mServiceProviders = new ArrayList<>();
|
||||
mFingerprintStateCallback = new FingerprintStateCallback();
|
||||
mFingerprintState = STATE_IDLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -86,18 +86,21 @@ public interface ServiceProvider {
|
||||
|
||||
void scheduleEnroll(int sensorId, @NonNull IBinder token, byte[] hardwareAuthToken, int userId,
|
||||
@NonNull IFingerprintServiceReceiver receiver, @NonNull String opPackageName,
|
||||
@FingerprintManager.EnrollReason int enrollReason);
|
||||
@FingerprintManager.EnrollReason int enrollReason,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback);
|
||||
|
||||
void cancelEnrollment(int sensorId, @NonNull IBinder token);
|
||||
|
||||
void scheduleFingerDetect(int sensorId, @NonNull IBinder token, int userId,
|
||||
@NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName,
|
||||
int statsClient);
|
||||
int statsClient,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback);
|
||||
|
||||
void scheduleAuthenticate(int sensorId, @NonNull IBinder token, long operationId, int userId,
|
||||
int cookie, @NonNull ClientMonitorCallbackConverter callback,
|
||||
@NonNull String opPackageName, boolean restricted, int statsClient,
|
||||
boolean allowBackgroundAuthentication);
|
||||
boolean allowBackgroundAuthentication,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback);
|
||||
|
||||
void startPreparedClient(int sensorId, int cookie);
|
||||
|
||||
@@ -148,5 +151,6 @@ public interface ServiceProvider {
|
||||
|
||||
@NonNull
|
||||
ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback,
|
||||
@NonNull String opPackageName);
|
||||
}
|
||||
|
||||
@@ -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.fingerprint.FingerprintService;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
|
||||
|
||||
import java.util.HashSet;
|
||||
@@ -50,6 +51,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
@NonNull private final Context mContext;
|
||||
private final int mSensorId;
|
||||
@NonNull private final ITestSessionCallback mCallback;
|
||||
@NonNull private final FingerprintService.FingerprintStateCallback mFingerprintStateCallback;
|
||||
@NonNull private final FingerprintProvider mProvider;
|
||||
@NonNull private final Sensor mSensor;
|
||||
@NonNull private final Set<Integer> mEnrollmentIds;
|
||||
@@ -114,11 +116,14 @@ class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
};
|
||||
|
||||
BiometricTestSessionImpl(@NonNull Context context, int sensorId,
|
||||
@NonNull ITestSessionCallback callback, @NonNull FingerprintProvider provider,
|
||||
@NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback,
|
||||
@NonNull FingerprintProvider provider,
|
||||
@NonNull Sensor sensor) {
|
||||
mContext = context;
|
||||
mSensorId = sensorId;
|
||||
mCallback = callback;
|
||||
mFingerprintStateCallback = fingerprintStateCallback;
|
||||
mProvider = provider;
|
||||
mSensor = sensor;
|
||||
mEnrollmentIds = new HashSet<>();
|
||||
@@ -138,7 +143,8 @@ class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
Utils.checkPermission(mContext, TEST_BIOMETRIC);
|
||||
|
||||
mProvider.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL);
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL,
|
||||
mFingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -55,6 +55,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
|
||||
import com.android.server.biometrics.sensors.InvalidationRequesterClient;
|
||||
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
|
||||
import com.android.server.biometrics.sensors.PerformanceTracker;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintService;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
|
||||
import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDispatcher;
|
||||
import com.android.server.biometrics.sensors.fingerprint.ServiceProvider;
|
||||
@@ -318,7 +319,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
@Override
|
||||
public void scheduleEnroll(int sensorId, @NonNull IBinder token, byte[] hardwareAuthToken,
|
||||
int userId, @NonNull IFingerprintServiceReceiver receiver,
|
||||
@NonNull String opPackageName, @FingerprintManager.EnrollReason int enrollReason) {
|
||||
@NonNull String opPackageName, @FingerprintManager.EnrollReason int enrollReason,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
final int maxTemplatesPerUser = mSensors.get(sensorId).getSensorProperties()
|
||||
.maxEnrollmentsPerUser;
|
||||
@@ -328,9 +330,16 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
opPackageName, FingerprintUtils.getInstance(sensorId), sensorId,
|
||||
mUdfpsOverlayController, maxTemplatesPerUser, enrollReason);
|
||||
scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() {
|
||||
|
||||
@Override
|
||||
public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) {
|
||||
fingerprintStateCallback.onClientStarted(clientMonitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
|
||||
boolean success) {
|
||||
fingerprintStateCallback.onClientFinished(clientMonitor, success);
|
||||
if (success) {
|
||||
scheduleLoadAuthenticatorIdsForUser(sensorId, userId);
|
||||
scheduleInvalidationRequest(sensorId, userId);
|
||||
@@ -348,14 +357,15 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
@Override
|
||||
public void scheduleFingerDetect(int sensorId, @NonNull IBinder token, int userId,
|
||||
@NonNull ClientMonitorCallbackConverter callback, @NonNull String opPackageName,
|
||||
int statsClient) {
|
||||
int statsClient,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
final boolean isStrongBiometric = Utils.isStrongBiometric(sensorId);
|
||||
final FingerprintDetectClient client = new FingerprintDetectClient(mContext,
|
||||
mSensors.get(sensorId).getLazySession(), token, callback, userId,
|
||||
opPackageName, sensorId, mUdfpsOverlayController, isStrongBiometric,
|
||||
statsClient);
|
||||
scheduleForSensor(sensorId, client);
|
||||
scheduleForSensor(sensorId, client, fingerprintStateCallback);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -363,7 +373,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
public void scheduleAuthenticate(int sensorId, @NonNull IBinder token, long operationId,
|
||||
int userId, int cookie, @NonNull ClientMonitorCallbackConverter callback,
|
||||
@NonNull String opPackageName, boolean restricted, int statsClient,
|
||||
boolean allowBackgroundAuthentication) {
|
||||
boolean allowBackgroundAuthentication,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
final boolean isStrongBiometric = Utils.isStrongBiometric(sensorId);
|
||||
final FingerprintAuthenticationClient client = new FingerprintAuthenticationClient(
|
||||
@@ -372,7 +383,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
false /* requireConfirmation */, sensorId, isStrongBiometric, statsClient,
|
||||
mTaskStackListener, mSensors.get(sensorId).getLockoutCache(),
|
||||
mUdfpsOverlayController, allowBackgroundAuthentication);
|
||||
scheduleForSensor(sensorId, client);
|
||||
scheduleForSensor(sensorId, client, fingerprintStateCallback);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -561,8 +572,9 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
@NonNull
|
||||
@Override
|
||||
public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback,
|
||||
@NonNull String opPackageName) {
|
||||
return mSensors.get(sensorId).createTestSession(callback);
|
||||
return mSensors.get(sensorId).createTestSession(callback, fingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,13 +52,13 @@ import com.android.server.biometrics.sensors.BiometricScheduler;
|
||||
import com.android.server.biometrics.sensors.EnumerateConsumer;
|
||||
import com.android.server.biometrics.sensors.ErrorConsumer;
|
||||
import com.android.server.biometrics.sensors.HalClientMonitor;
|
||||
import com.android.server.biometrics.sensors.Interruptable;
|
||||
import com.android.server.biometrics.sensors.LockoutCache;
|
||||
import com.android.server.biometrics.sensors.LockoutConsumer;
|
||||
import com.android.server.biometrics.sensors.RemovalConsumer;
|
||||
import com.android.server.biometrics.sensors.StartUserClient;
|
||||
import com.android.server.biometrics.sensors.StopUserClient;
|
||||
import com.android.server.biometrics.sensors.UserAwareBiometricScheduler;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintService;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
|
||||
import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDispatcher;
|
||||
|
||||
@@ -486,9 +486,10 @@ class Sensor {
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull ITestSession createTestSession(@NonNull ITestSessionCallback callback) {
|
||||
@NonNull ITestSession createTestSession(@NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback,
|
||||
mProvider, this);
|
||||
fingerprintStateCallback, mProvider, this);
|
||||
}
|
||||
|
||||
@NonNull BiometricScheduler getScheduler() {
|
||||
|
||||
@@ -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.fingerprint.FingerprintService;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -51,6 +52,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
@NonNull private final Context mContext;
|
||||
private final int mSensorId;
|
||||
@NonNull private final ITestSessionCallback mCallback;
|
||||
@NonNull private final FingerprintService.FingerprintStateCallback mFingerprintStateCallback;
|
||||
@NonNull private final Fingerprint21 mFingerprint21;
|
||||
@NonNull private final Fingerprint21.HalResultController mHalResultController;
|
||||
@NonNull private final Set<Integer> mEnrollmentIds;
|
||||
@@ -116,12 +118,14 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
|
||||
BiometricTestSessionImpl(@NonNull Context context, int sensorId,
|
||||
@NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback,
|
||||
@NonNull Fingerprint21 fingerprint21,
|
||||
@NonNull Fingerprint21.HalResultController halResultController) {
|
||||
mContext = context;
|
||||
mSensorId = sensorId;
|
||||
mCallback = callback;
|
||||
mFingerprint21 = fingerprint21;
|
||||
mFingerprintStateCallback = fingerprintStateCallback;
|
||||
mHalResultController = halResultController;
|
||||
mEnrollmentIds = new HashSet<>();
|
||||
mRandom = new Random();
|
||||
@@ -139,7 +143,8 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
Utils.checkPermission(mContext, TEST_BIOMETRIC);
|
||||
|
||||
mFingerprint21.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL);
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL,
|
||||
mFingerprintStateCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,11 +70,11 @@ import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
|
||||
import com.android.server.biometrics.sensors.EnumerateConsumer;
|
||||
import com.android.server.biometrics.sensors.ErrorConsumer;
|
||||
import com.android.server.biometrics.sensors.HalClientMonitor;
|
||||
import com.android.server.biometrics.sensors.Interruptable;
|
||||
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
|
||||
import com.android.server.biometrics.sensors.LockoutTracker;
|
||||
import com.android.server.biometrics.sensors.PerformanceTracker;
|
||||
import com.android.server.biometrics.sensors.RemovalConsumer;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintService;
|
||||
import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
|
||||
import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDispatcher;
|
||||
import com.android.server.biometrics.sensors.fingerprint.ServiceProvider;
|
||||
@@ -120,7 +120,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
private int mCurrentUserId = UserHandle.USER_NULL;
|
||||
private final boolean mIsUdfps;
|
||||
private final int mSensorId;
|
||||
private boolean mIsPowerbuttonFps;
|
||||
private final boolean mIsPowerbuttonFps;
|
||||
|
||||
private final class BiometricTaskStackListener extends TaskStackListener {
|
||||
@Override
|
||||
@@ -573,7 +573,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
public void scheduleEnroll(int sensorId, @NonNull IBinder token,
|
||||
@NonNull byte[] hardwareAuthToken, int userId,
|
||||
@NonNull IFingerprintServiceReceiver receiver, @NonNull String opPackageName,
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
@FingerprintManager.EnrollReason int enrollReason,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
scheduleUpdateActiveUserWithoutHandler(userId);
|
||||
|
||||
@@ -583,9 +584,15 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
ENROLL_TIMEOUT_SEC, mSensorProperties.sensorId, mUdfpsOverlayController,
|
||||
enrollReason);
|
||||
mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() {
|
||||
@Override
|
||||
public void onClientStarted(@NonNull BaseClientMonitor clientMonitor) {
|
||||
fingerprintStateCallback.onClientStarted(clientMonitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
|
||||
boolean success) {
|
||||
fingerprintStateCallback.onClientFinished(clientMonitor, success);
|
||||
if (success) {
|
||||
// Update authenticatorIds
|
||||
scheduleUpdateActiveUserWithoutHandler(clientMonitor.getTargetUserId(),
|
||||
@@ -606,7 +613,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
@Override
|
||||
public void scheduleFingerDetect(int sensorId, @NonNull IBinder token, int userId,
|
||||
@NonNull ClientMonitorCallbackConverter listener, @NonNull String opPackageName,
|
||||
int statsClient) {
|
||||
int statsClient,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
scheduleUpdateActiveUserWithoutHandler(userId);
|
||||
|
||||
@@ -615,7 +623,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
mLazyDaemon, token, listener, userId, opPackageName,
|
||||
mSensorProperties.sensorId, mUdfpsOverlayController, isStrongBiometric,
|
||||
statsClient);
|
||||
mScheduler.scheduleClientMonitor(client);
|
||||
mScheduler.scheduleClientMonitor(client, fingerprintStateCallback);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -623,7 +631,8 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
public void scheduleAuthenticate(int sensorId, @NonNull IBinder token, long operationId,
|
||||
int userId, int cookie, @NonNull ClientMonitorCallbackConverter listener,
|
||||
@NonNull String opPackageName, boolean restricted, int statsClient,
|
||||
boolean allowBackgroundAuthentication) {
|
||||
boolean allowBackgroundAuthentication,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback) {
|
||||
mHandler.post(() -> {
|
||||
scheduleUpdateActiveUserWithoutHandler(userId);
|
||||
|
||||
@@ -634,7 +643,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
mSensorProperties.sensorId, isStrongBiometric, statsClient,
|
||||
mTaskStackListener, mLockoutTracker, mUdfpsOverlayController,
|
||||
allowBackgroundAuthentication);
|
||||
mScheduler.scheduleClientMonitor(client);
|
||||
mScheduler.scheduleClientMonitor(client, fingerprintStateCallback);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -887,8 +896,9 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
@NonNull
|
||||
@Override
|
||||
public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback,
|
||||
@NonNull FingerprintService.FingerprintStateCallback fingerprintStateCallback,
|
||||
@NonNull String opPackageName) {
|
||||
return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback, this,
|
||||
mHalResultController);
|
||||
return new BiometricTestSessionImpl(mContext, mSensorProperties.sensorId, callback,
|
||||
fingerprintStateCallback, this, mHalResultController);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,7 +402,7 @@ public class Fingerprint21UdfpsMock extends Fingerprint21 implements TrustManage
|
||||
// internal preemption logic is not run.
|
||||
mFingerprint21.scheduleAuthenticate(mFingerprint21.mSensorProperties.sensorId, token,
|
||||
operationId, user, cookie, listener, opPackageName, restricted, statsClient,
|
||||
isKeyguard);
|
||||
isKeyguard, null /* fingerprintStateCallback */);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user