Merge "Support EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY"
This commit is contained in:
committed by
Android (Google) Code Review
commit
f4e71b0019
@@ -26,14 +26,13 @@ import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.robolectric.RuntimeEnvironment.application;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.DevicePolicyManager.PasswordComplexity;
|
||||
import android.content.ComponentName;
|
||||
import android.app.admin.PasswordPolicy;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.settings.R;
|
||||
@@ -60,9 +59,6 @@ public class ChooseLockGenericControllerTest {
|
||||
@Mock
|
||||
private ManagedLockPasswordProvider mManagedLockPasswordProvider;
|
||||
|
||||
@Mock
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
@Mock
|
||||
private LockPatternUtils mLockPatternUtils;
|
||||
|
||||
@@ -71,6 +67,7 @@ public class ChooseLockGenericControllerTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
when(mLockPatternUtils.hasSecureLockScreen()).thenReturn(true);
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
mController = createController(PASSWORD_COMPLEXITY_NONE);
|
||||
SettingsShadowResources.overrideResource(R.bool.config_hide_none_security_option, false);
|
||||
SettingsShadowResources.overrideResource(R.bool.config_hide_swipe_security_option, false);
|
||||
@@ -206,9 +203,7 @@ public class ChooseLockGenericControllerTest {
|
||||
|
||||
@Test
|
||||
public void upgradeQuality_noDpmRequirement_shouldReturnQuality() {
|
||||
doReturn(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
|
||||
.when(mDevicePolicyManager)
|
||||
.getPasswordQuality(nullable(ComponentName.class), anyInt());
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
|
||||
final int upgradedQuality =
|
||||
mController.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC);
|
||||
@@ -218,9 +213,7 @@ public class ChooseLockGenericControllerTest {
|
||||
|
||||
@Test
|
||||
public void upgradeQuality_dpmRequirement_shouldReturnRequiredQuality() {
|
||||
doReturn(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC)
|
||||
.when(mDevicePolicyManager)
|
||||
.getPasswordQuality(nullable(ComponentName.class), anyInt());
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC);
|
||||
|
||||
final int upgradedQuality =
|
||||
mController.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
|
||||
@@ -230,8 +223,7 @@ public class ChooseLockGenericControllerTest {
|
||||
|
||||
@Test
|
||||
public void upgradeQuality_complexityHigh_minQualityNumericComplex() {
|
||||
when(mDevicePolicyManager.getPasswordQuality(nullable(ComponentName.class), anyInt()))
|
||||
.thenReturn(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
ChooseLockGenericController controller = createController(PASSWORD_COMPLEXITY_HIGH);
|
||||
|
||||
assertThat(controller.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED))
|
||||
@@ -240,8 +232,7 @@ public class ChooseLockGenericControllerTest {
|
||||
|
||||
@Test
|
||||
public void upgradeQuality_complexityMedium_minQualityNumericComplex() {
|
||||
when(mDevicePolicyManager.getPasswordQuality(nullable(ComponentName.class), anyInt()))
|
||||
.thenReturn(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
ChooseLockGenericController controller = createController(PASSWORD_COMPLEXITY_MEDIUM);
|
||||
|
||||
assertThat(controller.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED))
|
||||
@@ -250,21 +241,28 @@ public class ChooseLockGenericControllerTest {
|
||||
|
||||
@Test
|
||||
public void upgradeQuality_complexityLow_minQualitySomething() {
|
||||
when(mDevicePolicyManager.getPasswordQuality(nullable(ComponentName.class), anyInt()))
|
||||
.thenReturn(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
setDevicePolicyPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
|
||||
ChooseLockGenericController controller = createController(PASSWORD_COMPLEXITY_LOW);
|
||||
|
||||
assertThat(controller.upgradeQuality(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED))
|
||||
.isEqualTo(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
|
||||
}
|
||||
|
||||
private void setDevicePolicyPasswordQuality(int quality) {
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = quality;
|
||||
|
||||
when(mLockPatternUtils.getRequestedPasswordMetrics(anyInt(), anyBoolean()))
|
||||
.thenReturn(policy.getMinMetrics());
|
||||
}
|
||||
|
||||
private ChooseLockGenericController createController(
|
||||
@PasswordComplexity int minPasswordComplexity) {
|
||||
return new ChooseLockGenericController(
|
||||
application,
|
||||
0 /* userId */,
|
||||
minPasswordComplexity,
|
||||
mDevicePolicyManager,
|
||||
false,
|
||||
mManagedLockPasswordProvider,
|
||||
mLockPatternUtils);
|
||||
}
|
||||
|
@@ -21,10 +21,14 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_HIGH;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
|
||||
|
||||
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
|
||||
import static com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment.KEY_LOCK_SETTINGS_FOOTER;
|
||||
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_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
@@ -35,6 +39,8 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.app.admin.PasswordPolicy;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@@ -301,8 +307,8 @@ public class ChooseLockGenericTest {
|
||||
assertThat(result).isTrue();
|
||||
Intent actualIntent = shadowOf(mActivity).getNextStartedActivityForResult().intent;
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isTrue();
|
||||
assertThat(actualIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE))
|
||||
.isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
assertThat(actualIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
assertThat(actualIntent.getStringExtra(EXTRA_KEY_CALLER_APP_NAME))
|
||||
.isEqualTo("app name");
|
||||
@@ -322,8 +328,8 @@ public class ChooseLockGenericTest {
|
||||
assertThat(result).isTrue();
|
||||
Intent actualIntent = shadowOf(mActivity).getNextStartedActivityForResult().intent;
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isTrue();
|
||||
assertThat(actualIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE))
|
||||
.isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
assertThat(actualIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
assertThat(actualIntent.getStringExtra(EXTRA_KEY_CALLER_APP_NAME))
|
||||
.isEqualTo("app name");
|
||||
@@ -391,7 +397,7 @@ public class ChooseLockGenericTest {
|
||||
assertThat(footer.getTitle()).isEqualTo(null);
|
||||
|
||||
Intent intent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_COMPLEX);
|
||||
assertThat(intent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
|
||||
assertThat(intent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
}
|
||||
|
||||
@@ -411,7 +417,7 @@ public class ChooseLockGenericTest {
|
||||
assertThat(footer.getTitle()).isEqualTo(null);
|
||||
|
||||
Intent passwordIntent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_COMPLEX);
|
||||
assertThat(passwordIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
|
||||
assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
}
|
||||
|
||||
@@ -433,10 +439,66 @@ public class ChooseLockGenericTest {
|
||||
assertThat(footer.getTitle()).isEqualTo(expectedTitle);
|
||||
|
||||
Intent passwordIntent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_COMPLEX);
|
||||
assertThat(passwordIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY,
|
||||
assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLockPasswordIntent_DevicePasswordRequirementOnly_PasswordComplexityPassedOn() {
|
||||
ShadowLockPatternUtils.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_LOW);
|
||||
ShadowLockPatternUtils.setRequiredProfilePasswordComplexity(PASSWORD_COMPLEXITY_HIGH);
|
||||
|
||||
Intent intent = new Intent()
|
||||
.putExtra(EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY, true);
|
||||
initActivity(intent);
|
||||
|
||||
Intent passwordIntent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_ALPHABETIC);
|
||||
assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_LOW);
|
||||
assertThat(passwordIntent.<PasswordMetrics>getParcelableExtra(
|
||||
ChooseLockPassword.EXTRA_KEY_MIN_METRICS)).isEqualTo(
|
||||
new PasswordMetrics(CREDENTIAL_TYPE_NONE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLockPasswordIntent_DevicePasswordRequirementOnly_PasswordQualityPassedOn() {
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_SOMETHING;
|
||||
ShadowLockPatternUtils.setRequestedPasswordMetrics(policy.getMinMetrics());
|
||||
PasswordPolicy profilePolicy = new PasswordPolicy();
|
||||
profilePolicy.quality = PASSWORD_QUALITY_ALPHABETIC;
|
||||
ShadowLockPatternUtils.setRequestedProfilePasswordMetrics(profilePolicy.getMinMetrics());
|
||||
|
||||
Intent intent = new Intent()
|
||||
.putExtra(EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY, true);
|
||||
initActivity(intent);
|
||||
|
||||
Intent passwordIntent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_ALPHABETIC);
|
||||
assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_NONE);
|
||||
assertThat(passwordIntent.<PasswordMetrics>getParcelableExtra(
|
||||
ChooseLockPassword.EXTRA_KEY_MIN_METRICS)).isEqualTo(policy.getMinMetrics());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLockPasswordIntent_DevicePasswordRequirementOnly_ComplexityAndQualityPassedOn() {
|
||||
ShadowLockPatternUtils.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_LOW);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_ALPHABETIC;
|
||||
ShadowLockPatternUtils.setRequestedProfilePasswordMetrics(policy.getMinMetrics());
|
||||
|
||||
Intent intent = new Intent()
|
||||
.putExtra(EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY, true);
|
||||
initActivity(intent);
|
||||
|
||||
Intent passwordIntent = mFragment.getLockPasswordIntent(PASSWORD_QUALITY_ALPHABETIC);
|
||||
assertThat(passwordIntent.getIntExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY,
|
||||
PASSWORD_COMPLEXITY_NONE)).isEqualTo(PASSWORD_COMPLEXITY_LOW);
|
||||
assertThat(passwordIntent.<PasswordMetrics>getParcelableExtra(
|
||||
ChooseLockPassword.EXTRA_KEY_MIN_METRICS)).isEqualTo(
|
||||
new PasswordMetrics(CREDENTIAL_TYPE_NONE));
|
||||
}
|
||||
|
||||
private void initActivity(@Nullable Intent intent) {
|
||||
if (intent == null) {
|
||||
intent = new Intent();
|
||||
|
@@ -30,7 +30,6 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED
|
||||
|
||||
import static com.android.internal.widget.LockPatternUtils.PASSWORD_TYPE_KEY;
|
||||
import static com.android.settings.password.ChooseLockGeneric.CONFIRM_CREDENTIALS;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -40,6 +39,8 @@ import static org.robolectric.RuntimeEnvironment.application;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.DevicePolicyManager.PasswordComplexity;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.app.admin.PasswordPolicy;
|
||||
import android.content.Intent;
|
||||
import android.os.UserHandle;
|
||||
|
||||
@@ -93,7 +94,7 @@ public class ChooseLockPasswordTest {
|
||||
public void intentBuilder_setPassword_shouldAddExtras() {
|
||||
Intent intent = new IntentBuilder(application)
|
||||
.setPassword(LockscreenCredential.createPassword("password"))
|
||||
.setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC)
|
||||
.setPasswordType(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC)
|
||||
.setUserId(123)
|
||||
.build();
|
||||
|
||||
@@ -114,7 +115,7 @@ public class ChooseLockPasswordTest {
|
||||
public void intentBuilder_setRequestGatekeeperPassword_shouldAddExtras() {
|
||||
Intent intent = new IntentBuilder(application)
|
||||
.setRequestGatekeeperPasswordHandle(true)
|
||||
.setPasswordQuality(PASSWORD_QUALITY_ALPHANUMERIC)
|
||||
.setPasswordType(PASSWORD_QUALITY_ALPHANUMERIC)
|
||||
.setUserId(123)
|
||||
.build();
|
||||
|
||||
@@ -131,11 +132,12 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
public void intentBuilder_setMinComplexityMedium_hasMinComplexityExtraMedium() {
|
||||
Intent intent = new IntentBuilder(application)
|
||||
.setRequestedMinComplexity(PASSWORD_COMPLEXITY_MEDIUM)
|
||||
.setPasswordRequirement(PASSWORD_COMPLEXITY_MEDIUM, null)
|
||||
.build();
|
||||
|
||||
assertThat(intent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isTrue();
|
||||
assertThat(intent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE))
|
||||
assertThat(intent.hasExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY)).isTrue();
|
||||
assertThat(intent.getIntExtra(
|
||||
ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE))
|
||||
.isEqualTo(PASSWORD_COMPLEXITY_MEDIUM);
|
||||
}
|
||||
|
||||
@@ -143,7 +145,7 @@ public class ChooseLockPasswordTest {
|
||||
public void intentBuilder_setMinComplexityNotCalled() {
|
||||
Intent intent = new IntentBuilder(application).build();
|
||||
|
||||
assertThat(intent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(intent.hasExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -163,10 +165,12 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_ALPHABETIC);
|
||||
mShadowDpm.setPasswordMinimumLength(10);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_ALPHABETIC;
|
||||
policy.length = 10;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -176,9 +180,11 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_minPasswordComplexityStricter_pin() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_SOMETHING);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_SOMETHING;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -188,9 +194,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void processAndValidatePasswordRequirements_minPasswordComplexityStricter_password() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_SOMETHING);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_SOMETHING;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -200,10 +208,12 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_dpmRestrictionsStricter_password() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_ALPHANUMERIC);
|
||||
mShadowDpm.setPasswordMinimumLength(9);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_ALPHANUMERIC;
|
||||
policy.length = 9;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -214,10 +224,12 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_dpmLengthLonger_pin() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC);
|
||||
mShadowDpm.setPasswordMinimumLength(11);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC;
|
||||
policy.length = 11;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -226,10 +238,12 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_dpmQualityComplex() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_COMPLEX);
|
||||
mShadowDpm.setPasswordMinimumSymbols(2);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_COMPLEX;
|
||||
policy.symbols = 2;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -242,9 +256,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Config(shadows = ShadowLockPatternUtils.class)
|
||||
public void processAndValidatePasswordRequirements_numericComplexNoMinComplexity_pinRequested() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC_COMPLEX);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("12345678"),
|
||||
@@ -254,9 +270,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Config(shadows = ShadowLockPatternUtils.class)
|
||||
public void processAndValidatePasswordRequirements_numericComplexNoMinComplexity_passwordRequested() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC_COMPLEX);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("12345678"),
|
||||
@@ -266,9 +284,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Config(shadows = ShadowLockPatternUtils.class)
|
||||
public void processAndValidatePasswordRequirements_numericComplexHighComplexity_pinRequested() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC_COMPLEX);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("12345678"),
|
||||
@@ -278,9 +298,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Config(shadows = ShadowLockPatternUtils.class)
|
||||
public void processAndValidatePasswordRequirements_numericHighComplexity_pinRequested() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("12345678"),
|
||||
@@ -290,9 +312,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Config(shadows = ShadowLockPatternUtils.class)
|
||||
public void processAndValidatePasswordRequirements_numericComplexLowComplexity_passwordRequested() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_NUMERIC_COMPLEX);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("12345678"),
|
||||
@@ -302,9 +326,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void processAndValidatePasswordRequirements_requirementsUpdateAccordingToMinComplexityAndUserInput_empty() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -315,9 +341,11 @@ public class ChooseLockPasswordTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void processAndValidatePasswordRequirements_requirementsUpdateAccordingToMinComplexityAndUserInput_numeric() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("1"),
|
||||
@@ -327,9 +355,11 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_requirementsUpdateAccordingToMinComplexityAndUserInput_alphabetic() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("b"),
|
||||
@@ -338,9 +368,11 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_requirementsUpdateAccordingToMinComplexityAndUserInput_alphanumeric() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("b1"),
|
||||
@@ -349,9 +381,11 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_defaultPinMinimumLength() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword("11"),
|
||||
@@ -360,9 +394,11 @@ public class ChooseLockPasswordTest {
|
||||
|
||||
@Test
|
||||
public void processAndValidatePasswordRequirements_maximumLength() {
|
||||
mShadowDpm.setPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED);
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
LockscreenCredential.createPassword("01234567890123456789"),
|
||||
@@ -386,6 +422,7 @@ public class ChooseLockPasswordTest {
|
||||
ShadowLockPatternUtils.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_LOW);
|
||||
|
||||
assertPasswordValidationResult(
|
||||
/* minMetrics */ null,
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
@@ -397,7 +434,7 @@ public class ChooseLockPasswordTest {
|
||||
ShadowLockPatternUtils.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_LOW);
|
||||
ShadowLockPatternUtils.setRequiredPasswordComplexity(123, PASSWORD_COMPLEXITY_HIGH);
|
||||
|
||||
Intent intent = createIntentForPasswordValidation(PASSWORD_COMPLEXITY_NONE,
|
||||
Intent intent = createIntentForPasswordValidation(null, PASSWORD_COMPLEXITY_NONE,
|
||||
PASSWORD_QUALITY_NUMERIC);
|
||||
intent.putExtra(EXTRA_KEY_UNIFICATION_PROFILE_ID, 123);
|
||||
assertPasswordValidationResultForIntent(LockscreenCredential.createNone(), intent,
|
||||
@@ -423,10 +460,11 @@ public class ChooseLockPasswordTest {
|
||||
return Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon());
|
||||
}
|
||||
|
||||
private void assertPasswordValidationResult(@PasswordComplexity int minComplexity,
|
||||
private void assertPasswordValidationResult(PasswordMetrics minMetrics,
|
||||
@PasswordComplexity int minComplexity,
|
||||
int passwordType, LockscreenCredential userEnteredPassword,
|
||||
String... expectedValidationResult) {
|
||||
Intent intent = createIntentForPasswordValidation(minComplexity, passwordType);
|
||||
Intent intent = createIntentForPasswordValidation(minMetrics, minComplexity, passwordType);
|
||||
assertPasswordValidationResultForIntent(userEnteredPassword, intent,
|
||||
expectedValidationResult);
|
||||
}
|
||||
@@ -441,12 +479,14 @@ public class ChooseLockPasswordTest {
|
||||
}
|
||||
|
||||
private Intent createIntentForPasswordValidation(
|
||||
PasswordMetrics minMetrics,
|
||||
@PasswordComplexity int minComplexity,
|
||||
int passwordType) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(CONFIRM_CREDENTIALS, false);
|
||||
intent.putExtra(PASSWORD_TYPE_KEY, passwordType);
|
||||
intent.putExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, minComplexity);
|
||||
intent.putExtra(ChooseLockPassword.EXTRA_KEY_MIN_METRICS, minMetrics);
|
||||
intent.putExtra(ChooseLockPassword.EXTRA_KEY_MIN_COMPLEXITY, minComplexity);
|
||||
return intent;
|
||||
}
|
||||
}
|
||||
|
@@ -24,6 +24,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_HIGH;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
|
||||
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_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
@@ -300,6 +301,8 @@ public class SetNewPasswordActivityTest {
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PARENT_PROFILE_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.getBooleanExtra(
|
||||
EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY, false)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
assertThat(actualIntent.getStringExtra(EXTRA_KEY_CALLER_APP_NAME)).isEqualTo(APP_LABEL);
|
||||
verify(mockMetricsProvider).action(
|
||||
@@ -309,6 +312,23 @@ public class SetNewPasswordActivityTest {
|
||||
PKG_NAME,
|
||||
Integer.MIN_VALUE);
|
||||
}
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void launchChooseLock_setNewParentProfilePassword_DevicePasswordRequirementExtra() {
|
||||
Settings.Global.putInt(RuntimeEnvironment.application.getContentResolver(),
|
||||
Settings.Global.DEVICE_PROVISIONED, 1);
|
||||
|
||||
Intent intent = new Intent(ACTION_SET_NEW_PARENT_PROFILE_PASSWORD)
|
||||
.putExtra(DevicePolicyManager.EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY, true);
|
||||
SetNewPasswordActivity activity =
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
|
||||
assertThat(actualIntent.getBooleanExtra(
|
||||
EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY, false)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
|
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.testutils.shadow;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.content.ComponentName;
|
||||
import android.os.UserHandle;
|
||||
|
||||
@@ -36,11 +37,17 @@ public class ShadowLockPatternUtils {
|
||||
|
||||
private static boolean sDeviceEncryptionEnabled;
|
||||
private static Map<Integer, Integer> sUserToComplexityMap = new HashMap<>();
|
||||
private static Map<Integer, Integer> sUserToProfileComplexityMap = new HashMap<>();
|
||||
private static Map<Integer, PasswordMetrics> sUserToMetricsMap = new HashMap<>();
|
||||
private static Map<Integer, PasswordMetrics> sUserToProfileMetricsMap = new HashMap<>();
|
||||
|
||||
|
||||
@Resetter
|
||||
public static void reset() {
|
||||
sUserToComplexityMap.clear();
|
||||
sUserToProfileComplexityMap.clear();
|
||||
sUserToMetricsMap.clear();
|
||||
sUserToProfileMetricsMap.clear();
|
||||
sDeviceEncryptionEnabled = false;
|
||||
}
|
||||
|
||||
@@ -91,15 +98,50 @@ public class ShadowLockPatternUtils {
|
||||
|
||||
@Implementation
|
||||
public @DevicePolicyManager.PasswordComplexity int getRequestedPasswordComplexity(int userId) {
|
||||
return sUserToComplexityMap.getOrDefault(userId,
|
||||
DevicePolicyManager.PASSWORD_COMPLEXITY_NONE);
|
||||
return getRequestedPasswordComplexity(userId, false);
|
||||
}
|
||||
|
||||
public static void setRequiredPasswordComplexity(int userId, int complexity) {
|
||||
sUserToComplexityMap.put(userId, complexity);
|
||||
@Implementation
|
||||
public @DevicePolicyManager.PasswordComplexity int getRequestedPasswordComplexity(int userId,
|
||||
boolean deviceWideOnly) {
|
||||
int complexity = sUserToComplexityMap.getOrDefault(userId,
|
||||
DevicePolicyManager.PASSWORD_COMPLEXITY_NONE);
|
||||
if (!deviceWideOnly) {
|
||||
complexity = Math.max(complexity, sUserToProfileComplexityMap.getOrDefault(userId,
|
||||
DevicePolicyManager.PASSWORD_COMPLEXITY_NONE));
|
||||
}
|
||||
return complexity;
|
||||
}
|
||||
|
||||
public static void setRequiredPasswordComplexity(int userHandle, int complexity) {
|
||||
sUserToComplexityMap.put(userHandle, complexity);
|
||||
}
|
||||
|
||||
public static void setRequiredPasswordComplexity(int complexity) {
|
||||
setRequiredPasswordComplexity(UserHandle.myUserId(), complexity);
|
||||
sUserToComplexityMap.put(UserHandle.myUserId(), complexity);
|
||||
}
|
||||
|
||||
public static void setRequiredProfilePasswordComplexity(int complexity) {
|
||||
sUserToProfileComplexityMap.put(UserHandle.myUserId(), complexity);
|
||||
}
|
||||
|
||||
@Implementation
|
||||
public PasswordMetrics getRequestedPasswordMetrics(int userId, boolean deviceWideOnly) {
|
||||
PasswordMetrics metrics = sUserToMetricsMap.getOrDefault(userId,
|
||||
new PasswordMetrics(LockPatternUtils.CREDENTIAL_TYPE_NONE));
|
||||
if (!deviceWideOnly) {
|
||||
metrics.maxWith(sUserToProfileMetricsMap.getOrDefault(userId,
|
||||
new PasswordMetrics(LockPatternUtils.CREDENTIAL_TYPE_NONE)));
|
||||
}
|
||||
return metrics;
|
||||
}
|
||||
|
||||
public static void setRequestedPasswordMetrics(PasswordMetrics metrics) {
|
||||
sUserToMetricsMap.put(UserHandle.myUserId(), metrics);
|
||||
}
|
||||
|
||||
public static void setRequestedProfilePasswordMetrics(PasswordMetrics metrics) {
|
||||
sUserToProfileMetricsMap.put(UserHandle.myUserId(), metrics);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user