package Ġmax e em . americ a . de ssert s . model Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġmax e em . americ a . de ssert s . data . de ssert s Ċ import Ġmax e em . americ a . de ssert s . data . random D ess ert Ċ import Ġmax e em . americ a . de ssert s . util .* Ċ import Ġmax e em . americ a . de ssert s . util . Timer Ċ import Ġjava . text . NumberFormat Ċ import Ġjava . util .* Ċ Ċ class ĠD ess erts Model ( state : ĠSaved State Handle ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ TIMER ĠĠ Ġ= Ġ" timer " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ MA DE ĠĠĠ Ġ= Ġ" made " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ E ARN ED Ġ Ġ= Ġ" ear ned " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ DES SERT Ġ= Ġ" de ssert " ĊĊĠĠĠĠĠĠĠ Ġ// Ġalways Ġuse Ġthe Ġsame Ġcurrency Ġand Ġnumber Ġformatting Ġc uz Ġwe Ġsupport Ġonly ĠEnglish Ġlocalization ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOCAL E Ġ= ĠLocale . US ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġof Ġcourse , Ġshow Ġprices Ġin ĠD ollar s Ġonly Ġnow ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCUR RE NCY Ġ= ĠCurrency . getInstance (" USD ") ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcurrency Format Ġ= ĠNumber Format . getC urrency Instance ( LOCAL E ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Currency ( CUR RE NCY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Fraction Digits Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnumber Format Ġ= ĠNumber Format . getNumber Instance ( LOCAL E ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnumber Format No Grouping Ġ= ĠNumber Format . getNumber Instance ( LOCAL E ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Grouping Used Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtimer Ġ= ĠTimer ( Prefs . timer ?. to UL ong () Ġ?: Ġ 0 UL ) Ġ{ ĊĠĠĠĠĠĠĠ ĠP refs . timer ( value Str ) ĊĠĠĠĠĠĠĠ Ġapp Time . value Ġ= Ġnumber Format No Grouping . format ( value . to Long ()) Ġas ĠString ? Ġ?: Ġvalue Str ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġde ssert Ġ= Ġstate . get LiveData ( KEY _ DES SERT , Ġrandom D ess ert ()) ĊĠĠĠ Ġval Ġmade Ġ= Ġstate . get LiveData ( KEY _ MA DE , ĠP refs . made ) ĊĠĠĠ Ġval Ġe arn ed Ġ= Ġstate . get LiveData ( KEY _ E ARN ED , ĠP refs . ear ned ) ĊĠĠĠ Ġval Ġapp Time Ġ= Ġstate . get LiveData < String >( KEY _ TIMER ) ĊĊĠĠĠ Ġval Ġde ssert Name Ġ Ġ= Ġde ssert . map Ġ{ Ġit . name Id Ġ} ĊĠĠĠ Ġval Ġde ssert Image Ġ= Ġde ssert . map Ġ{ Ġit . image Id Ġ} ĊĠĠĠ Ġval Ġde ssert Price Ġ= Ġde ssert . map Ġ{ Ġcurrency Format . format ( it . price ) Ġ?: Ġ"$ ${ it . price }" Ġ} ĊĠĠĠ Ġval Ġmade Amount ĠĠ Ġ= ĠĠĠ Ġmade . map Ġ{ Ġnumber Format . format ( it ) Ġ?: Ġit . toString () Ġ} ĊĠĠĠ Ġval Ġmoney E arn ed Ġ Ġ= Ġ Ġe arn ed . map Ġ{ Ġcurrency Format . format ( it ) Ġ?: Ġ"$ ${ it }" Ġ} ĊĊĠĠĠ Ġval Ġtimer Lifecycle Observer Ġget () Ġ= Ġtimer Ġas ĠLifecycle Observer ĊĊĠĠĠ Ġval Ġde ssert Made Event Ġ= ĠMutable LiveData < Int ?> (). as Immutable () ĊĠĠĠ Ġval Ġde ssert Swipe Event Ġ= ĠMutable LiveData < Bool ?> (). as Immutable () ĊĊĠĠĠ Ġfun Ġhandle D ess ert Made Event () Ġ{ Ġde ssert Made Event . as Mutable (). value Ġ= Ġnull Ġ} ĊĠĠĠ Ġfun Ġhandle D ess ert Swipe Event () Ġ{ Ġde ssert Swipe Event . as Mutable (). value Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġfun Ġswipe D ess ert ( next : ĠBool ) Ġ= Ġtrue . also Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġde ssert s . indexOf ( require NotNull ( de ssert . value )) ĊĊĠĠĠĠĠĠĠ Ġde ssert . value Ġ= Ġwhen Ġ( next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġif Ġ( idx Ġ< Ġde ssert s . size Ġ- Ġ 1 ) Ġde ssert s [ idx Ġ+ Ġ 1 ] Ġelse Ġde ssert s . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( idx Ġ== Ġ 0 ) Ġde ssert s . last () Ġelse Ġde ssert s [ idx Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġde ssert Swipe Event . as Mutable (). value Ġ= Ġnext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmade D ess ert () Ġ{ ĊĠĠĠĠĠĠĠ Ġmade . value Ġ= Ġrequire NotNull ( made . value ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġe arn ed . value Ġ= Ġrequire NotNull ( ear ned . value ) Ġ+ Ġrequire NotNull ( de ssert . value ). price ĊĊĠĠĠĠĠĠĠ ĠP refs . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmade ( require NotNull ( this @ D ess erts Model . made . value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe arn ed ( require NotNull ( this @ D ess erts Model . ear ned . value )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġde ssert Made Event . as Mutable (). value Ġ= Ġrequire NotNull ( made . value ) ĊĠĠĠ Ġ} Ċ Ċ }