diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2013-10-09 14:21:08 -0700 |
|---|---|---|
| committer | Jeff Sharkey <jsharkey@android.com> | 2013-10-09 14:32:11 -0700 |
| commit | bcaac0adecc8f9d7e66548df39e0f5c9f759e38c (patch) | |
| tree | 439ac9eadc1d7f256d75c8d5807bf4f711d4dd01 /core/java/android | |
| parent | e6d419de77344300e342c8a0f6c013afeec87a72 (diff) | |
Surface outgoing Uri permission grants.
This enables apps to discover and clean up persisted Uri grants when
the underlying Uri becomes invalid, such as when an account is
removed.
Bug: 11142566
Change-Id: Ieeb36cb1155acf226327ebe91cdd30b822d69d1b
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 10 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 3 | ||||
| -rw-r--r-- | core/java/android/content/ContentResolver.java | 23 |
3 files changed, 30 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 961ee5768b94..74266ccf58a2 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1160,7 +1160,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case GET_PERSISTED_URI_PERMISSIONS_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); - final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions(); + final String packageName = data.readString(); + final boolean incoming = data.readInt() != 0; + final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions( + packageName, incoming); reply.writeNoException(); perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); return true; @@ -3500,10 +3503,13 @@ class ActivityManagerProxy implements IActivityManager } @Override - public ParceledListSlice<UriPermission> getPersistedUriPermissions() throws RemoteException { + public ParceledListSlice<UriPermission> getPersistedUriPermissions( + String packageName, boolean incoming) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(packageName); + data.writeInt(incoming ? 1 : 0); mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0); reply.readException(); final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel( diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index dfea73671dc3..77c2ea0c1694 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -215,7 +215,8 @@ public interface IActivityManager extends IInterface { int mode) throws RemoteException; public void takePersistableUriPermission(Uri uri, int modeFlags) throws RemoteException; public void releasePersistableUriPermission(Uri uri, int modeFlags) throws RemoteException; - public ParceledListSlice<UriPermission> getPersistedUriPermissions() throws RemoteException; + public ParceledListSlice<UriPermission> getPersistedUriPermissions( + String packageName, boolean incoming) throws RemoteException; public void showWaitingForDebugger(IApplicationThread who, boolean waiting) throws RemoteException; diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 916a6cd762b0..49dfdb5ef29d 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -1659,8 +1659,9 @@ public abstract class ContentResolver { } /** - * Return list of all Uri permission grants that have been persisted for the - * calling app. Only persistable grants taken with + * Return list of all Uri permission grants that have been persisted by the + * calling app. That is, the returned permissions have been granted + * <em>to</em> the calling app. Only persistable grants taken with * {@link #takePersistableUriPermission(Uri, int)} are returned. * * @see #takePersistableUriPermission(Uri, int) @@ -1668,7 +1669,23 @@ public abstract class ContentResolver { */ public List<UriPermission> getPersistedUriPermissions() { try { - return ActivityManagerNative.getDefault().getPersistedUriPermissions().getList(); + return ActivityManagerNative.getDefault() + .getPersistedUriPermissions(mPackageName, true).getList(); + } catch (RemoteException e) { + throw new RuntimeException("Activity manager has died", e); + } + } + + /** + * Return list of all persisted Uri permission grants that are hosted by the + * calling app. That is, the returned permissions have been granted + * <em>from</em> the calling app. Only grants taken with + * {@link #takePersistableUriPermission(Uri, int)} are returned. + */ + public List<UriPermission> getOutgoingPersistedUriPermissions() { + try { + return ActivityManagerNative.getDefault() + .getPersistedUriPermissions(mPackageName, false).getList(); } catch (RemoteException e) { throw new RuntimeException("Activity manager has died", e); } |
