package Ġcom . an thon y . food map . view model Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . an thon y . food map . util . Event Ċ import Ġcom . an thon y . food map . R Ċ import Ġcom . an thon y . food map . model . Venue Ċ import Ġcom . an thon y . food map . model . Venue Results Response Ċ import Ġcom . an thon y . food map . repository . Ven ues Repository Ċ import Ġcom . an thon y . food map . util . wrap Esp ress o Id ling Resource Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Response Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠViewModel Ġfor Ġthe Ġven ue Ġlist Ġscreen . Ċ Ġ*/ Ċ class ĠV en ues ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġven ues Repository : ĠV en ues Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ items Ġ= ĠMutable LiveData < List < Venue >> (). apply Ġ{ Ġvalue Ġ= Ġempty List () Ġ} ĊĠĠĠ Ġval Ġitems : ĠLive Data < List < Venue >> Ġ= Ġ_ items ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Item Ġ= ĠMutable LiveData < Venue >() ĊĠĠĠ Ġval Ġselected Item : ĠLive Data < Venue > Ġ= Ġ_ selected Item ĊĊĠĠĠ Ġprivate Ġval Ġ_ empty Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġempty : ĠLive Data < Boolean > Ġ= Ġ_ empty ĊĊĠĠĠ Ġprivate Ġval Ġis Data Loading Error Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġprivate Ġval Ġ_ sn ackbar Text Ġ= ĠMutable LiveData < Event < Int >>() ĊĠĠĠ Ġval Ġsn ackbar Text : ĠLive Data < Event < Int >> Ġ= Ġ_ sn ackbar Text ĊĊĠĠĠ Ġprivate Ġfun Ġshow Snackbar Message ( message : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ sn ackbar Text . value Ġ= ĠEvent ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Ven ues ( sw : ĠString ?, Ġne : ĠString ?, Ġcenter : ĠLat Lng ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwrap Esp ress o Id ling Resource Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingle Response : ĠSingle < Response < Venue Results Response ?> ?> ? Ġ= Ġven ues Repository . api Service . search ( sw , Ġne , Ġ 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Response ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġresponse : ĠResponse < Venue Results Response ?> ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful Ġ&& Ġit . body ()?. meta ?. code Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġven ues Ġ= Ġit . body ()?. response ?. ven ues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġven ues ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted List Ġ= Ġit . sorted By Ġ{ Ġit . location . distance To ( center ) Ġ}. filter Ġ{ Ġit Ġ!= Ġselected Item . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad Success ( sort edList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠonLoad Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠonLoad Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠonLoad Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonLoad Success ( it : ĠList < Venue >) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Data Loading Error . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ items . value Ġ= ĠArrayList ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ empty . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonLoad Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Data Loading Error . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ items . value Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ empty . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar Message ( R . string . loading _ ven ues _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Item Click ( venue : ĠV en ue , Ġmap ViewModel : ĠMap ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . equals ( venue . id , Ġ_ selected Item . value ?. id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ_ selected Item . value Ġ= Ġven ue ĊĠĠĠĠĠĠĠ Ġ_ items . value ?. drop While Ġ{ Ġit Ġ== Ġven ue Ġ} ĊĠĠĠĠĠĠĠ Ġmap ViewModel . on Item Click ( venue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Item . value Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ