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

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

Merge changes from topic "biometric-haptic" into sc-dev am: a7b91a1c

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

Change-Id: Ifd1170ec68c475d2064572378f02a06224734e1b
parents 77ee6102 a7b91a1c
Loading
Loading
Loading
Loading
+0 −19
Original line number Diff line number Diff line
@@ -21,11 +21,8 @@ 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;
@@ -50,12 +47,6 @@ 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();
@@ -66,9 +57,6 @@ 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;
@@ -82,7 +70,6 @@ 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();
@@ -141,7 +128,6 @@ public class UdfpsEnrollHelper {

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

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

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

    private void vibrateSuccess() {
        mVibrator.vibrate(mEffectClick, VIBRATION_SONFICATION_ATTRIBUTES);
    }
}
+16 −4
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.hardware.biometrics.BiometricConstants;
import android.media.AudioAttributes;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.VibrationEffect;
@@ -49,6 +50,8 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement
            VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK);

    private final PowerManager mPowerManager;
    // If haptics should occur when auth result (success/reject) is known
    protected final boolean mShouldVibrate;
    private boolean mShouldSendErrorToClient = true;
    private boolean mAlreadyCancelled;

@@ -59,11 +62,12 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement

    public AcquisitionClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull String owner, int cookie, int sensorId, int statsModality,
            int statsAction, int statsClient) {
            @NonNull String owner, int cookie, int sensorId, boolean shouldVibrate,
            int statsModality, int statsAction, int statsClient) {
        super(context, lazyDaemon, token, listener, userId, owner, cookie, sensorId, statsModality,
                statsAction, statsClient);
        mPowerManager = context.getSystemService(PowerManager.class);
        mShouldVibrate = shouldVibrate;
    }

    @Override
@@ -191,14 +195,22 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement
    protected final void vibrateSuccess() {
        Vibrator vibrator = getContext().getSystemService(Vibrator.class);
        if (vibrator != null) {
            vibrator.vibrate(SUCCESS_VIBRATION_EFFECT, VIBRATION_SONIFICATION_ATTRIBUTES);
            vibrator.vibrate(Process.myUid(),
                    getContext().getOpPackageName(),
                    SUCCESS_VIBRATION_EFFECT,
                    getClass().getSimpleName() + "::success",
                    VIBRATION_SONIFICATION_ATTRIBUTES);
        }
    }

    protected final void vibrateError() {
        Vibrator vibrator = getContext().getSystemService(Vibrator.class);
        if (vibrator != null) {
            vibrator.vibrate(ERROR_VIBRATION_EFFECT, VIBRATION_SONIFICATION_ATTRIBUTES);
            vibrator.vibrate(Process.myUid(),
                    getContext().getOpPackageName(),
                    ERROR_VIBRATION_EFFECT,
                    getClass().getSimpleName() + "::error",
                    VIBRATION_SONIFICATION_ATTRIBUTES);
        }
    }
}
+6 −4
Original line number Diff line number Diff line
@@ -68,9 +68,11 @@ public abstract class AuthenticationClient<T> extends AcquisitionClient<T>
            int targetUserId, long operationId, boolean restricted, @NonNull String owner,
            int cookie, boolean requireConfirmation, int sensorId, boolean isStrongBiometric,
            int statsModality, int statsClient, @Nullable TaskStackListener taskStackListener,
            @NonNull LockoutTracker lockoutTracker, boolean allowBackgroundAuthentication) {
            @NonNull LockoutTracker lockoutTracker, boolean allowBackgroundAuthentication,
            boolean shouldVibrate) {
        super(context, lazyDaemon, token, listener, targetUserId, owner, cookie, sensorId,
                statsModality, BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient);
                shouldVibrate, statsModality, BiometricsProtoEnums.ACTION_AUTHENTICATE,
                statsClient);
        mIsStrongBiometric = isStrongBiometric;
        mOperationId = operationId;
        mRequireConfirmation = requireConfirmation;
@@ -204,7 +206,7 @@ public abstract class AuthenticationClient<T> extends AcquisitionClient<T>

                mAlreadyDone = true;

                if (listener != null) {
                if (listener != null && mShouldVibrate) {
                    vibrateSuccess();
                }

@@ -250,7 +252,7 @@ public abstract class AuthenticationClient<T> extends AcquisitionClient<T>
                    Slog.w(TAG, "Client not listening");
                }
            } else {
                if (listener != null) {
                if (listener != null && mShouldVibrate) {
                    vibrateError();
                }

+2 −5
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ public abstract class EnrollClient<T> extends AcquisitionClient<T> {
    protected final byte[] mHardwareAuthToken;
    protected final int mTimeoutSec;
    protected final BiometricUtils mBiometricUtils;
    private final boolean mShouldVibrate;

    private long mEnrollmentStartTimeMs;

@@ -50,15 +49,13 @@ public abstract class EnrollClient<T> extends AcquisitionClient<T> {
    public EnrollClient(@NonNull Context context, @NonNull LazyDaemon<T> lazyDaemon,
            @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int userId,
            @NonNull byte[] hardwareAuthToken, @NonNull String owner, @NonNull BiometricUtils utils,
            int timeoutSec, int statsModality, int sensorId,
            boolean shouldVibrate) {
            int timeoutSec, int statsModality, int sensorId, boolean shouldVibrate) {
        super(context, lazyDaemon, token, listener, userId, owner, 0 /* cookie */, sensorId,
                statsModality, BiometricsProtoEnums.ACTION_ENROLL,
                shouldVibrate, statsModality, BiometricsProtoEnums.ACTION_ENROLL,
                BiometricsProtoEnums.CLIENT_UNKNOWN);
        mBiometricUtils = utils;
        mHardwareAuthToken = Arrays.copyOf(hardwareAuthToken, hardwareAuthToken.length);
        mTimeoutSec = timeoutSec;
        mShouldVibrate = shouldVibrate;
    }

    public void onEnrollResult(BiometricAuthenticator.Identifier identifier, int remaining) {
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ class FaceAuthenticationClient extends AuthenticationClient<ISession> implements
        super(context, lazyDaemon, token, listener, targetUserId, operationId, restricted,
                owner, cookie, requireConfirmation, sensorId, isStrongBiometric,
                BiometricsProtoEnums.MODALITY_FACE, statsClient, null /* taskStackListener */,
                lockoutCache, allowBackgroundAuthentication);
                lockoutCache, allowBackgroundAuthentication, true /* shouldVibrate */);
        mUsageStats = usageStats;
        mLockoutCache = lockoutCache;
        mNotificationManager = context.getSystemService(NotificationManager.class);
Loading