Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d93dc54 authored by Yisroel Forta's avatar Yisroel Forta Committed by Android (Google) Code Review
Browse files

Merge "Add package to Intent#saveToXml" into main

parents cd41110b e78d9d2e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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);
            }
+11 −1
Original line number Diff line number Diff line
@@ -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
     }
}
+44 −0
Original line number Diff line number Diff line
@@ -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));
    }

}