summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/Intent.java7
-rw-r--r--core/java/android/content/flags/flags.aconfig12
-rw-r--r--core/tests/coretests/src/android/content/IntentTest.java44
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));
+ }
+
}