package Ġa cademy . bang kit . lant ing . ui . task image Ċ Ċ import Ġa cademy . bang kit . lant ing . R Ċ import Ġa cademy . bang kit . lant ing . data . model . Food Ċ import Ġa cademy . bang kit . lant ing . data . model . Food Size Ċ import Ġa cademy . bang kit . lant ing . data . model . N utr ition Ċ import Ġa cademy . bang kit . lant ing . databinding . Activity Task Image Binding Ċ import Ġa cademy . bang kit . lant ing . utils . Date Helper Ċ import Ġa cademy . bang kit . lant ing . utils . Image Storage Manager Ċ import Ġa cademy . bang kit . lant ing . utils . Result State Ċ import Ġa cademy . bang kit . lant ing . utils . setVisible Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠTask Image Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Task Image Binding ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠTask Image ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask Image Adapter : ĠTask Image Adapter ĊĊĠĠĠ Ġprivate Ġvar Ġfood Image : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġimage : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġfood s Ġ= Ġmutable Map Of < Int , ĠN utr ition >() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Task Image Activity " ĊĊĠĠĠĠĠĠĠ Ġ@ String Res ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ FAILED Ġ= ĠR . string . add _ image _ failed ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ FAILED _ EMPTY Ġ= ĠR . string . add _ image _ failed _ no _ food ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ IMAGE Ġ= Ġ" extra _ image " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ N UT RI ENTS Ġ= Ġ" extra _ nut rient s " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Layout () ĊĊĠĠĠĠĠĠĠ Ġimage ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Food s ( it ). observe ( this ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Toast ( getString ( TEXT _ FAILED _ EMPTY )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result And Finish ( RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ observe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data . forEach Ġ{ Ġfood Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneeded N utr ition Ġ= Ġfood . size [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġfood Size -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN utr ition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Helper . today TimeStamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . energy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . protein , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . fat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . car bo hyd rate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood s [ food . id ] Ġ= Ġneeded N utr ition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Image Adapter . set Food s ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Toast ( getString ( TEXT _ FAILED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result And Finish ( RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onCreate : ĠLoading ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Result And Finish ( RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Result And Finish ( result : ĠInt , Ġnut rient s : ĠList < N utr ition >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġm Intent . putExtra ( EXTRA _ IMAGE , Ġfood Image ) ĊĠĠĠĠĠĠĠ Ġnut rient s ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= ĠArrayList < N utr ition >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewValue . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Intent . put Parcelable ArrayList Extra ( EXTRA _ N UT RI ENTS , ĠnewValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Result ( result , Ġm Intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Toast ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loading ( state : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Add Task . setVisible (! state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Task Container . setVisible (! state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Task . setVisible (! state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpb Loading . setVisible ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Task Image Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġtask Image Adapter Ġ= ĠTask Image Adapter () ĊĊĠĠĠĠĠĠĠ Ġfood Image Ġ= Ġintent . getString Extra ( EXTRA _ IMAGE ) ĊĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfood Image ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Storage Manager . getImage From Internal Storage ( this @ Task Image Activity , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ?. let Ġ{ Ġbitmap Ġ-> Ġiv Food Image . setImage Bitmap ( bitmap ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Add Task . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnut rient s Ġ= Ġfood s . map Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result And Finish ( RESULT _ OK , Ġnut rient s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Image Adapter . on Size Updated Ġ= Ġobject Ġ: ĠTask Image Adapter . On Size Updated Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset On Size Updated ( food : ĠFood , Ġfood Size : ĠFood Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew N utr ition Ġ= ĠN utr ition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Helper . today TimeStamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . energy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . protein , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . fat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood Size . car bo hyd rate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood s . remove ( food . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfood s [ food . id ] Ġ= Ġnew N utr ition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Task . adapter Ġ= Ġtask Image Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Task . layout Manager Ġ= ĠLinearLayoutManager ( this @ Task Image Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }