package Ġcom . sh ash ov . words . features . words . 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 . words . app . Words App Ċ import Ġcom . sh ash ov . words . features . words . data . local . Category Ċ import Ġcom . sh ash ov . words . features . words . data . local . Word Ċ import Ġcom . sh ash ov . words . features . words . use cases . Get Words UseCase Ċ import Ġdagger . Lazy Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . subscribers . Disposable Subscriber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠWord s ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġwords : ĠMutable LiveData < List < Word >> ĊĠĠĠ Ġprivate Ġvar Ġcategory : ĠMutable LiveData < Category > ĊĠĠĠ Ġprivate Ġvar ĠisLoading : ĠMutable LiveData < Boolean > ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Words UseCase : ĠLazy < Get Words UseCase > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ( application Ġas ĠWord s App ). words Component !!. inject ( this ) ĊĠĠĠĠĠĠĠ Ġwords Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġcategory Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= ĠMutable LiveData () ĊĊĠĠĠĠĠĠĠ Ġwords . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġcategory . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Analog s (): ĠLive Data < List < Word >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwords ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Category (): ĠLive Data < Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcategory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Loading (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisLoading ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġload Analog s ( c : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcategory . value Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġget Words UseCase . get (). get Words ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Words UseCase . Input ( c . id , ĠAndroid Schedulers . main Thread ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch UseCase Subscriber ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġsubscriptions Ġif Ġany ĊĠĠĠĠĠĠĠ Ġget Words UseCase . get (). cancel () ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Cle ared ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSearch UseCase Subscriber Ġ: ĠDis posable Subscriber < List < Word >>() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( list : ĠList < Word >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Received Ġresponse Ġfor Ġwords ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( words ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( value !! Ġas ĠArrayList < Word >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Value ( this . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Received Ġerror : Ġ" Ġ+ Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onComplete Ġcalled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠWord s ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} Ċ } Ċ