package com.fastaccess.ui.widgets.recyclerview.scroll;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
/**
* Created by Kosh on 8/2/2015. copyrights are reserved @
*/
@SuppressWarnings("FieldCanBeLocal") public abstract class InfiniteScroll extends RecyclerView.OnScrollListener {
private int previousTotal = 0;
private boolean loading = true;
private int visibleThreshold = 2;
private int firstVisibleItem;
private int visibleItemCount;
private int totalItemCount;
private int current_page = 0;
private RecyclerViewPositionHelper mRecyclerViewHelper;
private static final int HIDE_THRESHOLD = 20;
private int scrolledDistance = 0;
private boolean controlsVisible = true;
public InfiniteScroll() {}
@Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
mRecyclerViewHelper = RecyclerViewPositionHelper.createHelper(recyclerView);
visibleItemCount = recyclerView.getChildCount();
totalItemCount = mRecyclerViewHelper.getItemCount();
firstVisibleItem = mRecyclerViewHelper.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
current_page++;
onLoadMore(current_page, previousTotal);
loading = true;
}
if (firstVisibleItem + visibleItemCount >= totalItemCount) {
onScrollToLast(recyclerView);
}
}
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) {
onHide(recyclerView);
controlsVisible = false;
scrolledDistance = 0;
} else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) {
onShow(recyclerView);
controlsVisible = true;
scrolledDistance = 0;
}
if ((controlsVisible && dy > 0) || (!controlsVisible && dy < 0)) {
scrolledDistance += dy;
}
}
@SuppressWarnings("WeakerAccess") protected void onScrollToLast(RecyclerView recyclerView) {}
@SuppressWarnings("WeakerAccess") protected void onShow(RecyclerView recyclerView) {}
@SuppressWarnings("WeakerAccess") protected void onHide(RecyclerView recyclerView) {
}
protected void onLoadMore(int page, int previousTotal) {}
public void reset() {
this.previousTotal = 0;
this.loading = true;
this.current_page = 0;
}
public void setCurrent_page(int page, int previousTotal) {
this.current_page = page;
this.previousTotal = previousTotal;
this.loading = true;
}
}