package Ġale kt as . tele com app . ui . datasource . simulation Ċ Ċ import Ġale kt as . tele com app . App Ċ import Ġale kt as . tele com app . domain . Repository Ċ import Ġale kt as . tele com app . domain . entities . System Processor Ċ import Ġale kt as . tele com app . utils . to Data Points Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . j jo e 6 4 . graph view . series . DataPoint Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . ob servers . Disposable Observer Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠE ther Settings ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġstorage : ĠRepository ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġprocessor : ĠSystem Processor ĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġval Ġether Ġ= ĠMutable LiveData < Array < DataPoint >>() ĊĠĠĠ Ġval Ġnoise Rate Ġ= ĠMutable LiveData < Double >() ĊĠĠĠ Ġval Ġinter ference Rate Ġ= ĠMutable LiveData < Double >() ĊĠĠĠ Ġval Ġinter ference S par sen ess Ġ= ĠMutable LiveData < Double >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠApp . component . inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġdis posable . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage . observe Ether () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Data Points () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe With ( object Ġ: ĠDis posable Observer < Array < DataPoint >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( s : ĠArray < DataPoint >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġether . value Ġ= Ġs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINVALID _ SN R Ġ= Ġ- 1 0 0 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Noise () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessor . enable Noise () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Noise () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessor . disable Noise () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Noise ( sn r String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsn r Ġ= Ġparse Sn r ( sn r String ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sn r Ġ== ĠINVALID _ SN R ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġnoise Rate . value Ġ= Ġsn r ĊĠĠĠĠĠĠĠ Ġprocessor . set Noise ( sn r ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Inter ference () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessor . enable Inter ference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Inter ference () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessor . disable Inter ference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Inter ference S par sen ess ( sp ars eness String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs par sen ess Ġ= Ġparse S par sen ess ( sp ars eness String ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Ġs par sen ess Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġinter ference S par sen ess . value Ġ= Ġs par sen ess ĊĠĠĠĠĠĠĠ Ġprocessor . set Inter ference S par sen ess ( sp ars eness ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Inter ference Rate ( rate String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrate Ġ= Ġparse Sn r ( rate String ) ĊĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ== ĠINVALID _ SN R ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġinter ference Rate . value Ġ= Ġrate ĊĠĠĠĠĠĠĠ Ġprocessor . set Inter ference Rate ( rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Inter ference ( rate String : ĠString , Ġs par sen ess String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrate Ġ= Ġparse Sn r ( rate String ) ĊĠĠĠĠĠĠĠ Ġval Ġs par sen ess Ġ= Ġparse S par sen ess ( sp ars eness String ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ== ĠINVALID _ SN R Ġ|| Ġs par sen ess Ġ< Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġinter ference Rate . value Ġ= Ġrate ĊĠĠĠĠĠĠĠ Ġinter ference S par sen ess . value Ġ= Ġs par sen ess ĊĠĠĠĠĠĠĠ Ġprocessor . set Inter ference ( sp ars eness , Ġrate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Sn r ( sn r : ĠString ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn r . toDouble () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINVALID _ SN R ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse S par sen ess ( sp ars eness String : ĠString ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġs par sen ess String . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ< Ġ 0 ) Ġthrow ĠNumber FormatException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} Ċ } Ċ