From 75e68dbac106c2782a25f09a3b4d11d5e222becb Mon Sep 17 00:00:00 2001 From: Floens Date: Thu, 13 Aug 2015 22:44:09 +0200 Subject: [PATCH] Let scroll listener call onScrolledToBottom --- .../floens/chan/ui/adapter/PostAdapter.java | 32 ++++++++----------- .../chan/ui/layout/ThreadListLayout.java | 16 ++++++++-- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java index bb406e35..3c146ffa 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java @@ -108,15 +108,6 @@ public class PostAdapter extends RecyclerView.Adapter { break; case TYPE_STATUS: ((StatusViewHolder) holder).threadStatusCell.update(); - - // Avoid calling in the RecyclerView layout pass - holder.itemView.post(new Runnable() { - @Override - public void run() { - onScrolledToBottom(); - } - }); - break; case TYPE_LAST_SEEN: break; @@ -196,6 +187,20 @@ public class PostAdapter extends RecyclerView.Adapter { return displayList.size(); } + public int getUnfilteredDisplaySize() { + int size = sourceList.size(); + + if (showStatusView()) { + size++; + } + + if (lastSeenIndicatorPosition >= 0) { + size++; + } + + return size; + } + public List getDisplayList() { return displayList; } @@ -267,13 +272,6 @@ public class PostAdapter extends RecyclerView.Adapter { return postPosition; } - private void onScrolledToBottom() { - if (bound && lastPostCount < sourceList.size()) { - lastPostCount = sourceList.size(); - postAdapterCallback.onListScrolledToBottom(); - } - } - private boolean showStatusView() { return postAdapterCallback.getLoadable().isThreadMode(); } @@ -304,7 +302,5 @@ public class PostAdapter extends RecyclerView.Adapter { public interface PostAdapterCallback { Loadable getLoadable(); - - void onListScrolledToBottom(); } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java index bdf6f77a..536f20bd 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java @@ -67,6 +67,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL private int spanCount = 2; private int background; private boolean searchOpen; + private int lastPostCount; public ThreadListLayout(Context context, AttributeSet attrs) { super(context, attrs); @@ -102,6 +103,12 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL // int top = recyclerView.getLayoutManager().getChildAt(0).getTop(); showingThread.loadable.listViewIndex = index; // showingThread.loadable.listViewTop = top; + + int last = getCompleteBottomAdapterPosition(); + if (last == postAdapter.getUnfilteredDisplaySize() - 1 && last > lastPostCount) { + lastPostCount = last; + ThreadListLayout.this.callback.onListScrolledToBottom(); + } } } }); @@ -326,6 +333,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL openReply(false); showSearch(false); showingThread = null; + lastPostCount = 0; } public List getDisplayingPosts() { @@ -425,12 +433,12 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL return -1; } - private int getCompleteTopAdapterPosition() { + private int getCompleteBottomAdapterPosition() { switch (postViewMode) { case LIST: - return ((LinearLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); + return ((LinearLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition(); case CARD: - return ((GridLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); + return ((GridLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition(); } return -1; } @@ -439,6 +447,8 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL void showThread(Loadable loadable); void requestNewPostLoad(); + + void onListScrolledToBottom(); } public interface ThreadListLayoutCallback {