package Ġio . horizontal systems . bank wallet . core . managers Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġio . horizontal systems . bank wallet . core .* Ċ import Ġio . horizontal systems . bank wallet . core . adapters . Bin ance Adapter Ċ import Ġio . horizontal systems . bank wallet . core . adapters . E rc 2 0 Adapter Ċ import Ġio . horizontal systems . bank wallet . core . adapters . E thereum Adapter Ċ import Ġio . horizontal systems . bank wallet . core . factories . Adapter Factory Ċ import Ġio . horizontal systems . bank wallet . entities . Coin Ċ import Ġio . horizontal systems . bank wallet . entities . Wallet Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ class ĠAdapter Manager ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwallet Manager : ĠI Wallet Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġadapter Factory : ĠAdapter Factory , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġe thereum Kit Manager : ĠIE thereum Kit Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbin ance Kit Manager : ĠBin ance Kit Manager ) ĊĠĠĠ Ġ: ĠI Adapter Manager , ĠHandler Thread (" A ") Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler ĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġadapters Ready Subject Ġ= ĠPublish Subject . create < Unit >() ĊĠĠĠ Ġprivate Ġval Ġadapters Map Ġ= ĠConcurrent HashMap < Wallet , ĠI Adapter >() ĊĊĠĠĠ Ġoverride Ġval Ġadapters Ready Observable : ĠFlow able < Unit > Ġ= Ġadapters Ready Subject . to Flow able ( Back pressure Strategy . BUFFER ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠHandler ( lo oper ) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( wallet Manager . wallet s Updated Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġwallet s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Adapters ( wallet s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreload Adapters () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Adapters ( wallet Manager . wallet s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map . values . forEach Ġ{ Ġit . refresh () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġe thereum Kit Manager . ethereum Kit ?. refresh () ĊĠĠĠĠĠĠĠ Ġbin ance Kit Manager . bin ance Kit ?. refresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġinit Adapters ( wallet s : ĠList < Wallet >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisabled Wallet s Ġ= Ġadapters Map . keys . subtract ( wallet s ) ĊĊĠĠĠĠĠĠĠ Ġwallet s . forEach Ġ{ Ġwallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! adapters Map . containsKey ( wallet )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Factory . adapter ( wallet )?. let Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map [ wallet ] Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapters Ready Subject . onNext ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġdisabled Wallet s . forEach Ġ{ Ġwallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map . remove ( wallet )?. let Ġ{ Ġdisabled Adapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Adapter . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Factory . unlink Adapter ( disabled Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPartial Ġrefresh Ġof Ġadapters ĊĠĠĠĠ Ġ* ĠFor Ġthe Ġgiven Ġlist Ġof Ġwallet s Ġdo : ĊĠĠĠĠ Ġ* Ġ- Ġremove Ġcorresponding Ġadapters Ġfrom Ġadapters Map Ġand Ġstop Ġthem ĊĠĠĠĠ Ġ* Ġ- Ġcreate Ġnew Ġadapters , Ġstart Ġand Ġadd Ġthem Ġto Ġadapters Map ĊĠĠĠĠ Ġ* Ġ- Ġtrigger Ġadapters Ready Subject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġrefresh Adapters ( wallet s : ĠList < Wallet >) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwallet sTo Refresh Ġ= Ġwallet s . filter Ġ{ Ġadapters Map . containsKey ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// remove Ġand Ġstop Ġadapters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet sTo Refresh . forEach Ġ{ Ġwallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map . remove ( wallet )?. let Ġ{ Ġprevious Adapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Adapter . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Factory . unlink Adapter ( previous Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// add Ġand Ġstart Ġnew Ġadapters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet sTo Refresh . forEach Ġ{ Ġwallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Factory . adapter ( wallet )?. let Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map [ wallet ] Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Ready Subject . onNext ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrefresh By Wallet ( wallet : ĠWallet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġadapters Map [ wallet ] Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBin ance Adapter Ġ-> Ġbin ance Kit Manager . bin ance Kit ?. refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEthereum Adapter , Ġis ĠE rc 2 0 Adapter Ġ-> Ġe thereum Kit Manager . ethereum Kit ?. refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġadapter . refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop K its () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Factory . unlink Adapter ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Adapter For Wallet ( wallet : ĠWallet ): ĠI Adapter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadapters Map [ wallet ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Adapter For Coin ( coin : ĠCoin ): ĠI Adapter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwallet Manager . wallet s . first OrNull Ġ{ Ġit . coin Ġ== Ġcoin Ġ} ?. let Ġ{ Ġwallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapters Map [ wallet ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Transactions Adapter For Wallet ( wallet : ĠWallet ): ĠI Transactions Adapter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadapters Map [ wallet ]?. let Ġ{ Ġit Ġas ? ĠI Transactions Adapter Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Balance Adapter For Wallet ( wallet : ĠWallet ): ĠI Balance Adapter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadapters Map [ wallet ]?. let Ġ{ Ġit Ġas ? ĠI Balance Adapter Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Receive Adapter For Wallet ( wallet : ĠWallet ): ĠI Receive Adapter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadapters Map [ wallet ]?. let Ġ{ Ġit Ġas ? ĠI Receive Adapter Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ