summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2020-11-15 21:56:42 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-11-15 21:56:42 +0000
commitcaff40cad36e4a5d3e5f836f09daf70a321f98c8 (patch)
treecdab2fb44da8a1b01d172b8165ba044080389511
parent76bcea65508092cf60adb941f0a5c6f01621acf0 (diff)
parent8f2f4e14deb73eee88094a40091c1cbaf2952d26 (diff)
Merge "Fix DominatorTree for locale and mcc/mnc config" am: 8f2f4e14de
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1481918 Change-Id: Iedf0fcdd24fa9ec3ff5ebb3124f9fd12acbbfeec
-rw-r--r--libs/androidfw/ConfigDescription.cpp5
-rw-r--r--tools/aapt2/DominatorTree_test.cpp28
-rw-r--r--tools/aapt2/optimize/ResourceDeduper_test.cpp22
3 files changed, 54 insertions, 1 deletions
diff --git a/libs/androidfw/ConfigDescription.cpp b/libs/androidfw/ConfigDescription.cpp
index 1f3a89edb8af..19ead9583eb2 100644
--- a/libs/androidfw/ConfigDescription.cpp
+++ b/libs/androidfw/ConfigDescription.cpp
@@ -887,13 +887,16 @@ bool ConfigDescription::Dominates(const ConfigDescription& o) const {
}
// Locale de-duping is not-trivial, disable for now (b/62409213).
- if (diff(o) & CONFIG_LOCALE) {
+ // We must also disable de-duping for all configuration qualifiers with precedence higher than
+ // locale (b/171892595)
+ if (diff(o) & (CONFIG_LOCALE | CONFIG_MCC | CONFIG_MNC)) {
return false;
}
if (*this == DefaultConfig()) {
return true;
}
+
return MatchWithDensity(o) && !o.MatchWithDensity(*this) &&
!isMoreSpecificThan(o) && !o.HasHigherPrecedenceThan(*this);
}
diff --git a/tools/aapt2/DominatorTree_test.cpp b/tools/aapt2/DominatorTree_test.cpp
index 3e49034310c3..52949da1b64f 100644
--- a/tools/aapt2/DominatorTree_test.cpp
+++ b/tools/aapt2/DominatorTree_test.cpp
@@ -198,5 +198,33 @@ TEST(DominatorTreeTest, NonZeroDensitiesMatch) {
EXPECT_EQ(expected, printer.ToString(&tree));
}
+TEST(DominatorTreeTest, MccMncIsPeertoLocale) {
+ const ConfigDescription default_config = {};
+ const ConfigDescription de_config = test::ParseConfigOrDie("de");
+ const ConfigDescription fr_config = test::ParseConfigOrDie("fr");
+ const ConfigDescription mcc_config = test::ParseConfigOrDie("mcc262");
+ const ConfigDescription mcc_fr_config = test::ParseConfigOrDie("mcc262-fr");
+ const ConfigDescription mnc_config = test::ParseConfigOrDie("mnc2");
+ const ConfigDescription mnc_fr_config = test::ParseConfigOrDie("mnc2-fr");
+ std::vector<std::unique_ptr<ResourceConfigValue>> configs;
+ configs.push_back(util::make_unique<ResourceConfigValue>(default_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(de_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(fr_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(mcc_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(mcc_fr_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(mnc_config, ""));
+ configs.push_back(util::make_unique<ResourceConfigValue>(mnc_fr_config, ""));
+ DominatorTree tree(configs);
+ PrettyPrinter printer;
+ std::string expected =
+ "<default>\n"
+ "de\n"
+ "fr\n"
+ "mcc262\n"
+ "mcc262-fr\n"
+ "mnc2\n"
+ "mnc2-fr\n";
+ EXPECT_EQ(expected, printer.ToString(&tree));
+}
} // namespace aapt
diff --git a/tools/aapt2/optimize/ResourceDeduper_test.cpp b/tools/aapt2/optimize/ResourceDeduper_test.cpp
index 048e318d2802..888de40be268 100644
--- a/tools/aapt2/optimize/ResourceDeduper_test.cpp
+++ b/tools/aapt2/optimize/ResourceDeduper_test.cpp
@@ -52,9 +52,11 @@ TEST(ResourceDeduperTest, SameValuesAreDeduped) {
.Build();
ASSERT_TRUE(ResourceDeduper().Consume(context.get(), table.get()));
+ EXPECT_THAT(table, HasValue("android:string/dedupe", default_config));
EXPECT_THAT(table, Not(HasValue("android:string/dedupe", ldrtl_config)));
EXPECT_THAT(table, Not(HasValue("android:string/dedupe", land_config)));
+ EXPECT_THAT(table, HasValue("android:string/dedupe2", default_config));
EXPECT_THAT(table, HasValue("android:string/dedupe2", ldrtl_v21_config));
EXPECT_THAT(table, Not(HasValue("android:string/dedupe2", ldrtl_config)));
@@ -151,4 +153,24 @@ TEST(ResourceDeduperTest, LocalesValuesAreKept) {
EXPECT_THAT(table, HasValue("android:string/keep", fr_rCA_config));
}
+TEST(ResourceDeduperTest, MccMncValuesAreKept) {
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+ const ConfigDescription default_config = {};
+ const ConfigDescription mcc_config = test::ParseConfigOrDie("mcc262");
+ const ConfigDescription mnc_config = test::ParseConfigOrDie("mnc2");
+
+ std::unique_ptr<ResourceTable> table =
+ test::ResourceTableBuilder()
+ .AddString("android:string/keep", ResourceId{}, default_config, "keep")
+ .AddString("android:string/keep", ResourceId{}, mcc_config, "keep")
+ .AddString("android:string/keep", ResourceId{}, mnc_config, "keep")
+ .Build();
+
+ ASSERT_TRUE(ResourceDeduper().Consume(context.get(), table.get()));
+ EXPECT_THAT(table, HasValue("android:string/keep", default_config));
+ EXPECT_THAT(table, HasValue("android:string/keep", mcc_config));
+ EXPECT_THAT(table, HasValue("android:string/keep", mnc_config));
+}
+
+
} // namespace aapt