Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3861bf7e authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Throw for unknown user restrictions.

Bug 23902097

Change-Id: I78a4b09db880134577d690be0c50ee9a64e6a309
parent e8faad6b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -930,6 +930,7 @@ public class UserManagerService extends IUserManager.Stub {
    /** @return a specific user restriction that's in effect currently. */
    @Override
    public boolean hasUserRestriction(String restrictionKey, int userId) {
        UserRestrictionsUtils.checkRestriction(restrictionKey);
        Bundle restrictions = getEffectiveUserRestrictions(userId);
        return restrictions != null && restrictions.getBoolean(restrictionKey);
    }
@@ -946,6 +947,7 @@ public class UserManagerService extends IUserManager.Stub {
    @Override
    public boolean hasBaseUserRestriction(String restrictionKey, int userId) {
        checkManageUsersPermission("hasBaseUserRestriction");
        UserRestrictionsUtils.checkRestriction(restrictionKey);
        synchronized (mRestrictionsLock) {
            Bundle bundle = mBaseUserRestrictions.get(userId);
            return (bundle != null && bundle.getBoolean(restrictionKey, false));
@@ -955,6 +957,7 @@ public class UserManagerService extends IUserManager.Stub {
    @Override
    public void setUserRestriction(String key, boolean value, int userId) {
        checkManageUsersPermission("setUserRestriction");
        UserRestrictionsUtils.checkRestriction(key);
        synchronized (mRestrictionsLock) {
            // Note we can't modify Bundles stored in mBaseUserRestrictions directly, so create
            // a copy.
+19 −2
Original line number Diff line number Diff line
@@ -56,7 +56,15 @@ public class UserRestrictionsUtils {
    private UserRestrictionsUtils() {
    }

    public static final Set<String> USER_RESTRICTIONS = Sets.newArraySet(
    private static Set<String> newSetWithUniqueCheck(String[] strings) {
        final Set<String> ret = Sets.newArraySet(strings);

        // Make sure there's no overlap.
        Preconditions.checkState(ret.size() == strings.length);
        return ret;
    }

    public static final Set<String> USER_RESTRICTIONS = newSetWithUniqueCheck(new String[] {
            UserManager.DISALLOW_CONFIG_WIFI,
            UserManager.DISALLOW_MODIFY_ACCOUNTS,
            UserManager.DISALLOW_INSTALL_APPS,
@@ -94,7 +102,7 @@ public class UserRestrictionsUtils {
            UserManager.DISALLOW_RUN_IN_BACKGROUND,
            UserManager.DISALLOW_DATA_ROAMING,
            UserManager.DISALLOW_SET_USER_ICON
    );
    });

    /**
     * Set of user restriction which we don't want to persist.
@@ -140,6 +148,15 @@ public class UserRestrictionsUtils {
            UserManager.DISALLOW_UNMUTE_MICROPHONE
    );

    /**
     * Throws {@link IllegalArgumentException} if the given restriction name is invalid.
     */
    public static void checkRestriction(@NonNull String restriction) {
        if (!USER_RESTRICTIONS.contains(restriction)) {
            throw new IllegalArgumentException("Unknown restriction: " + restriction);
        }
    }

    public static void writeRestrictions(@NonNull XmlSerializer serializer,
            @Nullable Bundle restrictions, @NonNull String tag) throws IOException {
        if (restrictions == null) {
+2 −0
Original line number Diff line number Diff line
@@ -6771,6 +6771,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    @Override
    public void setUserRestriction(ComponentName who, String key, boolean enabledFromThisOwner) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        UserRestrictionsUtils.checkRestriction(key);

        final int userHandle = mInjector.userHandleGetCallingUserId();
        synchronized (this) {
            ActiveAdmin activeAdmin =