Mholloway has uploaded a new change for review.

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

Change subject: Add support for loading link preview content via RESTBase
......................................................................

Add support for loading link preview content via RESTBase

Obtains link preview content from a RESTBase lead section request, if the
article is on English Wikipedia and RESTBase content loading is enabled.

A forthcoming patch will add a feature flag to push this to a small
portion of our beta users.

Also eliminates some unused variables and adds a null check to both
versions of *PageLead.getDescription().

Bug: T111126
Change-Id: I7bb5335639f720fe2fb62422ff2a3cafa93fadfc
---
M app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewContents.java
M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
M app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
M app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
M app/src/main/java/org/wikipedia/server/restbase/RbPageService.java
A app/src/main/java/org/wikipedia/util/PageLoadUtil.java
7 files changed, 90 insertions(+), 32 deletions(-)


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

diff --git a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java 
b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
index 0f5d38c..572383f 100644
--- a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
+++ b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
@@ -12,8 +12,6 @@
 import org.wikipedia.page.bottomcontent.BottomContentHandler;
 import org.wikipedia.page.bottomcontent.BottomContentInterface;
 import org.wikipedia.page.leadimages.LeadImagesHandler;
-import org.wikipedia.server.PageService;
-import org.wikipedia.server.PageServiceFactory;
 import org.wikipedia.server.PageLead;
 import org.wikipedia.server.PageRemaining;
 import org.wikipedia.server.ServiceError;
@@ -22,6 +20,7 @@
 import org.wikipedia.savedpages.LoadSavedPageTask;
 import org.wikipedia.search.SearchBarHideHandler;
 import org.wikipedia.util.DimenUtil;
+import org.wikipedia.util.PageLoadUtil;
 import org.wikipedia.views.ObservableWebView;
 import org.wikipedia.views.SwipeRefreshLayoutWithScroll;
 
@@ -34,7 +33,6 @@
 import retrofit.client.Response;
 
 import android.content.Intent;
-import android.content.res.Resources;
 import android.os.Build;
 import android.support.annotation.NonNull;
 import android.support.annotation.VisibleForTesting;
@@ -616,8 +614,11 @@
 
     @VisibleForTesting
     protected void loadLeadSection(final int startSequenceNum) {
-        getApiService().pageLead(model.getTitle().getPrefixedText(), 
calculateLeadImageWidth(),
-                !app.isImageDownloadEnabled(), new PageLead.Callback() {
+        PageLoadUtil.getApiService(model.getTitle().getSite()).pageLead(
+                model.getTitle().getPrefixedText(),
+                PageLoadUtil.calculateLeadImageWidth(),
+                !app.isImageDownloadEnabled(),
+                new PageLead.Callback() {
                     @Override
                     public void success(PageLead pageLead, Response response) {
                         Log.v(TAG, response.getUrl());
@@ -699,14 +700,11 @@
         }).execute();
     }
 
-    private int calculateLeadImageWidth() {
-        Resources res = app.getResources();
-        return (int) (res.getDimension(R.dimen.leadImageWidth) / 
res.getDisplayMetrics().density);
-    }
-
     private void loadRemainingSections(final int startSequenceNum) {
-        getApiService().pageRemaining(model.getTitle().getPrefixedText(),
-                !app.isImageDownloadEnabled(), new PageRemaining.Callback() {
+        PageLoadUtil.getApiService(model.getTitle().getSite()).pageRemaining(
+                model.getTitle().getPrefixedText(),
+                !app.isImageDownloadEnabled(),
+                new PageRemaining.Callback() {
                     @Override
                     public void success(PageRemaining pageRemaining, Response 
response) {
                         Log.v(TAG, response.getUrl());
@@ -740,10 +738,6 @@
             return;
         }
         fragment.commonSectionFetchOnCatch(caught);
-    }
-
-    private PageService getApiService() {
-        return PageServiceFactory.create(model.getTitle().getSite());
     }
 
     /**
diff --git 
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewContents.java 
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewContents.java
index 340d1ea..3ccaec0 100755
--- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewContents.java
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewContents.java
@@ -7,6 +7,7 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.wikipedia.Utils;
+import org.wikipedia.server.restbase.RbPageLead;
 
 import java.text.BreakIterator;
 import java.util.ArrayList;
@@ -19,11 +20,6 @@
     private final PageTitle title;
     public PageTitle getTitle() {
         return title;
-    }
-
-    private final String leadImageName;
-    public String getLeadImageName() {
-        return leadImageName;
     }
 
     private final String extract;
@@ -40,7 +36,13 @@
         if (json.has("terms") && 
json.getJSONObject("terms").has("description")) {
             
title.setDescription(Utils.capitalizeFirstChar(json.getJSONObject("terms").getJSONArray("description").optString(0)));
         }
-        leadImageName = json.has("pageimage") ? "File:" + 
json.optString("pageimage") : null;
+    }
+
+    public LinkPreviewContents(RbPageLead pageLead, Site site) {
+        title = new PageTitle(pageLead.getDisplayTitle(), site);
+        extract = pageLead.getExtract();
+        title.setThumbUrl(pageLead.getLeadImageUrl());
+        title.setDescription(pageLead.getDescription());
     }
 
     /**
diff --git 
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java 
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
index b594d2f..90291ff 100755
--- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
@@ -13,8 +13,13 @@
 import org.wikipedia.page.gallery.GalleryCollection;
 import org.wikipedia.page.gallery.GalleryCollectionFetchTask;
 import org.wikipedia.page.gallery.GalleryThumbnailScrollView;
+import org.wikipedia.server.PageLead;
+import org.wikipedia.server.PageServiceFactory;
+import org.wikipedia.server.restbase.RbPageLead;
+import org.wikipedia.settings.Prefs;
 import org.wikipedia.util.ApiUtil;
 import org.wikipedia.util.FeedbackUtil;
+import org.wikipedia.util.PageLoadUtil;
 import org.wikipedia.views.ViewUtil;
 
 import android.content.DialogInterface;
@@ -31,6 +36,9 @@
 import android.widget.TextView;
 
 import java.util.Map;
+
+import retrofit.RetrofitError;
+import retrofit.client.Response;
 
 public class LinkPreviewDialog extends SwipeableBottomDialog implements 
DialogInterface.OnDismissListener {
     private static final String TAG = "LinkPreviewDialog";
@@ -129,7 +137,38 @@
         progressBar.setVisibility(View.VISIBLE);
 
         // and kick off the task to load all the things...
-        new LinkPreviewFetchTask(app.getAPIForSite(pageTitle.getSite()), 
pageTitle).execute();
+        // Use RESTBase if the user is in the sample group
+        if (pageTitle.getSite().getLanguageCode().equalsIgnoreCase("en") && 
Prefs.forceRestbaseUsage()) {
+            Log.v(TAG, "Loading link preview with RESTBase");
+            PageServiceFactory.create(pageTitle.getSite()).pageLead(
+                    pageTitle.getPrefixedText(),
+                    PageLoadUtil.calculateLeadImageWidth(),
+                    !app.isImageDownloadEnabled(),
+                    new PageLead.Callback() {
+                        @Override
+                        public void success(PageLead pageLead, Response 
response) {
+                            Log.v(TAG, response.getUrl());
+                            progressBar.setVisibility(View.GONE);
+                            if (pageLead.getLeadSectionContent()!= null) {
+                                contents = new 
LinkPreviewContents((RbPageLead) pageLead, pageTitle.getSite());
+                                layoutPreview();
+                            } else {
+                                FeedbackUtil.showMessage(getActivity(), 
R.string.error_network_error);
+                                dismiss();
+                            }
+                        }
+
+                        @Override
+                        public void failure(RetrofitError error) {
+                            Log.e(TAG, "Link preview fetch error: " + error);
+                            // Fall back to MWAPI
+                            new 
LinkPreviewFetchTask(WikipediaApp.getInstance().getAPIForSite(pageTitle.getSite()),
 pageTitle).execute();
+                        }
+                    });
+        } else {
+            Log.v(TAG, "Loading link preview with MWAPI");
+            new LinkPreviewFetchTask(app.getAPIForSite(pageTitle.getSite()), 
pageTitle).execute();
+        }
 
         funnel = new LinkPreviewFunnel(app);
         funnel.logLinkClick();
@@ -139,10 +178,6 @@
 
     public interface OnNavigateListener {
         void onNavigate(PageTitle title);
-    }
-
-    public void setOnNavigateListener(OnNavigateListener listener) {
-        onNavigateListener = listener;
     }
 
     public void goToLinkedPage() {
diff --git a/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java 
b/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
index fb64a59..709f0e3 100644
--- a/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
+++ b/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
@@ -141,7 +141,7 @@
 
         @Nullable
         public String getDescription() {
-            return Utils.capitalizeFirstChar(description);
+            return description != null ? 
Utils.capitalizeFirstChar(description) : null;
         }
 
         @Nullable
diff --git a/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
index dbfdb8e..9de7ec8 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
@@ -33,6 +33,7 @@
     @Expose @Nullable private String displaytitle;
     @Expose @Nullable private String redirected;
     @Expose @Nullable private String normalizedtitle;
+    @Expose @Nullable private String extract;
     @Expose private int languagecount;
     @Expose private boolean editable;
     @Expose private boolean mainpage;
@@ -88,8 +89,6 @@
         }
     }
 
-
-
     /** Converter */
     public PageProperties toPageProperties() {
         return new PageProperties(this);
@@ -107,6 +106,9 @@
     public String getLastModified() {
         return lastmodified;
     }
+
+    @Nullable
+    public String getExtract() { return extract; }
 
     public int getLanguageCount() {
         return languagecount;
@@ -129,7 +131,7 @@
 
     @Nullable
     public String getDescription() {
-        return Utils.capitalizeFirstChar(description);
+        return description != null ? Utils.capitalizeFirstChar(description) : 
null;
     }
 
     @Nullable
diff --git a/app/src/main/java/org/wikipedia/server/restbase/RbPageService.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbPageService.java
index 4962d86..1e2da51 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbPageService.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbPageService.java
@@ -77,7 +77,7 @@
 
     /**
      * Optional boolean Retrofit parameter.
-     * We don't want to send the query parameter at all when it's false since 
the presence of the
+     * We don't want to send the query parameter at all when it's false since 
the presence of the parameter
      * alone is enough to trigger the truthy behavior.
      */
     private Boolean optional(boolean param) {
diff --git a/app/src/main/java/org/wikipedia/util/PageLoadUtil.java 
b/app/src/main/java/org/wikipedia/util/PageLoadUtil.java
new file mode 100644
index 0000000..fb2bda1
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/util/PageLoadUtil.java
@@ -0,0 +1,25 @@
+package org.wikipedia.util;
+
+import android.content.res.Resources;
+import android.support.annotation.NonNull;
+
+import org.wikipedia.R;
+import org.wikipedia.Site;
+import org.wikipedia.WikipediaApp;
+import org.wikipedia.server.PageService;
+import org.wikipedia.server.PageServiceFactory;
+
+public class PageLoadUtil {
+
+    @NonNull
+    public static PageService getApiService(Site site) {
+        return PageServiceFactory.create(site);
+    }
+
+    public static int calculateLeadImageWidth() {
+        Resources res = WikipediaApp.getInstance().getResources();
+        return (int) (res.getDimension(R.dimen.leadImageWidth) / 
res.getDisplayMetrics().density);
+    }
+
+    private PageLoadUtil() { }
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7bb5335639f720fe2fb62422ff2a3cafa93fadfc
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to