diff options
-rw-r--r-- | core/java/android/content/Intent.java | 7 | ||||
-rw-r--r-- | core/java/android/content/flags/flags.aconfig | 12 | ||||
-rw-r--r-- | core/tests/coretests/src/android/content/IntentTest.java | 44 |
3 files changed, 62 insertions, 1 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index bb62ac321202..a253613e060c 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -680,6 +680,7 @@ public class Intent implements Parcelable, Cloneable { private static final String ATTR_COMPONENT = "component"; private static final String ATTR_DATA = "data"; private static final String ATTR_FLAGS = "flags"; + private static final String ATTR_PACKAGE = "package"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- @@ -12893,6 +12894,9 @@ public class Intent implements Parcelable, Cloneable { if (mComponent != null) { out.attribute(null, ATTR_COMPONENT, mComponent.flattenToShortString()); } + if (android.content.flags.Flags.intentSaveToXmlPackage() && mPackage != null) { + out.attribute(null, ATTR_PACKAGE, mPackage); + } out.attribute(null, ATTR_FLAGS, Integer.toHexString(getFlags())); if (mCategories != null) { @@ -12926,6 +12930,9 @@ public class Intent implements Parcelable, Cloneable { intent.setComponent(ComponentName.unflattenFromString(attrValue)); } else if (ATTR_FLAGS.equals(attrName)) { intent.setFlags(Integer.parseInt(attrValue, 16)); + } else if (android.content.flags.Flags.intentSaveToXmlPackage() + && ATTR_PACKAGE.equals(attrName)) { + intent.setPackage(attrValue); } else { Log.e(TAG, "restoreFromXml: unknown attribute=" + attrName); } diff --git a/core/java/android/content/flags/flags.aconfig b/core/java/android/content/flags/flags.aconfig index aac04b3a9d15..148532b62c36 100644 --- a/core/java/android/content/flags/flags.aconfig +++ b/core/java/android/content/flags/flags.aconfig @@ -7,4 +7,14 @@ flag { namespace: "machine_learning" description: "This flag enables the newly added flag for binding package-private isolated processes." bug: "312706530" -}
\ No newline at end of file +} + +flag { + namespace: "system_performance" + name: "intent_save_to_xml_package" + description: "Add package to saveToXml so save then restore passes filterEquals." + bug: "369856202" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/core/tests/coretests/src/android/content/IntentTest.java b/core/tests/coretests/src/android/content/IntentTest.java index fa1948d9786c..1dbe7f5f245b 100644 --- a/core/tests/coretests/src/android/content/IntentTest.java +++ b/core/tests/coretests/src/android/content/IntentTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; @@ -32,14 +33,21 @@ import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.security.Flags; import android.util.ArraySet; +import android.util.Xml; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import com.android.internal.util.XmlUtils; +import com.android.modules.utils.TypedXmlPullParser; +import com.android.modules.utils.TypedXmlSerializer; + import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -277,4 +285,40 @@ public class IntentTest { assertThat(b2.getBundle("bundle").getClassLoader()).isEqualTo(cl); } + @Test + @RequiresFlagsEnabled(android.content.flags.Flags.FLAG_INTENT_SAVE_TO_XML_PACKAGE) + public void testSaveToXmlAndRestore() throws Exception { + // Create an intent and set fields. + Intent original = new Intent(); + original.setAction(Intent.ACTION_MAIN); + original.setComponent(ComponentName.createRelative("com.intent.test", "IntentTest")); + original.setData(Uri.parse("content://path/to/file.txt")); + original.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + original.setIdentifier("unique_identifier"); + original.setPackage("com.intent.test"); + original.addCategory(Intent.CATEGORY_LAUNCHER); + original.putExtra("Name", "Some really important data"); + + String tag = "intent"; + + // Write to xml. + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + TypedXmlSerializer serializer = Xml.resolveSerializer(byteArrayOutputStream); + serializer.startDocument(null, true); + serializer.startTag(null, tag); + original.saveToXml(serializer); + serializer.endTag(null, tag); + serializer.endDocument(); + + // Restore from xml. + ByteArrayInputStream byteArrayInputStream = + new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); + TypedXmlPullParser parser = Xml.resolvePullParser(byteArrayInputStream); + XmlUtils.beginDocument(parser, tag); + Intent restored = Intent.restoreFromXml(parser); + + // Verify that the restored intent passed filterEquals on the original. + assertTrue(original.filterEquals(restored)); + } + } |