diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8fc5ed5d651..aa0671eb438 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1182,20 +1182,20 @@
Current screen lock
- Fingerprint + Pattern
+ Pattern \u2022 Fingerprint
- Fingerprint + PIN
+ PIN \u2022 Fingerprint
- Fingerprint + Password
+ Password \u2022 Fingerprint
Continue without fingerprint
- Face Unlock + Pattern
+ Pattern \u2022 Face
- Face Unlock + PIN
+ PIN \u2022 Face
- Face Unlock + Password
+ Password \u2022 Face
Continue without Face Unlock
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index e0f402bdc02..be090e33366 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -185,7 +185,8 @@ public class FingerprintSettings extends SubSettings {
private static final int MSG_FINGER_AUTH_HELP = 1004;
private static final int CONFIRM_REQUEST = 101;
- private static final int CHOOSE_LOCK_GENERIC_REQUEST = 102;
+ @VisibleForTesting
+ static final int CHOOSE_LOCK_GENERIC_REQUEST = 102;
@VisibleForTesting
static final int ADD_FINGERPRINT_REQUEST = 10;
private static final int AUTO_ADD_FIRST_FINGERPRINT_REQUEST = 11;
@@ -1014,7 +1015,7 @@ public class FingerprintSettings extends SubSettings {
true);
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, true);
- intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
}
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
index 2bc81e60a06..18b05add7ad 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
@@ -20,8 +20,11 @@ import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFP
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.ADD_FINGERPRINT_REQUEST;
+import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_FINGERPRINT_ADD;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -54,6 +57,7 @@ import com.android.settings.biometrics.BiometricsSplitScreenDialog;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowFragment;
+import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
@@ -63,6 +67,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -74,7 +79,7 @@ import java.util.ArrayList;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
- ShadowUserManager.class})
+ ShadowUserManager.class, ShadowLockPatternUtils.class})
public class FingerprintSettingsFragmentTest {
private FingerprintSettingsFragment mFragment;
private Context mContext;
@@ -92,10 +97,62 @@ public class FingerprintSettingsFragmentTest {
doReturn(true).when(mFingerprintManager).isHardwareDetected();
ShadowUtils.setFingerprintManager(mFingerprintManager);
FakeFeatureFactory.setupForTest();
+ }
+ @After
+ public void tearDown() {
+ ShadowUtils.reset();
+ }
+
+ @Test
+ public void testAddFingerprint_inFullScreen_noDialog() {
+ setUpFragment(false);
+ // Click "Add Fingerprint"
+ final Preference preference = new Preference(mContext);
+ preference.setKey(KEY_FINGERPRINT_ADD);
+ mFragment.onPreferenceTreeClick(preference);
+
+ verify(mFragment).startActivityForResult(any(), eq(ADD_FINGERPRINT_REQUEST));
+ verify(mFragmentTransaction, never()).add(any(),
+ eq(BiometricsSplitScreenDialog.class.getName()));
+
+ }
+
+ @Test
+ public void testAddFingerprint_inMultiWindow_showsDialog() {
+ setUpFragment(false);
+
+ doReturn(true).when(mActivity).isInMultiWindowMode();
+
+ // Click "Add Fingerprint"
+ final Preference preference = new Preference(mContext);
+ preference.setKey(KEY_FINGERPRINT_ADD);
+ mFragment.onPreferenceTreeClick(preference);
+
+ verify(mFragment, times(0)).startActivityForResult(any(), eq(ADD_FINGERPRINT_REQUEST));
+ verify(mFragmentTransaction).add(any(), eq(BiometricsSplitScreenDialog.class.getName()));
+ }
+
+ @Test
+ public void testChooseLockKeyForFingerprint() {
+ setUpFragment(true);
+ ArgumentCaptor intentArgumentCaptor = ArgumentCaptor.forClass(
+ Intent.class);
+ verify(mFragment).startActivityForResult(intentArgumentCaptor.capture(),
+ eq(CHOOSE_LOCK_GENERIC_REQUEST));
+
+ Intent intent = intentArgumentCaptor.getValue();
+ assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT,
+ false)).isTrue();
+ }
+
+ private void setUpFragment(boolean showChooseLock) {
Intent intent = new Intent();
- intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
- intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L);
+ if (!showChooseLock) {
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L);
+ }
+
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class, intent).get());
mContext = spy(ApplicationProvider.getApplicationContext());
@@ -112,49 +169,12 @@ public class FingerprintSettingsFragmentTest {
doNothing().when(mFragment).startActivityForResult(any(Intent.class), anyInt());
setSensor();
- }
- @After
- public void tearDown() {
- ShadowUtils.reset();
- }
-
- @Test
- public void testAddFingerprint_inFullScreen_noDialog() {
// Start fragment
mFragment.onAttach(mContext);
mFragment.onCreate(null);
mFragment.onCreateView(LayoutInflater.from(mContext), mock(ViewGroup.class), Bundle.EMPTY);
mFragment.onResume();
-
- // Click "Add Fingerprint"
- final Preference preference = new Preference(mContext);
- preference.setKey(KEY_FINGERPRINT_ADD);
- mFragment.onPreferenceTreeClick(preference);
-
- verify(mFragment).startActivityForResult(any(), eq(ADD_FINGERPRINT_REQUEST));
- verify(mFragmentTransaction, never()).add(any(),
- eq(BiometricsSplitScreenDialog.class.getName()));
-
- }
-
- @Test
- public void testAddFingerprint_inMultiWindow_showsDialog() {
- // Start fragment
- mFragment.onAttach(mContext);
- mFragment.onCreate(null);
- mFragment.onCreateView(LayoutInflater.from(mContext), mock(ViewGroup.class), Bundle.EMPTY);
- mFragment.onResume();
-
- doReturn(true).when(mActivity).isInMultiWindowMode();
-
- // Click "Add Fingerprint"
- final Preference preference = new Preference(mContext);
- preference.setKey(KEY_FINGERPRINT_ADD);
- mFragment.onPreferenceTreeClick(preference);
-
- verify(mFragment, times(0)).startActivityForResult(any(), eq(ADD_FINGERPRINT_REQUEST));
- verify(mFragmentTransaction).add(any(), eq(BiometricsSplitScreenDialog.class.getName()));
}
private void setSensor() {
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index dbc60dce731..12a540d7c33 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -30,6 +30,8 @@ import static com.android.settings.password.ChooseLockGeneric.ChooseLockGenericF
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
@@ -126,7 +128,9 @@ public class ChooseLockGenericTest {
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFakeFeatureFactory.mFaceFeatureProvider.isSetupWizardSupported(any())).thenReturn(
- false);
+ true);
+ ShadowUtils.setFingerprintManager(mFingerprintManager);
+ ShadowUtils.setFaceManager(mFaceManager);
}
@After
@@ -540,35 +544,63 @@ public class ChooseLockGenericTest {
@Test
public void updatePreferenceText_supportBiometrics_showFaceAndFingerprint() {
- ShadowLockPatternUtils.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_LOW);
- final PasswordPolicy policy = new PasswordPolicy();
- policy.quality = PASSWORD_QUALITY_ALPHABETIC;
- ShadowLockPatternUtils.setRequestedProfilePasswordMetrics(policy.getMinMetrics());
-
+ ShadowStorageManager.setIsFileEncrypted(false);
final Intent intent = new Intent().putExtra(EXTRA_KEY_FOR_BIOMETRICS, true);
initActivity(intent);
- final Intent passwordIntent = mFragment.getLockPatternIntent();
- assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
- PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_LOW);
final String supportFingerprint = capitalize(mActivity.getResources().getString(
R.string.security_settings_fingerprint));
final String supportFace = capitalize(mActivity.getResources().getString(
R.string.keywords_face_settings));
+ String pinTitle =
+ (String) mFragment.findPreference(ScreenLockType.PIN.preferenceKey).getTitle();
+ String patternTitle =
+ (String) mFragment.findPreference(ScreenLockType.PATTERN.preferenceKey).getTitle();
+ String passwordTitle =
+ (String) mFragment.findPreference(ScreenLockType.PASSWORD.preferenceKey).getTitle();
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PIN)).contains(
- supportFingerprint);
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PIN)).contains(
- supportFace);
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PATTERN)).contains(
- supportFingerprint);
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PATTERN)).contains(
- supportFace);
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PASSWORD)).contains(
- supportFingerprint);
- assertThat(mFragment.getBiometricsPreferenceTitle(ScreenLockType.PASSWORD)).contains(
- supportFace);
+ assertThat(pinTitle).contains(supportFingerprint);
+ assertThat(pinTitle).contains(supportFace);
+ assertThat(patternTitle).contains(supportFingerprint);
+ assertThat(patternTitle).contains(supportFace);
+ assertThat(passwordTitle).contains(supportFingerprint);
+ assertThat(passwordTitle).contains(supportFace);
+ }
+
+ @Test
+ public void updatePreferenceText_supportFingerprint_showFingerprint() {
+ ShadowStorageManager.setIsFileEncrypted(false);
+ final Intent intent = new Intent().putExtra(EXTRA_KEY_FOR_FINGERPRINT, true);
+ initActivity(intent);
+ mFragment.updatePreferencesOrFinish(false /* isRecreatingActivity */);
+
+ assertThat(mFragment.findPreference(ScreenLockType.PIN.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.fingerprint_unlock_set_unlock_pin));
+ assertThat(mFragment.findPreference(
+ ScreenLockType.PATTERN.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.fingerprint_unlock_set_unlock_pattern));
+ assertThat(mFragment.findPreference(
+ ScreenLockType.PASSWORD.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.fingerprint_unlock_set_unlock_password));
+ }
+
+ @Test
+ public void updatePreferenceText_supportFace_showFace() {
+
+ ShadowStorageManager.setIsFileEncrypted(false);
+ final Intent intent = new Intent().putExtra(EXTRA_KEY_FOR_FACE, true);
+ initActivity(intent);
+ mFragment.updatePreferencesOrFinish(false /* isRecreatingActivity */);
+
+ assertThat(mFragment.findPreference(ScreenLockType.PIN.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.face_unlock_set_unlock_pin));
+ assertThat(mFragment.findPreference(
+ ScreenLockType.PATTERN.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.face_unlock_set_unlock_pattern));
+ assertThat(mFragment.findPreference(
+ ScreenLockType.PASSWORD.preferenceKey).getTitle()).isEqualTo(
+ mFragment.getString(R.string.face_unlock_set_unlock_password));
}
private void initActivity(@Nullable Intent intent) {