package Ġorg . step ic . d roid . core . download ing state Ċ Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġorg . step ic . d roid . core . present ers . Presenter Base Ċ import Ġorg . step ic . d roid . di . qual ifiers . Background Scheduler Ċ import Ġorg . step ic . d roid . di . qual ifiers . Main Scheduler Ċ import Ġorg . step ic . d roid . util . Suppress FB Warnings Ċ import Ġjavax . inject . Inject Ċ Ċ @ Suppress FB Warnings (" RC N _ RED UND ANT _ NULL CHECK _ OF _ NONNULL _ VALUE ") Ċ class ĠDownloading Presenter Ċ @ Inject Ċ constructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprogress Watcher : ĠProgress Watcher , ĊĠĠĠĠĠĠĠ Ġ@ Background Scheduler ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġscheduler : ĠScheduler , ĊĠĠĠĠĠĠĠ Ġ@ Main Scheduler ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmain Scheduler : ĠScheduler ) Ġ: ĠPres enter Base < Downloading View >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġid To Disposable Map Ġ= Ġhash Map Of < Long , ĠDis posable >() ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġfun Ġon StateChanged ( id : ĠLong , ĠisLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisten Loading Progress ( id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Listen Progress ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach View ( view : ĠDownloading View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach View ( view ) ĊĠĠĠĠĠĠĠ Ġif Ġ( composite Disposable . size () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Previous Ġdis posable Ġis Ġnot Ġdisposed Ġ$ composite Disposable ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetach View ( view : ĠDownloading View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . detach View ( view ) ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠĠĠĠĠ Ġid To Disposable Map . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlisten Loading Progress ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id To Disposable Map . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// we Ġalready Ġlisten ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġprogress Watcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. watch ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( main Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġprogress Ġ-> Ġview ?. on New Progress Value ( id , Ġprogress ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġid To Disposable Map . put ( id , Ġdis posable ) ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( dis posable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Listen Progress ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġid To Disposable Map . remove ( id )?. let Ġ{ Ġcomposite Disposable . remove ( it ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ