package Ġcom . me lo die . par ot ia . data . search Ċ Ċ import Ġandroidx . paging . Pager Ċ import Ġandroidx . paging . Paging Config Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . Paging Source Ċ import Ġcom . me lo die . par ot ia . api . INITIAL _ LOAD _ SIZE Ċ import Ġcom . me lo die . par ot ia . api . PAGE _ SIZE Ċ import Ġcom . me lo die . par ot ia . api . START ING _ PAGE _ INDEX Ċ import Ġcom . me lo die . par ot ia . api . service . Search Service Ċ import Ġcom . me lo die . par ot ia . domain . search . Search Photo Params Ċ import Ġcom . me lo die . par ot ia . model . Photo Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch Photo Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠSearch Service Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġget Search Photos Stream ( params : ĠSearch Photo Params ): ĠFlow < Paging Data < Photo >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= ĠP aging Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= ĠPAGE _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Place holders Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Load Size Ġ= ĠINITIAL _ LOAD _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Photo Paging Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). flow ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSearch Photo Paging Source ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠSearch Service , ĊĠĠĠ Ġprivate Ġval Ġsearch Photo Params : ĠSearch Photo Params Ċ ) Ġ: ĠP aging Source < Int , ĠPhoto >() Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠPhoto > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġparams . key Ġ?: ĠSTART ING _ PAGE _ INDEX ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( query , ĠorderBy , Ġcolor , Ġorientation ) Ġ= Ġsearch Photo Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphotos Ġ= Ġservice . search Photos ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . load Size Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Ġ?: Ġ"", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor Ġ?: Ġ"", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= Ġorientation Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġphotos . results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġif Ġ( page Ġ== ĠSTART ING _ PAGE _ INDEX ) Ġnull Ġelse Ġpage Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġif Ġ( photos . results . isEmpty ()) Ġnull Ġelse Ġpage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ