package Ġcom . pri am bu di 1 9 . mov iest v shows . data . repository . paging Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . pri am bu di 1 9 . mov iest v shows . data . model . movie . Movie Ċ import Ġcom . pri am bu di 1 9 . mov iest v shows . data . repository . remote . Remote DataSource Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ Ċ class ĠMovie Paging Source ( private Ġval Ġremote DataSource : ĠRemote DataSource , Ġprivate Ġval Ġmovie Category : ĠMovie Category ) Ġ: ĠP aging Source < Int , ĠMovie >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfirst Page Ġ= Ġ 1 ĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Int , ĠMovie >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . anchor Position ?. let Ġ{ Ġanchor Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanchor Page Ġ= Ġstate . closest Page To Position ( anchor Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Page ?. prev Key ?. plus ( 1 ) Ġ?: Ġanchor Page ?. next Key ?. minus ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠMovie > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġparams . key Ġ?: Ġfirst Page ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ: ĠList < Movie > Ġ= Ġwhen ( movie Category ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Category . POP ULAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . get Pop ular Movie ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Category . TOP _ R ATED ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . get Top R ated Movie ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( page Ġ== Ġfirst Page ) Ġnull Ġelse Ġpage Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġif Ġ( response . isEmpty ()) Ġnull Ġelse Ġpage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }