diff options
| author | 2017-06-28 00:16:23 +0000 | |
|---|---|---|
| committer | 2017-06-28 00:16:30 +0000 | |
| commit | 4e1050f1cfabed4dfa508a2d79bed384ff17d4d2 (patch) | |
| tree | e6c58f07d50f82f1c292f0619ef61d72fb398163 | |
| parent | bf15050a0c23fcfab2f7e103df6f86a65f72d212 (diff) | |
| parent | 6726fd5cc66e43d54b2988a1b107888f343c5d74 (diff) | |
Merge "Update fingerprint haptic patterns" into oc-dr1-dev
4 files changed, 53 insertions, 28 deletions
diff --git a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java index 5339bac8b030..370e569f2598 100644 --- a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java +++ b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java @@ -79,7 +79,7 @@ public abstract class AuthenticationClient extends ClientMonitor { } if (!authenticated) { if (receiver != null) { - FingerprintUtils.vibrateFingerprintError(getContext()); + vibrateError(); } // allow system-defined limit of number of attempts before giving up int lockoutMode = handleFailedAttempt(); @@ -99,7 +99,7 @@ public abstract class AuthenticationClient extends ClientMonitor { result |= lockoutMode != LOCKOUT_NONE; // in a lockout mode } else { if (receiver != null) { - FingerprintUtils.vibrateFingerprintSuccess(getContext()); + vibrateSuccess(); } result |= true; // we have a valid fingerprint, done resetFailedAttempts(); diff --git a/services/core/java/com/android/server/fingerprint/ClientMonitor.java b/services/core/java/com/android/server/fingerprint/ClientMonitor.java index 1a2e1443d329..3eae157c53aa 100644 --- a/services/core/java/com/android/server/fingerprint/ClientMonitor.java +++ b/services/core/java/com/android/server/fingerprint/ClientMonitor.java @@ -23,6 +23,8 @@ import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.os.IBinder; import android.os.RemoteException; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.util.Slog; import java.util.NoSuchElementException; @@ -36,14 +38,18 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient { protected static final String TAG = FingerprintService.TAG; // TODO: get specific name protected static final int ERROR_ESRCH = 3; // Likely fingerprint HAL is dead. See errno.h. protected static final boolean DEBUG = FingerprintService.DEBUG; + private static final long[] DEFAULT_SUCCESS_VIBRATION_PATTERN = new long[] {0, 30}; + private final Context mContext; + private final long mHalDeviceId; + private final int mTargetUserId; + private final int mGroupId; + // True if client does not have MANAGE_FINGERPRINT permission + private final boolean mIsRestricted; + private final String mOwner; + private final VibrationEffect mSuccessVibrationEffect; + private final VibrationEffect mErrorVibrationEffect; private IBinder mToken; private IFingerprintServiceReceiver mReceiver; - private int mTargetUserId; - private int mGroupId; - private boolean mIsRestricted; // True if client does not have MANAGE_FINGERPRINT permission - private String mOwner; - private Context mContext; - private long mHalDeviceId; protected boolean mAlreadyCancelled; /** @@ -68,6 +74,8 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient { mGroupId = groupId; mIsRestricted = restricted; mOwner = owner; + mSuccessVibrationEffect = getSuccessVibrationEffect(context); + mErrorVibrationEffect = VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK); try { if (token != null) { token.linkToDeath(this, 0); @@ -79,7 +87,7 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient { /** * Contacts fingerprint HAL to start the client. - * @return 0 on succes, errno from driver on failure + * @return 0 on success, errno from driver on failure */ public abstract int start(); @@ -211,4 +219,39 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient { public final IBinder getToken() { return mToken; } + + public final void vibrateSuccess() { + Vibrator vibrator = mContext.getSystemService(Vibrator.class); + if (vibrator != null) { + vibrator.vibrate(mSuccessVibrationEffect); + } + } + + public final void vibrateError() { + Vibrator vibrator = mContext.getSystemService(Vibrator.class); + if (vibrator != null) { + vibrator.vibrate(mErrorVibrationEffect); + } + } + + private static VibrationEffect getSuccessVibrationEffect(Context ctx) { + int[] arr = ctx.getResources().getIntArray( + com.android.internal.R.array.config_longPressVibePattern); + final long[] vibePattern; + if (arr == null || arr.length == 0) { + vibePattern = DEFAULT_SUCCESS_VIBRATION_PATTERN; + } else { + vibePattern = new long[arr.length]; + for (int i = 0; i < arr.length; i++) { + vibePattern[i] = arr[i]; + } + } + if (vibePattern.length == 1) { + return VibrationEffect.createOneShot( + vibePattern[0], VibrationEffect.DEFAULT_AMPLITUDE); + } else { + return VibrationEffect.createWaveform(vibePattern, -1); + } + } + } diff --git a/services/core/java/com/android/server/fingerprint/EnrollClient.java b/services/core/java/com/android/server/fingerprint/EnrollClient.java index 61708946f806..c9efcf2fd687 100644 --- a/services/core/java/com/android/server/fingerprint/EnrollClient.java +++ b/services/core/java/com/android/server/fingerprint/EnrollClient.java @@ -65,7 +65,7 @@ public abstract class EnrollClient extends ClientMonitor { if (receiver == null) return true; // client not listening - FingerprintUtils.vibrateFingerprintSuccess(getContext()); + vibrateSuccess(); MetricsLogger.action(getContext(), MetricsEvent.ACTION_FINGERPRINT_ENROLL); try { receiver.onEnrollResult(getHalDeviceId(), fpId, groupId, remaining); diff --git a/services/core/java/com/android/server/fingerprint/FingerprintUtils.java b/services/core/java/com/android/server/fingerprint/FingerprintUtils.java index 49dc8e4dac71..5fbd735d4ac5 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintUtils.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintUtils.java @@ -18,7 +18,6 @@ package com.android.server.fingerprint; import android.content.Context; import android.hardware.fingerprint.Fingerprint; -import android.os.Vibrator; import android.text.TextUtils; import android.util.SparseArray; @@ -31,9 +30,6 @@ import java.util.List; */ public class FingerprintUtils { - private static final long[] FP_ERROR_VIBRATE_PATTERN = new long[] {0, 30, 100, 30}; - private static final long[] FP_SUCCESS_VIBRATE_PATTERN = new long[] {0, 30}; - private static final Object sInstanceLock = new Object(); private static FingerprintUtils sInstance; @@ -72,20 +68,6 @@ public class FingerprintUtils { getStateForUser(ctx, userId).renameFingerprint(fingerId, name); } - public static void vibrateFingerprintError(Context context) { - Vibrator vibrator = context.getSystemService(Vibrator.class); - if (vibrator != null) { - vibrator.vibrate(FP_ERROR_VIBRATE_PATTERN, -1); - } - } - - public static void vibrateFingerprintSuccess(Context context) { - Vibrator vibrator = context.getSystemService(Vibrator.class); - if (vibrator != null) { - vibrator.vibrate(FP_SUCCESS_VIBRATE_PATTERN, -1); - } - } - private FingerprintsUserState getStateForUser(Context ctx, int userId) { synchronized (this) { FingerprintsUserState state = mUsers.get(userId); |