package Ġde . un iks . cod lin ers . stock _ simulator . ui . settings Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġde . un iks . cod lin ers . stock _ simulator . repository . Symbol Repository Ċ import Ġde . un iks . cod lin ers . stock _ simulator . s ourced LiveData Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ ViewModel ]( https :// developer . android . com / reference / android x / lifecycle / ViewModel ) Ġof Ġ[ Settings Fragment ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġapplication ĠThe Ġcontext Ġused Ġfor Ġcreating Ġthe Ġ[ Symbol Repository ]. Ċ Ġ* Ġ@ property Ġclick Reset Status ĠButton Ġclick Ġindicator Ġfor Ġreset Ġbutton . Ċ Ġ* Ġ@ property Ġtoggle Fingerprint Status ĠButton Ġclick Ġindicator Ġfor Ġfingerprint Ġbutton . Ċ Ġ* Ġ@ property Ġsymbol Repository State Action ĠGets Ġtriggered Ġif Ġthe Ġsymbol Ġrepository Ġis Ġref reshed . Ċ Ġ* Ġ@ property Ġrefresh ing ĠIndicates Ġthat Ġthe Ġsymbol Ġrepository Ġis Ġcurrently Ġbeing Ġref reshed . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJan ĠM Ã¼ ller Ċ Ġ* Ġ@ author ĠJon as ĠThe lem ann Ċ Ġ*/ Ċ class ĠSettings ViewModel ( application : ĠApplication ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsymbol Repository Ġ= ĠSymbol Repository ( application ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ click Reset Status Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġclick Reset Status : ĠLive Data < Boolean > Ġ= Ġ_ click Reset Status ĊĊĠĠĠ Ġprivate Ġval Ġ_ toggle Fingerprint Status Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġtoggle Fingerprint Status : ĠLive Data < Boolean > Ġ= Ġ_ toggle Fingerprint Status ĊĊĠĠĠ Ġprivate Ġval Ġstate Ġ= Ġsymbol Repository . state ĊĠĠĠ Ġprivate Ġval Ġsymbol Refresh Initi ated Ġ= ĠMutable LiveData ( false ) ĊĠĠĠ Ġval Ġsymbol Repository State Action Ġ= Ġs ourced LiveData ( symbol Refresh Initi ated , Ġstate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġstate Ġ= Ġstate . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol Repository . State . Working Ġ-> Ġif Ġ( symbol Refresh Initi ated . value Ġ== Ġtrue ) Ġstate Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrefresh ing Ġ= Ġstate . map Ġ{ Ġit Ġ=== ĠSymbol Repository . State . Working Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġreset Ġgame Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJon as ĠThe lem ann ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset Game () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ click Reset Status . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReset Ġthe Ġreset Ġgame Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJon as ĠThe lem ann ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Game Reset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ click Reset Status . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġfingerprint Ġbutton Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJon as ĠThe lem ann ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Fingerprint () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ toggle Fingerprint Status . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReset Ġthe Ġfingerprint Ġbutton Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJon as ĠThe lem ann ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Fingerprint Toggle d () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ toggle Fingerprint Status . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġrefresh Ġsymbols Ġbutton Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJan ĠM Ã¼ ller ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh Symbols () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Refresh Initi ated . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Repository . refresh Symbols () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Refresh Initi ated . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReset Ġthe Ġrefresh Ġsymbols Ġbutton Ġclick Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author ĠJan ĠM Ã¼ ller ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Symbol Action Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( symbol Repository State Action Ġas ĠMutable LiveData < Symbol Repository . State >). value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfor Ġthe ĠSettings ViewModel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġapplication ĠThe Ġcontext Ġused Ġfor Ġcreating Ġthe Ġrepositories . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠFactory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapplication : ĠApplication ĊĠĠĠ Ġ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġfactory 's Ġconstruction Ġmethod . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠT ĠThe Ġclass 's Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmodel Class ĠThe Ġclass Ġto Ġcreate . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] Ġif Ġ[ Settings ViewModel ] Ġis Ġnot Ġassignable Ġto Ġ[ model Class ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġ[ Settings ViewModel ] Ġinstance . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Settings ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSettings ViewModel ( application ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unable Ġto Ġconstruct Ġview model ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ