package com.xda.one.ui.listener;
import android.support.v7.widget.RecyclerView;
public class InfiniteRecyclerLoadHelper extends RecyclerView.OnScrollListener
implements RecyclerEndHelper.Callback {
private final Callback mCallback;
private final RecyclerEndHelper mRecyclerEndHelper;
private final RecyclerView.OnScrollListener mScrollListener;
// Pagination stuff
private int mTotalPages;
private int mLoadedPage = 1;
private boolean mLoading = false;
public InfiniteRecyclerLoadHelper(final RecyclerView recyclerView, final Callback callback,
final int totalPages, final RecyclerView.OnScrollListener scrollListener) {
mRecyclerEndHelper = new RecyclerEndHelper(recyclerView, this);
mCallback = callback;
mTotalPages = totalPages;
mScrollListener = scrollListener;
recyclerView.setOnScrollListener(this);
}
@Override
public void onListEndReached() {
if (mLoadedPage < mTotalPages && !mLoading) {
mLoading = true;
mCallback.loadMoreData(++mLoadedPage);
}
}
/**
* This method should be called when the loading is finished
*/
public void onLoadFinished() {
mLoading = false;
}
public boolean hasMoreData() {
return mLoadedPage < mTotalPages;
}
@Override
public void onScrollStateChanged(final RecyclerView recyclerView, final int newState) {
if (mScrollListener != null) {
mScrollListener.onScrollStateChanged(recyclerView, newState);
}
mRecyclerEndHelper.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
if (mScrollListener != null) {
mScrollListener.onScrolled(recyclerView, dx, dy);
}
mRecyclerEndHelper.onScrolled(recyclerView, dx, dy);
}
public void updateRecyclerView(RecyclerView recyclerView) {
mRecyclerEndHelper.updateRecyclerView(recyclerView);
}
public boolean isLoading() {
return mLoading;
}
public interface Callback {
public void loadMoreData(final int page);
}
}