Merge "Cache permission policy" into sc-dev am: e51a931cd2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13432492

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I37c3943a077683dc15598748a758e0d55fac33f9
This commit is contained in:
TreeHugger Robot
2021-02-03 06:43:35 +00:00
committed by Automerger Merge Worker
3 changed files with 44 additions and 6 deletions

View File

@@ -50,6 +50,12 @@ public abstract class DevicePolicyCache {
*/
public abstract int getPasswordQuality(@UserIdInt int userHandle);
/**
* Caches {@link DevicePolicyManager#getPermissionPolicy(android.content.ComponentName)} of
* the given user.
*/
public abstract int getPermissionPolicy(@UserIdInt int userHandle);
/**
* Empty implementation.
*/
@@ -66,5 +72,10 @@ public abstract class DevicePolicyCache {
public int getPasswordQuality(int userHandle) {
return DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
}
@Override
public int getPermissionPolicy(int userHandle) {
return DevicePolicyManager.PERMISSION_POLICY_PROMPT;
}
}
}

View File

@@ -43,10 +43,14 @@ public class DevicePolicyCacheImpl extends DevicePolicyCache {
@GuardedBy("mLock")
private final SparseIntArray mPasswordQuality = new SparseIntArray();
@GuardedBy("mLock")
private final SparseIntArray mPermissionPolicy = new SparseIntArray();
public void onUserRemoved(int userHandle) {
synchronized (mLock) {
mScreenCaptureDisabled.delete(userHandle);
mPasswordQuality.delete(userHandle);
mPermissionPolicy.delete(userHandle);
}
}
@@ -78,12 +82,28 @@ public class DevicePolicyCacheImpl extends DevicePolicyCache {
}
}
@Override
public int getPermissionPolicy(@UserIdInt int userHandle) {
synchronized (mLock) {
return mPermissionPolicy.get(userHandle,
DevicePolicyManager.PERMISSION_POLICY_PROMPT);
}
}
/** Update the permission policy for the given user. */
public void setPermissionPolicy(@UserIdInt int userHandle, int policy) {
synchronized (mLock) {
mPermissionPolicy.put(userHandle, policy);
}
}
/** Dump content */
public void dump(IndentingPrintWriter pw) {
pw.println("Device policy cache:");
pw.increaseIndent();
pw.println("Screen capture disabled: " + mScreenCaptureDisabled.toString());
pw.println("Password quality: " + mPasswordQuality.toString());
pw.println("Permission policy: " + mPermissionPolicy.toString());
pw.decreaseIndent();
}
}

View File

@@ -2935,6 +2935,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
// reading the value during user switch, due to onStartUser() being asynchronous.
updatePasswordQualityCacheForUserGroup(
userId == UserHandle.USER_SYSTEM ? UserHandle.USER_ALL : userId);
updatePermissionPolicyCache(userId);
startOwnerService(userId, "start-user");
}
@@ -12464,11 +12465,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|| (caller.hasPackage() && isCallerDelegate(caller, DELEGATION_PERMISSION_GRANT)));
checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_PERMISSION_POLICY);
final int forUser = caller.getUserId();
synchronized (getLockObject()) {
DevicePolicyData userPolicy = getUserData(caller.getUserId());
DevicePolicyData userPolicy = getUserData(forUser);
if (userPolicy.mPermissionPolicy != policy) {
userPolicy.mPermissionPolicy = policy;
saveSettingsLocked(caller.getUserId());
mPolicyCache.setPermissionPolicy(forUser, policy);
saveSettingsLocked(forUser);
}
}
DevicePolicyEventLogger
@@ -12479,13 +12482,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
.write();
}
private void updatePermissionPolicyCache(int userId) {
synchronized (getLockObject()) {
DevicePolicyData userPolicy = getUserData(userId);
mPolicyCache.setPermissionPolicy(userId, userPolicy.mPermissionPolicy);
}
}
@Override
public int getPermissionPolicy(ComponentName admin) throws RemoteException {
int userId = UserHandle.getCallingUserId();
synchronized (getLockObject()) {
DevicePolicyData userPolicy = getUserData(userId);
return userPolicy.mPermissionPolicy;
}
return mPolicyCache.getPermissionPolicy(userId);
}
@Override