Loading core/java/android/app/admin/DevicePolicyManagerInternal.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading services/core/java/com/android/server/pm/UserManagerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +16 −0 Original line number Diff line number Diff line Loading @@ -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}. Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +34 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
core/java/android/app/admin/DevicePolicyManagerInternal.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); }
packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading
services/core/java/com/android/server/pm/UserManagerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +16 −0 Original line number Diff line number Diff line Loading @@ -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}. Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +34 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) {