package Ġd mit ri y kh alt ur in . stocks ag gregator . presenter Ċ Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . Main Application Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . api . ApiService Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . executor . Post Execution Thread Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . executor . Thread Executor Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . model . mapper . stocks Response To C urrencies List Ċ import Ġd mit ri y kh alt ur in . stocks ag gregator . view . currency _ list . adapter . Currency Data Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . concurrent . schedule Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠD mit ri y ĠK halt ur in Ġ< d mit ry . halt ur in . 8 6 @ gmail . com > Ċ Ġ* Ġfor Ġandroid - medical note - test - task Ġon Ġ 1 9 . 0 3 . 1 9 Ġ 2 1 : 5 7 . Ċ Ġ*/ Ċ class ĠMain Presenter : ĠViewModel () Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠFETCH ING _ DELAY Ġ= Ġ 0 L ĊĠĠĠ Ġconst Ġval ĠFETCH ING _ TIMEOUT Ġ= Ġ 1 5 0 0 0 L ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġapp Component Ġby Ġlazy Ġ{ ĠMain Application . injector . getApp Component () Ġ} ĊĊĠ Ġprivate Ġval Ġapi Service Ġby Ġlazy Ġ{ ĠApi Service . create () Ġ} ĊĊĠ Ġ@ Inject Ġlateinit Ġvar Ġthread Executor : ĠThread Executor ĊĊĠ Ġ@ Inject Ġlateinit Ġvar Ġpost Execution Thread : ĠPost Execution Thread ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġapp Component . inject ( this ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġapi Request Disposable : ĠDis posable ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġfetching Task : ĠTimer Task ? Ġ= Ġnull ĊĊĠ Ġval Ġc urrencies LiveData Ġ= ĠMutable LiveData < Mutable List < Currency Data >>() ĊĊĠ Ġfun Ġfetching Sto cks () Ġ{ ĊĠĠĠ Ġfetching Task Ġ= ĠTimer (). schedule ( ĊĠĠĠĠĠ ĠFETCH ING _ DELAY , ĊĠĠĠĠĠ ĠFETCH ING _ TIMEOUT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġget Sto cks List () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġinterrupt Fetching () Ġ{ ĊĠĠĠ Ġfetching Task ?. cancel () ĊĠ Ġ} ĊĊĠ Ġfun Ġget Sto cks List () Ġ{ ĊĠĠĠ Ġif Ġ( api Request Disposable Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġapi Request Disposable Ġ= Ġapi Service . get Sto cks () ĊĠĠĠĠĠĠĠ Ġ. map (:: stocks Response To C urrencies List ) ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . from ( thread Executor )) ĊĠĠĠĠĠĠĠ Ġ. observe On ( post Execution Thread . get Scheduler ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠ Ġc urrencies LiveData . value Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠ Ġapi Request Disposable Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġhandle Ġexception ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠ Ġapi Request Disposable ?. dispose () ĊĊĠĠĠ Ġsuper . on Cle ared () ĊĠ Ġ} Ċ Ċ } Ċ