package Ġdid . chr is . alt . data . data Controller Ċ Ċ import Ġdid . chr is . alt . data . data Controller . cache . UI Object Cache Ċ import Ġdid . chr is . alt . data . data Controller . callbacks . Repository Callback Single Ċ import Ġdid . chr is . alt . data . data Controller . data Managers . Api Repository Ċ import Ġdid . chr is . alt . data . data Controller . data Managers . Realm Manager Ċ import Ġdid . chr is . alt . data . fav our ite Coins . F avour ite Coin Ċ import Ġdid . chr is . alt . data . response . coin Summary . Summary Coin Response Ċ import Ġdid . chr is . alt . data . response . h isto Response . H istorical Data Response Ċ import Ġdid . chr is . alt . data . response . market Summary . Market Summary Response Ċ import Ġdid . chr is . alt . data . tracker . Tracker Data Entry Ċ import Ġrx . Subscriber Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ import Ġrx . subjects . Publish Subject Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠData Controller Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapi Repository : ĠApi Repository , ĊĠĠĠ Ġprivate Ġval Ġrealm Manager : ĠRealm Manager , ĊĠĠĠ Ġprivate Ġval Ġcache : ĠUI Object Cache Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠRX ĠActions ĊĠĠĠ Ġprivate Ġvar Ġhas Encounter ed Error : ĠPublish Subject < Throwable > Ġ= ĠPublish Subject . create () ĊĠĠĠ Ġinternal Ġfun Ġget Error Subscription () Ġ= Ġhas Encounter ed Error . as Observable () ĊĊĠĠĠ Ġ// ĠInternal ĠFunctions ĊĊĠĠĠ Ġinternal Ġfun Ġcoin Refresh Subscriber () Ġ= Ġcache . getC oin s Subscription () ĊĊĠĠĠ Ġinternal Ġfun Ġupdating Subscriber () Ġ= Ġcache . get Update Be gun Subscriber () ĊĊĠĠĠ Ġinternal Ġfun Ġtracker Refresh Subscriber () Ġ= Ġcache . get Tracker List Subscription () ĊĊĠĠĠ Ġinternal Ġfun Ġsummary Refresh Subscriber () Ġ= Ġcache . get Summary Subscription () ĊĊĠĠĠ Ġinternal Ġfun Ġmarket Refresh Subscriber () Ġ= Ġcache . get Market Subscription () ĊĊĠĠĠ Ġinternal Ġfun Ġlast Sync Subscriber () Ġ= Ġcache . get Sync Time Subscription () ĊĊĠĠĠ Ġinternal Ġfun Ġstore F avour ite Coin ( fav our ite Coins : ĠF avour ite Coin ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm Manager . copy OrUpdate ( fav our ite Coins ) ĊĊĠĠĠ Ġinternal Ġfun Ġget F avour ite Coin ( symbol : ĠString ): ĠF avour ite Coin ? Ġ= ĊĠĠĠĠĠĠĠ Ġrealm Manager . getF avour ite Coin ( symbol ) ĊĊĠĠĠ Ġinternal Ġfun Ġdelete F avour ite Coin ( fav our ite Coin : ĠF avour ite Coin ) Ġ= ĊĠĠĠĠĠĠĠ Ġrealm Manager . remove ( fav our ite Coin ) ĊĊĠĠĠ Ġinternal Ġfun Ġget Coin For Symbol ( coin Symbol : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġcache . coin List Items . find Ġ{ Ġit . symbol Ġ== Ġcoin Symbol Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġemit Last Sync Time () Ġ= Ġcache . emit Last Sync Time () ĊĊĠĠĠ Ġinternal Ġfun ĠgetAll Tracker Entries () Ġ= Ġcache . tracker List Items ĊĊĠĠĠ Ġinternal Ġfun Ġget H istorical Data For ( ĊĠĠĠĠĠĠĠ Ġcallback : ĠRepository Callback Single < H istorical Data Response ? >, ĊĠĠĠĠĠĠĠ Ġcoin Symbol : ĠString , ĊĠĠĠĠĠĠĠ Ġdata Resolution : ĠInt , ĊĠĠĠĠĠĠĠ Ġchart Resolution : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Repository . get H istorical Data For ( callback , Ġcoin Symbol , Ġdata Resolution , Ġchart Resolution ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Copy Of Tracker Entry ( coin Name : ĠString ?, Ġsymbol : ĠString ?): ĠTracker Data Entry ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcoin Name Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġsymbol Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm Manager . get Copy Of Tracker Entry ( coin Name , Ġsymbol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġstore Tracker Entry ( prepared Entry : ĠTracker Data Entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm Manager . copy OrUpdate ( prepared Entry ) ĊĠĠĠĠĠĠĠ Ġupdate Tracker Entries () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdelete Tracker Entry For ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm Manager . delete Tracker Entry Data For ( id ) ĊĠĠĠĠĠĠĠ Ġupdate Tracker Entries () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdelete Transaction For ( id ToDelete : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm Manager . delete Transaction For ( id ToDelete ) ĊĠĠĠĠĠĠĠ Ġupdate Tracker Entries () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġrefresh Requested (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cache . should Re Sync Data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate F avour ite Coins () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Tracker Entries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcache . starting Update () ĊĠĠĠĠĠĠĠ Ġrefresh Cache () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinvalidate Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġcache . invalidate Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrivate ĠFunctions ĊĠĠĠ Ġprivate Ġfun Ġupdate F avour ite Coins () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfavour ite Coins Ġ= Ġrealm Manager . getF avour ite Coins () ĊĠĠĠĠĠĠĠ Ġcache . update F avour ite Coins ( fav our ite Coins ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Tracker Entries () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracker Entries Ġ= Ġrealm Manager . getAll Tracker Data Entries () ĊĠĠĠĠĠĠĠ Ġcache . update Tracker Entries ( tracker Entries ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Cache () Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Repository . market Summary GET ()?. subscribe ( object Ġ: ĠSubscriber < Market Summary Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( response : ĠMarket Summary Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . update Market Summary ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Coins List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Encounter ed Error . onNext ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Coins List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfavour ite Coins Ġ= Ġrealm Manager . getF avour ite Coins () ĊĠĠĠĠĠĠĠ Ġval Ġtracker Entry Data Ġ= Ġrealm Manager . getAll Tracker Data Entries () ĊĠĠĠĠĠĠĠ Ġapi Repository . coins GET ()?. do On Next Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache . update For New Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. to Mutable List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavour ite Coins , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Entry Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ?. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . subscribe ( object Ġ: ĠSubscriber < Array < Summary Coin Response >>() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Encounter ed Error . onNext ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( api Response : ĠArray < Summary Coin Response > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . emit Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ