diff options
author | Jeff Sharkey <jsharkey@android.com> | 2012-03-23 17:09:13 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-23 17:09:13 -0700 |
commit | 0c44525a4888de321c9497204d59c8515f828499 (patch) | |
tree | 803e2428161f7285ec06e601fb82e65535ce214d /core/java/android | |
parent | 2cd24ecf61e374d8b9feafec78ccefb5d3ae647e (diff) | |
parent | 678d04f1b6d189b2d867d518065f90dce7292863 (diff) | |
download | frameworks_base-0c44525a4888de321c9497204d59c8515f828499.zip frameworks_base-0c44525a4888de321c9497204d59c8515f828499.tar.gz frameworks_base-0c44525a4888de321c9497204d59c8515f828499.tar.bz2 |
Merge "Copy EXTRA_STREAM into ClipData and grant."
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/app/Instrumentation.java | 2 | ||||
-rw-r--r-- | core/java/android/content/Intent.java | 42 | ||||
-rw-r--r-- | core/java/android/os/Bundle.java | 7 |
3 files changed, 51 insertions, 0 deletions
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 16299de..e4f7950 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1381,6 +1381,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); + intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), @@ -1479,6 +1480,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); + intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), 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); + } + } + } } diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index 28206b7..51cb91c 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -226,6 +226,13 @@ public final class Bundle implements Parcelable, Cloneable { } /** + * @hide + */ + public boolean isParcelled() { + return mParcelledData != null; + } + + /** * Returns the number of mappings contained in this Bundle. * * @return the number of mappings as an int. |