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

Commit 5b2c66e4 authored by Billy Lau's avatar Billy Lau Committed by Android Git Automerger
Browse files

am a59f39fc: Merge "Bug: 21588539 Move CHANGE_NETWORK_STATE to be in SYSTEM_SETTINGS" into mnc-dev

* commit 'a59f39fc':
  Bug: 21588539 Move CHANGE_NETWORK_STATE to be in SYSTEM_SETTINGS
parents 7a3a4533 a59f39fc
Loading
Loading
Loading
Loading
+26 −8
Original line number Diff line number Diff line
@@ -34,8 +34,11 @@ import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/*
 * Connects app ops info to the ApplicationsState. Makes use of AppOpsManager to
@@ -54,7 +57,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
    private final String[] mPermissions;

    public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
            int appOpsOpCode, String permissionName) {
            int appOpsOpCode, String[] permissions) {
        super(appState, callback);
        mContext = context;
        mIPackageManager = AppGlobals.getPackageManager();
@@ -62,7 +65,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
        mProfiles = mUserManager.getUserProfiles();
        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        mAppOpsOpCodes = new int[] {appOpsOpCode};
        mPermissions = new String[] {permissionName};
        mPermissions = permissions;
    }

    private boolean isThisUserAProfileOfCurrentUser(final int userId) {
@@ -77,6 +80,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {

    protected abstract void updateExtraInfo(AppEntry app, String pkg, int uid);

    private boolean doesAnyPermissionMatch(String permissionToMatch, String[] permissions) {
        for (String permission : permissions) {
            if (permissionToMatch.equals(permission)) {
                return true;
            }
        }
        return false;
    }

    public PermissionState getPermissionInfo(String pkg, int uid) {
        PermissionState permissionState = new PermissionState(pkg, new UserHandle(UserHandle
                .getUserId(uid)));
@@ -88,7 +100,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
            int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags;
            if (requestedPermissions != null) {
                for (int i = 0; i < requestedPermissions.length; i++) {
                    if (mPermissions[0].equals(requestedPermissions[i])) {
                    if (doesAnyPermissionMatch(requestedPermissions[i], mPermissions)) {
                        permissionState.permissionDeclared = true;
                        if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
                            permissionState.staticPermissionGranted = true;
@@ -133,9 +145,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
     */
    private SparseArray<ArrayMap<String, PermissionState>> getEntries() {
        try {
            final String[] packages = mIPackageManager.getAppOpPermissionPackages(mPermissions[0]);
            Set<String> packagesSet = new HashSet<>();
            for (String permission : mPermissions) {
                String[] pkgs = mIPackageManager.getAppOpPermissionPackages(permission);
                if (pkgs != null) {
                    packagesSet.addAll(Arrays.asList(pkgs));
                }
            }

            if (packages == null) {
            if (packagesSet.isEmpty()) {
                // No packages are requesting permission as specified by mPermissions.
                return null;
            }
@@ -147,7 +165,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
                final ArrayMap<String, PermissionState> entriesForProfile = new ArrayMap<>();
                final int profileId = profile.getIdentifier();
                entries.put(profileId, entriesForProfile);
                for (final String packageName : packages) {
                for (final String packageName : packagesSet) {
                    final boolean isAvailable = mIPackageManager.isPackageAvailable(packageName,
                            profileId);
                    if (!shouldIgnorePackage(packageName) && isAvailable) {
@@ -193,7 +211,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
            }
        } catch (RemoteException e) {
            Log.w(TAG, "PackageManager is dead. Can't get list of packages granted "
                    + mPermissions[0], e);
                    + mPermissions, e);
            return;
        }
    }
@@ -223,7 +241,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
            if (pe == null) {
                Log.w(TAG, "AppOp permission exists for package " + packageOp.getPackageName()
                        + " of user " + userId + " but package doesn't exist or did not request "
                        + mPermissions[0] + " access");
                        + mPermissions + " access");
                continue;
            }

+4 −1
Original line number Diff line number Diff line
@@ -34,9 +34,12 @@ public class AppStateOverlayBridge extends AppStateAppOpsBridge {
    private static final String TAG = "AppStateOverlayBridge";
    private static final int APP_OPS_OP_CODE = AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
    private static final String PM_SYSTEM_ALERT_WINDOW = Manifest.permission.SYSTEM_ALERT_WINDOW;
    private static final String[] PM_PERMISSION = {
            PM_SYSTEM_ALERT_WINDOW
    };

    public AppStateOverlayBridge(Context context, ApplicationsState appState, Callback callback) {
        super(context, appState, callback, APP_OPS_OP_CODE, PM_SYSTEM_ALERT_WINDOW);
        super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION);
    }

    @Override
+4 −1
Original line number Diff line number Diff line
@@ -35,9 +35,12 @@ public class AppStateUsageBridge extends AppStateAppOpsBridge {

    private static final String PM_USAGE_STATS = Manifest.permission.PACKAGE_USAGE_STATS;
    private static final int APP_OPS_OP_CODE = AppOpsManager.OP_GET_USAGE_STATS;
    private static final String[] PM_PERMISSION = {
            PM_USAGE_STATS
    };

    public AppStateUsageBridge(Context context, ApplicationsState appState, Callback callback) {
        super(context, appState, callback, APP_OPS_OP_CODE, PM_USAGE_STATS);
        super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION);
    }

    @Override
+7 −1
Original line number Diff line number Diff line
@@ -34,10 +34,16 @@ public class AppStateWriteSettingsBridge extends AppStateAppOpsBridge {
    private static final String TAG = "AppStateWriteSettingsBridge";
    private static final int APP_OPS_OP_CODE = AppOpsManager.OP_WRITE_SETTINGS;
    private static final String PM_WRITE_SETTINGS = Manifest.permission.WRITE_SETTINGS;
    private static final String PM_CHANGE_NETWORK_STATE = Manifest.permission.CHANGE_NETWORK_STATE;
    // CHANGE_NETWORK_STATE is now merged with WRITE_SETTINGS
    private static final String[] PM_PERMISSIONS = {
            PM_WRITE_SETTINGS,
            PM_CHANGE_NETWORK_STATE
    };

    public AppStateWriteSettingsBridge(Context context, ApplicationsState appState, Callback
            callback) {
        super(context, appState, callback, APP_OPS_OP_CODE, PM_WRITE_SETTINGS);
        super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSIONS);
    }

    @Override