package Ġart . com . re vol ut test app . presentation . money _ converter Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġart . com . re vol ut test app . R Ċ import Ġart . com . re vol ut test app . presentation . money _ converter . list . Converted Money Item Ċ import Ġart . com . re vol ut test app . presentation . money _ converter . list . Converted Money ListAdapter Ċ import Ġart . com . re vol ut test app . presentation . shared . Event Observer Ċ import Ġart . com . re vol ut test app . presentation . shared . adjust FontSize Ċ import Ġart . com . re vol ut test app . presentation . shared . to Editable Ċ import Ġart . com . re vol ut test app . presentation . shared . visible Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . activity _ money _ converter .* Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠMoney Converter Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMoney Converter ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġval Ġmoney ListAdapter Ġ= ĊĠĠĠĠĠĠĠ ĠConvert ed Money ListAdapter () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ money _ converter ) ĊĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup Money Input Form () ĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . resume Polling Data () ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . stop Polling Data () ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer s (){ ĊĠĠĠĠĠĠĠ Ġwith ( viewModel ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Converted Money List (). observe ( this @ Money Converter Activity , ĠObserver (:: update Adapter Data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Base Money (). observe ( this @ Money Converter Activity , ĠObserver (:: refresh Base Currency Labels )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ErrorMessage (). observe ( this @ Money Converter Activity , ĠEvent Observer (:: showMessage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Adapter Data ( money Items : ĠList < Converted Money Item > ){ ĊĠĠĠĠĠĠĠ Ġmoney ListAdapter . update Data ( money Items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Message ( message : ĠString ){ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( money Converter View Container , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Base Currency Labels ( base Money : ĠBase Money ){ ĊĠĠĠĠĠĠĠ Ġbase Currency Container . visible () ĊĠĠĠĠĠĠĠ Ġbase Currency Name Label . text Ġ= Ġthis . resources . getString ( base Money . currency Name ) ĊĠĠĠĠĠĠĠ Ġbase Currency Type Label . text Ġ= Ġbase Money . currency Type ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . get Money Amount (). compareTo ( BigDecimal . ZERO ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Amount Input . hint Ġ= Ġ" 0 ". to Editable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Amount Input . text . clear () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Amount Input . text Ġ= ĠviewModel . get Money Amount (). toString (). to Editable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Amount Input . setSelection ( money Amount Input . text . length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmoney Amount Input . adjust FontSize ( viewModel . get Money Amount (). toString (). length ) ĊĠĠĠĠĠĠĠ Ġbase Currency Logo . setImage Drawable ( Context Compat . get Drawable ( this , Ġbase Money . currency Icon )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Money Input Form (){ ĊĠĠĠĠĠĠĠ Ġmoney Amount Input . text Ġ= ĠviewModel . get Money Amount (). toString (). to Editable () ĊĠĠĠĠĠĠĠ Ġmoney Amount Input . adjust FontSize ( viewModel . get Money Amount (). toString (). length ) ĊĠĠĠĠĠĠĠ Ġmoney Amount Input . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( s . isNotEmpty ()) ĠviewModel . convert Money (( s . toString (). to BigDecimal ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠviewModel . convert Money ( 0 . to BigDecimal ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter (){ ĊĠĠĠĠĠĠĠ Ġmoney ListAdapter . apply { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . change Base Currency ( it . currency Type , Ġit . amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView (){ ĊĠĠĠĠĠĠĠ Ġwith ( money List RecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġmoney ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġandroidx . recyclerview . widget . Linear LayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ