BearND has uploaded a new change for review.

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

Change subject: Read more suggestions for main page
......................................................................

Read more suggestions for main page

On the main page, display three did you mean results based
on a single entry from the user's history.

We're looking at the last history entry that is not of source
main page or random.

Change-Id: Ia4568e6a1f3e350de05629af954ad8a5649b05cd
---
M wikipedia/src/main/java/org/wikipedia/page/Page.java
M wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java
M 
wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
A 
wikipedia/src/main/java/org/wikipedia/page/bottomcontent/MainPageReadMoreTopicTask.java
M wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
5 files changed, 94 insertions(+), 8 deletions(-)


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

diff --git a/wikipedia/src/main/java/org/wikipedia/page/Page.java 
b/wikipedia/src/main/java/org/wikipedia/page/Page.java
index f22fff6..c2410f7 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/Page.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/Page.java
@@ -57,9 +57,7 @@
     }
 
     public boolean couldHaveReadMoreSection() {
-        return !getPageProperties().isMainPage()
-                && !getTitle().isFilePage()
-                && !getTitle().isSpecial();
+        return (!getTitle().isFilePage() && !getTitle().isSpecial());
     }
 
     @Override
diff --git a/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java 
b/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java
index f1e8891..9cb66c6 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/SuggestionsTask.java
@@ -1,7 +1,13 @@
 package org.wikipedia.page;
 
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.database.Cursor;
+import android.os.RemoteException;
+
 import org.wikipedia.PageTitle;
 import org.wikipedia.Site;
+import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.search.FullSearchArticlesTask;
 import org.mediawiki.api.json.Api;
 import org.mediawiki.api.json.ApiResult;
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
 
b/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
index ba480c7..cffc3af 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
@@ -1,6 +1,7 @@
 package org.wikipedia.page.bottomcontent;
 
 import android.text.Html;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -191,7 +192,7 @@
     public void beginLayout() {
         setupAttribution();
         if (parentFragment.getPage().couldHaveReadMoreSection()) {
-            requestReadMoreItems(activity.getLayoutInflater());
+            preRequestReadMoreItems(activity.getLayoutInflater());
         } else {
             
bottomContentContainer.findViewById(R.id.read_more_container).setVisibility(View.GONE);
             layoutContent();
@@ -253,9 +254,36 @@
         pageLicenseText.setMovementMethod(new 
LinkMovementMethodExt(linkHandler));
     }
 
-    private void requestReadMoreItems(final LayoutInflater layoutInflater) {
-        new SuggestionsTask(app.getAPIForSite(pageTitle.getSite()), 
pageTitle.getSite(),
-                pageTitle.getPrefixedText()) {
+    private void preRequestReadMoreItems(final LayoutInflater layoutInflater) {
+        if (parentFragment.getPage().getPageProperties().isMainPage()) {
+            new MainPageReadMoreTopicTask(activity) {
+                @Override
+                public void onFinish(PageTitle myTitle) {
+                    requestReadMoreItems(layoutInflater, myTitle);
+                }
+
+                @Override
+                public void onCatch(Throwable caught) {
+                    // Read More titles are expendable.
+                    Log.w(TAG, "Error while getting Read More topic for main 
page.", caught);
+                    // but lay out the bottom content anyway:
+                    layoutContent();
+                }
+            }.execute();
+        } else {
+            requestReadMoreItems(layoutInflater, pageTitle);
+        }
+    }
+
+    private void requestReadMoreItems(final LayoutInflater layoutInflater,
+                                      final PageTitle myTitle) {
+        if (myTitle == null || TextUtils.isEmpty(myTitle.getPrefixedText())) {
+            hideReadMore();
+            layoutContent();
+            return;
+        }
+        new SuggestionsTask(app.getAPIForSite(myTitle.getSite()), 
myTitle.getSite(),
+                myTitle.getPrefixedText()) {
             @Override
             public void onFinish(SearchResults results) {
                 readMoreItems = results;
@@ -280,6 +308,10 @@
         }.execute();
     }
 
+    private void hideReadMore() {
+        readMoreContainer.setVisibility(View.GONE);
+    }
+
     public PageTitle getTitle() {
         return pageTitle;
     }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/MainPageReadMoreTopicTask.java
 
b/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/MainPageReadMoreTopicTask.java
new file mode 100644
index 0000000..28e7eee
--- /dev/null
+++ 
b/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/MainPageReadMoreTopicTask.java
@@ -0,0 +1,51 @@
+package org.wikipedia.page.bottomcontent;
+
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.database.Cursor;
+import android.os.RemoteException;
+
+import org.wikipedia.PageTitle;
+import org.wikipedia.concurrency.SaneAsyncTask;
+import org.wikipedia.history.HistoryEntry;
+
+/**
+ * Get a Read More topic for the main page. This is looking at the history 
table.
+ * We're looking at the last history entry that is not of source main page or 
random.
+ */
+public class MainPageReadMoreTopicTask extends SaneAsyncTask<PageTitle> {
+    private final Context context;
+
+    public MainPageReadMoreTopicTask(Context context) {
+        super(SaneAsyncTask.SINGLE_THREAD);
+        this.context = context;
+    }
+
+    @Override
+    public PageTitle performTask() throws Throwable {
+        Cursor c = getInterestedHistoryEntry();
+        if (c.getCount() > 0) {
+            c.moveToFirst();
+            final HistoryEntry historyEntry = 
HistoryEntry.PERSISTENCE_HELPER.fromCursor(c);
+            return historyEntry.getTitle();
+        }
+        return null;
+    }
+
+    public android.database.Cursor getInterestedHistoryEntry() {
+        ContentProviderClient client = context.getContentResolver()
+                
.acquireContentProviderClient(HistoryEntry.PERSISTENCE_HELPER.getBaseContentURI());
+        try {
+            return client.query(
+                    HistoryEntry.PERSISTENCE_HELPER.getBaseContentURI(),
+                    null,
+                    "source != ? AND source != ? ",
+                    new String[] 
{Integer.toString(HistoryEntry.SOURCE_MAIN_PAGE),
+                            Integer.toString(HistoryEntry.SOURCE_RANDOM)},
+                    "timestamp DESC");
+        } catch (RemoteException e) {
+            // This shouldn't really be happening
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git 
a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java 
b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
index cfbd40c..71edaf1 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
@@ -27,7 +27,6 @@
         this.app = WikipediaApp.getInstance();
     }
 
-
     @Override
     public RequestBuilder buildRequest(Api api) {
         RequestBuilder builder =  super.buildRequest(api);

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

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

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

Reply via email to