Loading core/java/android/app/admin/PasswordMetrics.java +16 −30 Original line number Diff line number Diff line Loading @@ -406,11 +406,6 @@ public final class PasswordMetrics implements Parcelable { return containsNonNumeric ? 6 : 8; } @Override boolean allowsNumericPassword() { return false; } @Override boolean allowsCredType(int credType) { return credType == CREDENTIAL_TYPE_PASSWORD; Loading @@ -427,11 +422,6 @@ public final class PasswordMetrics implements Parcelable { return 4; } @Override boolean allowsNumericPassword() { return false; } @Override boolean allowsCredType(int credType) { return credType == CREDENTIAL_TYPE_PASSWORD; Loading @@ -448,11 +438,6 @@ public final class PasswordMetrics implements Parcelable { return 0; } @Override boolean allowsNumericPassword() { return true; } @Override boolean allowsCredType(int credType) { return credType != CREDENTIAL_TYPE_NONE; Loading @@ -469,11 +454,6 @@ public final class PasswordMetrics implements Parcelable { return 0; } @Override boolean allowsNumericPassword() { return true; } @Override boolean allowsCredType(int credType) { return true; Loading @@ -484,7 +464,6 @@ public final class PasswordMetrics implements Parcelable { abstract boolean canHaveSequence(); abstract int getMinimumLength(boolean containsNonNumeric); abstract boolean allowsNumericPassword(); abstract boolean allowsCredType(int credType); ComplexityBucket(int complexityLevel) { Loading Loading @@ -591,7 +570,14 @@ public final class PasswordMetrics implements Parcelable { result.add(new PasswordValidationError(TOO_LONG, MAX_PASSWORD_LENGTH)); } final PasswordMetrics minMetrics = applyComplexity(adminMetrics, isPin, bucket); // A flag indicating whether the provided password already has non-numeric characters in // it or if the admin imposes the requirement of any non-numeric characters. final boolean hasOrWouldNeedNonNumeric = actualMetrics.nonNumeric > 0 || adminMetrics.nonNumeric > 0 || adminMetrics.letters > 0 || adminMetrics.lowerCase > 0 || adminMetrics.upperCase > 0 || adminMetrics.symbols > 0; final PasswordMetrics minMetrics = applyComplexity(adminMetrics, hasOrWouldNeedNonNumeric, bucket); // Clamp required length between maximum and minimum valid values. minMetrics.length = Math.min(MAX_PASSWORD_LENGTH, Loading Loading @@ -684,23 +670,23 @@ public final class PasswordMetrics implements Parcelable { * TODO: move to PasswordPolicy */ public static PasswordMetrics applyComplexity( PasswordMetrics adminMetrics, boolean isPin, int complexity) { return applyComplexity(adminMetrics, isPin, ComplexityBucket.forComplexity(complexity)); PasswordMetrics adminMetrics, boolean withNonNumericCharacters, int complexity) { return applyComplexity(adminMetrics, withNonNumericCharacters, ComplexityBucket.forComplexity(complexity)); } private static PasswordMetrics applyComplexity( PasswordMetrics adminMetrics, boolean isPin, ComplexityBucket bucket) { PasswordMetrics adminMetrics, boolean withNonNumericCharacters, ComplexityBucket bucket) { final PasswordMetrics minMetrics = new PasswordMetrics(adminMetrics); if (!bucket.canHaveSequence()) { minMetrics.seqLength = Math.min(minMetrics.seqLength, MAX_ALLOWED_SEQUENCE); } minMetrics.length = Math.max(minMetrics.length, bucket.getMinimumLength(!isPin)); if (!isPin && !bucket.allowsNumericPassword()) { minMetrics.nonNumeric = Math.max(minMetrics.nonNumeric, 1); } minMetrics.length = Math.max(minMetrics.length, bucket.getMinimumLength(withNonNumericCharacters)); return minMetrics; } Loading Loading
core/java/android/app/admin/PasswordMetrics.java +16 −30 Original line number Diff line number Diff line Loading @@ -406,11 +406,6 @@ public final class PasswordMetrics implements Parcelable { return containsNonNumeric ? 6 : 8; } @Override boolean allowsNumericPassword() { return false; } @Override boolean allowsCredType(int credType) { return credType == CREDENTIAL_TYPE_PASSWORD; Loading @@ -427,11 +422,6 @@ public final class PasswordMetrics implements Parcelable { return 4; } @Override boolean allowsNumericPassword() { return false; } @Override boolean allowsCredType(int credType) { return credType == CREDENTIAL_TYPE_PASSWORD; Loading @@ -448,11 +438,6 @@ public final class PasswordMetrics implements Parcelable { return 0; } @Override boolean allowsNumericPassword() { return true; } @Override boolean allowsCredType(int credType) { return credType != CREDENTIAL_TYPE_NONE; Loading @@ -469,11 +454,6 @@ public final class PasswordMetrics implements Parcelable { return 0; } @Override boolean allowsNumericPassword() { return true; } @Override boolean allowsCredType(int credType) { return true; Loading @@ -484,7 +464,6 @@ public final class PasswordMetrics implements Parcelable { abstract boolean canHaveSequence(); abstract int getMinimumLength(boolean containsNonNumeric); abstract boolean allowsNumericPassword(); abstract boolean allowsCredType(int credType); ComplexityBucket(int complexityLevel) { Loading Loading @@ -591,7 +570,14 @@ public final class PasswordMetrics implements Parcelable { result.add(new PasswordValidationError(TOO_LONG, MAX_PASSWORD_LENGTH)); } final PasswordMetrics minMetrics = applyComplexity(adminMetrics, isPin, bucket); // A flag indicating whether the provided password already has non-numeric characters in // it or if the admin imposes the requirement of any non-numeric characters. final boolean hasOrWouldNeedNonNumeric = actualMetrics.nonNumeric > 0 || adminMetrics.nonNumeric > 0 || adminMetrics.letters > 0 || adminMetrics.lowerCase > 0 || adminMetrics.upperCase > 0 || adminMetrics.symbols > 0; final PasswordMetrics minMetrics = applyComplexity(adminMetrics, hasOrWouldNeedNonNumeric, bucket); // Clamp required length between maximum and minimum valid values. minMetrics.length = Math.min(MAX_PASSWORD_LENGTH, Loading Loading @@ -684,23 +670,23 @@ public final class PasswordMetrics implements Parcelable { * TODO: move to PasswordPolicy */ public static PasswordMetrics applyComplexity( PasswordMetrics adminMetrics, boolean isPin, int complexity) { return applyComplexity(adminMetrics, isPin, ComplexityBucket.forComplexity(complexity)); PasswordMetrics adminMetrics, boolean withNonNumericCharacters, int complexity) { return applyComplexity(adminMetrics, withNonNumericCharacters, ComplexityBucket.forComplexity(complexity)); } private static PasswordMetrics applyComplexity( PasswordMetrics adminMetrics, boolean isPin, ComplexityBucket bucket) { PasswordMetrics adminMetrics, boolean withNonNumericCharacters, ComplexityBucket bucket) { final PasswordMetrics minMetrics = new PasswordMetrics(adminMetrics); if (!bucket.canHaveSequence()) { minMetrics.seqLength = Math.min(minMetrics.seqLength, MAX_ALLOWED_SEQUENCE); } minMetrics.length = Math.max(minMetrics.length, bucket.getMinimumLength(!isPin)); if (!isPin && !bucket.allowsNumericPassword()) { minMetrics.nonNumeric = Math.max(minMetrics.nonNumeric, 1); } minMetrics.length = Math.max(minMetrics.length, bucket.getMinimumLength(withNonNumericCharacters)); return minMetrics; } Loading