Merge "Get the enforcing users from the DevicePolicyEngine." into udc-dev

This commit is contained in:
Treehugger Robot
2023-05-16 17:12:25 +00:00
committed by Android (Google) Code Review
5 changed files with 63 additions and 5 deletions

View File

@@ -23,6 +23,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager.EnforcingUser;
import java.util.List;
import java.util.Set;
@@ -326,4 +327,10 @@ public abstract class DevicePolicyManagerInternal {
*/
public abstract List<Bundle> getApplicationRestrictionsPerAdminForUser(
String packageName, @UserIdInt int userId);
/**
* Returns a list of users who set a user restriction on a given user.
*/
public abstract List<EnforcingUser> getUserRestrictionSources(String restriction,
@UserIdInt int userId);
}

View File

@@ -36,6 +36,7 @@ import android.os.Build;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager.EnforcingUser;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
@@ -118,12 +119,13 @@ public class RestrictedLockUtilsInternal extends RestrictedLockUtils {
return enforcedAdmin;
}
final int restrictionSource = enforcingUsers.get(0).getUserRestrictionSource();
final EnforcingUser enforcingUser = enforcingUsers.get(0);
final int restrictionSource = enforcingUser.getUserRestrictionSource();
if (restrictionSource == UserManager.RESTRICTION_SOURCE_SYSTEM) {
return null;
}
final EnforcedAdmin admin = getProfileOrDeviceOwner(context, userHandle);
final EnforcedAdmin admin = getProfileOrDeviceOwner(context, enforcingUser.getUserHandle());
if (admin != null) {
return admin;
}

View File

@@ -2854,9 +2854,8 @@ public class UserManagerService extends IUserManager.Stub {
UserHandle.USER_NULL, UserManager.RESTRICTION_SOURCE_SYSTEM));
}
synchronized (mRestrictionsLock) {
result.addAll(mDevicePolicyUserRestrictions.getEnforcingUsers(restrictionKey, userId));
}
result.addAll(getDevicePolicyManagerInternal()
.getUserRestrictionSources(restrictionKey, userId));
return result;
}

View File

@@ -604,6 +604,22 @@ final class DevicePolicyEngine {
}
}
/**
* Retrieves the values set for the provided {@code policyDefinition} by each admin.
*/
@NonNull
<V> LinkedHashMap<EnforcingAdmin, PolicyValue<V>> getGlobalPoliciesSetByAdmins(
@NonNull PolicyDefinition<V> policyDefinition) {
Objects.requireNonNull(policyDefinition);
synchronized (mLock) {
if (!hasGlobalPolicyLocked(policyDefinition)) {
return new LinkedHashMap<>();
}
return getGlobalPolicyStateLocked(policyDefinition).getPoliciesSetByAdmins();
}
}
/**
* Returns the policies set by the given admin that share the same
* {@link PolicyKey#getIdentifier()} as the provided {@code policyDefinition}.

View File

@@ -410,6 +410,7 @@ import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager.EnforcingUser;
import android.os.UserManager.UserRestrictionSource;
import android.os.storage.StorageManager;
import android.permission.AdminPermissionControlParams;
@@ -16346,6 +16347,39 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return List.of(bundle);
});
}
public List<EnforcingUser> getUserRestrictionSources(String restriction,
@UserIdInt int userId) {
PolicyDefinition<Boolean> policy =
PolicyDefinition.getPolicyDefinitionForUserRestriction(restriction);
Set<EnforcingAdmin> localAdmins =
mDevicePolicyEngine.getLocalPoliciesSetByAdmins(policy, userId).keySet();
Set<EnforcingAdmin> globalAdmins =
mDevicePolicyEngine.getGlobalPoliciesSetByAdmins(policy).keySet();
List<EnforcingUser> enforcingUsers = new ArrayList();
enforcingUsers.addAll(getEnforcingUsers(localAdmins));
enforcingUsers.addAll(getEnforcingUsers(globalAdmins));
return enforcingUsers;
}
private List<EnforcingUser> getEnforcingUsers(Set<EnforcingAdmin> admins) {
List<EnforcingUser> enforcingUsers = new ArrayList();
ComponentName deviceOwner = mOwners.getDeviceOwnerComponent();
for (EnforcingAdmin admin : admins) {
if (deviceOwner != null
&& deviceOwner.getPackageName().equals(admin.getPackageName())) {
enforcingUsers.add(new EnforcingUser(admin.getUserId(),
UserManager.RESTRICTION_SOURCE_DEVICE_OWNER));
} else {
enforcingUsers.add(new EnforcingUser(admin.getUserId(),
UserManager.RESTRICTION_SOURCE_PROFILE_OWNER));
}
}
return enforcingUsers;
}
}
private Intent createShowAdminSupportIntent(int userId) {