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

Commit 9f25e02f authored by Dennis Song's avatar Dennis Song Committed by Gerrit Code Review
Browse files

Merge "Respect partition precedence while deciding overlay priority"

parents e9caae60 040471fb
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -140,7 +140,6 @@ public class OverlayConfig {

        ArrayMap<Integer, List<String>> activeApexesPerPartition = getActiveApexes(partitions);

        boolean foundConfigFile = false;
        final Map<String, ParsedOverlayInfo> packageManagerOverlayInfos =
                packageProvider == null ? null : getOverlayPackageInfos(packageProvider);

@@ -154,7 +153,6 @@ public class OverlayConfig {
                            activeApexesPerPartition.getOrDefault(partition.type,
                                    Collections.emptyList()));
            if (partitionOverlays != null) {
                foundConfigFile = true;
                overlays.addAll(partitionOverlays);
                continue;
            }
@@ -191,12 +189,6 @@ public class OverlayConfig {
            overlays.addAll(partitionConfigs);
        }

        if (!foundConfigFile) {
            // If no overlay configuration files exist, disregard partition precedence and allow
            // android:priority to reorder overlays across partition boundaries.
            overlays.sort(sStaticOverlayComparator);
        }

        for (int i = 0, n = overlays.size(); i < n; i++) {
            // Add the configurations to a map so definitions of an overlay in an earlier
            // partition can be replaced by an overlay with the same package name in a later
+55 −35
Original line number Diff line number Diff line
@@ -285,6 +285,39 @@ public class OverlayConfigTest {
        assertConfig(overlayConfig, "five", true, true, 4);
    }

    @Test
    public void testPartialConfigPartitionPrecedence() throws IOException {
        createFile("/odm/overlay/config/config.xml",
                "<config>"
                        + "  <overlay package=\"two\" enabled=\"true\" />"
                        + "</config>");

        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                1);
        mScannerRule.addOverlay(createFile("/odm/overlay/two.apk"), "two");
        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 0,
                true, 0);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 0);
        assertConfig(overlayConfig, "two", true, true, 1);
        assertConfig(overlayConfig, "three", false, true, 2);
    }

    @Test
    public void testNoConfigPartitionPrecedence() throws IOException {
        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                1);
        mScannerRule.addOverlay(createFile("/odm/overlay/two.apk"), "two", "android", 0, true, 2);
        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 0,
                true, 0);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 0);
        assertConfig(overlayConfig, "two", false, true, 1);
        assertConfig(overlayConfig, "three", false, true, 2);
    }

    @Test
    public void testImmutable() throws IOException {
        createFile("/product/overlay/config/config.xml",
@@ -506,37 +539,6 @@ public class OverlayConfigTest {
        assertConfig(overlayConfig, "two", false, true, 1);
    }

    @Test
    public void testNoConfigsAllowPartitionReordering() throws IOException {
        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                1);
        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
                0);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 1);
        assertConfig(overlayConfig, "two", false, true, 0);
    }

    @Test
    public void testConfigDisablesPartitionReordering() throws IOException {
        createFile("/odm/overlay/config/config.xml",
                "<config>"
                        + "  <overlay package=\"two\" enabled=\"true\" />"
                        + "</config>");

        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                1);
        mScannerRule.addOverlay(createFile("/odm/overlay/two.apk"), "two");
        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 0,
                true, 0);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 0);
        assertConfig(overlayConfig, "two", true, true, 1);
        assertConfig(overlayConfig, "three", false, true, 2);
    }

    @Test
    public void testStaticOverlayOutsideOverlayDir() throws IOException {
        mScannerRule.addOverlay(createFile("/product/app/one.apk"), "one", "android", 0, true, 0);
@@ -550,7 +552,7 @@ public class OverlayConfigTest {
    @Test
    public void testSortStaticOverlaysDifferentTargets() throws IOException {
        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "other", 0, true, 0);
        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
        mScannerRule.addOverlay(createFile("/vendor/overlay/two.apk"), "two", "android", 0, true,
                0);

        final OverlayConfig overlayConfig = createConfigImpl();
@@ -558,16 +560,34 @@ public class OverlayConfigTest {
        assertConfig(overlayConfig, "two", false, true, 0);
    }

    @Test
    public void testSortStaticOverlaysDifferentPartitions() throws IOException {
        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                2);
        mScannerRule.addOverlay(createFile("/vendor/overlay/two.apk"), "two", "android", 0, true,
                3);
        mScannerRule.addOverlay(createFile("/product/overlay/three.apk"), "three", "android", 0,
                true, 0);
        mScannerRule.addOverlay(createFile("/product/overlay/four.apk"), "four", "android", 0,
                true, 1);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 0);
        assertConfig(overlayConfig, "two", false, true, 1);
        assertConfig(overlayConfig, "three", false, true, 2);
        assertConfig(overlayConfig, "four", false, true, 3);
    }

    @Test
    public void testSortStaticOverlaysSamePriority() throws IOException {
        mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
                0);
        mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
        mScannerRule.addOverlay(createFile("/vendor/overlay/two.apk"), "two", "android", 0, true,
                0);

        final OverlayConfig overlayConfig = createConfigImpl();
        assertConfig(overlayConfig, "one", false, true, 1);
        assertConfig(overlayConfig, "two", false, true, 0);
        assertConfig(overlayConfig, "one", false, true, 0);
        assertConfig(overlayConfig, "two", false, true, 1);
    }

    @Test