package Ġcom . pad c my an mar . firebase . kotlin . components . rv set Ċ Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ Ċ class ĠSmart Scroll Listener ( private Ġval Ġcontroller : ĠController Smart Scroll ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġvisible ItemCount : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġpast Visible Items : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtotal ItemCount : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis List End Reached Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġprevious Dy : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent Dy : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( rv : ĠRecyclerView ?, Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( rv , Ġdx , Ġdy ) ĊĊĠĠĠĠĠĠĠ Ġcurrent Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠ Ġif Ġ( current Dy Ġ> Ġprevious Dy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// from Ġtop Ġto Ġbottom ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Dy Ġ< Ġprevious Dy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// from Ġbottom Ġto Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis List End Reached Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġrv !!. layout Manager . child Count ĊĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġrv . layout Manager . item Count ĊĠĠĠĠĠĠĠ Ġpast Visible Items Ġ= Ġ( rv . layout Manager Ġas ĠLinearLayoutManager ). findFirst Visible Item Position () ĊĊĠĠĠĠĠĠĠ Ġprevious Dy Ġ= Ġcurrent Dy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView ?, Ġscroll State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , Ġscroll State ) ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll State Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible ItemCount Ġ+ Ġpast Visible Items Ġ>= Ġtotal ItemCount Ġ&& Ġ! is List End Reached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis List End Reached Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . on List End Reached () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠController Smart Scroll Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon List End Reached () ĊĠĠĠ Ġ} Ċ }