Support EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY
When set, only enforce password requirement explicitly set device-wide. As part of the change, restructure the code such that ChooseLockGeneric becomes the central place for aggregating password requirements from different parties, while ChooseLockPassword only enforces whatever password reuirement it is told (by ChooseLockGeneric via intent extras) Bug: 169832516 Test: m RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.password Change-Id: I0acbea4819c13d4a8444c7b06928baccead18837
This commit is contained in:
@@ -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