jenkins-bot has submitted this change and it was merged.

Change subject: Use Chinese script when available, not country
......................................................................


Use Chinese script when available, not country

Determine Chinese variant by script on newer APIs.

Change-Id: I2b759fb4cc512a8441c98d4a8f04fee7db12d954
---
M app/src/main/java/org/wikipedia/language/LanguageUtil.java
A app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
2 files changed, 125 insertions(+), 6 deletions(-)

Approvals:
  BearND: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/app/src/main/java/org/wikipedia/language/LanguageUtil.java 
b/app/src/main/java/org/wikipedia/language/LanguageUtil.java
index 10e1fce..2f97db3 100644
--- a/app/src/main/java/org/wikipedia/language/LanguageUtil.java
+++ b/app/src/main/java/org/wikipedia/language/LanguageUtil.java
@@ -1,5 +1,7 @@
 package org.wikipedia.language;
 
+import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import java.util.Arrays;
@@ -29,17 +31,29 @@
             case "ji":
                 return "yi"; // Yiddish
             case "zh":
-                // If the user configures Android for Chinese (zh) we have no 
way to know the intended
-                // dialect. We guess based on country. If the guess is 
incorrect, the user must explicitly
-                // choose the dialect in the app settings.
-                return 
isTraditionalChinesePredominantInCountry(Locale.getDefault().getCountry())
-                        ? 
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE
-                        : 
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+                return chineseLanguageCodeToWikiLanguageCode();
             default:
                 return code;
         }
     }
 
+    @NonNull private static String chineseLanguageCodeToWikiLanguageCode() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            String script = Locale.getDefault().getScript();
+            switch (script) {
+                case "Hans": return 
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+                case "Hant": return 
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE;
+                default: break;
+            }
+        }
+
+        // Guess based on country. If the guess is incorrect, the user must 
explicitly choose the
+        // dialect in the app settings.
+        return 
isTraditionalChinesePredominantInCountry(Locale.getDefault().getCountry())
+                ? AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE
+                : AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+    }
+
     private static boolean isTraditionalChinesePredominantInCountry(@Nullable 
String country) {
         return TRADITIONAL_CHINESE_COUNTRY_CODES.contains(country);
     }
diff --git a/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java 
b/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
new file mode 100644
index 0000000..270303e
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
@@ -0,0 +1,105 @@
+package org.wikipedia.language;
+
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.ParameterizedRobolectricTestRunner;
+import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+public class LanguageUtilTest {
+    private static final String CHINESE_LANG = "zh";
+    private static final String SIMPLIFIED_WIKI_LANG = 
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+    private static final String TRADITIONAL_WIKI_LANG = 
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE;
+
+    public static class LanguageCodeToWikiLanguageCodeChineseScript extends 
LanguageCodeToWikiLanguageCodeChinese<String> {
+        @Parameters(name = "{0}") public static Iterable<Object[]> data() {
+            return Arrays.asList(new Object[][] {
+                    {CHINESE_LANG, SIMPLIFIED_WIKI_LANG},
+                    {"zh-Hans", SIMPLIFIED_WIKI_LANG},
+                    {"zh-Hant", TRADITIONAL_WIKI_LANG},
+                    {"zh-cmn-Hans", SIMPLIFIED_WIKI_LANG},
+                    {"zh-cmn-Hant", TRADITIONAL_WIKI_LANG},
+                    {"zh-Hans-HK", SIMPLIFIED_WIKI_LANG},
+                    {"zh-Hant-HK", TRADITIONAL_WIKI_LANG}
+            });
+        }
+
+        public LanguageCodeToWikiLanguageCodeChineseScript(@NonNull String 
input,
+                                                           @NonNull String 
expected) {
+            super(input, expected);
+        }
+
+        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Test public void 
test() {
+            Locale locale = Locale.forLanguageTag(input());
+            test(locale, expected());
+        }
+    }
+
+    public static class LanguageCodeToWikiLanguageCodeChineseCountry extends 
LanguageCodeToWikiLanguageCodeChinese<Locale> {
+        @Parameters(name = "{0}") public static Iterable<Object[]> data() {
+            return Arrays.asList(new Object[][] {
+                    {Locale.CHINESE, SIMPLIFIED_WIKI_LANG},
+                    {Locale.CHINA, SIMPLIFIED_WIKI_LANG},
+                    {Locale.TAIWAN, TRADITIONAL_WIKI_LANG}
+            });
+        }
+
+        public LanguageCodeToWikiLanguageCodeChineseCountry(@NonNull Locale 
input,
+                                                            @NonNull String 
expected) {
+            super(input, expected);
+        }
+
+        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Test public void 
test() {
+            test(input(), expected());
+        }
+    }
+
+    // these tests could be much simpler with junit theories but the subject 
has a dependency on api
+    // level which requires robolectric to change
+    @RunWith(ParameterizedRobolectricTestRunner.class)
+    public abstract static class LanguageCodeToWikiLanguageCodeChinese<T> {
+        private static Locale PREV_DEFAULT_LOCALE;
+
+        @NonNull private final T input;
+        @NonNull private final String expected;
+
+        @BeforeClass public static void setUpClass() {
+            PREV_DEFAULT_LOCALE = Locale.getDefault();
+        }
+
+        @AfterClass public static void tearDownClass() {
+            Locale.setDefault(PREV_DEFAULT_LOCALE);
+        }
+
+        LanguageCodeToWikiLanguageCodeChinese(@NonNull T input, @NonNull 
String expected) {
+            this.input = input;
+            this.expected = expected;
+        }
+
+        @NonNull T input() {
+            return input;
+        }
+
+        @NonNull String expected() {
+            return expected;
+        }
+
+        void test(@NonNull Locale defaultLocale, @Nullable String expected) {
+            Locale.setDefault(defaultLocale);
+            String wikiLang = 
LanguageUtil.languageCodeToWikiLanguageCode(CHINESE_LANG);
+            assertThat(wikiLang, is(expected));
+        }
+    }
+}
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/316495
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2b759fb4cc512a8441c98d4a8f04fee7db12d954
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to