package Ġcom . har ish . y ify . presentation . screens . listing Ċ Ċ import Ġcom . har ish . y ify . domain . model . Movie Ċ import Ġcom . har ish . y ify . domain . use cases . Listing UseCase Ċ import Ġcom . har ish . y ify . presentation . common . Constants Ċ import Ġcom . har ish . y ify . presentation . common . base . Base Presenter Ċ import Ġcom . har ish . y ify . presentation . common . ux . toast not ific ator . Toast Not ific ator Ċ import Ġcom . har ish . y ify . presentation . common . ux . screen navigator . Screen Navigator Ċ import Ġcom . har ish . y ify . presentation . screens . landing . di . rx . schedul ers . Base Scheduler Provider Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . ob servers . Disposable Single Observer Ċ Ċ class ĠListing Presenter ( private Ġval Ġuse Case : ĠListing UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġscheduler Provider : ĠBase Scheduler Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfilter Movies Helper : ĠFilter Movies Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġscreen Navigator : ĠScreen Navigator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtoast Helper : ĠToast Not ific ator ) Ġ: ĠBase Presenter < Listing Contract . View >(), ĠListing Contract . Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmovies From Model : ĠSingle < Mutable List < Movie >> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view !!. get Screen Code ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Movie Type . LATE ST Ġ-> Ġuse Case . get Latest Movies ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Movie Type . POP ULAR Ġ-> Ġuse Case . get Pop ular Movies ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Movie Type . TOP _ R ATED Ġ-> Ġuse Case . get Top R ated Movies ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġuse Case . get Top R ated Movies ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġload Data ( true ) ĊĠĠĠĠĠĠĠ Ġview ?. let Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . observe Toolbar Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Filters ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . expand BS Filter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . observe Clear Filter Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . reset Filters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Movies Helper . clear Filters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . load Filters ( filter Movies Helper . quality , Ġfilter Movies Helper . genre , Ġfilter Movies Helper . rating , Ġfilter Movies Helper . orderBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Filter Icon Normal State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . collapse BS Filter Total () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Data ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . observe Filter Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Movies Helper . update Filters ( view . get Quality Filter Val (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . get Genre Filter Val (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . get Rating Filter Val (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . orderBy Filter Val ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter Movies Helper . has Filters Changed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . collapse BS Filter Total () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Filter Icon Normal State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . collapse BS Filter Partial () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Filter Icon Warning State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Data ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . observe Retry Loading Button Click (). subscribe Ġ{ Ġload Data ( true ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . list Request New Page (). observe On ( scheduler Provider . ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġload Data ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . observe Movie Click (). subscribe Ġ{ Ġmovie Ġ-> Ġscreen Navigator . to Details Page ( movie ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Data ( is First Load : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. let Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Load ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Loading Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Loading More Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Subscription ( movies From Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( scheduler Provider . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( scheduler Provider . ui ()). subscribe With ( object Ġ: ĠDis posable Single Observer < Mutable List < Movie >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( movies : ĠMutable List < Movie >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Content Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Loading More Indicator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Data ( movies ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Helper . show Toast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Load ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Error Screen ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Loading More Error Indicator ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }