package Ġcom . vf . phot ob ank . ui . search Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . vf . phot ob ank . data . api . entity . Search Photos Result Page Ċ import Ġcom . vf . phot ob ank . domain . entity . Photo Ċ import Ġcom . vf . phot ob ank . domain . services . Photo Service Ċ import Ġcom . vf . phot ob ank . util . apply Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . addTo Ċ Ċ class ĠSearch ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġphoto Service : ĠPhoto Service Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdis pos ables Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Photo Page : ĠSearch Photos Result Page ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Query Term : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe Ġfirst Ġpage Ġof Ġsearched Ġphotos Ġfrom Ġthe ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Ġthe Ġsearch Ġquery Ġterm . ĊĠĠĠĠ Ġ* Ġ@ param ĠonSuccess Ġthe Ġaction Ġto Ġbe Ġperformed Ġin Ġcase Ġof Ġsuccess . ĊĠĠĠĠ Ġ* Ġ@ param ĠonError Ġthe Ġaction Ġto Ġbe Ġperformed Ġin Ġcase Ġof Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Se ar ched Photos First Page ( ĊĠĠĠĠĠĠĠ Ġquery : ĠString Ġ= Ġcurrent Query Term , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( total Results : ĠInt , Ġresults : ĠList < Photo >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Query Term Ġ= Ġquery ĊĊĠĠĠĠĠĠĠ Ġphoto Service . get Photos By Search ( query , Ġpage Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Schedulers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Page Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess . invoke ( it . numberOf Results , Ġit . photos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( dis pos ables ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe Ġnext Ġpage Ġof Ġsearched Ġphotos Ġfrom Ġthe ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠInv okes Ġ[ on Success ] Ġwith Ġan Ġempty Ġlist Ġas Ġparameter ĊĠĠĠĠ Ġ* Ġif Ġcurrent Ġpage Ġdoes Ġnot Ġhave Ġa Ġnext Ġpage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠonSuccess Ġthe Ġaction Ġto Ġbe Ġperformed Ġin Ġcase Ġof Ġsuccess . ĊĠĠĠĠ Ġ* Ġ@ param ĠonError Ġthe Ġaction Ġto Ġbe Ġperformed Ġin Ġcase Ġof Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Se ar ched Photos Next Page ( ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( List < Photo >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ ĠonError : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dis pos ables . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Page ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . next Page Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Service . get Photos By Search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Query Term , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġit . pageNumber Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Schedulers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Photo Page Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess . invoke ( result . photos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( dis pos ables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠonSuccess . invoke ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} Ċ } Ċ