package Ġcom . el ih im as . mov ied atabase . paging Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . el ih im as . mov ied atabase . apis . Movies Database Service Ċ import Ġcom . el ih im as . mov ied atabase . model . Movie Ċ import Ġcom . el ih im as . mov ied atabase . repository . Movies Repository Ċ Ċ class ĠSearch Movies Paging Source ( ĊĠĠĠ Ġprivate Ġval Ġquery : ĠString , ĊĠĠĠ Ġprivate Ġval Ġmovies Database Service : ĠMov ies Database Service Ċ ) Ġ: ĊĠĠĠ ĠP aging Source < Long , ĠMovie >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Long , ĠMovie >): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Long >): ĠLoad Result < Long , ĠMovie > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġparams . key Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( page Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmovies Response Ġ= Ġmovies Database Service . search Movies ( query , Ġpage ) ĊĠĠĠĠĠĠĠ Ġval Ġmovies Ġ= Ġmovies Response . movies ĊĠĠĠĠĠĠĠ Ġval Ġprevious Page : ĠLong ? Ġ= Ġif Ġ( page Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnext Key : ĠLong Ġ= Ġmovies Response . page Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Page , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ