Let scroll listener call onScrolledToBottom

multisite
Floens 10 years ago
parent 754802392b
commit 75e68dbac1
  1. 32
      Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java
  2. 16
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java

@ -108,15 +108,6 @@ public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
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<RecyclerView.ViewHolder> {
return displayList.size();
}
public int getUnfilteredDisplaySize() {
int size = sourceList.size();
if (showStatusView()) {
size++;
}
if (lastSeenIndicatorPosition >= 0) {
size++;
}
return size;
}
public List<Post> getDisplayList() {
return displayList;
}
@ -267,13 +272,6 @@ public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
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<RecyclerView.ViewHolder> {
public interface PostAdapterCallback {
Loadable getLoadable();
void onListScrolledToBottom();
}
}

@ -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<Post> 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 {

Loading…
Cancel
Save