in shadows/framework/src/main/java/org/robolectric/shadows/ShadowDevicePolicyManager.java [908:955]
private boolean passwordMeetsRequirements(String password) {
int digit = 0;
int alpha = 0;
int upper = 0;
int lower = 0;
int symbol = 0;
for (int i = 0; i < password.length(); i++) {
char c = password.charAt(i);
if (Character.isDigit(c)) {
digit++;
}
if (Character.isLetter(c)) {
alpha++;
}
if (Character.isUpperCase(c)) {
upper++;
}
if (Character.isLowerCase(c)) {
lower++;
}
if (!Character.isLetterOrDigit(c)) {
symbol++;
}
}
switch (requiredPasswordQuality) {
case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
case DevicePolicyManager.PASSWORD_QUALITY_MANAGED:
case DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK:
return true;
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
return password.length() > 0;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: // complexity not enforced
return digit > 0 && password.length() >= passwordMinimumLength;
case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
return digit > 0 && alpha > 0 && password.length() >= passwordMinimumLength;
case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
return password.length() >= passwordMinimumLength
&& alpha >= passwordMinimumLetters
&& lower >= passwordMinimumLowerCase
&& upper >= passwordMinimumUpperCase
&& digit + symbol >= passwordMinimumNonLetter
&& digit >= passwordMinimumNumeric
&& symbol >= passwordMinimumSymbols;
default:
return true;
}
}