92 lines
4.0 KiB
Java
92 lines
4.0 KiB
Java
/*
|
|
* Copyright (C) 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.app.admin;
|
|
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
|
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
|
|
|
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
|
|
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSWORD;
|
|
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
|
|
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN;
|
|
|
|
/**
|
|
* {@hide}
|
|
*/
|
|
public class PasswordPolicy {
|
|
public static final int DEF_MINIMUM_LENGTH = 0;
|
|
public static final int DEF_MINIMUM_LETTERS = 1;
|
|
public static final int DEF_MINIMUM_UPPER_CASE = 0;
|
|
public static final int DEF_MINIMUM_LOWER_CASE = 0;
|
|
public static final int DEF_MINIMUM_NUMERIC = 1;
|
|
public static final int DEF_MINIMUM_SYMBOLS = 1;
|
|
public static final int DEF_MINIMUM_NON_LETTER = 0;
|
|
|
|
public int quality = PASSWORD_QUALITY_UNSPECIFIED;
|
|
public int length = DEF_MINIMUM_LENGTH;
|
|
public int letters = DEF_MINIMUM_LETTERS;
|
|
public int upperCase = DEF_MINIMUM_UPPER_CASE;
|
|
public int lowerCase = DEF_MINIMUM_LOWER_CASE;
|
|
public int numeric = DEF_MINIMUM_NUMERIC;
|
|
public int symbols = DEF_MINIMUM_SYMBOLS;
|
|
public int nonLetter = DEF_MINIMUM_NON_LETTER;
|
|
|
|
/**
|
|
* Returns a minimum password metrics that the password should have to satisfy current policy.
|
|
*/
|
|
public PasswordMetrics getMinMetrics() {
|
|
if (quality == PASSWORD_QUALITY_UNSPECIFIED) {
|
|
return new PasswordMetrics(CREDENTIAL_TYPE_NONE);
|
|
} else if (quality == PASSWORD_QUALITY_BIOMETRIC_WEAK
|
|
|| quality == PASSWORD_QUALITY_SOMETHING) {
|
|
return new PasswordMetrics(CREDENTIAL_TYPE_PATTERN);
|
|
} else if (quality == PASSWORD_QUALITY_NUMERIC
|
|
|| quality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
|
PasswordMetrics result = new PasswordMetrics(CREDENTIAL_TYPE_PIN);
|
|
result.length = length;
|
|
if (quality == PASSWORD_QUALITY_NUMERIC_COMPLEX) {
|
|
result.seqLength = PasswordMetrics.MAX_ALLOWED_SEQUENCE;
|
|
}
|
|
return result;
|
|
} // quality is ALPHABETIC or stronger.
|
|
|
|
PasswordMetrics result = new PasswordMetrics(CREDENTIAL_TYPE_PASSWORD);
|
|
result.length = length;
|
|
|
|
if (quality == PASSWORD_QUALITY_ALPHABETIC) {
|
|
result.nonNumeric = 1;
|
|
} else if (quality == PASSWORD_QUALITY_ALPHANUMERIC) {
|
|
result.numeric = 1;
|
|
result.nonNumeric = 1;
|
|
} else if (quality == PASSWORD_QUALITY_COMPLEX) {
|
|
result.numeric = numeric;
|
|
result.letters = letters;
|
|
result.upperCase = upperCase;
|
|
result.lowerCase = lowerCase;
|
|
result.nonLetter = nonLetter;
|
|
result.symbols = symbols;
|
|
}
|
|
return result;
|
|
}
|
|
}
|