Merge "Respect partition precedence while deciding overlay priority"
This commit is contained in:
@@ -140,7 +140,6 @@ public class OverlayConfig {
|
|||||||
|
|
||||||
ArrayMap<Integer, List<String>> activeApexesPerPartition = getActiveApexes(partitions);
|
ArrayMap<Integer, List<String>> activeApexesPerPartition = getActiveApexes(partitions);
|
||||||
|
|
||||||
boolean foundConfigFile = false;
|
|
||||||
final Map<String, ParsedOverlayInfo> packageManagerOverlayInfos =
|
final Map<String, ParsedOverlayInfo> packageManagerOverlayInfos =
|
||||||
packageProvider == null ? null : getOverlayPackageInfos(packageProvider);
|
packageProvider == null ? null : getOverlayPackageInfos(packageProvider);
|
||||||
|
|
||||||
@@ -154,7 +153,6 @@ public class OverlayConfig {
|
|||||||
activeApexesPerPartition.getOrDefault(partition.type,
|
activeApexesPerPartition.getOrDefault(partition.type,
|
||||||
Collections.emptyList()));
|
Collections.emptyList()));
|
||||||
if (partitionOverlays != null) {
|
if (partitionOverlays != null) {
|
||||||
foundConfigFile = true;
|
|
||||||
overlays.addAll(partitionOverlays);
|
overlays.addAll(partitionOverlays);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -191,12 +189,6 @@ public class OverlayConfig {
|
|||||||
overlays.addAll(partitionConfigs);
|
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++) {
|
for (int i = 0, n = overlays.size(); i < n; i++) {
|
||||||
// Add the configurations to a map so definitions of an overlay in an earlier
|
// 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
|
// partition can be replaced by an overlay with the same package name in a later
|
||||||
|
|||||||
@@ -285,6 +285,39 @@ public class OverlayConfigTest {
|
|||||||
assertConfig(overlayConfig, "five", true, true, 4);
|
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
|
@Test
|
||||||
public void testImmutable() throws IOException {
|
public void testImmutable() throws IOException {
|
||||||
createFile("/product/overlay/config/config.xml",
|
createFile("/product/overlay/config/config.xml",
|
||||||
@@ -506,37 +539,6 @@ public class OverlayConfigTest {
|
|||||||
assertConfig(overlayConfig, "two", false, true, 1);
|
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
|
@Test
|
||||||
public void testStaticOverlayOutsideOverlayDir() throws IOException {
|
public void testStaticOverlayOutsideOverlayDir() throws IOException {
|
||||||
mScannerRule.addOverlay(createFile("/product/app/one.apk"), "one", "android", 0, true, 0);
|
mScannerRule.addOverlay(createFile("/product/app/one.apk"), "one", "android", 0, true, 0);
|
||||||
@@ -550,7 +552,7 @@ public class OverlayConfigTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSortStaticOverlaysDifferentTargets() throws IOException {
|
public void testSortStaticOverlaysDifferentTargets() throws IOException {
|
||||||
mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "other", 0, true, 0);
|
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);
|
0);
|
||||||
|
|
||||||
final OverlayConfig overlayConfig = createConfigImpl();
|
final OverlayConfig overlayConfig = createConfigImpl();
|
||||||
@@ -558,16 +560,34 @@ public class OverlayConfigTest {
|
|||||||
assertConfig(overlayConfig, "two", false, true, 0);
|
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
|
@Test
|
||||||
public void testSortStaticOverlaysSamePriority() throws IOException {
|
public void testSortStaticOverlaysSamePriority() throws IOException {
|
||||||
mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
|
mScannerRule.addOverlay(createFile("/vendor/overlay/one.apk"), "one", "android", 0, true,
|
||||||
0);
|
0);
|
||||||
mScannerRule.addOverlay(createFile("/product/overlay/two.apk"), "two", "android", 0, true,
|
mScannerRule.addOverlay(createFile("/vendor/overlay/two.apk"), "two", "android", 0, true,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
final OverlayConfig overlayConfig = createConfigImpl();
|
final OverlayConfig overlayConfig = createConfigImpl();
|
||||||
assertConfig(overlayConfig, "one", false, true, 1);
|
assertConfig(overlayConfig, "one", false, true, 0);
|
||||||
assertConfig(overlayConfig, "two", false, true, 0);
|
assertConfig(overlayConfig, "two", false, true, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user