package Ġcom . sk . splash . data . paging Ċ Ċ import Ġandroidx . paging . Pager Ċ import Ġandroidx . paging . Paging Source Ċ Ċ data Ġclass ĠFin ite Page Data < T >( ĊĠĠĠ Ġval Ġitems : ĠList < T >, ĊĠĠĠ Ġval Ġtotal Pages : ĠInt , Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġempty () Ġ= ĠFin ite Page Data < T >( listOf (), Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< V Ġ: ĠAny > Ġfinite Pager ( ĊĠĠĠ Ġtotal Pages : ĠInt Ġ= Ġ 1 , ĊĠĠĠ Ġblock : Ġsuspend Ġ( Int ) Ġ-> ĠFin ite Page Data < V > Ċ ): ĠP ager < Int , ĠV > Ġ= ĠP ager ( ĊĠĠĠ Ġconfig Ġ= Ġdefault Paging Config , ĊĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĠFin ite Paged Source ( total Pages , Ġblock ) Ġ} Ċ ) Ċ Ċ fun Ġ< V Ġ: ĠAny > Ġfinite Pager ( ĊĠĠĠ Ġtotal Pages : ĠInt Ġ= Ġ 1 , ĊĠĠĠ Ġpaging Source : ĠP aging Source < Int , ĠV > Ċ ): ĠP ager < Int , ĠV > Ġ= ĠP ager ( ĊĠĠĠ Ġconfig Ġ= Ġdefault Paging Config , ĊĠĠĠ Ġpaging Source Factory Ġ= Ġ{ Ġpaging Source Ġ}, Ċ ) Ċ Ċ class ĠFin ite Paged Source < V Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġvar Ġtotal Pages : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġblock : Ġsuspend Ġ( Int ) Ġ-> ĠFin ite Page Data < V >, Ċ ) Ġ: ĠP aged Source < V >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetNext Key ( currentPage : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( currentPage Ġ< Ġtotal Pages ) Ġreturn ĠcurrentPage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġparams . key Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġblock . invoke ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Pages Ġ= Ġresponse . total Pages ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( response . items , Ġget Previous Key ( page ), ĠgetNext Key ( page )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ