package Ġcom . y ves ch ion g . macro fit . activities Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġcom . y ves ch ion g . macro fit . App Ċ import Ġcom . y ves ch ion g . macro fit . R Ċ import Ġcom . y ves ch ion g . macro fit . adapters . array . N utr ition Fact s Spinner Ċ import Ġcom . y ves ch ion g . macro fit . constants . Constants Ċ import Ġcom . y ves ch ion g . macro fit . constants . Response Code Ċ import Ġcom . y ves ch ion g . macro fit . contracts . Add Food View Contract Ċ import Ġcom . y ves ch ion g . macro fit . models . N utr ition Fact Ċ import Ġcom . y ves ch ion g . macro fit . models . Weight Ċ import Ġkotlinx . android . synt hetic . main . activity _ add _ food .* Ċ import Ġkotlinx . android . synt hetic . main . list _ item _ food .* Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠAdd Food Activity Ġ: ĠBase Activity (), ĠAdd Food View Contract . View Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpresenter : ĠAdd Food View Contract . Presenter < Add Food View Contract . View > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ add _ food ) ĊĊĠĠĠĠĠĠĠ ĠApp . graph . inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . on Attach ( this ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . fetch N utr ition Fact s () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġspinner Ġitem Ġselected Ġlistener Ġto Ġrespond Ġaccordingly ĊĠĠĠĠĠĠĠ Ġn utr ition Fact Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing Ġfor Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent ?. adapter ?. getItem ( position )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠN utr ition Fact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . select N utr ition Fact ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdates Ġthe Ġcard Ġon Ġany Ġspinner Ġitem Ġselection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Weight ( weight . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweight . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing Ġfor Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing Ġfor Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Weight ( s . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġadd _ button . setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight Text Ġ= Ġweight . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Weight Valid Ġ= Ġpresenter . validate Weight ( weight Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Weight Valid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠValid ated Ġthe Ġfields Ġso Ġwe Ġcan Ġcreate Ġa Ġnew Ġfood ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn utr ition Fact Spinner . selected Item . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ! is ĠN utr ition Fact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup Ġa Ġresult Ġfood Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . putExtra ( Constants . RESULT _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . create Food ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getLong Extra ( Constants . EXTRA _ DAY _ TIMESTAMP , ĠDate (). time ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , Ġpresenter . parse Weight Text ( weight Text ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . on Detach () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Weight ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġn utr ition Fact Spinner . selected Item . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠN utr ition Fact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . set Weight ( it , Ġpresenter . parse Weight Text ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow N utr ition Fact s ( nut r ition Fact s : ĠList < N utr ition Fact >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠN utr ition Fact s Spinner ( this , Ġandroid . R . layout . simple _ spinner _ item , Ġn utr ition Fact s ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSpecify Ġthe Ġlayout Ġto Ġuse Ġwhen Ġthe Ġlist Ġof Ġchoices Ġappears ĊĠĠĠĠĠĠĠ Ġadapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠApply Ġthe Ġadapter Ġto Ġthe Ġspinner ĊĠĠĠĠĠĠĠ Ġn utr ition Fact Spinner . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠSelect Ġthe Ġdefault Ġn utr ition Ġfact ĊĠĠĠĠĠĠĠ Ġn utr ition Fact Spinner . selected Item . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠN utr ition Fact ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . select N utr ition Fact ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġwant Ġto Ġset Ġan Ġinitial Ġweight Ġso Ġthat Ġthe Ġcard Ġcan Ġbe Ġpopulated ĊĠĠĠĠĠĠĠ Ġset Weight ( weight . text . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Unit Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunit Text . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtry Show Weight ErrorMessage ( code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Code . FIELD _ IS _ REQUIRED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Layout . error Ġ= ĠgetString ( R . string . field _ required _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Code . FIELD _ IS _ INVALID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Layout . error Ġ= ĠgetString ( R . string . field _ invalid _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Code . OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Card Data ( name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Weight . Unit Ġunit : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal ories : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotein : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar bs : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfat : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . name . text Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġthis . amount . text Ġ= ĠgetString ( R . string . food _ amount _ text , Ġamount , Ġunit ) ĊĠĠĠĠĠĠĠ Ġthis . cal ories . text Ġ= ĠgetString ( R . string . cal ories _ text , Ġcal ories ) ĊĠĠĠĠĠĠĠ Ġthis . protein . text Ġ= ĠgetString ( R . string . protein _ text , Ġprotein ) ĊĠĠĠĠĠĠĠ Ġthis . car bs . text Ġ= ĠgetString ( R . string . car bs _ text , Ġcar bs ) ĊĠĠĠĠĠĠĠ Ġthis . fat . text Ġ= ĠgetString ( R . string . fat _ text , Ġfat ) ĊĠĠĠ Ġ} Ċ }