package Ġbr . com . github finder . data . repository . paging Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġbr . com . github finder . data . model . Repo Ċ import Ġbr . com . github finder . data . network . web service . Github Api WebService Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ Ċ // ĠGitHub Ġpage ĠAPI Ġis Ġ 1 Ġbased : Ġhttps :// developer . github . com / v 3 /# pagination Ċ private Ġconst Ġval ĠG ITHUB _ START ING _ PAGE _ INDEX Ġ= Ġ 1 Ċ private Ġconst Ġval ĠNET WORK _ PAGE _ SIZE Ġ= Ġ 3 0 Ċ Ċ class ĠGitHub Repo Paging Source ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠGithub Api WebService , ĊĠĠĠ Ġprivate Ġval Ġquery : ĠString Ċ ) Ġ: ĠP aging Source < Int , ĠRepo > (){ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠP aging Source . Load Params < Int >): ĠP aging Source . Load Result < Int , ĠRepo > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparams . key Ġ?: ĠG ITHUB _ START ING _ PAGE _ INDEX ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġservice . list Repos ( query , Ġposition , Ġparams . load Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Key Ġ= Ġif Ġ( response . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+ Ġ( params . load Size Ġ/ ĠNET WORK _ PAGE _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( position Ġ== ĠG ITHUB _ START ING _ PAGE _ INDEX ) Ġnull Ġelse Ġposition Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Int , ĠRepo >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . anchor Position ?. let Ġ{ Ġanchor Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . closest Page To Position ( anchor Position )?. prev Key ?. plus ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstate . closest Page To Position ( anchor Position )?. next Key ?. minus ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }