Merge "Use PasswordMetrics to remove duplicated code."
This commit is contained in:
@@ -19,6 +19,7 @@ package com.android.settings;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
|
import android.app.admin.PasswordMetrics;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.InsetDrawable;
|
import android.graphics.drawable.InsetDrawable;
|
||||||
@@ -583,8 +584,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
// The length requirements are fulfilled.
|
// The length requirements are fulfilled.
|
||||||
if (mRequestedQuality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
if (mRequestedQuality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
||||||
// Check for repeated characters or sequences (e.g. '1234', '0000', '2468')
|
// Check for repeated characters or sequences (e.g. '1234', '0000', '2468')
|
||||||
final int sequence = LockPatternUtils.maxLengthSequence(password);
|
final int sequence = PasswordMetrics.maxLengthSequence(password);
|
||||||
if (sequence > LockPatternUtils.MAX_ALLOWED_SEQUENCE) {
|
if (sequence > PasswordMetrics.MAX_ALLOWED_SEQUENCE) {
|
||||||
errorCode |= CONTAIN_SEQUENTIAL_DIGITS;
|
errorCode |= CONTAIN_SEQUENTIAL_DIGITS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -594,40 +595,22 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count different types of character.
|
// Allow non-control Latin-1 characters only.
|
||||||
int letters = 0;
|
|
||||||
int numbers = 0;
|
|
||||||
int lowercase = 0;
|
|
||||||
int symbols = 0;
|
|
||||||
int uppercase = 0;
|
|
||||||
int nonletter = 0;
|
|
||||||
for (int i = 0; i < password.length(); i++) {
|
for (int i = 0; i < password.length(); i++) {
|
||||||
char c = password.charAt(i);
|
char c = password.charAt(i);
|
||||||
// allow non control Latin-1 characters only
|
|
||||||
if (c < 32 || c > 127) {
|
if (c < 32 || c > 127) {
|
||||||
errorCode |= CONTAIN_INVALID_CHARACTERS;
|
errorCode |= CONTAIN_INVALID_CHARACTERS;
|
||||||
continue;
|
break;
|
||||||
}
|
|
||||||
if (c >= '0' && c <= '9') {
|
|
||||||
numbers++;
|
|
||||||
nonletter++;
|
|
||||||
} else if (c >= 'A' && c <= 'Z') {
|
|
||||||
letters++;
|
|
||||||
uppercase++;
|
|
||||||
} else if (c >= 'a' && c <= 'z') {
|
|
||||||
letters++;
|
|
||||||
lowercase++;
|
|
||||||
} else {
|
|
||||||
symbols++;
|
|
||||||
nonletter++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final PasswordMetrics metrics = PasswordMetrics.computeForPassword(password);
|
||||||
|
|
||||||
// Ensure no non-digits if we are requesting numbers. This shouldn't be possible unless
|
// Ensure no non-digits if we are requesting numbers. This shouldn't be possible unless
|
||||||
// user finds some way to bring up soft keyboard.
|
// user finds some way to bring up soft keyboard.
|
||||||
if (mRequestedQuality == PASSWORD_QUALITY_NUMERIC
|
if (mRequestedQuality == PASSWORD_QUALITY_NUMERIC
|
||||||
|| mRequestedQuality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
|| mRequestedQuality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
||||||
if (letters > 0 || symbols > 0) {
|
if (metrics.letters > 0 || metrics.symbols > 0) {
|
||||||
errorCode |= CONTAIN_NON_DIGITS;
|
errorCode |= CONTAIN_NON_DIGITS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -637,32 +620,32 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
int passwordRestriction = mPasswordRequirements[i];
|
int passwordRestriction = mPasswordRequirements[i];
|
||||||
switch (passwordRestriction) {
|
switch (passwordRestriction) {
|
||||||
case MIN_LETTER_IN_PASSWORD:
|
case MIN_LETTER_IN_PASSWORD:
|
||||||
if (letters < mPasswordMinLetters) {
|
if (metrics.letters < mPasswordMinLetters) {
|
||||||
errorCode |= NOT_ENOUGH_LETTER;
|
errorCode |= NOT_ENOUGH_LETTER;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MIN_UPPER_LETTERS_IN_PASSWORD:
|
case MIN_UPPER_LETTERS_IN_PASSWORD:
|
||||||
if (uppercase < mPasswordMinUpperCase) {
|
if (metrics.upperCase < mPasswordMinUpperCase) {
|
||||||
errorCode |= NOT_ENOUGH_UPPER_CASE;
|
errorCode |= NOT_ENOUGH_UPPER_CASE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MIN_LOWER_LETTERS_IN_PASSWORD:
|
case MIN_LOWER_LETTERS_IN_PASSWORD:
|
||||||
if (lowercase < mPasswordMinLowerCase) {
|
if (metrics.lowerCase < mPasswordMinLowerCase) {
|
||||||
errorCode |= NOT_ENOUGH_LOWER_CASE;
|
errorCode |= NOT_ENOUGH_LOWER_CASE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MIN_SYMBOLS_IN_PASSWORD:
|
case MIN_SYMBOLS_IN_PASSWORD:
|
||||||
if (symbols < mPasswordMinSymbols) {
|
if (metrics.symbols < mPasswordMinSymbols) {
|
||||||
errorCode |= NOT_ENOUGH_SYMBOLS;
|
errorCode |= NOT_ENOUGH_SYMBOLS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MIN_NUMBER_IN_PASSWORD:
|
case MIN_NUMBER_IN_PASSWORD:
|
||||||
if (numbers < mPasswordMinNumeric) {
|
if (metrics.numeric < mPasswordMinNumeric) {
|
||||||
errorCode |= NOT_ENOUGH_DIGITS;
|
errorCode |= NOT_ENOUGH_DIGITS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MIN_NON_LETTER_IN_PASSWORD:
|
case MIN_NON_LETTER_IN_PASSWORD:
|
||||||
if (nonletter < mPasswordMinNonLetter) {
|
if (metrics.nonLetter < mPasswordMinNonLetter) {
|
||||||
errorCode |= NOT_ENOUGH_NON_LETTER;
|
errorCode |= NOT_ENOUGH_NON_LETTER;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user