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

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

Merge "Couple more Scoped Directory Access changes." into pi-dev

parents 197be043 20c5eb84
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -18,12 +18,19 @@ package com.android.settings.applications;

import static android.content.pm.ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA;
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
import static android.os.storage.StorageVolume.ScopedAccessProviderContract.AUTHORITY;
import static android.os.storage.StorageVolume.ScopedAccessProviderContract.COL_GRANTED;
import static android.os.storage.StorageVolume.ScopedAccessProviderContract.TABLE_PERMISSIONS;

import static com.android.settings.applications.AppStateDirectoryAccessBridge.DEBUG;

import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.GrantedUriPermission;
import android.app.LoaderManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -32,6 +39,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -369,7 +377,7 @@ public class AppStorageSettings extends AppInfoWithHeader
        boolean res = am.clearApplicationUserData(packageName, mClearDataObserver);
        if (!res) {
            // Clearing data failed for some obscure reason. Just log error for now
            Log.i(TAG, "Couldnt clear application user data for package:" + packageName);
            Log.i(TAG, "Couldn't clear application user data for package:" + packageName);
            showDialogInner(DLG_CANNOT_CLEAR_DATA, 0);
        } else {
            mButtonsPref.setButton1Text(R.string.recompute_size);
@@ -449,10 +457,23 @@ public class AppStorageSettings extends AppInfoWithHeader
    }

    private void clearUriPermissions() {
        final Context context = getActivity();
        final String packageName = mAppEntry.info.packageName;
        // Synchronously revoke the permissions.
        final ActivityManager am = (ActivityManager) getActivity().getSystemService(
        final ActivityManager am = (ActivityManager) context.getSystemService(
                Context.ACTIVITY_SERVICE);
        am.clearGrantedUriPermissions(mAppEntry.info.packageName);
        am.clearGrantedUriPermissions(packageName);


        // Also update the Scoped Directory Access UI permissions
        final Uri providerUri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
                .authority(AUTHORITY).appendPath(TABLE_PERMISSIONS).appendPath("*")
                .build();
        Log.v(TAG, "Asking " + providerUri + " to delete permissions for " + packageName);
        final int deleted = context.getContentResolver().delete(providerUri, null, new String[] {
                packageName
        });
        Log.d(TAG, "Deleted " + deleted + " entries for package " + packageName);

        // Update UI
        refreshGrantedUriPermissions();
+20 −13
Original line number Diff line number Diff line
@@ -121,9 +121,15 @@ public class DirectoryAccessDetails extends AppInfoBase {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final Context context = getPrefContext();
        addPreferencesFromResource(R.xml.directory_access_details);

    }

    @Override
    protected boolean refreshUi() {
        final Context context = getPrefContext();
        final PreferenceScreen prefsGroup = getPreferenceScreen();
        prefsGroup.removeAll();

        final Map<String, ExternalVolume> externalVolumes = new HashMap<>();

@@ -135,14 +141,14 @@ public class DirectoryAccessDetails extends AppInfoBase {
                TABLE_PERMISSIONS_COLUMNS, null, new String[] { mPackageName }, null)) {
            if (cursor == null) {
                Log.w(TAG, "Didn't get cursor for " + mPackageName);
                return;
                return true;
            }
            final int count = cursor.getCount();
            if (count == 0) {
                // This setting screen should not be reached if there was no permission, so just
                // ignore it
                Log.w(TAG, "No permissions for " + mPackageName);
                return;
                return true;
            }

            while (cursor.moveToNext()) {
@@ -163,9 +169,14 @@ public class DirectoryAccessDetails extends AppInfoBase {
                }

                if (uuid == null) {
                    if (dir == null) {
                        // Sanity check, shouldn't happen
                        Log.wtf(TAG, "Ignoring permission on primary storage root");
                    } else {
                        // Primary storage entry: add right away
                        prefsGroup.addPreference(newPreference(context, dir, providerUri,
                                /* uuid= */ null, dir, granted, /* children= */ null));
                    }
                } else {
                    // External volume entry: save it for later.
                    ExternalVolume externalVolume = externalVolumes.get(uuid);
@@ -190,7 +201,7 @@ public class DirectoryAccessDetails extends AppInfoBase {

        if (externalVolumes.isEmpty()) {
            // We're done!
            return;
            return true;
        }

        // Add entries from external volumes
@@ -200,7 +211,7 @@ public class DirectoryAccessDetails extends AppInfoBase {
        final List<VolumeInfo> volumes = sm.getVolumes();
        if (volumes.isEmpty()) {
            Log.w(TAG, "StorageManager returned no secondary volumes");
            return;
            return true;
        }
        final Map<String, String> volumeNames = new HashMap<>(volumes.size());
        for (VolumeInfo volume : volumes) {
@@ -243,6 +254,7 @@ public class DirectoryAccessDetails extends AppInfoBase {
                children.add(childPref);
            });
        }
        return true;
    }

    private SwitchPreference newPreference(Context context, String title, Uri providerUri,
@@ -287,11 +299,6 @@ public class DirectoryAccessDetails extends AppInfoBase {
        }
    }

    @Override
    protected boolean refreshUi() {
        return true;
    }

    @Override
    protected AlertDialog createDialog(int id, int errorCode) {
        return null;