Merge "Added debug parameter to FaceService" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c8f8ad2f54
@@ -301,7 +301,8 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
|
||||
@RequiresPermission(MANAGE_BIOMETRIC)
|
||||
public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
|
||||
EnrollmentCallback callback, int[] disabledFeatures) {
|
||||
enroll(userId, hardwareAuthToken, cancel, callback, disabledFeatures, null /* surface */);
|
||||
enroll(userId, hardwareAuthToken, cancel, callback, disabledFeatures, null /* surface */,
|
||||
false /* debugConsent */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -313,18 +314,20 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
|
||||
* which point the object is no longer valid. The operation can be canceled by using the
|
||||
* provided cancel object.
|
||||
*
|
||||
* @param token a unique token provided by a recent creation or verification of device
|
||||
* credentials (e.g. pin, pattern or password).
|
||||
* @param cancel an object that can be used to cancel enrollment
|
||||
* @param userId the user to whom this face will belong to
|
||||
* @param callback an object to receive enrollment events
|
||||
* @param surface optional camera preview surface for a single-camera device. Must be null if
|
||||
* not used.
|
||||
* @param hardwareAuthToken a unique token provided by a recent creation or
|
||||
* verification of device credentials (e.g. pin, pattern or password).
|
||||
* @param cancel an object that can be used to cancel enrollment
|
||||
* @param userId the user to whom this face will belong to
|
||||
* @param callback an object to receive enrollment events
|
||||
* @param surface optional camera preview surface for a single-camera device.
|
||||
* Must be null if not used.
|
||||
* @param debugConsent a feature flag that the user has consented to debug.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(MANAGE_BIOMETRIC)
|
||||
public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
|
||||
EnrollmentCallback callback, int[] disabledFeatures, @Nullable Surface surface) {
|
||||
EnrollmentCallback callback, int[] disabledFeatures, @Nullable Surface surface,
|
||||
boolean debugConsent) {
|
||||
if (callback == null) {
|
||||
throw new IllegalArgumentException("Must supply an enrollment callback");
|
||||
}
|
||||
@@ -343,7 +346,7 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
|
||||
mEnrollmentCallback = callback;
|
||||
Trace.beginSection("FaceManager#enroll");
|
||||
mService.enroll(userId, mToken, hardwareAuthToken, mServiceReceiver,
|
||||
mContext.getOpPackageName(), disabledFeatures, surface);
|
||||
mContext.getOpPackageName(), disabledFeatures, surface, debugConsent);
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Remote exception in enroll: ", e);
|
||||
// Though this may not be a hardware issue, it will cause apps to give up or
|
||||
|
||||
@@ -74,7 +74,7 @@ interface IFaceService {
|
||||
|
||||
// Start face enrollment
|
||||
void enroll(int userId, IBinder token, in byte [] hardwareAuthToken, IFaceServiceReceiver receiver,
|
||||
String opPackageName, in int [] disabledFeatures, in Surface surface);
|
||||
String opPackageName, in int [] disabledFeatures, in Surface surface, boolean debugConsent);
|
||||
|
||||
// Start remote face enrollment
|
||||
void enrollRemotely(int userId, IBinder token, in byte [] hardwareAuthToken, IFaceServiceReceiver receiver,
|
||||
|
||||
@@ -218,7 +218,7 @@ public class FaceService extends SystemService implements BiometricServiceCallba
|
||||
@Override // Binder call
|
||||
public void enroll(int userId, final IBinder token, final byte[] hardwareAuthToken,
|
||||
final IFaceServiceReceiver receiver, final String opPackageName,
|
||||
final int[] disabledFeatures, Surface surface) {
|
||||
final int[] disabledFeatures, Surface surface, boolean debugConsent) {
|
||||
Utils.checkPermission(getContext(), MANAGE_BIOMETRIC);
|
||||
|
||||
final Pair<Integer, ServiceProvider> provider = getSingleProvider();
|
||||
@@ -229,7 +229,7 @@ public class FaceService extends SystemService implements BiometricServiceCallba
|
||||
|
||||
provider.second.scheduleEnroll(provider.first, token, hardwareAuthToken, userId,
|
||||
receiver, opPackageName, disabledFeatures,
|
||||
convertSurfaceToNativeHandle(surface));
|
||||
convertSurfaceToNativeHandle(surface), debugConsent);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
|
||||
@@ -94,7 +94,8 @@ public interface ServiceProvider {
|
||||
|
||||
void scheduleEnroll(int sensorId, @NonNull IBinder token, @NonNull byte[] hardwareAuthToken,
|
||||
int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName,
|
||||
@NonNull int[] disabledFeatures, @Nullable NativeHandle surfaceHandle);
|
||||
@NonNull int[] disabledFeatures, @Nullable NativeHandle surfaceHandle,
|
||||
boolean debugConsent);
|
||||
|
||||
void cancelEnrollment(int sensorId, @NonNull IBinder token);
|
||||
|
||||
|
||||
@@ -142,7 +142,8 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
Utils.checkPermission(mContext, TEST_BIOMETRIC);
|
||||
|
||||
mProvider.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), new int[0] /* disabledFeatures */, null /* surface */);
|
||||
mContext.getOpPackageName(), new int[0] /* disabledFeatures */, null /* surface */,
|
||||
false /* debugConsent */);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,7 @@ import android.hardware.biometrics.BiometricFaceConstants;
|
||||
import android.hardware.biometrics.BiometricsProtoEnums;
|
||||
import android.hardware.biometrics.common.ICancellationSignal;
|
||||
import android.hardware.biometrics.face.EnrollmentType;
|
||||
import android.hardware.biometrics.face.Feature;
|
||||
import android.hardware.biometrics.face.IFace;
|
||||
import android.hardware.biometrics.face.ISession;
|
||||
import android.hardware.face.Face;
|
||||
@@ -55,12 +56,14 @@ public class FaceEnrollClient extends EnrollClient<ISession> {
|
||||
@Nullable private ICancellationSignal mCancellationSignal;
|
||||
@Nullable private android.hardware.common.NativeHandle mPreviewSurface;
|
||||
private final int mMaxTemplatesPerUser;
|
||||
private final boolean mDebugConsent;
|
||||
|
||||
FaceEnrollClient(@NonNull Context context, @NonNull LazyDaemon<ISession> lazyDaemon,
|
||||
@NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
|
||||
@NonNull byte[] hardwareAuthToken, @NonNull String opPackageName,
|
||||
@NonNull BiometricUtils<Face> utils, @NonNull int[] disabledFeatures, int timeoutSec,
|
||||
@Nullable NativeHandle previewSurface, int sensorId, int maxTemplatesPerUser) {
|
||||
@Nullable NativeHandle previewSurface, int sensorId, int maxTemplatesPerUser,
|
||||
boolean debugConsent) {
|
||||
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils,
|
||||
timeoutSec, BiometricsProtoEnums.MODALITY_FACE, sensorId,
|
||||
false /* shouldVibrate */);
|
||||
@@ -69,6 +72,7 @@ public class FaceEnrollClient extends EnrollClient<ISession> {
|
||||
mEnrollIgnoreListVendor = getContext().getResources()
|
||||
.getIntArray(R.array.config_face_acquire_vendor_enroll_ignorelist);
|
||||
mMaxTemplatesPerUser = maxTemplatesPerUser;
|
||||
mDebugConsent = debugConsent;
|
||||
try {
|
||||
// We must manually close the duplicate handle after it's no longer needed.
|
||||
// The caller is responsible for closing the original handle.
|
||||
@@ -116,9 +120,17 @@ public class FaceEnrollClient extends EnrollClient<ISession> {
|
||||
try {
|
||||
// TODO(b/172593978): Pass features.
|
||||
// TODO(b/174619156): Handle accessibility enrollment.
|
||||
byte[] features;
|
||||
if (mDebugConsent) {
|
||||
features = new byte[1];
|
||||
features[0] = Feature.DEBUG;
|
||||
} else {
|
||||
features = new byte[0];
|
||||
}
|
||||
|
||||
mCancellationSignal = getFreshDaemon().enroll(mSequentialId,
|
||||
HardwareAuthTokenUtils.toHardwareAuthToken(mHardwareAuthToken),
|
||||
EnrollmentType.DEFAULT, new byte[0], mPreviewSurface);
|
||||
EnrollmentType.DEFAULT, features, mPreviewSurface);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Remote exception when requesting enroll", e);
|
||||
onError(BiometricFaceConstants.FACE_ERROR_UNABLE_TO_PROCESS, 0 /* vendorCode */);
|
||||
|
||||
@@ -382,7 +382,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
|
||||
public void scheduleEnroll(int sensorId, @NonNull IBinder token,
|
||||
@NonNull byte[] hardwareAuthToken, int userId, @NonNull IFaceServiceReceiver receiver,
|
||||
@NonNull String opPackageName, @NonNull int[] disabledFeatures,
|
||||
@Nullable NativeHandle previewSurface) {
|
||||
@Nullable NativeHandle previewSurface, boolean debugConsent) {
|
||||
mHandler.post(() -> {
|
||||
final IFace daemon = getHalInstance();
|
||||
if (daemon == null) {
|
||||
@@ -404,7 +404,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
|
||||
mSensors.get(sensorId).getLazySession(), token,
|
||||
new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
|
||||
opPackageName, FaceUtils.getInstance(sensorId), disabledFeatures,
|
||||
ENROLL_TIMEOUT_SEC, previewSurface, sensorId, maxTemplatesPerUser);
|
||||
ENROLL_TIMEOUT_SEC, previewSurface, sensorId, maxTemplatesPerUser,
|
||||
debugConsent);
|
||||
scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() {
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
|
||||
|
||||
@@ -131,7 +131,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
|
||||
mFace10.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), new int[0] /* disabledFeatures */,
|
||||
null /* surfaceHandle */);
|
||||
null /* surfaceHandle */, false /* debugConsent */);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -602,7 +602,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
|
||||
public void scheduleEnroll(int sensorId, @NonNull IBinder token,
|
||||
@NonNull byte[] hardwareAuthToken, int userId, @NonNull IFaceServiceReceiver receiver,
|
||||
@NonNull String opPackageName, @NonNull int[] disabledFeatures,
|
||||
@Nullable NativeHandle surfaceHandle) {
|
||||
@Nullable NativeHandle surfaceHandle, boolean debugConsent) {
|
||||
mHandler.post(() -> {
|
||||
scheduleUpdateActiveUserWithoutHandler(userId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user