From da3b8c710dd450dbd5cbd0ce489fd42d50a4fd9c Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Sat, 11 Apr 2015 11:36:31 -0500 Subject: [PATCH] cleanup messy logic for bcp qualifiers --- .../androlib/res/data/ResConfigFlags.java | 27 ++++++++++++++----- .../brut/androlib/BuildAndDecodeTest.java | 2 +- .../{values-b+ast => values-ast}/strings.xml | 0 3 files changed, 21 insertions(+), 8 deletions(-) rename brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/{values-b+ast => values-ast}/strings.xml (100%) 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 3ff296a7..a05204cb 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 @@ -114,6 +114,22 @@ public class ResConfigFlags { isInvalid = true; } + if (localeScript.length != 0) { + if (localeScript[0] == '\00') { + localeScript = null; + } + } else { + localeScript = null; + } + + if (localeVariant.length != 0) { + if (localeVariant[0] == '\00') { + localeVariant = null; + } + } else { + localeVariant = null; + } + this.mcc = mcc; this.mnc = mnc; this.language = language; @@ -375,11 +391,8 @@ public class ResConfigFlags { // check for old style non BCP47 tags // allows values-xx-rXX, values-xx, values-xxx-rXX // 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' && - localeScript.length == 0 && localeVariant.length == 0)) { - + if (localeVariant == null && localeScript == null && (region[0] != '\00' || language[0] != '\00') && + region.length != 3) { sb.append("-").append(language); if (region[0] != '\00') { sb.append("-r").append(region); @@ -392,13 +405,13 @@ public class ResConfigFlags { if (language[0] != '\00') { sb.append(language); } - if (localeScript.length == 4) { + if (localeScript != null && localeScript.length == 4) { sb.append("+").append(localeScript); } if ((region.length == 2 || region.length == 3) && region[0] != '\00') { sb.append("+").append(region); } - if (localeVariant.length >= 5) { + if (localeVariant != null && localeVariant.length >= 5) { 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 d08c997b..cdfc9d27 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 @@ -204,7 +204,7 @@ public class BuildAndDecodeTest { @Test public void threeLetterLangBcp47Test() throws BrutException, IOException { - compareValuesFiles("values-b+ast/strings.xml"); + compareValuesFiles("values-ast/strings.xml"); } @Test diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-ast/strings.xml similarity index 100% rename from brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-b+ast/strings.xml rename to brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-ast/strings.xml