Mholloway has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/318161

Change subject: Retrofit edit preview fetching
......................................................................

Retrofit edit preview fetching

Change-Id: I653f2c4f68a10001209d7bac8e11226fb0c90ef1
---
D app/src/androidTest/java/org/wikipedia/editing/EditPreviewTaskTest.java
A app/src/androidTest/java/org/wikipedia/editing/EditPreviewTest.java
A app/src/main/java/org/wikipedia/editing/EditPreview.java
A app/src/main/java/org/wikipedia/editing/EditPreviewClient.java
M app/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
D app/src/main/java/org/wikipedia/editing/EditPreviewTask.java
6 files changed, 155 insertions(+), 125 deletions(-)


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

diff --git 
a/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTaskTest.java 
b/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTaskTest.java
deleted file mode 100644
index fdbb9ab..0000000
--- a/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTaskTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.wikipedia.editing;
-
-import android.support.annotation.NonNull;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.dataclient.WikiSite;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.testlib.TestLatch;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class EditPreviewTaskTest {
-    @Test
-    public void testPreview() throws Throwable {
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", WikiSite.forLanguageCode("test"));
-        long randomTime = System.currentTimeMillis();
-        final String wikiText = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + randomTime;
-
-        String result = Subject.execute(wikiText, title);
-        assertThat(result, containsString(String.valueOf(randomTime)));
-    }
-
-    private static class Subject extends EditPreviewTask {
-        public static String execute(String wikiText, PageTitle title) {
-            Subject subject = new Subject(wikiText, title);
-            subject.execute();
-            return subject.await();
-        }
-
-        @NonNull private final TestLatch latch = new TestLatch();
-        private String result;
-
-        Subject(String wikiText, PageTitle title) {
-            super(WikipediaApp.getInstance(), wikiText, title);
-        }
-
-        @Override
-        public void onFinish(String result) {
-            super.onFinish(result);
-            this.result = result;
-            latch.countDown();
-        }
-
-        public String await() {
-            latch.await();
-            return result;
-        }
-    }
-}
diff --git 
a/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTest.java 
b/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTest.java
new file mode 100644
index 0000000..8367a7b
--- /dev/null
+++ b/app/src/androidTest/java/org/wikipedia/editing/EditPreviewTest.java
@@ -0,0 +1,36 @@
+package org.wikipedia.editing;
+
+import android.support.annotation.NonNull;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.page.PageTitle;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertThat;
+
+@RunWith(AndroidJUnit4.class)
+public class EditPreviewTest {
+    @Test
+    public void testPreview() throws Throwable {
+        final WikiSite wiki = new WikiSite("test.wikipedia.org");
+        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", wiki);
+        final long randomTime = System.currentTimeMillis();
+        final String wikiText = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + randomTime;
+
+        new EditPreviewClient().previewEdit(wiki, title, wikiText,
+                new EditPreviewClient.EditPreviewCallback() {
+                    @Override
+                    public void success(@NonNull String preview) {
+                        assertThat(preview, 
containsString(String.valueOf(randomTime)));
+                    }
+
+                    @Override
+                    public void failure(@NonNull Throwable caught) {
+                        throw new RuntimeException(caught);
+                    }
+                });
+    }
+}
diff --git a/app/src/main/java/org/wikipedia/editing/EditPreview.java 
b/app/src/main/java/org/wikipedia/editing/EditPreview.java
new file mode 100644
index 0000000..8927693
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/editing/EditPreview.java
@@ -0,0 +1,29 @@
+package org.wikipedia.editing;
+
+import android.support.annotation.NonNull;
+
+import com.google.gson.annotations.SerializedName;
+
+import org.wikipedia.json.annotations.Required;
+import org.wikipedia.model.BaseModel;
+
+public class EditPreview extends BaseModel {
+    @SuppressWarnings("unused,NullableProblems") @Required @NonNull private 
Parse parse;
+    @NonNull protected Parse parse() {
+        return parse;
+    }
+
+    static class Parse {
+        @SuppressWarnings("unused,NullableProblems") @Required @NonNull 
private Text text;
+        @NonNull Text text() {
+            return text;
+        }
+    }
+
+    static class Text {
+        @SuppressWarnings("unused,NullableProblems") @SerializedName("*") 
@Required @NonNull private String result;
+        @NonNull String result() {
+            return result;
+        }
+    }
+}
diff --git a/app/src/main/java/org/wikipedia/editing/EditPreviewClient.java 
b/app/src/main/java/org/wikipedia/editing/EditPreviewClient.java
new file mode 100644
index 0000000..2821b5a
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/editing/EditPreviewClient.java
@@ -0,0 +1,63 @@
+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.page.PageTitle;
+import org.wikipedia.server.restbase.RbPageEndpointsCache;
+
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+public class EditPreviewClient {
+    @NonNull private final MwCachedService<Service> cachedService = new 
MwCachedService<>(Service.class);
+    @NonNull private final Retrofit retrofit = 
RbPageEndpointsCache.INSTANCE.getRetrofit();
+
+    Call<EditPreview> request(@NonNull final WikiSite wiki, @NonNull final 
PageTitle title,
+                            @NonNull final String wikitext, @NonNull final 
Callback cb) {
+        Call<EditPreview> call = 
cachedService.service(wiki).previewEdit("parse", "json", true,
+                true, true, "text", title.getPrefixedText(), wikitext);
+        call.enqueue(new retrofit2.Callback<EditPreview>() {
+            @Override
+            public void onResponse(Call<EditPreview> call, 
Response<EditPreview> response) {
+                if (response.isSuccessful()) {
+                    cb.success(response.body().parse().text().result(), call);
+                } else {
+                    cb.failure(RetrofitException.httpError(response, 
retrofit), call);
+                }
+            }
+
+            @Override
+            public void onFailure(Call<EditPreview> call, Throwable t) {
+                cb.failure(t, call);
+            }
+        });
+        return call;
+    }
+
+    public interface Callback {
+        void success(@NonNull String preview, Call<EditPreview> call);
+        void failure(@NonNull Throwable caught, Call<EditPreview> call);
+    }
+
+    private interface Service {
+        @FormUrlEncoded
+        @POST("w/api.php")
+        @SuppressWarnings("checkstyle:parameternumber")
+        Call<EditPreview> previewEdit(@NonNull @Field("action") String action,
+                                      @NonNull @Field("format") String format,
+                                      @Field("sectionpreview") boolean 
sectionPreview,
+                                      @Field("pst") boolean pst,
+                                      @Field("mobileformat") boolean 
mobileformat,
+                                      @NonNull @Field("prop") String prop,
+                                      @NonNull @Field("title") String title,
+                                      @NonNull @Field("text") String text);
+
+    }
+}
diff --git a/app/src/main/java/org/wikipedia/editing/EditPreviewFragment.java 
b/app/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
index 3095f29..a35570c 100644
--- a/app/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
+++ b/app/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
@@ -11,7 +11,6 @@
 import android.support.v4.app.Fragment;
 import android.support.v7.app.AlertDialog;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -34,11 +33,14 @@
 import org.wikipedia.page.PageTitle;
 import org.wikipedia.util.L10nUtil;
 import org.wikipedia.util.UriUtil;
+import org.wikipedia.util.log.L;
 import org.wikipedia.views.ObservableWebView;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+
+import retrofit2.Call;
 
 import static org.wikipedia.util.DeviceUtil.hideSoftKeyboard;
 
@@ -292,27 +294,24 @@
      */
     public void showPreview(final PageTitle title, final String wikiText) {
         hideSoftKeyboard(getActivity());
+        progressDialog.show();
 
-        new EditPreviewTask(WikipediaApp.getInstance(), wikiText, title) {
+        new 
EditPreviewClient().request(parentActivity.getPageTitle().getWikiSite(), title, 
wikiText,
+                new EditPreviewClient.Callback() {
             @Override
-            public void onBeforeExecute() {
-                progressDialog.show();
-            }
-
-            @Override
-            public void onFinish(String result) {
+            public void success(@NonNull String preview, @NonNull 
Call<EditPreview> call) {
                 if (!progressDialog.isShowing()) {
                     // no longer attached to activity!
                     return;
                 }
-                displayPreview(result);
-                previewHTML = result;
+                displayPreview(preview);
+                previewHTML = preview;
                 parentActivity.supportInvalidateOptionsMenu();
                 progressDialog.dismiss();
             }
 
             @Override
-            public void onCatch(Throwable caught) {
+            public void failure(@NonNull Throwable caught, @NonNull 
Call<EditPreview> call) {
                 if (!progressDialog.isShowing()) {
                     // no longer attached to activity!
                     return;
@@ -322,25 +321,27 @@
                 if (!(caught instanceof ApiException)) {
                     throw new RuntimeException(caught);
                 }
-                Log.d("Wikipedia", "Caught " + caught.toString());
+                L.d("Caught " + caught.toString());
                 final AlertDialog retryDialog = new 
AlertDialog.Builder(getActivity())
                         .setMessage(R.string.error_network_error)
-                        
.setPositiveButton(R.string.dialog_message_edit_failed_retry, new 
DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int 
which) {
-                                showPreview(title, wikiText);
-                                dialog.dismiss();
-                            }
-                        })
-                        
.setNegativeButton(R.string.dialog_message_edit_failed_cancel, new 
DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int 
which) {
-                                dialog.dismiss();
-                            }
-                        }).create();
+                        
.setPositiveButton(R.string.dialog_message_edit_failed_retry,
+                                new DialogInterface.OnClickListener() {
+                                    @Override
+                                    public void onClick(DialogInterface 
dialog, int which) {
+                                        showPreview(title, wikiText);
+                                        dialog.dismiss();
+                                    }
+                                })
+                        
.setNegativeButton(R.string.dialog_message_edit_failed_cancel,
+                                new DialogInterface.OnClickListener() {
+                                    @Override
+                                    public void onClick(DialogInterface 
dialog, int which) {
+                                        dialog.dismiss();
+                                    }
+                                }).create();
                 retryDialog.show();
             }
-        }.execute();
+        });
     }
 
     /**
diff --git a/app/src/main/java/org/wikipedia/editing/EditPreviewTask.java 
b/app/src/main/java/org/wikipedia/editing/EditPreviewTask.java
deleted file mode 100644
index 5e7bd82..0000000
--- a/app/src/main/java/org/wikipedia/editing/EditPreviewTask.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.wikipedia.editing;
-
-import android.support.annotation.NonNull;
-
-import org.mediawiki.api.json.Api;
-import org.mediawiki.api.json.ApiException;
-import org.mediawiki.api.json.ApiResult;
-import org.mediawiki.api.json.RequestBuilder;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.dataclient.ApiTask;
-import org.wikipedia.page.PageTitle;
-
-public class EditPreviewTask extends ApiTask<String> {
-    private final String wikiText;
-    @NonNull private final PageTitle title;
-
-    public EditPreviewTask(@NonNull WikipediaApp app, String wikiText, 
@NonNull PageTitle title) {
-        super(app.getAPIForSite(title.getWikiSite()));
-        this.wikiText = wikiText;
-        this.title = title;
-    }
-
-    @Override
-    public RequestBuilder buildRequest(Api api) {
-        return api.action("parse")
-                .param("sectionpreview", "true")
-                .param("pst", "true")
-                .param("mobileformat", "true")
-                .param("prop", "text")
-                .param("title", title.getPrefixedText())
-                .param("text", wikiText);
-    }
-
-    @Override
-    protected ApiResult makeRequest(RequestBuilder builder) throws 
ApiException {
-        return builder.post();
-    }
-
-    @Override
-    public String processResult(ApiResult result) throws Throwable {
-        return 
result.asObject().optJSONObject("parse").optJSONObject("text").optString("*");
-    }
-}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I653f2c4f68a10001209d7bac8e11226fb0c90ef1
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