diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2012-03-23 15:41:58 -0700 |
|---|---|---|
| committer | Jeff Sharkey <jsharkey@android.com> | 2012-03-23 15:45:37 -0700 |
| commit | 678d04f1b6d189b2d867d518065f90dce7292863 (patch) | |
| tree | 6b415140a2f2ea50648d0081a44e8a5a8853021f /core/java/android/content/Intent.java | |
| parent | b9a070189c2280a6356a8abb9483b517a41e14c3 (diff) | |
| download | frameworks_base-678d04f1b6d189b2d867d518065f90dce7292863.zip frameworks_base-678d04f1b6d189b2d867d518065f90dce7292863.tar.gz frameworks_base-678d04f1b6d189b2d867d518065f90dce7292863.tar.bz2 | |
Copy EXTRA_STREAM into ClipData and grant.
When sending SEND or SEND_MULTIPLE intents, copy any EXTRA_STREAM
Uris to ClipData and set GRANT_READ_URI_PERMISSION flag.
Bug: 6216357
Change-Id: I3c9b0d1d4b7e0c4655b47c4192150b0c3641e0e8
Diffstat (limited to 'core/java/android/content/Intent.java')
| -rw-r--r-- | core/java/android/content/Intent.java | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 6cf5b43..1c9ef38 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -6467,4 +6467,46 @@ public class Intent implements Parcelable, Cloneable { } return type; } + + /** + * Migrate any {@link #EXTRA_STREAM} in {@link #ACTION_SEND} and + * {@link #ACTION_SEND_MULTIPLE} to {@link ClipData}. + * + * @hide + */ + public void migrateExtraStreamToClipData() { + // Refuse to touch if extras already parcelled + if (mExtras != null && mExtras.isParcelled()) return; + + // Bail when someone already gave us ClipData + if (getClipData() != null) return; + + final String action = getAction(); + if (ACTION_SEND.equals(action)) { + final Uri stream = getParcelableExtra(EXTRA_STREAM); + if (stream != null) { + final ClipData clipData = new ClipData( + null, new String[] { getType() }, new ClipData.Item(stream)); + + setClipData(clipData); + addFlags(FLAG_GRANT_READ_URI_PERMISSION); + } + + } else if (ACTION_SEND_MULTIPLE.equals(action)) { + final ArrayList<Uri> streams = getParcelableArrayListExtra(EXTRA_STREAM); + if (streams != null && streams.size() > 0) { + final Uri firstStream = streams.get(0); + final ClipData clipData = new ClipData( + null, new String[] { getType() }, new ClipData.Item(firstStream)); + + final int size = streams.size(); + for (int i = 1; i < size; i++) { + clipData.addItem(new ClipData.Item(streams.get(i))); + } + + setClipData(clipData); + addFlags(FLAG_GRANT_READ_URI_PERMISSION); + } + } + } } |
