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

Commit 30718212 authored by Shafik Nassar's avatar Shafik Nassar Committed by Android (Google) Code Review
Browse files

Merge "Use AppOpsManager#setUidMode instead of #setMode" into rvc-dev

parents fe066eab ea6f37e1
Loading
Loading
Loading
Loading
+26 −2
Original line number Original line Diff line number Diff line
@@ -22,20 +22,25 @@ import android.content.Context;


import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState;


import java.util.List;

/**
/**
 * Retrieves information from {@link AppOpsManager} and {@link android.content.pm.PackageManager}
 * Retrieves information from {@link AppOpsManager} and {@link android.content.pm.PackageManager}
 * regarding {@link AppOpsManager#OP_MANAGE_EXTERNAL_STORAGE} and
 * regarding {@link AppOpsManager#OP_MANAGE_EXTERNAL_STORAGE} and
 * {@link Manifest.permission#MANAGE_EXTERNAL_STORAGE}.
 * {@link Manifest.permission#MANAGE_EXTERNAL_STORAGE}.
 */
 */
public class AppStateManageExternalStorageBridge extends AppStateAppOpsBridge {
public class AppStateManageExternalStorageBridge extends AppStateAppOpsBridge {
    private static final int APP_OPS_OP_CODE = AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE;
    private static final String APP_OP_STR = AppOpsManager.OPSTR_MANAGE_EXTERNAL_STORAGE;
    private static final String[] PERMISSIONS = {
    private static final String[] PERMISSIONS = {
            Manifest.permission.MANAGE_EXTERNAL_STORAGE
            Manifest.permission.MANAGE_EXTERNAL_STORAGE
    };
    };


    private final AppOpsManager mAppOpsManager;

    public AppStateManageExternalStorageBridge(Context context, ApplicationsState appState,
    public AppStateManageExternalStorageBridge(Context context, ApplicationsState appState,
            Callback callback) {
            Callback callback) {
        super(context, appState, callback, APP_OPS_OP_CODE, PERMISSIONS);
        super(context, appState, callback, AppOpsManager.strOpToOp(APP_OP_STR), PERMISSIONS);
        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
    }
    }


    @Override
    @Override
@@ -43,6 +48,25 @@ public class AppStateManageExternalStorageBridge extends AppStateAppOpsBridge {
        app.extraInfo = getManageExternalStoragePermState(pkg, uid);
        app.extraInfo = getManageExternalStoragePermState(pkg, uid);
    }
    }


    @Override
    protected void loadAllExtraInfo() {
        super.loadAllExtraInfo();
        List<ApplicationsState.AppEntry> apps = mAppSession.getAllApps();
        for (ApplicationsState.AppEntry app : apps) {
            if (app.extraInfo instanceof PermissionState) {
                ((PermissionState) app.extraInfo).appOpMode =  mAppOpsManager.unsafeCheckOpNoThrow(
                        APP_OP_STR, app.info.uid, app.info.packageName);
            }
        }
    }

    @Override
    public PermissionState getPermissionInfo(String pkg, int uid) {
        PermissionState ps = super.getPermissionInfo(pkg, uid);
        ps.appOpMode = mAppOpsManager.unsafeCheckOpNoThrow(APP_OP_STR, uid, pkg);
        return ps;
    }

    /**
    /**
     * Returns the MANAGE_EXTERNAL_STORAGE {@link AppStateAppOpsBridge.PermissionState} object
     * Returns the MANAGE_EXTERNAL_STORAGE {@link AppStateAppOpsBridge.PermissionState} object
     * associated with the given package and user.
     * associated with the given package and user.
+2 −3
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;


import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.Preference.OnPreferenceChangeListener;
@@ -110,8 +109,8 @@ public class ManageExternalStorageDetails extends AppInfoWithHeader implements
     */
     */
    private void setManageExternalStorageState(boolean newState) {
    private void setManageExternalStorageState(boolean newState) {
        logSpecialPermissionChange(newState, mPackageName);
        logSpecialPermissionChange(newState, mPackageName);
        mAppOpsManager.setMode(AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE,
        mAppOpsManager.setUidMode(AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE,
                mPackageInfo.applicationInfo.uid, mPackageName, newState
                mPackageInfo.applicationInfo.uid, newState
                        ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
                        ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
    }
    }