package Ġcom . example . r app i inter view . ui . activity . main Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . util . Log Ċ import Ġcom . example . r app i inter view . domain . model . Item Ċ import Ġcom . example . r app i inter view . infrastructure . manager . interfaces . Movies Manager Ċ import Ġcom . example . r app i inter view . infrastructure . repository . interfaces . Movies Repository Ċ import Ġcom . example . r app i inter view . infrastructure . rest . Rest Constants . API _ KEY _ V 3 Ċ import Ġcom . example . r app i inter view . infrastructure . util . Movie Category . POP ULAR Ċ import Ġcom . example . r app i inter view . infrastructure . util . Movie Category . UP COM ING Ċ import Ġcom . example . r app i inter view . infrastructure . util . Movie Category . TOP _ R ATED Ċ import Ġcom . example . r app i inter view . infrastructure . util . Movie Category Utils Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . addTo Ċ Ċ class ĠMain Presenter ( ĊĠĠĠ Ġprivate Ġval Ġview : ĠMain Contract . View , ĊĠĠĠ Ġprivate Ġval Ġmovies Manager : ĠMov ies Manager , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMov ies Repository , ĊĠĠĠ Ġprivate Ġval Ġmovie Category Utils : ĠMovie Category Utils Ċ ) Ġ: ĠMain Contract . Presenter Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Main Presenter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġoverride Ġfun Ġrefresh Movies () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Manager . get Movies ( 1 , Ġ 1 , ĠAPI _ KEY _ V 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do After Terminate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Movies ( response . body ()?. items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error Case ( response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error ( it . message Ġ?: Ġview . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Error Case ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( errorCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHere Ġyou Ġcould Ġshow Ġa Ġproper ĠPop Up Ġerror Ġfor Ġeach Ġerror Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 1 Ġ-> Ġview . show Error ( view . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 4 Ġ-> Ġview . show Error ( view . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 0 Ġ-> Ġview . show Error ( view . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġview . show Error ( view . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Movie Clicked ( movie : ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show On Movie Clicked Message ( movie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Movie Long Clicked ( movie : ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show Movie Detail ( movie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pop ular Movies Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Manager . get Pop ular Movies ( 1 , ĠAPI _ KEY _ V 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do After Terminate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Movies With Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Category Utils . get Category ( POP ULAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( POP ULAR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( POP ULAR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error Case ( response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( POP ULAR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error ( it . message Ġ?: Ġview . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Top R ated Movies Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Manager . get Top R ated Movies ( 1 , ĠAPI _ KEY _ V 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do After Terminate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Movies With Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Category Utils . get Category ( TOP _ R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( TOP _ R ATED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( TOP _ R ATED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error Case ( response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( TOP _ R ATED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error ( it . message Ġ?: Ġview . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Up coming Movies Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Manager . get Up coming Movies ( 1 , ĠAPI _ KEY _ V 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do After Terminate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Movies With Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Category Utils . get Category ( UP COM ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( UP COM ING )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( UP COM ING )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error Case ( response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( UP COM ING )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error ( it . message Ġ?: Ġview . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Items ( items : ĠList < Item > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . show No Items Found () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . hide No Items Found () ĊĠĠĠĠĠĠĠ Ġview . update Items ( items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pop ular FAB Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( POP ULAR )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Top R ated FAB Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( TOP _ R ATED )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Up coming FAB Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Items ( repository . get Movies With Category ( UP COM ING )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Search Icon Clicked ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmovies Manager . get Online Search ( 1 , ĠAPI _ KEY _ V 3 , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do After Terminate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Items ( response . body ()?. results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error Case ( response . code ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error ( it . message Ġ?: Ġview . getDefault ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). addTo ( composite Disposable ) ĊĠĠĠ Ġ} Ċ }