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