package Ġru . i andre ys he v . feature D ream s . viewModel Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġru . i andre ys he v . core Android . rx . io To Main Ċ import Ġru . i andre ys he v . core Android . rx . subscribe Ċ import Ġru . i andre ys he v . core Android . viewModel . Single Live Typed Event Ċ import Ġru . i andre ys he v . feature D ream s . domain . Fetch D ream s Result Ċ import Ġru . i andre ys he v . feature D ream s . use Case . IF etch D ream s UseCase Ċ import Ġru . i andre ys he v . feature D ream s Api . api . ID ream s Repository Ċ import Ġru . i andre ys he v . feature D ream s Api . domain . D ream Ċ import Ġru . i andre ys he v . v ext . live Data . mutable LiveData Of Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠD ream List ViewModel Ċ @ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġrepository : ĠID ream s Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfetch D ream s UseCase : ĠIF etch D ream s UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġdream s : ĠLive Data < List < D ream >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm D ream s ĊĠĠĠ Ġval Ġrefresh ing : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Refresh ing ĊĠĠĠ Ġval Ġoptions Target : ĠLive Data < D ream > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Options Target ĊĠĠĠ Ġval Ġfetch Result : ĠLive Data < Fetch D ream s Result > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Fetch Result ĊĊĠĠĠ Ġprivate Ġval Ġm D ream s Ġ= ĠMutable LiveData < List < D ream >>() ĊĠĠĠ Ġprivate Ġval Ġm Refresh ing Ġ= Ġmutable LiveData Of ( false ) ĊĠĠĠ Ġprivate Ġval Ġm Options Target Ġ= ĠMutable LiveData < D ream >() ĊĠĠĠ Ġprivate Ġval Ġm Fetch Result Ġ= ĠSingle Live Typed Event < Fetch D ream s Result >() ĊĊĠĠĠ Ġprivate Ġval Ġm D ream s Subscription : ĠDis posable ĊĠĠĠ Ġprivate Ġvar Ġm Refresh ing Subscription : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm D ream s Subscription Ġ= Ġrepository . dream s Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġm D ream s . value Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Refresh ing Subscription Ġ= Ġfetch D ream s UseCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. io To Main () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġm Refresh ing . value Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: handle Result , Ġ:: handle Fetch Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Refresh ing . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClose D ream Options () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Options Target . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġm D ream s Subscription . dispose () ĊĠĠĠĠĠĠĠ Ġm Refresh ing Subscription ?. dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Result ( result : ĠFetch D ream s Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Fetch Result . post Value ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Fetch Error ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠ Ġ} Ċ Ċ } Ċ