From dc02abcf5123ae7bddc23c0d76ac3f8b924799a6 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Sat, 21 Feb 2015 16:48:48 -0600 Subject: [PATCH] Add support for more BCP combinations - region, variant, script & language combined - 2 char language, 2 char region - 2 char lang, 4 char script, 3 char variant --- .../brut/androlib/res/data/ResConfigFlags.java | 13 ++++++------- .../java/brut/androlib/BuildAndDecodeTest.java | 15 +++++++++++++++ .../res/values-b+ast+Latn+IT+AREVELA/strings.xml | 4 ++++ .../testapp/res/values-b+en+Latn+419/strings.xml | 4 ++++ .../apktool/testapp/res/values-en-rUS/strings.xml | 4 ++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+en+Latn+419/strings.xml create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-en-rUS/strings.xml diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java index 54167936..a56ec464 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java @@ -377,7 +377,9 @@ public class ResConfigFlags { // denies values-xxx, anything else if (language[0] != '\00' && localeScript.length == 0 && localeVariant.length == 0 && (region.length != 3 && language.length != 3) || - (language.length == 3 && region.length == 2 && region[0] != '\00')) { + (language.length == 3 && region.length == 2 && region[0] != '\00' && + localeScript.length == 0 && localeVariant.length == 0)) { + sb.append("-").append(language); if (region[0] != '\00') { sb.append("-r").append(region); @@ -390,16 +392,13 @@ public class ResConfigFlags { if (language[0] != '\00') { sb.append(language); } - if (localeScript.length == 4 && region.length == 2) { - sb.append("+").append(localeScript).append("+").append(region); + if (localeScript.length == 4) { + sb.append("+").append(localeScript); } - if (region.length == 3) { + if ((region.length == 2 || region.length == 3) && region[0] != '\00') { sb.append("+").append(region); } if (localeVariant.length >= 5) { - if (region.length == 2) { - sb.append("+").append(region); - } sb.append("+").append(toUpper(localeVariant)); } } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java index 1d430c17..11f7c10a 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java @@ -202,11 +202,26 @@ public class BuildAndDecodeTest { compareValuesFiles("values-b+ast/strings.xml"); } + @Test + public void twoLetterLangBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-en-rUS/strings.xml"); + } + @Test public void variantBcp47Test() throws BrutException, IOException { compareValuesFiles("values-b+en+US+POSIX/strings.xml"); } + @Test + public void fourpartBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+ast+Latn+IT+AREVELA/strings.xml"); + } + + @Test + public void RegionLocaleBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+en+Latn+419/strings.xml"); + } + @Test public void numericalRegionBcp47Test() throws BrutException, IOException { compareValuesFiles("values-b+eng+419/strings.xml"); diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+en+Latn+419/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+en+Latn+419/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+en+Latn+419/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-en-rUS/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-en-rUS/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file