Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bcbb87e1 authored by Kevin Chyn's avatar Kevin Chyn Committed by Automerger Merge Worker
Browse files

Merge "Move UDFPS enroll haptics to SystemUI" into sc-dev am: 2cfc2835 am:...

Merge "Move UDFPS enroll haptics to SystemUI" into sc-dev am: 2cfc2835 am: 1fc0fe93 am: a345e473

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14884773

Change-Id: Ie5536f4fbb6ff16d4aa240c042603007c822c8b6
parents 9084304b a345e473
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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;
@@ -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();
@@ -128,6 +141,7 @@ public class UdfpsEnrollHelper {

        if (remaining != mRemainingSteps) {
            mLocationsEnrolled++;
            vibrateSuccess();
        }

        mRemainingSteps = remaining;
@@ -188,6 +202,11 @@ public class UdfpsEnrollHelper {

        if (mRemainingSteps <= 2 && mRemainingSteps >= 0) {
            mListener.onLastStepAcquired();
            vibrateSuccess();
        }
    }

    private void vibrateSuccess() {
        mVibrator.vibrate(mEffectClick, VIBRATION_SONFICATION_ATTRIBUTES);
    }
}
+8 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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;
@@ -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);
        }

+1 −0
Original line number Diff line number Diff line
@@ -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() {