Merge "Allow affiliated profile owner to grant sensor permissions." into sc-v2-dev am: 959324fe84 am: 2768e6d83c

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

Change-Id: I38c3ba020eb05eb491d1e9dd17e29d39c3392d8d
This commit is contained in:
TreeHugger Robot
2021-09-14 15:44:21 +00:00
committed by Automerger Merge Worker
2 changed files with 27 additions and 12 deletions

View File

@@ -46,6 +46,12 @@ public class DevicePolicyCacheImpl extends DevicePolicyCache {
@GuardedBy("mLock")
private final SparseIntArray mPermissionPolicy = new SparseIntArray();
/** Maps to {@code ActiveAdmin.mAdminCanGrantSensorsPermissions}.
*
* <p>For users affiliated with the device, they inherit the policy from {@code DO} so
* it will map to the {@code DO}'s policy. Otherwise it will map to the admin of the requesting
* user.
*/
@GuardedBy("mLock")
private final SparseBooleanArray mCanGrantSensorsPermissions = new SparseBooleanArray();
@@ -102,17 +108,16 @@ public class DevicePolicyCacheImpl extends DevicePolicyCache {
}
@Override
public boolean canAdminGrantSensorsPermissionsForUser(@UserIdInt int userHandle) {
public boolean canAdminGrantSensorsPermissionsForUser(@UserIdInt int userId) {
synchronized (mLock) {
return mCanGrantSensorsPermissions.get(userHandle, false);
return mCanGrantSensorsPermissions.get(userId, false);
}
}
/** Sets ahmin control over permission grants for user. */
public void setAdminCanGrantSensorsPermissions(@UserIdInt int userHandle,
boolean canGrant) {
public void setAdminCanGrantSensorsPermissions(@UserIdInt int userId, boolean canGrant) {
synchronized (mLock) {
mCanGrantSensorsPermissions.put(userHandle, canGrant);
mCanGrantSensorsPermissions.put(userId, canGrant);
}
}

View File

@@ -9141,9 +9141,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
/**
* Returns the ActiveAdmin associated wit the PO or DO on the given user.
* @param userHandle
* @return
* Returns the ActiveAdmin associated with the PO or DO on the given user.
*/
private @Nullable ActiveAdmin getDeviceOrProfileOwnerAdminLocked(int userHandle) {
ActiveAdmin admin = getProfileOwnerAdminLocked(userHandle);
@@ -14300,6 +14298,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
maybePauseDeviceWideLoggingLocked();
maybeResumeDeviceWideLoggingLocked();
maybeClearLockTaskPolicyLocked();
updateAdminCanGrantSensorsPermissionCache(callingUserId);
}
}
@@ -17480,7 +17479,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
});
}
private void setAdminCanGrantSensorsPermissionForUserUnchecked(int userId, boolean canGrant) {
private void setAdminCanGrantSensorsPermissionForUserUnchecked(@UserIdInt int userId,
boolean canGrant) {
Slogf.d(LOG_TAG, "setAdminCanGrantSensorsPermissionForUserUnchecked(%d, %b)",
userId, canGrant);
synchronized (getLockObject()) {
ActiveAdmin owner = getDeviceOrProfileOwnerAdminLocked(userId);
@@ -17494,10 +17496,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
}
private void updateAdminCanGrantSensorsPermissionCache(int userId) {
private void updateAdminCanGrantSensorsPermissionCache(@UserIdInt int userId) {
synchronized (getLockObject()) {
ActiveAdmin owner = getDeviceOrProfileOwnerAdminLocked(userId);
final boolean canGrant = owner != null ? owner.mAdminCanGrantSensorsPermissions : false;
ActiveAdmin owner;
// If the user is affiliated the device (either a DO itself, or an affiliated PO),
// use mAdminCanGrantSensorsPermissions from the DO
if (isUserAffiliatedWithDeviceLocked(userId)) {
owner = getDeviceOwnerAdminLocked();
} else {
owner = getDeviceOrProfileOwnerAdminLocked(userId);
}
boolean canGrant = owner != null ? owner.mAdminCanGrantSensorsPermissions : false;
mPolicyCache.setAdminCanGrantSensorsPermissions(userId, canGrant);
}
}