Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java +19 −0 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ import android.annotation.Nullable; import android.content.Context; import android.graphics.PointF; import android.hardware.fingerprint.IUdfpsOverlayController; import android.media.AudioAttributes; import android.os.Build; import android.os.UserHandle; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import android.util.Log; import android.util.TypedValue; Loading @@ -47,6 +50,12 @@ public class UdfpsEnrollHelper { // Enroll with two center touches before going to guided enrollment 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 { void onEnrollmentProgress(int remaining, int totalSteps); void onLastStepAcquired(); Loading @@ -57,6 +66,9 @@ public class UdfpsEnrollHelper { private final int mEnrollReason; private final boolean mAccessibilityEnabled; @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 mRemainingSteps = -1; Loading @@ -70,6 +82,7 @@ public class UdfpsEnrollHelper { public UdfpsEnrollHelper(@NonNull Context context, int reason) { mContext = context; mEnrollReason = reason; mVibrator = context.getSystemService(Vibrator.class); final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); mAccessibilityEnabled = am.isEnabled(); Loading Loading @@ -128,6 +141,7 @@ public class UdfpsEnrollHelper { if (remaining != mRemainingSteps) { mLocationsEnrolled++; vibrateSuccess(); } mRemainingSteps = remaining; Loading Loading @@ -188,6 +202,11 @@ public class UdfpsEnrollHelper { if (mRemainingSteps <= 2 && mRemainingSteps >= 0) { mListener.onLastStepAcquired(); vibrateSuccess(); } } private void vibrateSuccess() { mVibrator.vibrate(mEffectClick, VIBRATION_SONFICATION_ATTRIBUTES); } } services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +8 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ 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.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; Loading @@ -46,6 +47,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { private static final String TAG = "FingerprintEnrollClient"; @NonNull private final FingerprintSensorPropertiesInternal mSensorProps; @Nullable private final IUdfpsOverlayController mUdfpsOverlayController; @Nullable private final ISidefpsController mSidefpsController; Loading @@ -58,12 +60,15 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils<Fingerprint> utils, int sensorId, @NonNull FingerprintSensorPropertiesInternal sensorProps, @Nullable IUdfpsOverlayController udfpsOvelayController, @Nullable ISidefpsController sidefpsController, int maxTemplatesPerUser, @FingerprintManager.EnrollReason int enrollReason) { // UDFPS enroll vibrations are handled in SystemUI super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils, 0 /* timeoutSec */, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId, true /* shouldVibrate */); !sensorProps.isAnyUdfpsType() /* shouldVibrate */); mSensorProps = sensorProps; mUdfpsOverlayController = udfpsOvelayController; mSidefpsController = sidefpsController; mMaxTemplatesPerUser = maxTemplatesPerUser; Loading @@ -90,7 +95,8 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) { // For UDFPS, notify SysUI that the illumination can be turned off. // 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); } Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +1 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, opPackageName, FingerprintUtils.getInstance(sensorId), sensorId, mSensors.get(sensorId).getSensorProperties(), mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason); scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() { Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java +19 −0 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ import android.annotation.Nullable; import android.content.Context; import android.graphics.PointF; import android.hardware.fingerprint.IUdfpsOverlayController; import android.media.AudioAttributes; import android.os.Build; import android.os.UserHandle; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import android.util.Log; import android.util.TypedValue; Loading @@ -47,6 +50,12 @@ public class UdfpsEnrollHelper { // Enroll with two center touches before going to guided enrollment 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 { void onEnrollmentProgress(int remaining, int totalSteps); void onLastStepAcquired(); Loading @@ -57,6 +66,9 @@ public class UdfpsEnrollHelper { private final int mEnrollReason; private final boolean mAccessibilityEnabled; @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 mRemainingSteps = -1; Loading @@ -70,6 +82,7 @@ public class UdfpsEnrollHelper { public UdfpsEnrollHelper(@NonNull Context context, int reason) { mContext = context; mEnrollReason = reason; mVibrator = context.getSystemService(Vibrator.class); final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); mAccessibilityEnabled = am.isEnabled(); Loading Loading @@ -128,6 +141,7 @@ public class UdfpsEnrollHelper { if (remaining != mRemainingSteps) { mLocationsEnrolled++; vibrateSuccess(); } mRemainingSteps = remaining; Loading Loading @@ -188,6 +202,11 @@ public class UdfpsEnrollHelper { if (mRemainingSteps <= 2 && mRemainingSteps >= 0) { mListener.onLastStepAcquired(); vibrateSuccess(); } } private void vibrateSuccess() { mVibrator.vibrate(mEffectClick, VIBRATION_SONFICATION_ATTRIBUTES); } }
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java +8 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ 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.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.ISidefpsController; import android.hardware.fingerprint.IUdfpsOverlayController; import android.os.IBinder; Loading @@ -46,6 +47,7 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { private static final String TAG = "FingerprintEnrollClient"; @NonNull private final FingerprintSensorPropertiesInternal mSensorProps; @Nullable private final IUdfpsOverlayController mUdfpsOverlayController; @Nullable private final ISidefpsController mSidefpsController; Loading @@ -58,12 +60,15 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { @NonNull ClientMonitorCallbackConverter listener, int userId, @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils<Fingerprint> utils, int sensorId, @NonNull FingerprintSensorPropertiesInternal sensorProps, @Nullable IUdfpsOverlayController udfpsOvelayController, @Nullable ISidefpsController sidefpsController, int maxTemplatesPerUser, @FingerprintManager.EnrollReason int enrollReason) { // UDFPS enroll vibrations are handled in SystemUI super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, owner, utils, 0 /* timeoutSec */, BiometricsProtoEnums.MODALITY_FINGERPRINT, sensorId, true /* shouldVibrate */); !sensorProps.isAnyUdfpsType() /* shouldVibrate */); mSensorProps = sensorProps; mUdfpsOverlayController = udfpsOvelayController; mSidefpsController = sidefpsController; mMaxTemplatesPerUser = maxTemplatesPerUser; Loading @@ -90,7 +95,8 @@ class FingerprintEnrollClient extends EnrollClient<ISession> implements Udfps { public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) { // For UDFPS, notify SysUI that the illumination can be turned off. // 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); } Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +1 −0 Original line number Diff line number Diff line Loading @@ -340,6 +340,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi mSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken, opPackageName, FingerprintUtils.getInstance(sensorId), sensorId, mSensors.get(sensorId).getSensorProperties(), mUdfpsOverlayController, mSidefpsController, maxTemplatesPerUser, enrollReason); scheduleForSensor(sensorId, client, new BaseClientMonitor.Callback() { Loading