Merge "Get the enforcing users from the DevicePolicyEngine." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
69badb5b7a
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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}.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user