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