Loading AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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"/> Loading minimal/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading src/com/android/documentsui/ScopedAccessProvider.java +22 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = " "; Loading Loading
AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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"/> Loading
minimal/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
src/com/android/documentsui/ScopedAccessProvider.java +22 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = " "; Loading