/* Ċ Ġ* Ġ* Ċ Ġ* Ġ Ġ* ĠCreated Ġby ĠR af san ĠA hm ad Ġon Ġ 9 / 2 7 / 2 1 , Ġ 5 : 3 0 ĠPM Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġ. ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . raf san . news app . utils Ċ Ċ import Ġandroid . widget . Abs ListView Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . raf san . news app . utils . Constants . Companion . QUERY _ PER _ PAGE Ċ Ċ abstract Ġclass ĠEnd less Recycler On Scroll Listener ( ĊĠĠĠ Ġprivate Ġval Ġthresh Hold : ĠInt Ġ= ĠQUERY _ PER _ PAGE Ċ ) Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠ Ġvar Ġis Error Ġ= Ġfalse ĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Last Page Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Scrolling Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġfirst Visible Item : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvisible ItemCount : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtotal ItemCount : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠAbs ListView . On Scroll Listener . SCROLL _ STATE _ TO UCH _ SCROLL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scrolling Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠ Ġval Ġm LayoutManager Ġ= Ġre cyclerView . layout Manager ĊĠĠĠĠĠĠĠ Ġwhen Ġ( m LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Visible Item Positions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager . findFirst Visible Item Positions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġmaximum Ġelement Ġwithin Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= Ġget First Visible Item ( first Visible Item Positions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// first Visible Item Ġ= Ġfirst Visible Item Positions [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLinearLayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException (" Unsupported ĠLayout Manager ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm LayoutManager ?. let Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġmanager . child Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġmanager . item Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis NoError Ġ= Ġ! isError ĊĠĠĠĠĠĠĠ Ġval Ġis Not Loading And IsNot Last Page Ġ= Ġ! isLoading Ġ&& Ġ! is Last Page ĊĠĠĠĠĠĠĠ Ġval Ġis At Last Item Ġ= Ġ( first Visible Item Ġ+ Ġvisible ItemCount ) Ġ>= Ġtotal ItemCount ĊĠĠĠĠĠĠĠ Ġval Ġis Not At Beginning Ġ= Ġfirst Visible Item Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġis Total More Than Visible Ġ= Ġtotal ItemCount Ġ>= Ġthresh Hold ĊĊĠĠĠĠĠĠĠ Ġval Ġshould Pag inate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NoError Ġ&& Ġis Not Loading And IsNot Last Page Ġ&& Ġis At Last Item Ġ&& Ġis Not At Beginning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġis Total More Than Visible Ġ&& Ġis Scrolling ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Pag inate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scrolling Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad More () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget First Visible Item ( first Visible Item Positions : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠmaxSize Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfirst Visible Item Positions . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġfirst Visible Item Positions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( first Visible Item Positions [ i ] Ġ> ĠmaxSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġfirst Visible Item Positions [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠmaxSize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset OnLoad More () Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Visible Item Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvisible ItemCount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtotal ItemCount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠonLoad More () Ċ Ċ }