Merge "Added haptic feedback in fingerprint settings auth" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
1a888b6e8f
@@ -42,6 +42,8 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.os.VibrationEffect;
|
||||||
|
import android.os.Vibrator;
|
||||||
import android.text.InputFilter;
|
import android.text.InputFilter;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
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_FINISHED = BiometricEnrollBase.RESULT_FINISHED;
|
||||||
private static final int RESULT_SKIP = BiometricEnrollBase.RESULT_SKIP;
|
private static final int RESULT_SKIP = BiometricEnrollBase.RESULT_SKIP;
|
||||||
private static final int RESULT_TIMEOUT = BiometricEnrollBase.RESULT_TIMEOUT;
|
private static final int RESULT_TIMEOUT = BiometricEnrollBase.RESULT_TIMEOUT;
|
||||||
|
@VisibleForTesting
|
||||||
|
static final VibrationEffect SUCCESS_VIBRATION_EFFECT =
|
||||||
|
VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Intent getIntent() {
|
public Intent getIntent() {
|
||||||
@@ -285,6 +290,7 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
private FingerprintAuthenticateSidecar mAuthenticateSidecar;
|
private FingerprintAuthenticateSidecar mAuthenticateSidecar;
|
||||||
private FingerprintRemoveSidecar mRemovalSidecar;
|
private FingerprintRemoveSidecar mRemovalSidecar;
|
||||||
private HashMap<Integer, String> mFingerprintsRenaming;
|
private HashMap<Integer, String> mFingerprintsRenaming;
|
||||||
|
private Vibrator mVibrator;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private UdfpsEnrollCalibrator mCalibrator;
|
private UdfpsEnrollCalibrator mCalibrator;
|
||||||
@@ -367,10 +373,10 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
break;
|
break;
|
||||||
case MSG_FINGER_AUTH_HELP: {
|
case MSG_FINGER_AUTH_HELP: {
|
||||||
// Not used
|
// Not used
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -511,6 +517,7 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
addFirstFingerprint(null);
|
addFirstFingerprint(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mVibrator = getContext().getSystemService(Vibrator.class);
|
||||||
final PreferenceScreen root = getPreferenceScreen();
|
final PreferenceScreen root = getPreferenceScreen();
|
||||||
root.removeAll();
|
root.removeAll();
|
||||||
addPreferencesFromResource(getPreferenceScreenResId());
|
addPreferencesFromResource(getPreferenceScreenResId());
|
||||||
@@ -1095,6 +1102,7 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void highlightFingerprintItem(int fpId) {
|
private void highlightFingerprintItem(int fpId) {
|
||||||
|
mVibrator.vibrate(SUCCESS_VIBRATION_EFFECT);
|
||||||
String prefName = genKey(fpId);
|
String prefName = genKey(fpId);
|
||||||
FingerprintPreference fpref = (FingerprintPreference) findPreference(prefName);
|
FingerprintPreference fpref = (FingerprintPreference) findPreference(prefName);
|
||||||
final Drawable highlight = getHighlightDrawable();
|
final Drawable highlight = getHighlightDrawable();
|
||||||
|
@@ -54,6 +54,7 @@ import android.os.Bundle;
|
|||||||
import android.os.CancellationSignal;
|
import android.os.CancellationSignal;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
import android.os.Vibrator;
|
||||||
import android.platform.test.annotations.EnableFlags;
|
import android.platform.test.annotations.EnableFlags;
|
||||||
import android.platform.test.flag.junit.SetFlagsRule;
|
import android.platform.test.flag.junit.SetFlagsRule;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -128,6 +129,9 @@ public class FingerprintSettingsFragmentTest {
|
|||||||
mAuthenticationCallbackArgumentCaptor = ArgumentCaptor.forClass(
|
mAuthenticationCallbackArgumentCaptor = ArgumentCaptor.forClass(
|
||||||
FingerprintManager.AuthenticationCallback.class);
|
FingerprintManager.AuthenticationCallback.class);
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private Vibrator mVibrator;
|
||||||
|
|
||||||
private FingerprintAuthenticateSidecar mFingerprintAuthenticateSidecar;
|
private FingerprintAuthenticateSidecar mFingerprintAuthenticateSidecar;
|
||||||
private FingerprintRemoveSidecar mFingerprintRemoveSidecar;
|
private FingerprintRemoveSidecar mFingerprintRemoveSidecar;
|
||||||
|
|
||||||
@@ -141,6 +145,7 @@ public class FingerprintSettingsFragmentTest {
|
|||||||
doReturn(mContext).when(mFragment).getContext();
|
doReturn(mContext).when(mFragment).getContext();
|
||||||
doReturn(mBiometricManager).when(mContext).getSystemService(BiometricManager.class);
|
doReturn(mBiometricManager).when(mContext).getSystemService(BiometricManager.class);
|
||||||
doReturn(true).when(mFingerprintManager).isHardwareDetected();
|
doReturn(true).when(mFingerprintManager).isHardwareDetected();
|
||||||
|
doReturn(mVibrator).when(mContext).getSystemService(Vibrator.class);
|
||||||
when(mBiometricManager.canAuthenticate(
|
when(mBiometricManager.canAuthenticate(
|
||||||
BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
|
BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
|
||||||
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
|
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
|
||||||
@@ -287,6 +292,28 @@ public class FingerprintSettingsFragmentTest {
|
|||||||
assertThat(mFragment.isVisible()).isTrue();
|
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
|
@Test
|
||||||
public void testNotIndexable_whenDisabled() {
|
public void testNotIndexable_whenDisabled() {
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
|
Reference in New Issue
Block a user