package Ġcom . nic olas gu ill en . k oint lin . use cases Ċ Ċ import Ġcom . nic olas gu ill en . k oint lin . services . Api Repository Ċ import Ġcom . nic olas gu ill en . k oint lin . services . errors . ApiException Ċ import Ġcom . nic olas gu ill en . k oint lin . storage . AppSettings Repository Ċ import Ġcom . nic olas gu ill en . k oint lin . storage . Wallet Repository Ċ import Ġcom . nic olas gu ill en . k oint lin . storage . entities . Asset Ċ import Ġcom . nic olas gu ill en . k oint lin . storage . entities . AppSettings Ċ import Ġcom . nic olas gu ill en . k oint lin . ui . views . Display able Asset Ċ import Ġio . reactivex . Single Ċ Ċ interface ĠAccount UseCase Ġ{ ĊĠĠĠ Ġfun Ġget Display able Assets (): ĠSingle < Get Price Result > Ċ } Ċ Ċ class ĠAccount UseCase Impl ( private Ġval Ġapi Repository : ĠApi Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġwallet Repository : ĠWallet Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Settings Repository : ĠApp Settings Repository ) Ġ: ĠAccount UseCase Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Display able Assets (): ĠSingle < Get Price Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ Ġobserver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fetch Local Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġthis . calculate Value From Wallet ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġvalue Ġ-> Ġobserver . on Success ( Get Price Result . Success ( value )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġwhen ( error ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApiException Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Success ( Get Price Result . ApiError ( error . error Envelope . status )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Success ( Get Price Result . Unknown Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Local Data (): ĠSingle < Wallet Data >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . wallet Repository . getAll Assets () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . app Settings Repository . get AppSettings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠWallet Data ( it , Ġlist ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Value From Wallet ( wallet Data : ĠWallet Data ): ĠSingle < List < Display able Asset >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( wallet Data . list All Assets . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . concat ( wallet Data . list All Assets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . amount Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfetch And Map To Display able ( it , Ġwallet Data . app Settings . currency Code ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch And Map To Display able ( asset : ĠAsset , Ġcurrency : ĠString ): ĠSingle < Display able Asset >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . api Repository . getC oin From Id ( asset . id , Ġcurrency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcoin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġcoin . price . toDouble () Ġ* Ġasset . amount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Ġ= Ġcoin . percent Change 2 4 h . toDouble () Ġ* Ġcurrent Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDisplay able Asset ( asset , Ġcurrent , Ġvariant , Ġcurrency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠWallet Data ( val Ġapp Settings : ĠApp Settings , Ġval Ġlist All Assets : ĠList < Asset >) Ċ Ċ } Ċ Ċ sealed Ġclass ĠGet Price Result Ġ{ ĊĠĠĠ Ġclass ĠSuccess ( val Ġlist : ĠList < Display able Asset >): ĠGet Price Result () ĊĠĠĠ Ġclass ĠApi Error ( val ĠerrorCode : ĠInt ?): ĠGet Price Result () ĊĠĠĠ Ġobject ĠUnknown Error : ĠGet Price Result () Ċ } Ċ