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

Commit a0fddc1e authored by Makoto Onuki's avatar Makoto Onuki Committed by Android (Google) Code Review
Browse files

Merge "Ignore unknown user restrictions and WTF instead."

parents cd6a4854 1f1ceef0
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -930,6 +930,9 @@ public class UserManagerService extends IUserManager.Stub {
    /** @return a specific user restriction that's in effect currently. */
    /** @return a specific user restriction that's in effect currently. */
    @Override
    @Override
    public boolean hasUserRestriction(String restrictionKey, int userId) {
    public boolean hasUserRestriction(String restrictionKey, int userId) {
        if (!UserRestrictionsUtils.isValidRestriction(restrictionKey)) {
            return false;
        }
        Bundle restrictions = getEffectiveUserRestrictions(userId);
        Bundle restrictions = getEffectiveUserRestrictions(userId);
        return restrictions != null && restrictions.getBoolean(restrictionKey);
        return restrictions != null && restrictions.getBoolean(restrictionKey);
    }
    }
@@ -946,6 +949,9 @@ public class UserManagerService extends IUserManager.Stub {
    @Override
    @Override
    public boolean hasBaseUserRestriction(String restrictionKey, int userId) {
    public boolean hasBaseUserRestriction(String restrictionKey, int userId) {
        checkManageUsersPermission("hasBaseUserRestriction");
        checkManageUsersPermission("hasBaseUserRestriction");
        if (!UserRestrictionsUtils.isValidRestriction(restrictionKey)) {
            return false;
        }
        synchronized (mRestrictionsLock) {
        synchronized (mRestrictionsLock) {
            Bundle bundle = mBaseUserRestrictions.get(userId);
            Bundle bundle = mBaseUserRestrictions.get(userId);
            return (bundle != null && bundle.getBoolean(restrictionKey, false));
            return (bundle != null && bundle.getBoolean(restrictionKey, false));
@@ -955,6 +961,9 @@ public class UserManagerService extends IUserManager.Stub {
    @Override
    @Override
    public void setUserRestriction(String key, boolean value, int userId) {
    public void setUserRestriction(String key, boolean value, int userId) {
        checkManageUsersPermission("setUserRestriction");
        checkManageUsersPermission("setUserRestriction");
        if (!UserRestrictionsUtils.isValidRestriction(key)) {
            return;
        }
        synchronized (mRestrictionsLock) {
        synchronized (mRestrictionsLock) {
            // Note we can't modify Bundles stored in mBaseUserRestrictions directly, so create
            // Note we can't modify Bundles stored in mBaseUserRestrictions directly, so create
            // a copy.
            // a copy.
+22 −2
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.UserManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
import android.util.Log;
import android.util.Log;
import android.util.Slog;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import org.xmlpull.v1.XmlSerializer;
@@ -56,7 +57,15 @@ public class UserRestrictionsUtils {
    private 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_CONFIG_WIFI,
            UserManager.DISALLOW_MODIFY_ACCOUNTS,
            UserManager.DISALLOW_MODIFY_ACCOUNTS,
            UserManager.DISALLOW_INSTALL_APPS,
            UserManager.DISALLOW_INSTALL_APPS,
@@ -95,7 +104,7 @@ public class UserRestrictionsUtils {
            UserManager.DISALLOW_DATA_ROAMING,
            UserManager.DISALLOW_DATA_ROAMING,
            UserManager.DISALLOW_SET_USER_ICON,
            UserManager.DISALLOW_SET_USER_ICON,
            UserManager.DISALLOW_SET_WALLPAPER
            UserManager.DISALLOW_SET_WALLPAPER
    );
    });


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


    /**
     * Throws {@link IllegalArgumentException} if the given restriction name is invalid.
     */
    public static boolean isValidRestriction(@NonNull String restriction) {
        if (!USER_RESTRICTIONS.contains(restriction)) {
            Slog.wtf(TAG, "Unknown restriction: " + restriction);
            return false;
        }
        return true;
    }

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

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