/* Copyright 2017 Andrew Dawson * * This file is part of Tusky. * * Tusky is free software: you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with Tusky. If not, see * . */ package com.keylesspalace.tusky; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; public abstract class EndlessOnScrollListener extends RecyclerView.OnScrollListener { private int visibleThreshold = 15; private int currentPage = 0; private int previousTotalItemCount = 0; private boolean loading = true; private int startingPageIndex = 0; private LinearLayoutManager layoutManager; public EndlessOnScrollListener(LinearLayoutManager layoutManager) { this.layoutManager = layoutManager; } @Override public void onScrolled(RecyclerView view, int dx, int dy) { int totalItemCount = layoutManager.getItemCount(); int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); if (totalItemCount < previousTotalItemCount) { currentPage = startingPageIndex; previousTotalItemCount = totalItemCount; if (totalItemCount == 0) { loading = true; } } if (loading && totalItemCount > previousTotalItemCount) { loading = false; previousTotalItemCount = totalItemCount; } if (!loading && lastVisibleItemPosition + visibleThreshold > totalItemCount) { currentPage++; onLoadMore(currentPage, totalItemCount, view); loading = true; } } public void reset() { currentPage = startingPageIndex; previousTotalItemCount = 0; loading = true; } public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view); }