Merge "Add fingerprint enroll reason" into sc-dev
This commit is contained in:
@@ -24,6 +24,7 @@ import static android.Manifest.permission.USE_BIOMETRIC;
|
||||
import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
|
||||
import static android.Manifest.permission.USE_FINGERPRINT;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresFeature;
|
||||
@@ -55,6 +56,8 @@ import android.security.identity.IdentityCredential;
|
||||
import android.util.Slog;
|
||||
import android.view.Surface;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.security.Signature;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -89,6 +92,22 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
|
||||
private static final int MSG_UDFPS_POINTER_DOWN = 108;
|
||||
private static final int MSG_UDFPS_POINTER_UP = 109;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static final int ENROLL_FIND_SENSOR = 1;
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static final int ENROLL_ENROLL = 2;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@IntDef({ENROLL_FIND_SENSOR, ENROLL_ENROLL})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface EnrollReason {}
|
||||
|
||||
/**
|
||||
* Request authentication with any single sensor.
|
||||
* @hide
|
||||
@@ -580,7 +599,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
|
||||
*/
|
||||
@RequiresPermission(MANAGE_FINGERPRINT)
|
||||
public void enroll(byte [] hardwareAuthToken, CancellationSignal cancel, int userId,
|
||||
EnrollmentCallback callback, boolean shouldLogMetrics) {
|
||||
EnrollmentCallback callback, @EnrollReason int enrollReason) {
|
||||
if (userId == UserHandle.USER_CURRENT) {
|
||||
userId = getCurrentUserId();
|
||||
}
|
||||
@@ -601,7 +620,7 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
|
||||
try {
|
||||
mEnrollmentCallback = callback;
|
||||
mService.enroll(mToken, hardwareAuthToken, userId, mServiceReceiver,
|
||||
mContext.getOpPackageName(), shouldLogMetrics);
|
||||
mContext.getOpPackageName(), enrollReason);
|
||||
} 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 try
|
||||
|
||||
@@ -78,7 +78,7 @@ interface IFingerprintService {
|
||||
|
||||
// Start fingerprint enrollment
|
||||
void enroll(IBinder token, in byte [] hardwareAuthToken, int userId, IFingerprintServiceReceiver receiver,
|
||||
String opPackageName, boolean shouldLogMetrics);
|
||||
String opPackageName, int enrollReason);
|
||||
|
||||
// Cancel enrollment in progress
|
||||
void cancelEnrollment(IBinder token);
|
||||
|
||||
@@ -21,10 +21,11 @@ package android.hardware.fingerprint;
|
||||
*/
|
||||
oneway interface IUdfpsOverlayController {
|
||||
const int REASON_UNKNOWN = 0;
|
||||
const int REASON_ENROLL = 1;
|
||||
const int REASON_AUTH_BP = 2; // BiometricPrompt
|
||||
const int REASON_AUTH_FPM_KEYGUARD = 3; // FingerprintManager usage from Keyguard
|
||||
const int REASON_AUTH_FPM_OTHER = 4; // Other FingerprintManager usage
|
||||
const int REASON_ENROLL_FIND_SENSOR = 1;
|
||||
const int REASON_ENROLL_ENROLLING = 2;
|
||||
const int REASON_AUTH_BP = 3; // BiometricPrompt
|
||||
const int REASON_AUTH_FPM_KEYGUARD = 4; // FingerprintManager usage from Keyguard
|
||||
const int REASON_AUTH_FPM_OTHER = 5; // Other FingerprintManager usage
|
||||
|
||||
// Shows the overlay.
|
||||
void showUdfpsOverlay(int sensorId, int reason);
|
||||
|
||||
@@ -96,8 +96,11 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
||||
public class UdfpsOverlayController extends IUdfpsOverlayController.Stub {
|
||||
@Override
|
||||
public void showUdfpsOverlay(int sensorId, int reason) {
|
||||
if (reason == IUdfpsOverlayController.REASON_ENROLL) {
|
||||
mEnrollHelper = new UdfpsEnrollHelper();
|
||||
if (reason == IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR
|
||||
|| reason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING) {
|
||||
mEnrollHelper = new UdfpsEnrollHelper(reason);
|
||||
} else {
|
||||
mEnrollHelper = null;
|
||||
}
|
||||
UdfpsController.this.showOverlay(reason);
|
||||
}
|
||||
@@ -300,8 +303,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
||||
try {
|
||||
Log.v(TAG, "showUdfpsOverlay | adding window");
|
||||
final UdfpsAnimation animation = getUdfpsAnimationForReason(reason);
|
||||
mView.setUdfpsAnimation(animation);
|
||||
mView.setEnrollHelper(mEnrollHelper);
|
||||
mView.setExtras(animation, mEnrollHelper);
|
||||
mWindowManager.addView(mView, computeLayoutParams(animation));
|
||||
mView.setOnTouchListener(mOnTouchListener);
|
||||
mIsOverlayShowing = true;
|
||||
@@ -318,7 +320,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
||||
private UdfpsAnimation getUdfpsAnimationForReason(int reason) {
|
||||
Log.d(TAG, "getUdfpsAnimationForReason: " + reason);
|
||||
switch (reason) {
|
||||
case IUdfpsOverlayController.REASON_ENROLL:
|
||||
case IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR:
|
||||
case IUdfpsOverlayController.REASON_ENROLL_ENROLLING:
|
||||
return new UdfpsAnimationEnroll(mContext);
|
||||
case IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD:
|
||||
return new UdfpsAnimationKeyguard(mView, mContext, mStatusBarStateController);
|
||||
@@ -334,7 +337,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
||||
mFgExecutor.execute(() -> {
|
||||
if (mIsOverlayShowing) {
|
||||
Log.v(TAG, "hideUdfpsOverlay | removing window");
|
||||
mView.setUdfpsAnimation(null);
|
||||
mView.setExtras(null, null);
|
||||
mView.setOnTouchListener(null);
|
||||
// Reset the controller back to its starting state.
|
||||
onFingerUp();
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.biometrics;
|
||||
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
/**
|
||||
@@ -24,10 +26,20 @@ import androidx.annotation.NonNull;
|
||||
public class UdfpsEnrollHelper {
|
||||
private static final String TAG = "UdfpsEnrollHelper";
|
||||
|
||||
// IUdfpsOverlayController reason
|
||||
private final int mEnrollReason;
|
||||
|
||||
private int mTotalSteps = -1;
|
||||
private int mCurrentProgress = 0;
|
||||
|
||||
public UdfpsEnrollHelper(int reason) {
|
||||
mEnrollReason = reason;
|
||||
}
|
||||
|
||||
boolean shouldShowProgressBar() {
|
||||
return mEnrollReason == IUdfpsOverlayController.REASON_ENROLL_ENROLLING;
|
||||
}
|
||||
|
||||
void onEnrollmentProgress(int remaining, @NonNull UdfpsProgressBar progressBar) {
|
||||
if (mTotalSteps == -1) {
|
||||
mTotalSteps = remaining;
|
||||
|
||||
@@ -111,22 +111,19 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
|
||||
mSensorProps = properties;
|
||||
}
|
||||
|
||||
void setUdfpsAnimation(@Nullable UdfpsAnimation animation) {
|
||||
void setExtras(@Nullable UdfpsAnimation animation, @Nullable UdfpsEnrollHelper enrollHelper) {
|
||||
mAnimationView.setAnimation(animation);
|
||||
if (animation instanceof UdfpsAnimationEnroll) {
|
||||
mProgressBar.setVisibility(View.VISIBLE);
|
||||
mEnrollHelper = enrollHelper;
|
||||
|
||||
if (enrollHelper != null) {
|
||||
mEnrollHelper.updateProgress(mProgressBar);
|
||||
mProgressBar.setVisibility(enrollHelper.shouldShowProgressBar()
|
||||
? View.VISIBLE : View.GONE);
|
||||
} else {
|
||||
mProgressBar.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
void setEnrollHelper(@Nullable UdfpsEnrollHelper enrollHelper) {
|
||||
mEnrollHelper = enrollHelper;
|
||||
if (mEnrollHelper != null) {
|
||||
mEnrollHelper.updateProgress(mProgressBar);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHbmCallback(@Nullable HbmCallback callback) {
|
||||
mHbmSurfaceView.setHbmCallback(callback);
|
||||
|
||||
@@ -197,7 +197,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
@Override // Binder call
|
||||
public void enroll(final IBinder token, final byte[] hardwareAuthToken, final int userId,
|
||||
final IFingerprintServiceReceiver receiver, final String opPackageName,
|
||||
boolean shouldLogMetrics) {
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
Utils.checkPermission(getContext(), MANAGE_FINGERPRINT);
|
||||
|
||||
final Pair<Integer, ServiceProvider> provider = getSingleProvider();
|
||||
@@ -207,7 +207,7 @@ public class FingerprintService extends SystemService implements BiometricServic
|
||||
}
|
||||
|
||||
provider.second.scheduleEnroll(provider.first, token, hardwareAuthToken, userId,
|
||||
receiver, opPackageName, shouldLogMetrics);
|
||||
receiver, opPackageName, enrollReason);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
|
||||
@@ -78,7 +78,7 @@ public interface ServiceProvider {
|
||||
|
||||
void scheduleEnroll(int sensorId, @NonNull IBinder token, byte[] hardwareAuthToken, int userId,
|
||||
@NonNull IFingerprintServiceReceiver receiver, @NonNull String opPackageName,
|
||||
boolean shouldLogMetrics);
|
||||
@FingerprintManager.EnrollReason int enrollReason);
|
||||
|
||||
void cancelEnrollment(int sensorId, @NonNull IBinder token);
|
||||
|
||||
|
||||
@@ -65,6 +65,17 @@ public class UdfpsHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public static int getReasonFromEnrollReason(@FingerprintManager.EnrollReason int reason) {
|
||||
switch (reason) {
|
||||
case FingerprintManager.ENROLL_FIND_SENSOR:
|
||||
return IUdfpsOverlayController.REASON_ENROLL_FIND_SENSOR;
|
||||
case FingerprintManager.ENROLL_ENROLL:
|
||||
return IUdfpsOverlayController.REASON_ENROLL_ENROLLING;
|
||||
default:
|
||||
return IUdfpsOverlayController.REASON_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
public static void showUdfpsOverlay(int sensorId, int reason,
|
||||
@Nullable IUdfpsOverlayController udfpsOverlayController) {
|
||||
if (udfpsOverlayController == null) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.hardware.biometrics.ITestSession;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
import android.os.Binder;
|
||||
import android.util.Slog;
|
||||
@@ -131,7 +132,7 @@ class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
Utils.checkPermission(mContext, TEST_BIOMETRIC);
|
||||
|
||||
mProvider.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), true /* shouldLogMetrics */);
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.hardware.biometrics.BiometricsProtoEnums;
|
||||
import android.hardware.biometrics.common.ICancellationSignal;
|
||||
import android.hardware.biometrics.fingerprint.ISession;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
@@ -43,6 +44,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
||||
private static final String TAG = "FingerprintEnrollClient";
|
||||
|
||||
@Nullable private final IUdfpsOverlayController mUdfpsOverlayController;
|
||||
private final @FingerprintManager.EnrollReason int mEnrollReason;
|
||||
@Nullable private ICancellationSignal mCancellationSignal;
|
||||
private final int mMaxTemplatesPerUser;
|
||||
|
||||
@@ -52,13 +54,17 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
||||
@NonNull byte[] hardwareAuthToken, @NonNull String owner,
|
||||
@NonNull BiometricUtils<Fingerprint> utils, int sensorId,
|
||||
@Nullable IUdfpsOverlayController udfpsOvelayController, int maxTemplatesPerUser,
|
||||
boolean shouldLogMetrics) {
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils,
|
||||
0 /* timeoutSec */, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId,
|
||||
true /* shouldVibrate */);
|
||||
mUdfpsOverlayController = udfpsOvelayController;
|
||||
mMaxTemplatesPerUser = maxTemplatesPerUser;
|
||||
setShouldLog(shouldLogMetrics);
|
||||
|
||||
mEnrollReason = enrollReason;
|
||||
if (enrollReason == FingerprintManager.ENROLL_FIND_SENSOR) {
|
||||
setShouldLog(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,6 +78,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onAcquired(int acquiredInfo, int vendorCode) {
|
||||
super.onAcquired(acquiredInfo, vendorCode);
|
||||
@@ -112,7 +119,8 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
||||
|
||||
@Override
|
||||
protected void startHalOperation() {
|
||||
UdfpsHelper.showUdfpsOverlay(getSensorId(), IUdfpsOverlayController.REASON_ENROLL,
|
||||
UdfpsHelper.showUdfpsOverlay(getSensorId(),
|
||||
UdfpsHelper.getReasonFromEnrollReason(mEnrollReason),
|
||||
mUdfpsOverlayController);
|
||||
try {
|
||||
mCancellationSignal = getFreshDaemon().enroll(mSequentialId,
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.hardware.biometrics.ITestSession;
|
||||
import android.hardware.biometrics.fingerprint.IFingerprint;
|
||||
import android.hardware.biometrics.fingerprint.SensorProps;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
@@ -366,7 +367,7 @@ 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, boolean shouldLogMetrics) {
|
||||
@NonNull String opPackageName, @FingerprintManager.EnrollReason int enrollReason) {
|
||||
mHandler.post(() -> {
|
||||
final IFingerprint daemon = getHalInstance();
|
||||
if (daemon == null) {
|
||||
@@ -388,7 +389,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
||||
mSensors.get(sensorId).getLazySession(), token,
|
||||
new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
|
||||
opPackageName, FingerprintUtils.getInstance(sensorId), sensorId,
|
||||
mUdfpsOverlayController, maxTemplatesPerUser, shouldLogMetrics);
|
||||
mUdfpsOverlayController, maxTemplatesPerUser, enrollReason);
|
||||
scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() {
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.hardware.biometrics.ITestSession;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
import android.os.Binder;
|
||||
import android.util.Slog;
|
||||
@@ -132,7 +133,7 @@ public class BiometricTestSessionImpl extends ITestSession.Stub {
|
||||
Utils.checkPermission(mContext, TEST_BIOMETRIC);
|
||||
|
||||
mFingerprint21.scheduleEnroll(mSensorId, new Binder(), new byte[69], userId, mReceiver,
|
||||
mContext.getOpPackageName(), true/* shouldLogMetrics */);
|
||||
mContext.getOpPackageName(), FingerprintManager.ENROLL_ENROLL);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.hardware.biometrics.ITestSession;
|
||||
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
|
||||
import android.hardware.biometrics.fingerprint.V2_2.IBiometricsFingerprintClientCallback;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorProperties;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
import android.hardware.fingerprint.IFingerprintServiceReceiver;
|
||||
@@ -547,7 +548,7 @@ 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,
|
||||
boolean shouldLogMetrics) {
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
mHandler.post(() -> {
|
||||
scheduleUpdateActiveUserWithoutHandler(userId);
|
||||
|
||||
@@ -555,7 +556,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider
|
||||
mLazyDaemon, token, new ClientMonitorCallbackConverter(receiver), userId,
|
||||
hardwareAuthToken, opPackageName, FingerprintUtils.getLegacyInstance(mSensorId),
|
||||
ENROLL_TIMEOUT_SEC, mSensorProperties.sensorId, mUdfpsOverlayController,
|
||||
shouldLogMetrics);
|
||||
enrollReason);
|
||||
mScheduler.scheduleClientMonitor(client, new BaseClientMonitor.Callback() {
|
||||
@Override
|
||||
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.hardware.biometrics.BiometricFingerprintConstants;
|
||||
import android.hardware.biometrics.BiometricsProtoEnums;
|
||||
import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
@@ -46,6 +47,7 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint
|
||||
private static final String TAG = "FingerprintEnrollClient";
|
||||
|
||||
@Nullable private final IUdfpsOverlayController mUdfpsOverlayController;
|
||||
private final @FingerprintManager.EnrollReason int mEnrollReason;
|
||||
|
||||
FingerprintEnrollClient(@NonNull Context context,
|
||||
@NonNull LazyDaemon<IBiometricsFingerprint> lazyDaemon, @NonNull IBinder token,
|
||||
@@ -53,12 +55,16 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint
|
||||
@NonNull byte[] hardwareAuthToken, @NonNull String owner,
|
||||
@NonNull BiometricUtils<Fingerprint> utils, int timeoutSec, int sensorId,
|
||||
@Nullable IUdfpsOverlayController udfpsOverlayController,
|
||||
boolean shouldLogMetrics) {
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils,
|
||||
timeoutSec, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId,
|
||||
true /* shouldVibrate */);
|
||||
mUdfpsOverlayController = udfpsOverlayController;
|
||||
setShouldLog(shouldLogMetrics);
|
||||
|
||||
mEnrollReason = enrollReason;
|
||||
if (enrollReason == FingerprintManager.ENROLL_FIND_SENSOR) {
|
||||
setShouldLog(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -76,7 +82,8 @@ public class FingerprintEnrollClient extends EnrollClient<IBiometricsFingerprint
|
||||
|
||||
@Override
|
||||
protected void startHalOperation() {
|
||||
UdfpsHelper.showUdfpsOverlay(getSensorId(), IUdfpsOverlayController.REASON_ENROLL,
|
||||
UdfpsHelper.showUdfpsOverlay(getSensorId(),
|
||||
UdfpsHelper.getReasonFromEnrollReason(mEnrollReason),
|
||||
mUdfpsOverlayController);
|
||||
try {
|
||||
// GroupId was never used. In fact, groupId is always the same as userId.
|
||||
|
||||
Reference in New Issue
Block a user