Dbrant has uploaded a new change for review.

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

Change subject: Fetch more feed contents automatically upon scroll.
......................................................................

Fetch more feed contents automatically upon scroll.

This adds the piece of Feed interactivity where it automatically requests
more feed content when the user scrolls down sufficiently far.

Quick implementation note: I put the call to notifyDataSetChanged() into a
Runnable that is posted to the message queue. This is because the request
to fetch more feed contents is made during the view-binding phase of the
RecyclerView. Since some feed cards may return their contents immediately
(in the same thread), it may cause the RecyclerAdapter to be invalidated
while it's still laying out its contents. This will ensure that
notifyDataSetChanged() will get called only when it finishes its previous
layout.

Change-Id: I2667ad4aa4c59260ed117c4624aa413306b6d1ec
---
M app/src/main/java/org/wikipedia/feed/FeedFragment.java
M app/src/main/java/org/wikipedia/feed/FeedViewCallback.java
M app/src/main/java/org/wikipedia/feed/view/FeedRecyclerAdapter.java
M app/src/main/java/org/wikipedia/feed/view/FeedView.java
4 files changed, 19 insertions(+), 5 deletions(-)


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

diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java 
b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
index e936b22..a1f3c9b 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -114,10 +114,9 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_feed_search:
-
-                // TODO: remove
-                coordinator.more(app.getSite());
-
+                if (getCallback() != null) {
+                    getCallback().onFeedSearchRequested();
+                }
                 return true;
             default:
                 return super.onOptionsItemSelected(item);
@@ -140,6 +139,11 @@
 
     private class FeedCallback implements FeedViewCallback {
         @Override
+        public void onRequestMore() {
+            coordinator.more(app.getSite());
+        }
+
+        @Override
         public void onSelectPage(@NonNull PageTitle title) {
             if (getCallback() != null) {
                 getCallback().onFeedSelectPage(title);
diff --git a/app/src/main/java/org/wikipedia/feed/FeedViewCallback.java 
b/app/src/main/java/org/wikipedia/feed/FeedViewCallback.java
index 1816d9a..5a16e15 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedViewCallback.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedViewCallback.java
@@ -5,6 +5,7 @@
 import org.wikipedia.page.PageTitle;
 
 public interface FeedViewCallback {
+    void onRequestMore();
     void onSelectPage(@NonNull PageTitle title);
     void onAddPageToList(@NonNull PageTitle title);
     void onSearchRequested();
diff --git a/app/src/main/java/org/wikipedia/feed/view/FeedRecyclerAdapter.java 
b/app/src/main/java/org/wikipedia/feed/view/FeedRecyclerAdapter.java
index bdc84d8..dba5a73 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedRecyclerAdapter.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedRecyclerAdapter.java
@@ -45,6 +45,10 @@
         Card item = item(position);
         CardView view = holder.getView();
 
+        if (position == getItemCount() - 1 && callback != null) {
+            callback.onRequestMore();
+        }
+
         if (isCardAssociatedWithView(view, item)) {
             // Don't bother reloading the same card into the same view
             return;
diff --git a/app/src/main/java/org/wikipedia/feed/view/FeedView.java 
b/app/src/main/java/org/wikipedia/feed/view/FeedView.java
index 27b0af1..ce12cb5 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedView.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedView.java
@@ -41,7 +41,12 @@
     }
 
     public void update() {
-        recyclerAdapter.notifyDataSetChanged();
+        post(new Runnable() {
+            @Override
+            public void run() {
+                recyclerAdapter.notifyDataSetChanged();
+            }
+        });
     }
 
     private void init() {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2667ad4aa4c59260ed117c4624aa413306b6d1ec
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <dbr...@wikimedia.org>

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

Reply via email to