package Ġnl . test ch amber . mail order co ffe esh op . order Ċ Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . databinding . Observable Int Ċ import Ġnl . test ch amber . mail order co ffe esh op . data . be verage . Ingredient Ċ import Ġnl . test ch amber . mail order co ffe esh op . data . Custom Observable Int Ċ import Ġjava . util .* Ċ Ċ class ĠOrder ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġes press o Shot Counter Ġ= ĠObservable Int () ĊĊĠĠĠ Ġvar Ġmil k Type Ġ= Ġ"" ĊĊĠĠĠ Ġvar Ġmil k Fat Percentage Ġ= ĠCustom Observable Int () ĊĊĠĠĠ Ġvar Ġmil k Fat Percentage Text Ġ= ĠObservable Field < String >(" M ilk Ġfat Ġpercentage : Ġ 0 ") ĊĊĠĠĠ Ġval Ġis Custom Order Fragment Active Ġ= ĠObservable Boolean () ĊĊĠĠĠ Ġval Ġis Menu Fragment Active Ġ= ĠObservable Boolean () ĊĊĠĠĠ Ġval Ġmil k Fat Percentage Observer : ĠObserver Ġ= Ġobject : ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate ( o : ĠObservable ?, Ġarg : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmil k Fat Percentage Text . set (" M ilk Ġfat Ġpercentage : Ġ${ ( arg Ġas ĠInt ). toInt () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġmil k Fat Percentage . add Observer ( mil k Fat Percentage Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġshow M ilk Options Ġ= ĠObservable Boolean ( false ) ĊĊĠĠĠ Ġvar Ġshow Custom Fat Percentage Controls Ġ= ĠObservable Boolean ( false ) ĊĊĠĠĠ Ġvar Ġhot C offee Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġcho colate Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġste amed M ilk Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġfo amed M ilk Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġwh ipped M ilk Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġscal ded M ilk Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġadd Shot () Ġ{ ĊĠĠĠĠĠĠĠ Ġes press o Shot Counter . set ( espress o Shot Counter . get () Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġde tract Shot () Ġ{ ĊĠĠĠĠĠĠĠ Ġes press o Shot Counter . set ( espress o Shot Counter . get () Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset M ilk Fat Percentage ( fat Percentage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmil k Fat Percentage . set Percentage ( fat Percentage ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Esp ress o Shot Counter (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġes press o Shot Counter . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Ing redients List (): ĠList < Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġingredients Ġ= Ġmutable ListOf < Ingredient >() ĊĠĠĠĠĠĠĠ Ġvar Ġes press o Temperature Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ(! hot C offee ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġes press o Temperature Ġ= Ġ" cold Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( get Esp ress o Shot Counter () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients . add ( Ingredient ("${ get Esp ress o Shot Counter ()} Ġsh ots Ġof Ġ${ espress o Temperature } espress o ", Ġ( get Esp ress o Shot Counter ()* 3 0 ))) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients . add ( Ingredient (" 1 Ġshot Ġof Ġ${ espress o Temperature } espress o ", Ġ 3 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cho colate ) Ġingredients . add ( Ingredient (" Cho colate ", Ġ 3 0 )) ĊĠĠĠĠĠĠĠ Ġif Ġ( is M ilk Type Selected ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmil k Type Ġ= Ġmil k Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mil k Type Ġ== Ġ" Custom Ġ% ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( mil k Fat Percentage . get Percentage ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 1 2 Ġ-> Ġmil k Type Ġ= Ġ"${ mil k Fat Percentage . get Percentage ()} % Ġfat Ġmil k " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 3 .. 3 0 Ġ-> Ġmil k Type Ġ= Ġ" C ot tage ĠChe ese " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 3 1 .. 4 0 Ġ-> Ġmil k Type Ġ= Ġ" Che ese " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmil k Ġ= Ġ"${ getM ilk Pre paration ()} Ġ${ mil k Type }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients . add ( Ingredient ( mil k , Ġ 3 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġingredients ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis M ilk Type Selected () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmil k Type . isNotEmpty () Ġ&& Ġmil k Type Ġ!= Ġ" No Ġmil k " ĊĊĠĠĠ Ġprivate Ġfun Ġget M ilk Pre paration (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmil k Pre paration Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( ste amed M ilk ) Ġmil k Pre paration Ġ= Ġ" Ste amed " ĊĠĠĠĠĠĠĠ Ġif Ġ( fo amed M ilk ) Ġmil k Pre paration Ġ= Ġ" Fo amed " ĊĠĠĠĠĠĠĠ Ġif Ġ( wh ipped M ilk ) Ġmil k Pre paration Ġ= Ġ" Wh ipped " ĊĠĠĠĠĠĠĠ Ġif Ġ( scal ded M ilk ) Ġmil k Pre paration Ġ= Ġ" Scal ded " ĊĠĠĠĠĠĠĠ Ġreturn Ġmil k Pre paration ĊĠĠĠ Ġ} Ċ Ċ }