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

Commit d8c6a3cd authored by Felipe Leme's avatar Felipe Leme
Browse files

Removed AMS.updatePersistableUriPermission()

Bug: 72055774

Test: manual verification
Test: atest CtsAppSecurityHostTestCases:ScopedDirectoryAccessTest#testResetDoNotAskAgain,testResetGranted
Test: atest CtsAppSecurityHostTestCases:ScopedDirectoryAccessTest

Change-Id: Ia84f10ba617729bd933e078edf1bb69d383bb18e
parent 2cd09b3d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
        package="com.android.documentsui">

    <uses-permission android:name="android.permission.GET_APP_GRANTED_URI_PERMISSIONS" />
    <uses-permission android:name="android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS" />
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
    <uses-permission android:name="android.permission.REMOVE_TASKS" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
        package="com.android.documentsui">

    <uses-permission android:name="android.permission.GET_APP_GRANTED_URI_PERMISSIONS" />
    <uses-permission android:name="android.permission.FORCE_PERSISTABLE_URI_PERMISSIONS" />
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
    <uses-permission android:name="android.permission.CACHE_CONTENT" />

+22 −8
Original line number Diff line number Diff line
@@ -44,8 +44,10 @@ import android.app.ActivityManager;
import android.app.GrantedUriPermission;
import android.content.ContentProvider;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.MatrixCursor;
@@ -446,17 +448,29 @@ public class ScopedAccessProvider extends ContentProvider {
        return getUriPermission(context, storageClient, volume, getInternalDirectoryName(directory),
                UserHandle.getCallingUserId(), /* logMetrics= */ false,
                (file, volumeLabel, isRoot, isPrimary, grantedUri, rootUri) -> {
                    final ActivityManager am = context.getSystemService(ActivityManager.class);
                    final boolean updated = am.updatePersistableUriPermission(grantedUri, true,
                            packageName, granted);
                    if (!updated) {
                        Log.w(TAG, "failed to update URI " + grantedUri + " for " + packageName
                                + " to " + granted);
                    }
                    return updated;
                    updatePermission(context, grantedUri, packageName, granted);
                    return true;
                });
    }

    private void updatePermission(Context context, Uri grantedUri, String toPackage,
            boolean granted) {
        final int persistFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
        final int grantFlags = persistFlags
                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
                | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION;

        final ContentResolver cr = context.getContentResolver();
        if (granted) {
            context.grantUriPermission(toPackage, grantedUri, grantFlags);
            cr.takePersistableUriPermission(toPackage, grantedUri, persistFlags);
        } else {
            context.revokeUriPermission(grantedUri, grantFlags);
            cr.releasePersistableUriPermission(toPackage, grantedUri, persistFlags);
        }
    }

    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        final String prefix = "  ";