package Ġcom . ger o sp ri me . gy log . ui . exercises . add Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . ger o sp ri me . gy log . models . exercises . Exercise Database Save Result Ċ import Ġcom . ger o sp ri me . gy log . models . exercises . Loaded Single Exercise Result Ċ import Ġcom . ger o sp ri me . gy log . models . mus cle . M us cle Enum Ċ import Ġcom . ger o sp ri me . gy log . ui . exercises . R Ċ import Ġcom . ger o sp ri me . gy log . ui . exercises . add . Exercise Add Activity . Extras . RECORD _ ID Ċ import Ġcom . ger o sp ri me . gy log . ui . exercises . databinding . Activity Exercise Add Binding Ċ import Ġcom . google . android . material . app bar . Material Toolbar Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġdagger . android . Android Injection Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠExercise Add Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtoolbar Ġ: ĠMaterial Toolbar ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġfactory Ġ: ĠViewModel Provider . Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel Ġ: ĠExercise Add ViewModel ĊĊĊĠĠĠ Ġobject ĠEx tras Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREC ORD _ ID Ġ= Ġ" extra _ exercise _ record _ id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFLAG Ġ= Ġ" result _ flag " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINDEX Ġ= Ġ" result _ index " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmus cle Maps Ġ: ĠMutable Map < M us cle Enum , ĠCh ip > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġvar Ġchip M us cle Maps Ġ: ĠMutable Map < Chip , ĠM us cle Enum > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding Ġ: ĠActivity Exercise Add Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġselected M us cles Ġ: ĠArrayList < M us cle Enum > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Injection . inject ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , Ġfactory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Default Exercise Add ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Exercise Add Binding . inflate ( layout Inflater ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= ĠfindViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĊĠĠĠĠĠĠĠ ĠviewModel . save Result LiveData . observe ( this , ĠObserver Ġ{ Ġexercise Saved ( it ) Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . load Result LiveData . observe ( this , ĠObserver Ġ{ Ġexercise Loaded ( it ) Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . CH EST ] Ġ= Ġactivity Exercise Add M us cle Chest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Chest ] Ġ= ĠM us cle Enum . CH EST ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . CH EST _ UPPER ] Ġ= Ġactivity Exercise Add M us cle Chest Upper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Chest Upper ] Ġ= ĠM us cle Enum . CH EST _ UPPER ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . CH EST _ LOWER ] Ġ= Ġactivity Exercise Add M us cle Chest Lower ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Chest Lower ] Ġ= ĠM us cle Enum . CH EST _ LOWER ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . TR ICE PS ] Ġ= Ġactivity Exercise Add M us cle Tr ice ps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Tr ice ps ] Ġ= ĠM us cle Enum . TR ICE PS ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . B ICE PS ] Ġ= Ġactivity Exercise Add M us cle B ice ps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle B ice ps ] Ġ= ĠM us cle Enum . B ICE PS ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . BACK _ UPPER ] Ġ= Ġactivity Exercise Add M us cle Back Upper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Back Upper ] Ġ= ĠM us cle Enum . BACK _ UPPER ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . BACK _ LOWER ] Ġ= Ġactivity Exercise Add M us cle Back Lower ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Back Lower ] Ġ= ĠM us cle Enum . BACK _ LOWER ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . H AM STRING S ] Ġ= Ġactivity Exercise Add M us cle Ham string ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Ham string ] Ġ= ĠM us cle Enum . H AM STRING S ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . FORE AR MS ] Ġ= Ġactivity Exercise Add M us cle Fore arms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Fore arms ] Ġ= ĠM us cle Enum . FORE AR MS ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . SHO UL DER _ SIDE ] Ġ= Ġactivity Exercise Add M us cle Sh oulder Side ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Sh oulder Side ] Ġ= ĠM us cle Enum . SHO UL DER _ SIDE ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . SHO UL DER _ FRONT ] Ġ= Ġactivity Exercise Add M us cle Sh oulder Front ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Sh oulder Front ] Ġ= ĠM us cle Enum . SHO UL DER _ FRONT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . SHO UL DER _ BACK ] Ġ= Ġactivity Exercise Add M us cle Sh oulder Back ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Sh oulder Back ] Ġ= ĠM us cle Enum . SHO UL DER _ BACK ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . TRAP S ] Ġ= Ġactivity Exercise Add M us cle Tr aps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Tr aps ] Ġ= ĠM us cle Enum . TRAP S ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . ABS ] Ġ= Ġactivity Exercise Add M us cle Abs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Abs ] Ġ= ĠM us cle Enum . ABS ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . QU ADS ] Ġ= Ġactivity Exercise Add M us cle Qu ads ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Qu ads ] Ġ= ĠM us cle Enum . QU ADS ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Maps [ M us cle Enum . CAL V ES ] Ġ= Ġactivity Exercise Add M us cle Cal ves ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip M us cle Maps [ activity Exercise Add M us cle Cal ves ] Ġ= ĠM us cle Enum . CAL V ES ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Exercise ( get Exercise Id ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmus cle Check Event ( cmp Ġ: ĠCompound Button ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cmp . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected M us cles . add ( chip M us cle Maps [ cmp ] !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected M us cles . remove ( chip M us cle Maps [ cmp ] !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexercise Loaded ( result Ġ: ĠLoaded Single Exercise Result ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Exercise Add Edit Name . setText ( result . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Exercise Add Edit Description . setText ( result . description ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Exercise Add Edit Directions . setText ( result . directions ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected M us cles Ġ= Ġresult . mus cles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( selected M us cle Ġin Ġselected M us cles ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcheckBox Ġ= Ġmus cle Maps [ selected M us cle ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcheckBox ?. isChecked Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġmus cle Maps . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . setOn Checked ChangeListener Ġ{ Ġcompound Button , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmus cle Check Event ( compound Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexercise Saved ( result Ġ: ĠExercise Database Save Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġdata Intent . putExtra ( Result . FLAG , Ġresult . flag ) ĊĠĠĠĠĠĠĠ Ġdata Intent . putExtra ( Result . INDEX , Ġresult . item Index ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġdata Intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ exercises _ add _ activity , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . activity _ work out _ exercise _ edit _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Exercise () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Exercise () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġactivity Exercise Add Edit Name . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Exercise Add Edit Name . error Ġ= ĠgetString ( R . string . exercise _ add _ name _ is _ required ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġactivity Exercise Add Edit Description . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstruction Ġ= Ġactivity Exercise Add Edit Directions . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġmus cles Ġ: ĠArrayList < M us cle Enum > Ġ= Ġ Ġarray ListOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Exercise ( get Exercise Id (), Ġname , Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstruction , Ġselected M us cles ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Exercise Id () Ġ: ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( intent . has Extra ( RECORD _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getLong Extra ( RECORD _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }