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

Reply via email to