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