package Ġcom . office 1 4 . co ff eed ose . view models Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . office 1 4 . co ff eed ose . extensions . mutable LiveData Ċ import Ġcom . office 1 4 . co ff eed ose . network . HttpException Ex Ċ import Ġcom . office 1 4 . co ff eed ose . repository . C offee Repository Ċ import Ġcom . office 1 4 . co ff eed ose . repository . Preferences Repository Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠD rink s ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠ Ġprivate Ġval Ġcoffee Repository : ĠC offee Repository Ċ ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpref Repository Ġ= ĠPreferences Repository ĊĊĠĠĠ Ġprivate Ġval Ġapp Theme Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġnot Defined Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Job Ġ= ĠSuper visor Job () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Scope Ġ= ĠCor outine Scope ( viewModel Job Ġ+ ĠDispatch ers . Main ) ĊĊĠĠĠ Ġval Ġdr inks Ġ= Ġcoffee Repository . dr inks ĊĊĠĠĠ Ġvar Ġis Refresh ing Ġ= Ġmutable LiveData ( false ) ĊĊĠĠĠ Ġvar ĠerrorMessage : ĠMutable LiveData < String ?> Ġ= Ġmutable LiveData ( null ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Id Ġ= Ġmutable LiveData ( not Defined Id ) ĊĠĠĠ Ġprivate Ġval Ġ_ navig ating Orders Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġval Ġnavig ating Orders : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navig ating Orders ĊĊĠĠĠ Ġval Ġselected Id : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ selected Id ĊĊĠĠĠ Ġfun Ġget Dr ink Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoffee Ġ= Ġdr inks . value ?. first OrNull Ġ{ Ġcoffee Ġ-> Ġcoffee . id Ġ== Ġ_ selected Id . value Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcoffee ?. name Ġ?: Ġ" Not Ġdefined " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Data () ĊĠĠĠĠĠĠĠ Ġapp Theme . value Ġ= Ġpref Repository . getApp Theme () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Data ( show Refresh : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Refresh ) Ġis Refresh ing . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoffee Repository . refresh Dr inks () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( response Ex : ĠHttp Exception Ex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġresponse Ex . error . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . value Ġ= Ġex . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Refresh ) Ġis Refresh ing . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone Navig ating D ose () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Id . value Ġ= Ġnot Defined Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone Navig ating Orders () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Id . value Ġ= Ġnot Defined Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Dr ink ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Id . value Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate Orders () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navig ating Orders . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Theme () Ġ: ĠLive Data < Int > Ġ= Ġapp Theme ĊĊĠĠĠ Ġfun Ġswitch Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( app Theme . value Ġ== ĠAppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme . value Ġ= ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme . value Ġ= ĠAppCompat Delegate . MODE _ N IGHT _ YES ĊĊĠĠĠĠĠĠĠ Ġpref Repository . save App Theme ( app Theme . value !! ) ĊĠĠĠ Ġ} Ċ } Ċ