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

Commit 2c4104d1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Allow ALL_USERS in setUserRestrictionForUser"

parents 35950974 e683f19c
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.app.AppOpsManager;
import android.content.Context;
import android.content.Context;
import android.os.Binder;
import android.os.Binder;
import android.os.IBinder;
import android.os.IBinder;
import android.os.UserHandle;


/**
/**
 * This class controls showing/hiding overlays. We don't
 * This class controls showing/hiding overlays. We don't
@@ -47,10 +48,10 @@ class OverlayControl {


    private void setOverlayAllowed(boolean allowed) {
    private void setOverlayAllowed(boolean allowed) {
        if (mAppOpsManager != null) {
        if (mAppOpsManager != null) {
            mAppOpsManager.setUserRestriction(
            mAppOpsManager.setUserRestrictionForUser(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, !allowed,
                    AppOpsManager.OP_SYSTEM_ALERT_WINDOW, !allowed, mToken);
                    mToken, null, UserHandle.USER_ALL);
            mAppOpsManager.setUserRestriction(
            mAppOpsManager.setUserRestrictionForUser(AppOpsManager.OP_TOAST_WINDOW, !allowed,
                    AppOpsManager.OP_TOAST_WINDOW, !allowed, mToken);
                    mToken, null, UserHandle.USER_ALL);
        }
        }
    }
    }
}
}
+64 −43
Original line number Original line Diff line number Diff line
@@ -16,22 +16,6 @@


package com.android.server;
package com.android.server;


import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import android.Manifest;
import android.Manifest;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ActivityThread;
@@ -42,6 +26,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManagerInternal;
import android.content.pm.UserInfo;
import android.media.AudioAttributes;
import android.media.AudioAttributes;
import android.os.AsyncTask;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Binder;
@@ -55,6 +40,7 @@ import android.os.ServiceManager;
import android.os.ShellCallback;
import android.os.ShellCallback;
import android.os.ShellCommand;
import android.os.ShellCommand;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManagerInternal;
import android.os.storage.StorageManagerInternal;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ArraySet;
@@ -66,8 +52,8 @@ import android.util.SparseIntArray;
import android.util.TimeUtils;
import android.util.TimeUtils;
import android.util.Xml;
import android.util.Xml;


import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsService;
import com.android.internal.os.Zygote;
import com.android.internal.os.Zygote;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.DumpUtils;
@@ -76,10 +62,27 @@ import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.internal.util.XmlUtils;


import libcore.util.EmptyArray;
import libcore.util.EmptyArray;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import org.xmlpull.v1.XmlSerializer;


import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class AppOpsService extends IAppOpsService.Stub {
public class AppOpsService extends IAppOpsService.Stub {
    static final String TAG = "AppOps";
    static final String TAG = "AppOps";
    static final boolean DEBUG = false;
    static final boolean DEBUG = false;
@@ -2526,16 +2529,33 @@ public class AppOpsService extends IAppOpsService.Stub {
                perUserRestrictions = new SparseArray<>();
                perUserRestrictions = new SparseArray<>();
            }
            }


            int[] users;
            if (userId == UserHandle.USER_ALL) {
                List<UserInfo> liveUsers = UserManager.get(mContext).getUsers(false);

                users = new int[liveUsers.size()];
                for (int i = 0; i < liveUsers.size(); i++) {
                    users[i] = liveUsers.get(i).id;
                }
            } else {
                users = new int[]{userId};
            }

            if (perUserRestrictions != null) {
            if (perUserRestrictions != null) {
                boolean[] userRestrictions = perUserRestrictions.get(userId);
                int numUsers = users.length;

                for (int i = 0; i < numUsers; i++) {
                    int thisUserId = users[i];

                    boolean[] userRestrictions = perUserRestrictions.get(thisUserId);
                    if (userRestrictions == null && restricted) {
                    if (userRestrictions == null && restricted) {
                        userRestrictions = new boolean[AppOpsManager._NUM_OP];
                        userRestrictions = new boolean[AppOpsManager._NUM_OP];
                    perUserRestrictions.put(userId, userRestrictions);
                        perUserRestrictions.put(thisUserId, userRestrictions);
                    }
                    }
                    if (userRestrictions != null && userRestrictions[code] != restricted) {
                    if (userRestrictions != null && userRestrictions[code] != restricted) {
                        userRestrictions[code] = restricted;
                        userRestrictions[code] = restricted;
                        if (!restricted && isDefault(userRestrictions)) {
                        if (!restricted && isDefault(userRestrictions)) {
                        perUserRestrictions.remove(userId);
                            perUserRestrictions.remove(thisUserId);
                            userRestrictions = null;
                            userRestrictions = null;
                        }
                        }
                        changed = true;
                        changed = true;
@@ -2547,19 +2567,20 @@ public class AppOpsService extends IAppOpsService.Stub {
                            perUserExcludedPackages = new SparseArray<>();
                            perUserExcludedPackages = new SparseArray<>();
                        }
                        }
                        if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
                        if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
                            perUserExcludedPackages.get(userId))) {
                                perUserExcludedPackages.get(thisUserId))) {
                            if (noExcludedPackages) {
                            if (noExcludedPackages) {
                            perUserExcludedPackages.remove(userId);
                                perUserExcludedPackages.remove(thisUserId);
                                if (perUserExcludedPackages.size() <= 0) {
                                if (perUserExcludedPackages.size() <= 0) {
                                    perUserExcludedPackages = null;
                                    perUserExcludedPackages = null;
                                }
                                }
                            } else {
                            } else {
                            perUserExcludedPackages.put(userId, excludedPackages);
                                perUserExcludedPackages.put(thisUserId, excludedPackages);
                            }
                            }
                            changed = true;
                            changed = true;
                        }
                        }
                    }
                    }
                }
                }
            }


            return changed;
            return changed;
        }
        }