Cooltey has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/381896 )

Change subject: Fix: Language switch between Chinese variants
......................................................................

Fix: Language switch between Chinese variants

In this update:
 - Dynamically adds either Simlified or Traditional Chinese when one is reading 
a Chinese article.
 - Add "converttitles=true" to LangLinksClient

Bug:T176161, T177255
Change-Id: Iadc933f418c67220dd0ae10138716aa9093b10c1
---
M app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResult.java
M app/src/main/java/org/wikipedia/language/LangLinksActivity.java
M app/src/main/java/org/wikipedia/language/LangLinksClient.java
M app/src/test/java/org/wikipedia/language/LangLinksClientTest.java
4 files changed, 42 insertions(+), 13 deletions(-)


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

diff --git 
a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResult.java 
b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResult.java
index ead48be..923d955 100644
--- a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResult.java
+++ b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwQueryResult.java
@@ -121,6 +121,13 @@
         return null;
     }
 
+    @Nullable public String langTitle() {
+        if(pages != null || !pages.isEmpty()) {
+            return pages.get(0).title();
+        }
+        return null;
+    }
+
     @NonNull public List<PageTitle> langLinks() {
         List<PageTitle> result = new ArrayList<>();
         if (pages == null || pages.isEmpty() || pages.get(0).langLinks() == 
null) {
diff --git a/app/src/main/java/org/wikipedia/language/LangLinksActivity.java 
b/app/src/main/java/org/wikipedia/language/LangLinksActivity.java
index adb89f5..8a4f4c2 100644
--- a/app/src/main/java/org/wikipedia/language/LangLinksActivity.java
+++ b/app/src/main/java/org/wikipedia/language/LangLinksActivity.java
@@ -4,6 +4,7 @@
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
@@ -169,9 +170,10 @@
 
     private class ClientCallback implements LangLinksClient.Callback {
         @Override public void success(@NonNull Call<MwQueryResponse> call,
+                                      @Nullable String originalTitle,
                                       @NonNull List<PageTitle> links) {
             languageEntries = links;
-            updateLanguageEntriesSupported(languageEntries);
+            updateLanguageEntriesSupported(originalTitle, languageEntries);
             sortLanguageEntriesByMru(languageEntries);
             displayLangLinks();
         }
@@ -182,7 +184,8 @@
             langLinksError.setError(caught);
         }
 
-        private void updateLanguageEntriesSupported(List<PageTitle> 
languageEntries) {
+        private void updateLanguageEntriesSupported(String 
languageOriginTitle, List<PageTitle> languageEntries) {
+            String getAcceptLanguage = title.getWikiSite().languageCode();
             for (ListIterator<PageTitle> it = languageEntries.listIterator(); 
it.hasNext();) {
                 PageTitle link = it.next();
                 String languageCode = link.getWikiSite().languageCode();
@@ -199,11 +202,22 @@
                     }
                 }
             }
+
+            // TODO: setup PageTitle in correct variant
+            if 
(getAcceptLanguage.startsWith(AppLanguageLookUpTable.CHINESE_LANGUAGE_CODE)) {
+                if 
(!getAcceptLanguage.contains(AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE))
 {
+                    languageEntries.add(new PageTitle(languageOriginTitle, 
WikiSite.forLanguageCode(AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE)));
+                }
+
+                if 
(!getAcceptLanguage.contains(AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE))
 {
+                    languageEntries.add(new PageTitle(languageOriginTitle, 
WikiSite.forLanguageCode(AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE)));
+                }
+            }
         }
 
         private void sortLanguageEntriesByMru(List<PageTitle> entries) {
             int addIndex = 0;
-            for (String language : 
WikipediaApp.getInstance().getMruLanguageCodes()) {
+            for (String language : app.getMruLanguageCodes()) {
                 for (int i = 0; i < entries.size(); i++) {
                     if 
(entries.get(i).getWikiSite().languageCode().equals(language)) {
                         PageTitle entry = entries.remove(i);
diff --git a/app/src/main/java/org/wikipedia/language/LangLinksClient.java 
b/app/src/main/java/org/wikipedia/language/LangLinksClient.java
index 67053b0..9b954ee 100644
--- a/app/src/main/java/org/wikipedia/language/LangLinksClient.java
+++ b/app/src/main/java/org/wikipedia/language/LangLinksClient.java
@@ -1,6 +1,7 @@
 package org.wikipedia.language;
 
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
 
 import org.wikipedia.dataclient.WikiSite;
@@ -20,7 +21,7 @@
 
 class LangLinksClient {
     public interface Callback {
-        void success(@NonNull Call<MwQueryResponse> call, @NonNull 
List<PageTitle> links);
+        void success(@NonNull Call<MwQueryResponse> call, @Nullable String 
originalTitle, @NonNull List<PageTitle> links);
         void failure(@NonNull Call<MwQueryResponse> call, @NonNull Throwable 
caught);
     }
 
@@ -41,7 +42,7 @@
                                    Response<MwQueryResponse> response) {
                 if (response.body().success()) {
                     // noinspection ConstantConditions
-                    cb.success(call, response.body().query().langLinks());
+                    cb.success(call, response.body().query().langTitle(), 
response.body().query().langLinks());
                 } else if (response.body().hasError()) {
                     // noinspection ConstantConditions
                     cb.failure(call, new 
MwException(response.body().getError()));
@@ -59,7 +60,7 @@
     }
 
     @VisibleForTesting interface Service {
-        
@GET("w/api.php?action=query&format=json&formatversion=2&prop=langlinks&lllimit=500")
+        
@GET("w/api.php?action=query&format=json&formatversion=2&prop=langlinks&lllimit=500&converttitles=true")
         Call<MwQueryResponse> langLinks(@NonNull @Query("titles") String 
title);
     }
 }
diff --git a/app/src/test/java/org/wikipedia/language/LangLinksClientTest.java 
b/app/src/test/java/org/wikipedia/language/LangLinksClientTest.java
index a4b8e99..0306c37 100644
--- a/app/src/test/java/org/wikipedia/language/LangLinksClientTest.java
+++ b/app/src/test/java/org/wikipedia/language/LangLinksClientTest.java
@@ -1,6 +1,7 @@
 package org.wikipedia.language;
 
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 
 import com.google.gson.stream.MalformedJsonException;
 
@@ -20,6 +21,9 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Matchers.isA;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Matchers.matches;
+import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -29,13 +33,14 @@
 
     @Test public void testRequestSuccessHasResults() throws Throwable {
         List<PageTitle> expected = getExpectedResults();
+        String expectedString = "Scientology";
         enqueueFromFile("lang_links.json");
 
         LangLinksClient.Callback cb = mock(LangLinksClient.Callback.class);
         Call<MwQueryResponse> call = request(cb);
 
         server().takeRequest();
-        assertCallbackSuccess(call, cb, expected);
+        assertCallbackSuccess(call, cb, expectedString, expected);
     }
 
     @Test public void testRequestSuccessNoResults() throws Throwable {
@@ -46,7 +51,7 @@
         Call<MwQueryResponse> call = request(cb);
 
         server().takeRequest();
-        assertCallbackSuccess(call, cb, expected);
+        assertCallbackSuccess(call, cb, null, expected);
     }
 
     @Test public void testRequestResponseApiError() throws Throwable {
@@ -56,7 +61,7 @@
         Call<MwQueryResponse> call = request(cb);
 
         server().takeRequest();
-        assertCallbackFailure(call, cb, MwException.class);
+        assertCallbackFailure(call, cb, null, MwException.class);
     }
 
     @Test public void testRequestResponseFailure() throws Throwable {
@@ -66,7 +71,7 @@
         Call<MwQueryResponse> call = request(cb);
 
         server().takeRequest();
-        assertCallbackFailure(call, cb, HttpStatusException.class);
+        assertCallbackFailure(call, cb, null, HttpStatusException.class);
     }
 
     @Test public void testRequestResponseMalformed() throws Throwable {
@@ -76,22 +81,24 @@
         Call<MwQueryResponse> call = request(cb);
 
         server().takeRequest();
-        assertCallbackFailure(call, cb, MalformedJsonException.class);
+        assertCallbackFailure(call, cb, null, MalformedJsonException.class);
     }
 
     private void assertCallbackSuccess(@NonNull Call<MwQueryResponse> call,
                                        @NonNull LangLinksClient.Callback cb,
+                                       @Nullable String expectedString,
                                        @NonNull List<PageTitle> expected) {
-        verify(cb).success(eq(call), eq(expected));
+        verify(cb).success(eq(call), eq(expectedString), eq(expected));
         //noinspection unchecked
         verify(cb, never()).failure(any(Call.class), any(Throwable.class));
     }
 
     private void assertCallbackFailure(@NonNull Call<MwQueryResponse> call,
                                        @NonNull LangLinksClient.Callback cb,
+                                       @Nullable String expectedString,
                                        @NonNull Class<? extends Throwable> 
throwable) {
         //noinspection unchecked
-        verify(cb, never()).success(any(Call.class), any(List.class));
+        verify(cb, never()).success(any(Call.class), same(expectedString), 
any(List.class));
         verify(cb).failure(eq(call), isA(throwable));
     }
 

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

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

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

Reply via email to