Loading core/java/android/app/Instrumentation.java +2 −0 Original line number Diff line number Diff line Loading @@ -1381,6 +1381,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), Loading Loading @@ -1479,6 +1480,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), Loading core/java/android/content/Intent.java +42 −0 Original line number Diff line number Diff line Loading @@ -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); } } } } core/java/android/os/Bundle.java +7 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,13 @@ public final class Bundle implements Parcelable, Cloneable { mParcelledData = null; } /** * @hide */ public boolean isParcelled() { return mParcelledData != null; } /** * Returns the number of mappings contained in this Bundle. * Loading Loading
core/java/android/app/Instrumentation.java +2 −0 Original line number Diff line number Diff line Loading @@ -1381,6 +1381,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), Loading Loading @@ -1479,6 +1480,7 @@ public class Instrumentation { } try { intent.setAllowFds(false); intent.migrateExtraStreamToClipData(); int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), Loading
core/java/android/content/Intent.java +42 −0 Original line number Diff line number Diff line Loading @@ -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); } } } }
core/java/android/os/Bundle.java +7 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,13 @@ public final class Bundle implements Parcelable, Cloneable { mParcelledData = null; } /** * @hide */ public boolean isParcelled() { return mParcelledData != null; } /** * Returns the number of mappings contained in this Bundle. * Loading