Merge "Move UDFPS enroll haptics to SystemUI" into sc-dev
This commit is contained in:
@@ -21,8 +21,11 @@ import android.annotation.Nullable;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||||
|
import android.media.AudioAttributes;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
import android.os.VibrationEffect;
|
||||||
|
import android.os.Vibrator;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
@@ -47,6 +50,12 @@ public class UdfpsEnrollHelper {
|
|||||||
// Enroll with two center touches before going to guided enrollment
|
// Enroll with two center touches before going to guided enrollment
|
||||||
private static final int NUM_CENTER_TOUCHES = 2;
|
private static final int NUM_CENTER_TOUCHES = 2;
|
||||||
|
|
||||||
|
private static final AudioAttributes VIBRATION_SONFICATION_ATTRIBUTES =
|
||||||
|
new AudioAttributes.Builder()
|
||||||
|
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
||||||
|
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
|
||||||
|
.build();
|
||||||
|
|
||||||
interface Listener {
|
interface Listener {
|
||||||
void onEnrollmentProgress(int remaining, int totalSteps);
|
void onEnrollmentProgress(int remaining, int totalSteps);
|
||||||
void onLastStepAcquired();
|
void onLastStepAcquired();
|
||||||
@@ -57,6 +66,9 @@ public class UdfpsEnrollHelper {
|
|||||||
private final int mEnrollReason;
|
private final int mEnrollReason;
|
||||||
private final boolean mAccessibilityEnabled;
|
private final boolean mAccessibilityEnabled;
|
||||||
@NonNull private final List<PointF> mGuidedEnrollmentPoints;
|
@NonNull private final List<PointF> mGuidedEnrollmentPoints;
|
||||||
|
@NonNull private final Vibrator mVibrator;
|
||||||
|
@NonNull private final VibrationEffect mEffectClick =
|
||||||
|
VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
|
||||||
|
|
||||||
private int mTotalSteps = -1;
|
private int mTotalSteps = -1;
|
||||||
private int mRemainingSteps = -1;
|
private int mRemainingSteps = -1;
|
||||||
@@ -70,6 +82,7 @@ public class UdfpsEnrollHelper {
|
|||||||
public UdfpsEnrollHelper(@NonNull Context context, int reason) {
|
public UdfpsEnrollHelper(@NonNull Context context, int reason) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mEnrollReason = reason;
|
mEnrollReason = reason;
|
||||||
|
mVibrator = context.getSystemService(Vibrator.class);
|
||||||
|
|
||||||
final AccessibilityManager am = context.getSystemService(AccessibilityManager.class);
|
final AccessibilityManager am = context.getSystemService(AccessibilityManager.class);
|
||||||
mAccessibilityEnabled = am.isEnabled();
|
mAccessibilityEnabled = am.isEnabled();
|
||||||
@@ -128,6 +141,7 @@ public class UdfpsEnrollHelper {
|
|||||||
|
|
||||||
if (remaining != mRemainingSteps) {
|
if (remaining != mRemainingSteps) {
|
||||||
mLocationsEnrolled++;
|
mLocationsEnrolled++;
|
||||||
|
vibrateSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
mRemainingSteps = remaining;
|
mRemainingSteps = remaining;
|
||||||
@@ -188,6 +202,11 @@ public class UdfpsEnrollHelper {
|
|||||||
|
|
||||||
if (mRemainingSteps <= 2 && mRemainingSteps >= 0) {
|
if (mRemainingSteps <= 2 && mRemainingSteps >= 0) {
|
||||||
mListener.onLastStepAcquired();
|
mListener.onLastStepAcquired();
|
||||||
|
vibrateSuccess();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void vibrateSuccess() {
|
||||||
|
mVibrator.vibrate(mEffectClick, VIBRATION_SONFICATION_ATTRIBUTES);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import android.hardware.biometrics.common.ICancellationSignal;
|
|||||||
import android.hardware.biometrics.fingerprint.ISession;
|
import android.hardware.biometrics.fingerprint.ISession;
|
||||||
import android.hardware.fingerprint.Fingerprint;
|
import android.hardware.fingerprint.Fingerprint;
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
|
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||||
import android.hardware.fingerprint.ISidefpsController;
|
import android.hardware.fingerprint.ISidefpsController;
|
||||||
import android.hardware.fingerprint.IUdfpsOverlayController;
|
import android.hardware.fingerprint.IUdfpsOverlayController;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
@@ -46,6 +47,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
|||||||
|
|
||||||
private static final String TAG = "FingerprintEnrollClient";
|
private static final String TAG = "FingerprintEnrollClient";
|
||||||
|
|
||||||
|
@NonNull private final FingerprintSensorPropertiesInternal mSensorProps;
|
||||||
@Nullable private final IUdfpsOverlayController mUdfpsOverlayController;
|
@Nullable private final IUdfpsOverlayController mUdfpsOverlayController;
|
||||||
@Nullable private final ISidefpsController mSidefpsController;
|
@Nullable private final ISidefpsController mSidefpsController;
|
||||||
|
|
||||||
@@ -58,12 +60,15 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
|||||||
@NonNull ClientMonitorCallbackConverter listener, int userId,
|
@NonNull ClientMonitorCallbackConverter listener, int userId,
|
||||||
@NonNull byte[] hardwareAuthToken, @NonNull String owner,
|
@NonNull byte[] hardwareAuthToken, @NonNull String owner,
|
||||||
@NonNull BiometricUtils<Fingerprint> utils, int sensorId,
|
@NonNull BiometricUtils<Fingerprint> utils, int sensorId,
|
||||||
|
@NonNull FingerprintSensorPropertiesInternal sensorProps,
|
||||||
@Nullable IUdfpsOverlayController udfpsOvelayController,
|
@Nullable IUdfpsOverlayController udfpsOvelayController,
|
||||||
@Nullable ISidefpsController sidefpsController,
|
@Nullable ISidefpsController sidefpsController,
|
||||||
int maxTemplatesPerUser, @FingerprintManager.EnrollReason int enrollReason) {
|
int maxTemplatesPerUser, @FingerprintManager.EnrollReason int enrollReason) {
|
||||||
|
// UDFPS enroll vibrations are handled in SystemUI
|
||||||
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils,
|
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils,
|
||||||
0 /* timeoutSec */, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId,
|
0 /* timeoutSec */, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId,
|
||||||
true /* shouldVibrate */);
|
!sensorProps.isAnyUdfpsType() /* shouldVibrate */);
|
||||||
|
mSensorProps = sensorProps;
|
||||||
mUdfpsOverlayController = udfpsOvelayController;
|
mUdfpsOverlayController = udfpsOvelayController;
|
||||||
mSidefpsController = sidefpsController;
|
mSidefpsController = sidefpsController;
|
||||||
mMaxTemplatesPerUser = maxTemplatesPerUser;
|
mMaxTemplatesPerUser = maxTemplatesPerUser;
|
||||||
@@ -90,7 +95,8 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps {
|
|||||||
public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) {
|
public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) {
|
||||||
// For UDFPS, notify SysUI that the illumination can be turned off.
|
// For UDFPS, notify SysUI that the illumination can be turned off.
|
||||||
// See AcquiredInfo#GOOD and AcquiredInfo#RETRYING_CAPTURE
|
// See AcquiredInfo#GOOD and AcquiredInfo#RETRYING_CAPTURE
|
||||||
if (acquiredInfo == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD) {
|
if (acquiredInfo == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD
|
||||||
|
&& mSensorProps.isAnyUdfpsType()) {
|
||||||
UdfpsHelper.onAcquiredGood(getSensorId(), mUdfpsOverlayController);
|
UdfpsHelper.onAcquiredGood(getSensorId(), mUdfpsOverlayController);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
|
|||||||
mSensors.get(sensorId).getLazySession(), token,
|
mSensors.get(sensorId).getLazySession(), token,
|
||||||
new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
|
new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
|
||||||
opPackageName, FingerprintUtils.getInstance(sensorId), sensorId,
|
opPackageName, FingerprintUtils.getInstance(sensorId), sensorId,
|
||||||
|
mSensors.get(sensorId).getSensorProperties(),
|
||||||
mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason);
|
mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason);
|
||||||
scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() {
|
scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user