package Ġcom . ax el _ stein . glu co se _ tracker . ui . edit . edit _ med ication Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . navigation . nav Args Ċ import Ġcom . ax el _ stein . glu co se _ tracker . R Ċ import Ġcom . ax el _ stein . glu co se _ tracker . databinding . Activity Edit Med ication Binding Ċ import Ġcom . ax el _ stein . glu co se _ tracker . ui . dialogs . Confirm Dialog Ċ import Ġcom . ax el _ stein . glu co se _ tracker . ui . dialogs . Confirm Dialog . On Confirm Listener Ċ import Ġcom . ax el _ stein . glu co se _ tracker . utils . hide Keyboard Ċ import Ġcom . ax el _ stein . glu co se _ tracker . utils . show Keyboard Ċ import Ġcom . ax el _ stein . glu co se _ tracker . utils . ui .* Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . android . material . sn ackbar . Snackbar . LENGTH _ SHORT Ċ Ċ class ĠEdit Med ication Activity Ġ: ĠAppCompatActivity (), ĠOn Confirm Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġargs : ĠEdit Med ication Activity Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠEdit Med ication ViewModel Ġby Ġview Models Ġ{ ĠEdit Med ication Factory ( this , Ġargs . id ) Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Edit Med ication Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Edit Med ication Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup Title Editor () ĊĠĠĠĠĠĠĠ Ġsetup Dos age Form Spinner () ĊĠĠĠĠĠĠĠ Ġsetup Dos age Editor () ĊĠĠĠĠĠĠĠ Ġsetup Units Spinner () ĊĊĠĠĠĠĠĠĠ Ġset View Visible ( args . id Ġ!= Ġ 0 L , Ġbinding . btn Toggle Active ) ĊĠĠĠĠĠĠĠ Ġbinding . btn Toggle Active . setOnClickListener Ġ{ ĠviewModel . toggle Active () Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . active LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Toggle Active . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( if Ġ( it ) ĠR . string . action _ suspend _ med ication _ t aking Ġelse ĠR . string . action _ resume _ med ication _ t aking ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Icon Resource ( if Ġ( it ) ĠR . drawable . icon _ pause Ġelse ĠR . drawable . icon _ play ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . showMessage LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġit . getContent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( msg Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġmsg , ĠLEN GTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . action Finish LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . handle Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ Ġfinish () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Title Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Title . setup Editor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . setTitle ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . title LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit Title . set Editor Text ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . error Empty Title LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . input Layout Title . show Empty FieldError ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Dos age Form Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . form Spinner . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( this @ Edit Med ication Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . form Spinner . setup Spinner ( binding . input Layout Form ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Dos age Form ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit Dos age . show Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . form Spinner . set Spinner Items ( resources . getString Array ( R . array . dos age _ forms )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . dos age Form LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . form Spinner . set Spinner Selection ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Dos age Editor () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Dos age . setup Editor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Dos age ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . dos age LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit Dos age . set Editor Text ( it , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Units Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . units Spinner . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( this @ Edit Med ication Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . units Spinner . setup Spinner ( binding . input Layout Units ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Dos age Unit ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . units Spinner . set Spinner Items ( resources . getString Array ( R . array . dos age _ units )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . dos age Unit LiveData . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . units Spinner . set Spinner Selection ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . activity _ editor , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . menu _ delete )?. isVisible Ġ= Ġargs . id Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ save Ġ-> ĠviewModel . save () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm Dialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( R . string . dialog _ title _ confirm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. message ( R . string . dialog _ msg _ delete _ med ication ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Btn Text ( R . string . action _ delete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Btn Text ( R . string . action _ cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Confirm ( tag : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . delete () ĊĠĠĠ Ġ} Ċ }