Merge "Added haptic feedback in fingerprint settings auth" into main

This commit is contained in:
Joshua Mccloskey
2024-08-09 00:43:42 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 1 deletions

View File

@@ -42,6 +42,8 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
@@ -109,6 +111,9 @@ public class FingerprintSettings extends SubSettings {
private static final int RESULT_FINISHED = BiometricEnrollBase.RESULT_FINISHED;
private static final int RESULT_SKIP = BiometricEnrollBase.RESULT_SKIP;
private static final int RESULT_TIMEOUT = BiometricEnrollBase.RESULT_TIMEOUT;
@VisibleForTesting
static final VibrationEffect SUCCESS_VIBRATION_EFFECT =
VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
@Override
public Intent getIntent() {
@@ -285,6 +290,7 @@ public class FingerprintSettings extends SubSettings {
private FingerprintAuthenticateSidecar mAuthenticateSidecar;
private FingerprintRemoveSidecar mRemovalSidecar;
private HashMap<Integer, String> mFingerprintsRenaming;
private Vibrator mVibrator;
@Nullable
private UdfpsEnrollCalibrator mCalibrator;
@@ -367,8 +373,8 @@ public class FingerprintSettings extends SubSettings {
break;
case MSG_FINGER_AUTH_HELP: {
// Not used
break;
}
break;
}
}
};
@@ -511,6 +517,7 @@ public class FingerprintSettings extends SubSettings {
addFirstFingerprint(null);
}
}
mVibrator = getContext().getSystemService(Vibrator.class);
final PreferenceScreen root = getPreferenceScreen();
root.removeAll();
addPreferencesFromResource(getPreferenceScreenResId());
@@ -1095,6 +1102,7 @@ public class FingerprintSettings extends SubSettings {
}
private void highlightFingerprintItem(int fpId) {
mVibrator.vibrate(SUCCESS_VIBRATION_EFFECT);
String prefName = genKey(fpId);
FingerprintPreference fpref = (FingerprintPreference) findPreference(prefName);
final Drawable highlight = getHighlightDrawable();

View File

@@ -54,6 +54,7 @@ import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Looper;
import android.os.UserHandle;
import android.os.Vibrator;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
@@ -128,6 +129,9 @@ public class FingerprintSettingsFragmentTest {
mAuthenticationCallbackArgumentCaptor = ArgumentCaptor.forClass(
FingerprintManager.AuthenticationCallback.class);
@Mock
private Vibrator mVibrator;
private FingerprintAuthenticateSidecar mFingerprintAuthenticateSidecar;
private FingerprintRemoveSidecar mFingerprintRemoveSidecar;
@@ -141,6 +145,7 @@ public class FingerprintSettingsFragmentTest {
doReturn(mContext).when(mFragment).getContext();
doReturn(mBiometricManager).when(mContext).getSystemService(BiometricManager.class);
doReturn(true).when(mFingerprintManager).isHardwareDetected();
doReturn(mVibrator).when(mContext).getSystemService(Vibrator.class);
when(mBiometricManager.canAuthenticate(
BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
@@ -287,6 +292,28 @@ public class FingerprintSettingsFragmentTest {
assertThat(mFragment.isVisible()).isTrue();
}
@Test
@Ignore("b/353726774")
public void fingerprintVibratesOnAuthSuccess() {
setUpFragment(false);
doNothing().when(mFingerprintManager).authenticate(any(),
mCancellationSignalArgumentCaptor.capture(),
mAuthenticationCallbackArgumentCaptor.capture(), any(), anyInt());
mFingerprintAuthenticateSidecar.startAuthentication(1);
assertThat(mAuthenticationCallbackArgumentCaptor.getValue()).isNotNull();
assertThat(mCancellationSignalArgumentCaptor.getValue()).isNotNull();
mAuthenticationCallbackArgumentCaptor.getValue()
.onAuthenticationSucceeded(new FingerprintManager.AuthenticationResult(null,
new Fingerprint("finger 1", 1, 1), 0 /* userId */, false));
shadowOf(Looper.getMainLooper()).idle();
verify(mVibrator).vibrate(FingerprintSettings.SUCCESS_VIBRATION_EFFECT);
}
@Test
public void testNotIndexable_whenDisabled() {
doReturn(mPackageManager).when(mContext).getPackageManager();