Dbrant has submitted this change and it was merged.

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/bottomcontent/BottomContentHandler.java
A 
wikipedia/src/main/java/org/wikipedia/page/bottomcontent/MainPageReadMoreTopicTask.java
M wikipedia/src/main/java/org/wikipedia/savedpages/RefreshSavedPageTask.java
4 files changed, 94 insertions(+), 10 deletions(-)

Approvals:
  Dbrant: Looks good to me, approved



diff --git a/wikipedia/src/main/java/org/wikipedia/page/Page.java 
b/wikipedia/src/main/java/org/wikipedia/page/Page.java
index 9b3e407..4dbd72c 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/bottomcontent/BottomContentHandler.java
 
b/wikipedia/src/main/java/org/wikipedia/page/bottomcontent/BottomContentHandler.java
index 04e77c3..25d4b76 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();
@@ -259,19 +260,46 @@
         }
     }
 
-    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().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;
                 if (!readMoreItems.getPageTitles().isEmpty()) {
                     // If there are results, set up section and make sure it's 
visible
                     setupReadMoreSection(layoutInflater, readMoreItems);
-                    readMoreContainer.setVisibility(View.VISIBLE);
+                    showReadMore();
                 } else {
                     // If there's no results, just hide the section
-                    readMoreContainer.setVisibility(View.GONE);
+                    hideReadMore();
                 }
                 layoutContent();
             }
@@ -286,6 +314,14 @@
         }.execute();
     }
 
+    private void hideReadMore() {
+        readMoreContainer.setVisibility(View.GONE);
+    }
+
+    private void showReadMore() {
+        readMoreContainer.setVisibility(View.VISIBLE);
+    }
+
     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..74ebc2f
--- /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;
+    }
+
+    private 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: merged
Gerrit-Change-Id: Ia4568e6a1f3e350de05629af954ad8a5649b05cd
Gerrit-PatchSet: 5
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <bsitzm...@wikimedia.org>
Gerrit-Reviewer: BearND <bsitzm...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to