aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
index fd3658889f..d61beaabf5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java
@@ -197,7 +197,7 @@ public class ResourceFilter {
ImmutableList.Builder<FolderConfiguration> filterBuilder = ImmutableList.builder();
for (String filter : configFilters) {
addIfNotNull(
- FolderConfiguration.getConfigForQualifierString(filter),
+ getFolderConfiguration(filter),
filter,
filterBuilder,
ruleContext,
@@ -207,6 +207,27 @@ public class ResourceFilter {
return filterBuilder.build();
}
+ private static FolderConfiguration getFolderConfiguration(String filter) {
+ /*
+ * Aapt used to expect locale configurations of form 'en_US'. It now also supports the correct
+ * 'en-rUS' format. For backwards comparability, use a regex to convert filters with locales in
+ * the old format to filters with locales of the correct format.
+ *
+ * The correct format for locales is defined at
+ * https://developer.android.com/guide/topics/resources/providing-resources.html#LocaleQualifier
+ *
+ * TODO(bazel-team): Migrate consumers away from the old Aapt locale format, then remove this
+ * replacement.
+ *
+ * The regex is a bit complicated to avoid modifying potential new qualifiers that contain
+ * underscores. Specifically, it searches for the entire beginning of the resource qualifier,
+ * including (optionally) MCC and MNC, and then the locale itself.
+ */
+ String fixedFilter =
+ filter.replaceFirst("^((mcc[0-9]{3}-(mnc[0-9]{3}-)?)?[a-z]{2})_([A-Z]{2})", "$1-r$4");
+ return FolderConfiguration.getConfigForQualifierString(fixedFilter);
+ }
+
private ImmutableList<Density> getDensities(RuleContext ruleContext) {
ImmutableList.Builder<Density> densityBuilder = ImmutableList.builder();
for (String density : densities) {