Yashasvi has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/361294 )
Change subject: Remove dependency on apps-android-java-mwapi library ...................................................................... Remove dependency on apps-android-java-mwapi library Bug: T141127 Change-Id: Id8dde4eb22aa408e643a9b622dba654ffc5319f1 --- M app/build.gradle M app/src/main/java/org/wikipedia/WikipediaApp.java M app/src/main/java/org/wikipedia/captcha/CaptchaHandler.java M app/src/main/java/org/wikipedia/dataclient/okhttp/CommonHeaderRequestInterceptor.java M app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java M app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java M app/src/main/java/org/wikipedia/util/ThrowableUtil.java M app/src/main/java/org/wikipedia/views/WikiErrorView.java D app/src/test/java/org/wikipedia/test/TestApi.java M settings.gradle 10 files changed, 8 insertions(+), 163 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/94/361294/1 diff --git a/app/build.gradle b/app/build.gradle index 988d08a..7f92afc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -156,7 +156,6 @@ } dependencies { - compileSubprojectOrModule ':java-mwapi:json', 'org.mediawiki.api:json:1.3.5', 'org.json', 'json' // To keep the Maven Central dependencies up-to-date // use http://gradleplease.appspot.com/ or http://search.maven.org/. diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java b/app/src/main/java/org/wikipedia/WikipediaApp.java index 886d362..a108781 100644 --- a/app/src/main/java/org/wikipedia/WikipediaApp.java +++ b/app/src/main/java/org/wikipedia/WikipediaApp.java @@ -19,7 +19,6 @@ import com.squareup.leakcanary.RefWatcher; import com.squareup.otto.Bus; -import org.mediawiki.api.json.Api; import org.wikipedia.analytics.FunnelManager; import org.wikipedia.analytics.SessionFunnel; import org.wikipedia.auth.AccountUtil; @@ -87,7 +86,6 @@ private final RemoteConfig remoteConfig = new RemoteConfig(); private final Map<Class<?>, DatabaseClient<?>> databaseClients = Collections.synchronizedMap(new HashMap<Class<?>, DatabaseClient<?>>()); - private final Map<String, Api> apis = new HashMap<>(); private AppLanguageState appLanguageState; private FunnelManager funnelManager; private SessionFunnel sessionFunnel; @@ -161,8 +159,6 @@ enableWebViewDebugging(); - Api.setConnectionFactory(new OkHttpConnectionFactory()); - ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setNetworkFetcher(new CacheableOkHttpNetworkFetcher(OkHttpConnectionFactory.getClient())) .build(); @@ -212,23 +208,6 @@ appLanguageState.getSystemLanguageCode()); } - public Api getAPIForSite(WikiSite wiki) { - String host = wiki.host(); - String acceptLanguage = getAcceptLanguage(wiki); - Map<String, String> customHeaders = buildCustomHeadersMap(acceptLanguage); - Api api; - - String cachedApiKey = host + "-" + acceptLanguage; - if (apis.containsKey(cachedApiKey)) { - api = apis.get(cachedApiKey); - } else { - api = new Api(host, wiki.port(), wiki.secureScheme(), - wiki.path("api.php"), customHeaders); - apis.put(cachedApiKey, api); - } - return api; - } - /** * Default wiki for the app * You should use PageTitle.getWikiSite() to get the article wiki @@ -240,15 +219,6 @@ wiki = WikiSite.forLanguageCode(lang); } return wiki; - } - - /** - * Convenience method to get an API object for the app wiki. - * - * @return An API object that is equivalent to calling getAPIForSite(WikiSite) - */ - public Api getSiteApi() { - return getAPIForSite(getWikiSite()); } @Nullable @@ -514,25 +484,6 @@ public void listenForNotifications() { notificationReceiver.startPollTask(this); - } - - // For java-mwapi API requests. - // If adding a new header here (before this method is removed), make sure to duplicate it - // in the Retrofit header list (OkHttpConnectionFactory#CommonHeaderInterceptor). - @Deprecated - private Map<String, String> buildCustomHeadersMap(String acceptLanguage) { - Map<String, String> headers = new HashMap<>(); - headers.put("User-Agent", getUserAgent()); - - if (isEventLoggingEnabled()) { - headers.put("X-WMF-UUID", getAppInstallID()); - } else { - // Send do-not-track header if the user has opted out of event logging - headers.put("DNT", "1"); - } - - headers.put("Accept-Language", acceptLanguage); - return headers; } private void initAppLang() { diff --git a/app/src/main/java/org/wikipedia/captcha/CaptchaHandler.java b/app/src/main/java/org/wikipedia/captcha/CaptchaHandler.java index 03fcb26..5587857 100644 --- a/app/src/main/java/org/wikipedia/captcha/CaptchaHandler.java +++ b/app/src/main/java/org/wikipedia/captcha/CaptchaHandler.java @@ -18,7 +18,6 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.image.ImageInfo; -import org.mediawiki.api.json.RequestBuilder; import org.wikipedia.R; import org.wikipedia.WikipediaApp; import org.wikipedia.dataclient.WikiSite; @@ -182,14 +181,4 @@ hideCaptcha(); return true; } - - public RequestBuilder populateBuilder(RequestBuilder builder) { - if (captchaResult == null) { - return builder; - } - - return builder.param("captchaId", captchaResult.getCaptchaId()) - .param("captchaWord", captchaText.getText().toString()); - } - } diff --git a/app/src/main/java/org/wikipedia/dataclient/okhttp/CommonHeaderRequestInterceptor.java b/app/src/main/java/org/wikipedia/dataclient/okhttp/CommonHeaderRequestInterceptor.java index 1b43557..a1befcb 100644 --- a/app/src/main/java/org/wikipedia/dataclient/okhttp/CommonHeaderRequestInterceptor.java +++ b/app/src/main/java/org/wikipedia/dataclient/okhttp/CommonHeaderRequestInterceptor.java @@ -8,9 +8,6 @@ import okhttp3.Request; import okhttp3.Response; -// If adding a new header here, make sure to duplicate it in the MWAPI header builder -// (WikipediaApp.buildCustomHeadersMap()). -// TODO: remove above comment once buildCustomHeadersMap() is removed. class CommonHeaderRequestInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { WikipediaApp app = WikipediaApp.getInstance(); diff --git a/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java b/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java index 1a19fa5..421b7aa 100644 --- a/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java +++ b/app/src/main/java/org/wikipedia/dataclient/okhttp/OkHttpConnectionFactory.java @@ -3,29 +3,22 @@ import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; -import com.github.kevinsawicki.http.HttpRequest; - import org.wikipedia.WikipediaApp; import org.wikipedia.dataclient.SharedPreferenceCookieManager; import org.wikipedia.settings.Prefs; import org.wikipedia.settings.RbSwitch; import java.io.File; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.URL; import okhttp3.Cache; import okhttp3.CacheDelegate; import okhttp3.CookieJar; import okhttp3.JavaNetCookieJar; import okhttp3.OkHttpClient; -import okhttp3.OkUrlFactory; import okhttp3.internal.cache.CacheDelegateInterceptor; import okhttp3.logging.HttpLoggingInterceptor; -public class OkHttpConnectionFactory implements HttpRequest.ConnectionFactory { +public class OkHttpConnectionFactory { private static final String CACHE_DIR_NAME = "okhttp-cache"; private static final long NET_CACHE_SIZE = 64 * 1024 * 1024; @VisibleForTesting @NonNull public static final Cache NET_CACHE = new Cache(new File(WikipediaApp.getInstance().getCacheDir(), @@ -38,17 +31,6 @@ @NonNull public static OkHttpClient getClient() { return CLIENT; - } - - @Override - public HttpURLConnection create(URL url) throws IOException { - return new OkUrlFactory(getClient()).open(url); // TODO: update to newer API - } - - @Override - public HttpURLConnection create(URL url, Proxy proxy) throws IOException { - throw new UnsupportedOperationException( - "Per-connection proxy is not supported. Use OkHttpClient's setProxy instead."); } @NonNull diff --git a/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java b/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java index e51ce4a..12cab7b 100644 --- a/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java +++ b/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java @@ -15,14 +15,15 @@ import org.json.JSONException; import org.json.JSONObject; -import org.mediawiki.api.json.ApiException; import org.wikipedia.Constants; import org.wikipedia.R; import org.wikipedia.WikipediaApp; import org.wikipedia.bridge.CommunicationBridge; import org.wikipedia.database.contract.PageImageHistoryContract; import org.wikipedia.dataclient.ServiceError; +import org.wikipedia.dataclient.mwapi.MwException; import org.wikipedia.dataclient.mwapi.MwQueryResponse; +import org.wikipedia.dataclient.mwapi.MwServiceError; import org.wikipedia.dataclient.page.PageClient; import org.wikipedia.dataclient.page.PageClientFactory; import org.wikipedia.dataclient.page.PageLead; @@ -46,6 +47,7 @@ import org.wikipedia.views.ObservableWebView; import org.wikipedia.views.SwipeRefreshLayoutWithScroll; +import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; @@ -548,12 +550,9 @@ if (pageLead.hasError()) { ServiceError error = pageLead.getError(); if (error != null) { - ApiException apiException = new ApiException(error.getTitle(), error.getDetails()); - commonSectionFetchOnCatch(apiException, startSequenceNum); + commonSectionFetchOnCatch(new MwException((MwServiceError) error), startSequenceNum); } else { - ApiException apiException - = new ApiException("unknown", "unexpected pageLead response"); - commonSectionFetchOnCatch(apiException, startSequenceNum); + commonSectionFetchOnCatch(new IOException("An unknown error occurred."), startSequenceNum); } return; } diff --git a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java index e01ec1a..e78cb01 100644 --- a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java +++ b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java @@ -4,10 +4,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.github.kevinsawicki.http.HttpRequest; - import org.json.JSONException; -import org.mediawiki.api.json.ApiException; import org.wikipedia.R; import org.wikipedia.createaccount.CreateAccountException; import org.wikipedia.dataclient.mwapi.MwException; @@ -58,11 +55,7 @@ Throwable inner = ThrowableUtil.getInnermostThrowable(e); AppError result; // look at what kind of exception it is... - if (inner instanceof ApiException) { - // it's a well-formed error response from the server! - result = new AppError(getApiError(context, (ApiException) inner), - getApiErrorMessage(context, (ApiException) inner)); - } else if (isNetworkError(e)) { + if (isNetworkError(e)) { result = new AppError(context.getString(R.string.error_network_error), context.getString(R.string.format_error_server_message, inner.getLocalizedMessage())); @@ -94,39 +87,10 @@ } private static boolean isNetworkError(@NonNull Throwable e) { - return ThrowableUtil.throwableContainsException(e, HttpRequest.HttpRequestException.class) - || ThrowableUtil.throwableContainsException(e, HttpStatusException.class) + return ThrowableUtil.throwableContainsException(e, HttpStatusException.class) || ThrowableUtil.throwableContainsException(e, UnknownHostException.class) || ThrowableUtil.throwableContainsException(e, TimeoutException.class) || ThrowableUtil.throwableContainsException(e, SSLException.class); - } - - @NonNull @Deprecated - private static String getApiError(@NonNull Context context, @NonNull ApiException e) { - String text; - if ("missingtitle".equals(e.getCode()) || "invalidtitle".equals(e.getCode())) { - text = context.getResources().getString(R.string.page_does_not_exist_error); - } else { - text = context.getString(R.string.error_server_response); - } - return text; - } - - // TODO: migrate this to ApiException.toString() - @NonNull @Deprecated - private static String getApiErrorMessage(@NonNull Context c, @NonNull ApiException e) { - String text; - if (e.getInfo() != null) { - // if we have an actual message from the server, then prefer it - text = c.getString(R.string.format_error_server_message, e.getInfo()); - } else if (e.getCode() != null) { - // otherwise, just show the error code - text = c.getString(R.string.format_error_server_code, e.getCode()); - } else { - // if all else fails, show the message of the exception - text = e.getMessage(); - } - return text; } @Deprecated public static class AppError { diff --git a/app/src/main/java/org/wikipedia/views/WikiErrorView.java b/app/src/main/java/org/wikipedia/views/WikiErrorView.java index 7d35c00..a52ba93 100644 --- a/app/src/main/java/org/wikipedia/views/WikiErrorView.java +++ b/app/src/main/java/org/wikipedia/views/WikiErrorView.java @@ -13,7 +13,6 @@ import android.widget.Space; import android.widget.TextView; -import org.mediawiki.api.json.ApiException; import org.wikipedia.R; import butterknife.BindView; @@ -76,13 +75,6 @@ } ErrorType getErrorType(@Nullable Throwable caught) { - // apps-android-java-mwapi wraps all exceptions in an ApiException. Strip it so we get - // useful information about the underlying cause. - // TODO: update when the apps-android-java-mwapi dependency is dropped (T141127) - if (caught instanceof ApiException) { - caught = caught.getCause(); - } - if (caught != null && is404(caught)) { return ErrorType.PAGE_MISSING; } diff --git a/app/src/test/java/org/wikipedia/test/TestApi.java b/app/src/test/java/org/wikipedia/test/TestApi.java deleted file mode 100644 index 0038ef9..0000000 --- a/app/src/test/java/org/wikipedia/test/TestApi.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.wikipedia.test; - -import android.support.annotation.NonNull; - -import org.mediawiki.api.json.Api; - -import java.net.MalformedURLException; -import java.net.URL; - -public class TestApi extends Api { - @NonNull - private final TestWebServer server; - - public TestApi(@NonNull TestWebServer server) { - super("domain"); - this.server = server; - } - - @Override - public URL getApiUrl() { - try { - return new URL(server.getUrl("/")); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } -} diff --git a/settings.gradle b/settings.gradle index d5d62df..12e495c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -20,4 +20,3 @@ } include ':app' -includeExists ':java-mwapi:lib', 'json' -- To view, visit https://gerrit.wikimedia.org/r/361294 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id8dde4eb22aa408e643a9b622dba654ffc5319f1 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Yashasvi <yash.gird...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits