Merge "Respect partition precedence while deciding overlay priority" am: 9f25e02fa3

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2310127

Change-Id: I55dfc0f2933d956f924a1017d1aa94ad04aeff5c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Dennis Song
2022-12-02 04:13:08 +00:00
committed by Automerger Merge Worker
2 changed files with 55 additions and 43 deletions

View File

@@ -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

View File

@@ -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