diff --git a/core/java/android/app/IUriGrantsManager.aidl b/core/java/android/app/IUriGrantsManager.aidl index 928c627d3f46a..9e7f2fecfea02 100644 --- a/core/java/android/app/IUriGrantsManager.aidl +++ b/core/java/android/app/IUriGrantsManager.aidl @@ -31,11 +31,12 @@ interface IUriGrantsManager { in Uri uri, int mode, int sourceUserId, int targetUserId); /** * Gets the URI permissions granted to an arbitrary package (or all packages if null) - * NOTE: this is different from getPersistedUriPermissions(), which returns the URIs the package + * NOTE: this is different from getUriPermissions(), which returns the URIs the package * granted to another packages (instead of those granted to it). */ ParceledListSlice getGrantedUriPermissions(in String packageName, int userId); /** Clears the URI permissions granted to an arbitrary package. */ void clearGrantedUriPermissions(in String packageName, int userId); - ParceledListSlice getPersistedUriPermissions(in String packageName, boolean incoming); + ParceledListSlice getUriPermissions(in String packageName, boolean incoming, + boolean persistedOnly); } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 2c5860ac87755..0a1bc85202ff0 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -2482,8 +2482,8 @@ public void releasePersistableUriPermission(@NonNull Uri uri, */ public @NonNull List getPersistedUriPermissions() { try { - return UriGrantsManager.getService() - .getPersistedUriPermissions(mPackageName, true).getList(); + return UriGrantsManager.getService().getUriPermissions( + mPackageName, true /* incoming */, true /* persistedOnly */).getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -2498,8 +2498,18 @@ public void releasePersistableUriPermission(@NonNull Uri uri, */ public @NonNull List getOutgoingPersistedUriPermissions() { try { - return UriGrantsManager.getService() - .getPersistedUriPermissions(mPackageName, false).getList(); + return UriGrantsManager.getService().getUriPermissions( + mPackageName, false /* incoming */, true /* persistedOnly */).getList(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** @hide */ + public @NonNull List getOutgoingUriPermissions() { + try { + return UriGrantsManager.getService().getUriPermissions( + mPackageName, false /* incoming */, false /* persistedOnly */).getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index d507447c45fa7..9a384c6d9d798 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -849,6 +849,8 @@ public static class RequestHeaders { public static final String CALL_MEDIASTORE_DOWNLOADS_DELETED = "mediastore_downloads_deleted"; /** @hide */ public static final String CALL_CREATE_EXTERNAL_PUBLIC_DIR = "create_external_public_dir"; + /** @hide */ + public static final String CALL_REVOKE_MEDIASTORE_URI_PERMS = "revoke_mediastore_uri_perms"; /** @hide */ public static final String EXTRA_IDS = "ids"; diff --git a/services/art-profile b/services/art-profile index cf0f13cec21b1..a9d5982d0d90e 100644 --- a/services/art-profile +++ b/services/art-profile @@ -13532,7 +13532,7 @@ HSPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissionsInte HSPLcom/android/server/uri/UriGrantsManagerService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z HSPLcom/android/server/uri/UriGrantsManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V HSPLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermission(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission; -PLcom/android/server/uri/UriGrantsManagerService;->getPersistedUriPermissions(Ljava/lang/String;Z)Landroid/content/pm/ParceledListSlice; +PLcom/android/server/uri/UriGrantsManagerService;->getPersistedUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice; HSPLcom/android/server/uri/UriGrantsManagerService;->getProviderInfo(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo; HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java index 332df956d0fb6..8b332d271a3a0 100644 --- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java +++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java @@ -211,9 +211,9 @@ public void grantUriPermissionFromOwner(IBinder token, int fromUid, String targe } @Override - public ParceledListSlice getPersistedUriPermissions( - String packageName, boolean incoming) { - enforceNotIsolatedCaller("getPersistedUriPermissions"); + public ParceledListSlice getUriPermissions( + String packageName, boolean incoming, boolean persistedOnly) { + enforceNotIsolatedCaller("getUriPermissions"); Preconditions.checkNotNull(packageName, "packageName"); final int callingUid = Binder.getCallingUid(); @@ -240,7 +240,8 @@ public ParceledListSlice getPersistedUriPermissio } else { for (int j = 0; j < perms.size(); j++) { final UriPermission perm = perms.valueAt(j); - if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) { + if (packageName.equals(perm.targetPkg) + && (!persistedOnly || perm.persistedModeFlags != 0)) { result.add(perm.buildPersistedPublicApiObject()); } } @@ -252,7 +253,8 @@ public ParceledListSlice getPersistedUriPermissio mGrantedUriPermissions.valueAt(i); for (int j = 0; j < perms.size(); j++) { final UriPermission perm = perms.valueAt(j); - if (packageName.equals(perm.sourcePkg) && perm.persistedModeFlags != 0) { + if (packageName.equals(perm.sourcePkg) + && (!persistedOnly || perm.persistedModeFlags != 0)) { result.add(perm.buildPersistedPublicApiObject()); } }