package Ġcom . will . habit . widget . recycle view . paging Ċ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġcom . will . habit . widget . recycle view . view model . Paging Index Loader Ċ import Ġcom . will . habit . base . Item ViewModel Ċ import Ġcom . will . habit . binding . collection . Diff Observable ArrayList Ċ Ċ /** Ċ Ġ* ĠDesc : Ġ ä¿ĿåŃĺ é¡µ çłģ åĪĨé¡µ ä¿¡æģ¯ Ċ Ġ* Ġ< p > Ċ Ġ*/ Ċ internal Ġclass ĠPage Index DataSource < ITEM Ġ: ĠItem ViewModel < *> >( ĊĠĠĠĠĠĠĠ Ġitem Callback : ĠDiff Util . Item Callback < ITEM >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdata Loader : ĠP aging Index Loader < ITEM >, ĊĠĠĠĠĠĠĠ Ġval Ġload Result : Ġ( error : ĠBoolean ) Ġ-> ĠUnit ) Ġ: ĠP aging DataSource < ITEM > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæķ°æį® æºĲ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsource Ġ= ĠDiff Observable ArrayList ( item Callback ) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġload Callback Ġ= ĠLoad Callback Impl () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸ĭ ä¸Ģ é¡µ é¡µ çłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġnext Page Index Ġ= ĠPAGE _ NUM _ INIT ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĢ» é¡µ æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtotal Pages Ġ= ĠPAGE _ NUM _ INIT ĊĊĠĠĠ Ġoverride Ġfun Ġget Items (): ĠDiff Observable ArrayList < ITEM > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġno More (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnext Page Index Ġ> Ġtotal Pages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Online Data ( refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Loader . load Data ( PAGE _ NUM _ INIT , Ġload Callback ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Loader . load Data ( next Page Index . coerce At Least ( 2 ), Ġload Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLoad Callback Impl Ġ: ĠLoad Callback < ITEM > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( items : ĠList < ITEM >, Ġpage Index : ĠInt ?, Ġtotal Pages : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page Index DataSource . next Page Index Ġ= Ġif Ġ( page Index Ġ== Ġnull ) ĠPAGE _ NUM _ INIT Ġelse Ġ( page Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page Index DataSource . total Pages Ġ= Ġtotal Pages Ġ?: ĠPAGE _ NUM _ INIT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page Index DataSource . source . submit ( items , Ġpage Index Ġ!= Ġnull Ġ&& Ġpage Index Ġ> ĠPAGE _ NUM _ INIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page Index DataSource . load Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page Index DataSource . load Result ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ