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