package Ġcom . sh ash ov . drug s . features . drug s . presentation Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . arch . lifecycle . Android ViewModel Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . util . Log Ċ import Ġcom . sh ash ov . drug s . app . Dr ug s App Ċ import Ġcom . sh ash ov . drug s . features . drug s . data . local . Dr ug s Ċ import Ġcom . sh ash ov . drug s . features . drug s . use cases . Get Dr ug s UseCase Ċ import Ġdagger . Lazy Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . subscribers . Disposable Subscriber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠAn alog s ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġanalog s : ĠMutable LiveData < List < Dr ug s >> ĊĠĠĠ Ġprivate Ġvar Ġsub stance : ĠMutable LiveData < String > ĊĠĠĠ Ġprivate Ġvar ĠisLoading : ĠMutable LiveData < Boolean > ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Dr ug s UseCase : ĠLazy < Get Dr ug s UseCase > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ( application Ġas ĠDr ug s App ). drug s Component !!. inject ( this ) ĊĠĠĠĠĠĠĠ Ġanalog s Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġsub stance Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= ĠMutable LiveData () ĊĊĠĠĠĠĠĠĠ Ġanalog s . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġsub stance . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Analog s (): ĠLive Data < List < Dr ug s >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġanalog s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Sub stance (): ĠLive Data < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsub stance ; ĊĠĠĠ Ġ} ĊĠĠĠ Ġinternal Ġfun Ġget Loading (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisLoading ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Cle ared () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsub stance . value !!. isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġsub stance . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġclear Analog s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġload Analog s ( sub : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Analog s () ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsub stance . value Ġ= Ġsub ĊĠĠĠĠĠĠĠ Ġget Dr ug s UseCase . get (). get Analog s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Dr ug s UseCase . Input ( sub , ĠAndroid Schedulers . main Thread ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch UseCase Subscriber ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġsubscriptions Ġif Ġany ĊĠĠĠĠĠĠĠ Ġget Dr ug s UseCase . get (). cancel () ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Cle ared ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Analog s () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( an alog s . value !! Ġas ĠArrayList ). clear () ĊĠĠĠĠĠĠĠ Ġanalog s . post Value ( an alog s . value !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSearch UseCase Subscriber Ġ: ĠDis posable Subscriber < List < Dr ug s >>() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( list : ĠList < Dr ug s >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Received Ġresponse Ġfor Ġdrug s ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( an alog s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Ġ( value !! Ġas ĠArrayList < Dr ug s >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Value ( this . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Received Ġerror : Ġ" Ġ+ Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Analog s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onComplete Ġcalled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠAn alog s ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} Ċ } Ċ