Mholloway has uploaded a new change for review. https://gerrit.wikimedia.org/r/318102
Change subject: Retrofit Captcha handling ...................................................................... Retrofit Captcha handling Change-Id: I8c5e024f91bcf1a94fbc6dc33212ff55cea554e1 --- A app/src/main/java/org/wikipedia/editing/Captcha.java A app/src/main/java/org/wikipedia/editing/CaptchaClient.java M app/src/main/java/org/wikipedia/editing/CaptchaHandler.java D app/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java 4 files changed, 89 insertions(+), 38 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/02/318102/1 diff --git a/app/src/main/java/org/wikipedia/editing/Captcha.java b/app/src/main/java/org/wikipedia/editing/Captcha.java new file mode 100644 index 0000000..4d73efb --- /dev/null +++ b/app/src/main/java/org/wikipedia/editing/Captcha.java @@ -0,0 +1,22 @@ +package org.wikipedia.editing; + +import android.support.annotation.NonNull; + +public class Captcha { + @SuppressWarnings("unused,NullableProblems") @NonNull private FancyCaptchaReload fancycaptchareload; + @NonNull protected FancyCaptchaReload content() { + return fancycaptchareload; + } + + protected class FancyCaptchaReload { + @SuppressWarnings("unused,NullableProblems") @NonNull private String index; + @NonNull protected String index() { + return index; + } + } + + public interface Callback { + void success(@NonNull CaptchaResult result); + void failure(@NonNull Throwable caught); + } +} diff --git a/app/src/main/java/org/wikipedia/editing/CaptchaClient.java b/app/src/main/java/org/wikipedia/editing/CaptchaClient.java new file mode 100644 index 0000000..1cd927a --- /dev/null +++ b/app/src/main/java/org/wikipedia/editing/CaptchaClient.java @@ -0,0 +1,45 @@ +package org.wikipedia.editing; + + +import android.support.annotation.NonNull; + +import org.wikipedia.dataclient.WikiSite; +import org.wikipedia.dataclient.retrofit.MwCachedService; +import org.wikipedia.dataclient.retrofit.RetrofitException; +import org.wikipedia.server.restbase.RbPageEndpointsCache; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.http.GET; + +public class CaptchaClient { + @NonNull private final MwCachedService<Service> cachedService = new MwCachedService<>(Service.class); + @NonNull private final Retrofit retrofit = RbPageEndpointsCache.INSTANCE.getRetrofit(); + + public void refreshCaptcha(@NonNull final WikiSite wiki, @NonNull final Captcha.Callback cb) { + Call<Captcha> call = cachedService.service(wiki).refreshCaptcha(); + call.enqueue(new Callback<Captcha>() { + @Override + public void onResponse(Call<Captcha> call, Response<Captcha> response) { + if (response.isSuccessful()) { + cb.success(new CaptchaResult(response.body().content().index())); + } else { + cb.failure(RetrofitException.httpError(response, retrofit)); + } + } + + @Override + public void onFailure(Call<Captcha> call, Throwable t) { + cb.failure(t); + } + }); + } + + private interface Service { + /* Get a fresh Captcha ID. */ + @GET("w/api.php?action=fancycaptchareload&format=json") + Call<Captcha> refreshCaptcha(); + } +} diff --git a/app/src/main/java/org/wikipedia/editing/CaptchaHandler.java b/app/src/main/java/org/wikipedia/editing/CaptchaHandler.java index c39f09e..6d6c79b 100644 --- a/app/src/main/java/org/wikipedia/editing/CaptchaHandler.java +++ b/app/src/main/java/org/wikipedia/editing/CaptchaHandler.java @@ -60,26 +60,24 @@ captchaImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - new RefreshCaptchaTask(activity, wiki) { - @Override - public void onBeforeExecute() { - captchaProgress.setVisibility(View.VISIBLE); - } + captchaProgress.setVisibility(View.VISIBLE); + CaptchaClient apiService = new CaptchaClient(); + apiService.refreshCaptcha(wiki, new Captcha.Callback() { @Override - public void onFinish(@NonNull CaptchaResult result) { + public void success(@NonNull CaptchaResult result) { captchaResult = result; captchaProgress.setVisibility(View.GONE); handleCaptcha(true); } @Override - public void onCatch(Throwable caught) { + public void failure(@NonNull Throwable caught) { cancelCaptcha(); captchaProgress.setVisibility(View.GONE); FeedbackUtil.showError(activity, caught); } - }.execute(); + }); } }); } @@ -89,6 +87,22 @@ return token; } + @Nullable + public String captchaId() { + if (captchaResult != null) { + return captchaResult.getCaptchaId(); + } + return null; + } + + @Nullable + public String captchaWord() { + if (captchaText != null) { + return captchaText.getText().toString(); + } + return null; + } + public void restoreState(Bundle savedInstanceState) { if (savedInstanceState != null && savedInstanceState.containsKey("token") diff --git a/app/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java b/app/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java deleted file mode 100644 index 87a6deb..0000000 --- a/app/src/main/java/org/wikipedia/editing/RefreshCaptchaTask.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.wikipedia.editing; - -import android.content.Context; - -import org.mediawiki.api.json.Api; -import org.mediawiki.api.json.ApiResult; -import org.mediawiki.api.json.RequestBuilder; -import org.wikipedia.WikipediaApp; -import org.wikipedia.dataclient.ApiTask; -import org.wikipedia.dataclient.WikiSite; - -public class RefreshCaptchaTask extends ApiTask<CaptchaResult> { - public RefreshCaptchaTask(Context context, WikiSite wiki) { - super(((WikipediaApp)context.getApplicationContext()).getAPIForSite(wiki)); - } - - @Override - public RequestBuilder buildRequest(Api api) { - return api.action("fancycaptchareload"); - } - - @Override - public CaptchaResult processResult(ApiResult result) throws Throwable { - return new CaptchaResult( - result.asObject() - .optJSONObject("fancycaptchareload") - .optString("index") - ); - } -} -- To view, visit https://gerrit.wikimedia.org/r/318102 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8c5e024f91bcf1a94fbc6dc33212ff55cea554e1 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Mholloway <mhollo...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits