Loading core/java/android/content/Intent.java +7 −0 Original line number Diff line number Diff line Loading @@ -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"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- Loading Loading @@ -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) { Loading Loading @@ -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); } core/java/android/content/flags/flags.aconfig +11 −1 Original line number Diff line number Diff line Loading @@ -8,3 +8,13 @@ flag { description: "This flag enables the newly added flag for binding package-private isolated processes." bug: "312706530" } 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 } } core/tests/coretests/src/android/content/IntentTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } } Loading
core/java/android/content/Intent.java +7 −0 Original line number Diff line number Diff line Loading @@ -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"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- Loading Loading @@ -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) { Loading Loading @@ -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); }
core/java/android/content/flags/flags.aconfig +11 −1 Original line number Diff line number Diff line Loading @@ -8,3 +8,13 @@ flag { description: "This flag enables the newly added flag for binding package-private isolated processes." bug: "312706530" } 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 } }
core/tests/coretests/src/android/content/IntentTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } }