Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/110887

Change subject: Use wikiCode everywhere, in favor of langCode
......................................................................

Use wikiCode everywhere, in favor of langCode

- Too hard to map them around
- For cases where we have an android language but no wiki (rare),
  we just default to a safe English
- Explicitly ignore 'got' language, since it crashes all the
  things

Bug: 60745
Change-Id: I28a4f185eefea367a9ea4ca86538f0d049ee0290
---
M wikipedia/src/main/java/org/wikipedia/Utils.java
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksActivity.java
M wikipedia/src/main/java/org/wikipedia/settings/LanguagePreference.java
4 files changed, 60 insertions(+), 63 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/87/110887/1

diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java 
b/wikipedia/src/main/java/org/wikipedia/Utils.java
index 560737e..6e8e199 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -169,48 +169,4 @@
             
view.animate().translationY(translation).setDuration(WikipediaApp.SHORT_ANIMATION_DURATION).start();
         }
     }
-
-    /**
-     * Converts Java Language codes to Wikipedia ones.
-     *
-     * Is inverse of {@link #toJavaLanguageCode(String)}
-     *
-     * @param langCode 2 letter language code as used by Java
-     * @return language code as used by Wikipedia
-     */
-    public static String toWikiLanguageCode(String langCode) {
-        if (langCode.equals("iw")) {
-            return "he";
-        }
-        return langCode;
-    }
-
-    /**
-     * Converts Wikipedia Language codes to Java ones.
-     *
-     * Is inverse of {@link #toWikiLanguageCode(String)}
-     *
-     * @param langCode language code as used by Wikipedia
-     * @return 2 letter language code as used by Java
-     */
-    public static String toJavaLanguageCode(String langCode) {
-        if (langCode.equals("he")) {
-            return "iw";
-        }
-        return langCode;
-    }
-
-    public static String getLangDisplayString(String lang) {
-        Locale locale = new Locale(toJavaLanguageCode(lang));
-        return locale.getDisplayLanguage(locale);
-    }
-
-    /**
-     * Return the default content language to be used, when one is not set
-     *
-     * @return The 2 letter language code as used by Wikipedia
-     */
-    public static String getDefaultContentLanguage() {
-        return Utils.toWikiLanguageCode(Locale.getDefault().getLanguage());
-    }
 }
\ No newline at end of file
diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index a6225ba..d26efe8 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -30,6 +30,7 @@
 import java.net.Proxy;
 import java.net.URL;
 import java.util.HashMap;
+import java.util.Locale;
 
 @ReportsCrashes(
         formKey="",
@@ -103,7 +104,16 @@
     public String getPrimaryLanguage() {
         if (primaryLanguage == null) {
             SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this);
-            primaryLanguage = prefs.getString(PREFERENCE_CONTENT_LANGUAGE, 
Utils.getDefaultContentLanguage());
+            primaryLanguage = prefs.getString(PREFERENCE_CONTENT_LANGUAGE, 
null);
+            if (primaryLanguage == null) {
+                // No preference set!
+                String langCode = Locale.getDefault().getLanguage();
+                if (isWikiLanguage(langCode)) {
+                    return langCode;
+                } else {
+                    return "en"; // Default in case we don't get a lang match. 
Not very commont
+                }
+            }
         }
         return primaryLanguage;
     }
@@ -164,6 +174,20 @@
         throw new RuntimeException("WikiCode " + wikiCode + " + not found+");
     }
 
+    private boolean isWikiLanguage(String lang) {
+        if (wikiCodes == null) {
+            wikiCodes = 
getResources().getStringArray(R.array.preference_language_keys);
+        }
+
+        for (int i = 0; i < wikiCodes.length; i++) {
+            if (wikiCodes[i].equals(lang)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     private String[] canonicalNames;
     public String canonicalNameFor(int index) {
         if (canonicalNames == null) {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksActivity.java 
b/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksActivity.java
index 25cb2ef..a022fbc 100644
--- a/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksActivity.java
@@ -24,6 +24,8 @@
     private ArrayList<PageTitle> langLinks;
     private PageTitle title;
 
+    private WikipediaApp app;
+
     private ListView langLinksList;
     private EditText langLinksFilter;
     private View langLinksProgress;
@@ -40,6 +42,8 @@
         if (!getIntent().getAction().equals(ACTION_LANGLINKS_FOR_TITLE)) {
             throw new RuntimeException("Only ACTION_LANGLINKS_FOR_TITLE is 
supported");
         }
+
+        app = (WikipediaApp)getApplicationContext();
 
         langLinksList = (ListView) findViewById(R.id.langlinks_list);
         langLinksFilter = (EditText) findViewById(R.id.langlinks_filter);
@@ -117,7 +121,7 @@
         if (langLinks.size() == 0) {
             Utils.crossFade(langLinksProgress, langLinksEmpty);
         } else {
-            langLinksList.setAdapter(new LangLinksAdapter(langLinks));
+            langLinksList.setAdapter(new LangLinksAdapter(langLinks, app));
             Utils.crossFade(langLinksProgress, langLinksContainer);
         }
     }
@@ -130,11 +134,18 @@
                     langLinks = result;
 
                     // If preferred language exists in list, move it to the top
-                    WikipediaApp app = (WikipediaApp)getApplicationContext();
                     for (int i = 0; i < result.size(); i++) {
                         if 
(langLinks.get(i).getSite().getLanguage().equals(app.getPrimaryLanguage())) {
                             PageTitle preferredLink = langLinks.remove(i);
                             langLinks.add(0, preferredLink);
+                            break;
+                        }
+                    }
+
+                    // Also get rid of goddamn 'got', since that just 
segfaults android everywhere
+                    for (int i = 0; i < result.size(); i++) {
+                        if 
(langLinks.get(i).getSite().getLanguage().equals("got")) {
+                            langLinks.remove(i);
                             break;
                         }
                     }
@@ -158,20 +169,24 @@
     private static class LangLinksAdapter extends BaseAdapter {
         private final ArrayList<PageTitle> origLangLinks;
         private final ArrayList<PageTitle> langLinks;
+        private final WikipediaApp app;
 
-        private LangLinksAdapter(ArrayList<PageTitle> langLinks) {
+        private LangLinksAdapter(ArrayList<PageTitle> langLinks, WikipediaApp 
app) {
             this.origLangLinks = langLinks;
             this.langLinks = new ArrayList<PageTitle>(origLangLinks);
+            this.app = app;
         }
 
         public void setFilterText(String filter) {
             this.langLinks.clear();
             filter = filter.toLowerCase();
             for (PageTitle l: origLangLinks) {
-                Locale locale = new 
Locale(Utils.toJavaLanguageCode(l.getSite().getLanguage()));
+                int langIndex = app.findWikiIndex(l.getSite().getLanguage());
+                String canonicalLang = app.canonicalNameFor(langIndex);
+                String localLang = app.localNameFor(langIndex);
                 if (l.getDisplayText().toLowerCase().contains(filter)
-                        || 
locale.getDisplayLanguage().toLowerCase().contains(filter)
-                        || 
locale.getDisplayLanguage(locale).toLowerCase().contains(filter)) {
+                        || canonicalLang.toLowerCase().contains(filter)
+                        || localLang.toLowerCase().contains(filter)) {
                     this.langLinks.add(l);
                 }
             }
@@ -204,14 +219,12 @@
 
             PageTitle langLink = (PageTitle) getItem(position);
 
-            Locale locale = new 
Locale(Utils.toJavaLanguageCode(langLink.getSite().getLanguage()));
+            String wikiCode = langLink.getSite().getLanguage();
 
-            langNameText.setText(locale.getDisplayLanguage(locale));
-            if 
(locale.getDisplayLanguage().equals(langNameText.getText().toString())) {
-                langLocalNameText.setText("");
-            } else {
-                langLocalNameText.setText(locale.getDisplayLanguage());
-            }
+            int langIndex = app.findWikiIndex(wikiCode);
+
+            langNameText.setText(app.canonicalNameFor(langIndex));
+            langLocalNameText.setText(app.localNameFor(langIndex));
             titleText.setText(langLink.getDisplayText());
 
             return convertView;
diff --git 
a/wikipedia/src/main/java/org/wikipedia/settings/LanguagePreference.java 
b/wikipedia/src/main/java/org/wikipedia/settings/LanguagePreference.java
index ea7a041..fe6c4cc 100644
--- a/wikipedia/src/main/java/org/wikipedia/settings/LanguagePreference.java
+++ b/wikipedia/src/main/java/org/wikipedia/settings/LanguagePreference.java
@@ -30,7 +30,8 @@
         setDialogLayoutResource(R.layout.dialog_preference_languages);
         languages = 
context.getResources().getStringArray(R.array.preference_language_keys);
         app = (WikipediaApp) context.getApplicationContext();
-        setSummary(Utils.getLangDisplayString(app.getPrimaryLanguage()));
+        int langIndex = app.findWikiIndex(app.getPrimaryLanguage());
+        setSummary(app.localNameFor(langIndex));
     }
 
     @Override
@@ -68,7 +69,8 @@
         if (positiveResult) {
             String lang = (String) 
languagesList.getAdapter().getItem(languagesList.getCheckedItemPosition());
             app.setPrimaryLanguage(lang);
-            setSummary(Utils.getLangDisplayString(lang));
+            int langIndex = app.findWikiIndex(app.getPrimaryLanguage());
+            setSummary(app.localNameFor(langIndex));
         }
     }
 
@@ -92,10 +94,12 @@
             this.languages.clear();
             filter = filter.toLowerCase();
             for (String s: originalLanguages) {
-                Locale locale = new Locale(Utils.toJavaLanguageCode(s));
+                int langIndex = app.findWikiIndex(s);
+                String canonicalLang = app.canonicalNameFor(langIndex);
+                String localLang = app.localNameFor(langIndex);
                 if (s.contains(filter)
-                        || 
locale.getDisplayLanguage().toLowerCase().contains(filter)
-                        || 
locale.getDisplayLanguage(locale).toLowerCase().contains(filter)) {
+                        || canonicalLang.toLowerCase().contains(filter)
+                        || localLang.toLowerCase().contains(filter)) {
                     this.languages.add(s);
                 }
             }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I28a4f185eefea367a9ea4ca86538f0d049ee0290
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

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

Reply via email to