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; break;
case TYPE_STATUS: case TYPE_STATUS:
((StatusViewHolder) holder).threadStatusCell.update(); ((StatusViewHolder) holder).threadStatusCell.update();
// Avoid calling in the RecyclerView layout pass
holder.itemView.post(new Runnable() {
@Override
public void run() {
onScrolledToBottom();
}
});
break; break;
case TYPE_LAST_SEEN: case TYPE_LAST_SEEN:
break; break;
@ -196,6 +187,20 @@ public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
return displayList.size(); return displayList.size();
} }
public int getUnfilteredDisplaySize() {
int size = sourceList.size();
if (showStatusView()) {
size++;
}
if (lastSeenIndicatorPosition >= 0) {
size++;
}
return size;
}
public List<Post> getDisplayList() { public List<Post> getDisplayList() {
return displayList; return displayList;
} }
@ -267,13 +272,6 @@ public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
return postPosition; return postPosition;
} }
private void onScrolledToBottom() {
if (bound && lastPostCount < sourceList.size()) {
lastPostCount = sourceList.size();
postAdapterCallback.onListScrolledToBottom();
}
}
private boolean showStatusView() { private boolean showStatusView() {
return postAdapterCallback.getLoadable().isThreadMode(); return postAdapterCallback.getLoadable().isThreadMode();
} }
@ -304,7 +302,5 @@ public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public interface PostAdapterCallback { public interface PostAdapterCallback {
Loadable getLoadable(); Loadable getLoadable();
void onListScrolledToBottom();
} }
} }

@ -67,6 +67,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
private int spanCount = 2; private int spanCount = 2;
private int background; private int background;
private boolean searchOpen; private boolean searchOpen;
private int lastPostCount;
public ThreadListLayout(Context context, AttributeSet attrs) { public ThreadListLayout(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@ -102,6 +103,12 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
// int top = recyclerView.getLayoutManager().getChildAt(0).getTop(); // int top = recyclerView.getLayoutManager().getChildAt(0).getTop();
showingThread.loadable.listViewIndex = index; showingThread.loadable.listViewIndex = index;
// showingThread.loadable.listViewTop = top; // 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); openReply(false);
showSearch(false); showSearch(false);
showingThread = null; showingThread = null;
lastPostCount = 0;
} }
public List<Post> getDisplayingPosts() { public List<Post> getDisplayingPosts() {
@ -425,12 +433,12 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
return -1; return -1;
} }
private int getCompleteTopAdapterPosition() { private int getCompleteBottomAdapterPosition() {
switch (postViewMode) { switch (postViewMode) {
case LIST: case LIST:
return ((LinearLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); return ((LinearLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition();
case CARD: case CARD:
return ((GridLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); return ((GridLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition();
} }
return -1; return -1;
} }
@ -439,6 +447,8 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
void showThread(Loadable loadable); void showThread(Loadable loadable);
void requestNewPostLoad(); void requestNewPostLoad();
void onListScrolledToBottom();
} }
public interface ThreadListLayoutCallback { public interface ThreadListLayoutCallback {

Loading…
Cancel
Save