package Ġaz . s if to sh ka . j unky converter . presentation . screens . main Ċ Ċ import Ġandroidx . compose . runtime . State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġaz . s if to sh ka . j unky converter . domain . model . J unk Ċ import Ġaz . s if to sh ka . j unky converter . domain . repository . Local Repository Ċ import Ġaz . s if to sh ka . j unky converter . domain . use case . J unk Use Cases Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ ViewModel ] Ġof Ġthe Ġ[ Main Screen ]. Ċ Ġ*/ Ċ @ H ilt ViewModel Ċ class ĠMain ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġj unk Use Cases : ĠJ unk Use Cases , ĊĠĠĠ Ġprivate Ġval Ġlocal Repository : ĠLocal Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmoney Builder Ġ= ĠStringBuilder () ĊĠĠĠ Ġprivate Ġvar ĠmaxLength : ĠInt Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġval Ġzero Ġ= Ġ" 0 " ĊĊĠĠĠ Ġprivate Ġval Ġ_ j unk State Ġ= Ġmutable State Of ( Selected J unk State ()) ĊĠĠĠ Ġval Ġj unk State : ĠState < Selected J unk State > Ġ= Ġ_ j unk State ĊĊĠĠĠ Ġprivate Ġval Ġ_ j unk s State Ġ= Ġmutable State Of ( J unk List State ()) ĊĠĠĠ Ġval Ġj unk s State : ĠState < J unk List State > Ġ= Ġ_ j unk s State ĊĊĠĠĠ Ġvar Ġyour Money : ĠString Ġby Ġmutable State Of ( zero ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġj unk Money : ĠString Ġby Ġmutable State Of ( zero ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġget J unk s Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġselected J unk : ĠJ unk ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠgetAll J unk s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll J unk s () Ġ{ ĊĠĠĠĠĠĠĠ Ġget J unk s Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġget J unk s Job Ġ= Ġj unk Use Cases . get J unk s (). on Each Ġ{ Ġj unk s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ j unk s State . value Ġ= Ġj unk s State . value . copy ( j unk s Ġ= Ġj unk s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj unk s . find Ġ{ Ġit . id Ġ== Ġlocal Repository . getSelected J unk () Ġ} ?. let Ġ{ Ġset J unk ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. launch In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute Your Money ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" âĿ ® " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder . length Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder [ money Builder . length Ġ- Ġ 1 ] Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Builder . delete Char At ( money Builder . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyour Money Ġ= Ġmoney Builder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Builder . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyour Money Ġ= Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"." Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder . isNotEmpty () Ġ&& Ġyour Money Ġ!= Ġzero ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Builder . append ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyour Money Ġ= Ġmoney Builder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength Ġ= Ġmoney Builder . length Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( money Builder . length Ġ<= ĠmaxLength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoney Builder . append ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyour Money Ġ= Ġmoney Builder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompute J unk Money () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompute J unk Money () Ġ{ ĊĠĠĠĠĠĠĠ Ġj unk Money Ġ= Ġif Ġ( your Money Ġ!= Ġzero ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyour Money . toFloat (). div (_ j unk State . value . j unk ?. value Ġ?: Ġ 1 f ). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġzero ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset J unk ( j unk : ĠJ unk ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal Repository . select J unk ( j unk . id ) ĊĠĠĠĠĠĠĠ Ġ_ j unk State . value Ġ= Ġj unk State . value . copy ( j unk Ġ= Ġj unk ) ĊĠĠĠĠĠĠĠ Ġselected J unk Ġ= Ġj unk ĊĠĠĠĠĠĠĠ Ġclear Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠmaxLength Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġmoney Builder . clear () ĊĠĠĠĠĠĠĠ Ġyour Money Ġ= Ġzero ĊĠĠĠĠĠĠĠ Ġj unk Money Ġ= Ġzero ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠSelected J unk State ( ĊĠĠĠ Ġval Ġj unk : ĠJ unk ? Ġ= Ġnull Ċ ) Ċ Ċ data Ġclass ĠJ unk List State ( ĊĠĠĠ Ġval ĠisLoading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġj unk s : ĠList < J unk >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġerror : ĠString Ġ= ĠString () Ċ )