diff options
author | Christian Williams <christianw@google.com> | 2017-11-07 13:10:00 -0800 |
---|---|---|
committer | Christian Williams <christianw@google.com> | 2017-11-07 13:10:00 -0800 |
commit | ede3fe4bd1dd8d637cd02e8b7a2086daea5c59d9 (patch) | |
tree | 8ea1fabea13a8bfaaacfa408f8cb15770a7fe6f2 /resources | |
parent | 3e9ceb7f2e72e9ea5cec79ba4c7c4930ee899174 (diff) | |
download | robolectric-shadows-ede3fe4bd1dd8d637cd02e8b7a2086daea5c59d9.tar.gz |
Fix BCP 47 locale support.
Diffstat (limited to 'resources')
-rw-r--r-- | resources/src/main/java/org/robolectric/res/android/ConfigDescription.java | 5 | ||||
-rw-r--r-- | resources/src/main/java/org/robolectric/res/android/ResTable_config.java | 33 |
2 files changed, 16 insertions, 22 deletions
diff --git a/resources/src/main/java/org/robolectric/res/android/ConfigDescription.java b/resources/src/main/java/org/robolectric/res/android/ConfigDescription.java index 45aeee039..72f4f3a9a 100644 --- a/resources/src/main/java/org/robolectric/res/android/ConfigDescription.java +++ b/resources/src/main/java/org/robolectric/res/android/ConfigDescription.java @@ -93,10 +93,10 @@ public class ConfigDescription { int initFromParts(PeekingIterator<String> iter) { String part = iter.peek(); - if (part.indexOf(0) == 'b' && part.indexOf(1) == '+') { + if (part.startsWith("b+")) { // This is a "modified" BCP 47 language tag. Same semantics as BCP 47 tags, // except that the separator is "+" and not "-". - String[] subtags = part.toLowerCase().split("\\+"); + String[] subtags = part.substring(2).toLowerCase().split("\\+"); if (subtags.length == 1) { set_language(subtags[0]); } else if (subtags.length == 2) { @@ -689,6 +689,7 @@ public class ConfigDescription { return true; } + // check that we have 'dpi' after the last digit. Matcher matcher = DENSITY_PATTERN.matcher(name); if (matcher.matches()) { out.density = Integer.parseInt(matcher.group(1)); diff --git a/resources/src/main/java/org/robolectric/res/android/ResTable_config.java b/resources/src/main/java/org/robolectric/res/android/ResTable_config.java index 91ea4fa10..d949cee7a 100644 --- a/resources/src/main/java/org/robolectric/res/android/ResTable_config.java +++ b/resources/src/main/java/org/robolectric/res/android/ResTable_config.java @@ -615,37 +615,30 @@ public class ResTable_config { return new String(value, US_ASCII); } - /* static */ void packLanguageOrRegion(final byte[] in, final byte base, - final byte out[]) { - if (in.length < 3 || in[2] == 0 || in[2] == '-') { - out[0] = in[0]; - out[1] = in[1]; + /* static */ void packLanguageOrRegion(final String in, final byte base, + final byte[] out) { + if (in == null) { + out[0] = 0; + out[1] = 0; + } else if (in.length() < 3 || in.charAt(2) == 0 || in.charAt(2) == '-') { + out[0] = (byte) in.charAt(0); + out[1] = (byte) in.charAt(1); } else { - byte first = (byte) ((in[0] - base) & 0x007f); - byte second = (byte) ((in[1] - base) & 0x007f); - byte third = (byte) ((in[2] - base) & 0x007f); + byte first = (byte) ((in.charAt(0) - base) & 0x007f); + byte second = (byte) ((in.charAt(1) - base) & 0x007f); + byte third = (byte) ((in.charAt(2) - base) & 0x007f); out[0] = (byte) (0x80 | (third << 2) | (second >> 3)); out[1] = (byte) ((second << 5) | first); } } - void packLanguage(final byte[] language) { - packLanguageOrRegion(language, (byte) 'a', this.language); - } - void packLanguage(final String language) { - byte[] bytes = language == null ? new byte[2] : language.getBytes(); - packLanguageOrRegion(bytes, (byte) 'a', this.language); - } - - void packRegion(final byte[] region) { - packLanguageOrRegion(region, (byte) '0', this.country); + packLanguageOrRegion(language, (byte) 'a', this.language); } void packRegion(final String region) { - byte[] bytes = region == null ? new byte[2] : region.getBytes(); - packLanguageOrRegion(bytes, (byte) '0', this.country); + packLanguageOrRegion(region, (byte) '0', this.country); } private String unpackLanguage() { |