/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠT ari ĠProject Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ċ Ġ* Ġwithout Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ċ Ġ* Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ 1 . ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ 2 . ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ċ Ġ* Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ċ Ġ* Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ 3 . ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ċ Ġ* Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ċ Ġ* Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND Ċ Ġ* ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , Ċ Ġ* ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR Ċ Ġ* ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT Ċ Ġ* ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) Ċ Ġ* ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE Ċ Ġ* ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . t ari . android . wallet . application Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġcom . or h ano but . logger . Logger Ċ import Ġcom . t ari . android . wallet . Build Config Ċ import Ġcom . t ari . android . wallet . application . base Nodes . Base Nodes Ċ import Ġcom . t ari . android . wallet . data . Wallet Config Ċ import Ġcom . t ari . android . wallet . data . network . Network Repository Ċ import Ġcom . t ari . android . wallet . data . shared Prefs . Shared Prefs Repository Ċ import Ġcom . t ari . android . wallet . data . shared Prefs . base Node . Base Node Shared Repository Ċ import Ġcom . t ari . android . wallet . event . EventBus Ċ import Ġcom . t ari . android . wallet . ffi .* Ċ import Ġcom . t ari . android . wallet . service . Wallet Service Ċ import Ġcom . t ari . android . wallet . service . seed Phrase . Seed Phrase Repository Ċ import Ġcom . t ari . android . wallet . tor . Tor Config Ċ import Ġcom . t ari . android . wallet . tor . Tor Proxy Manager Ċ import Ġcom . t ari . android . wallet . tor . Tor Proxy State Ċ import Ġcom . t ari . android . wallet . util . Constants Ċ import Ġcom . t ari . android . wallet . util . Wallet Util Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠUtil ized Ġto Ġas yn chor on ously Ġmanage Ġthe Ġsometimes - long - running Ġtask Ġof Ġinstantiation Ġand Ġstart - up Ċ Ġ* Ġof Ġthe ĠTor Ġproxy Ġand Ġthe ĠF FI Ġwallet . Ċ Ġ* Ċ Ġ* Ġ@ author ĠThe ĠT ari ĠDevelopment ĠTeam Ċ Ġ*/ Ċ internal Ġclass ĠWallet Manager ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġwallet Config : ĠWallet Config , ĊĠĠĠ Ġprivate Ġval Ġtor Manager : ĠTor Proxy Manager , ĊĠĠĠ Ġprivate Ġval Ġshared Prefs Wrapper : ĠShared Prefs Repository , ĊĠĠĠ Ġprivate Ġval Ġbase Node Shared Repository : ĠBase Node Shared Repository , ĊĠĠĠ Ġprivate Ġval Ġseed Phrase Repository : ĠSeed Phrase Repository , ĊĠĠĠ Ġprivate Ġval Ġnetwork Repository : ĠNetwork Repository , ĊĠĠĠ Ġprivate Ġval Ġbase Nodes : ĠBase Nodes , ĊĠĠĠ Ġprivate Ġval Ġtor Config : ĠTor Config Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlog File Observer : ĠLog File Observer ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġinitial Ġwallet Ġstate ĊĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . post ( Wallet State . Not Ready ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġtor Ġand Ġinit Ġwallet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Manager . run () ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠĠĠ Ġ// Ġsubscribe Ġto ĠTor Ġproxy Ġstate Ġchanges ĊĠĠĠĠĠĠĠ ĠEvent Bus . tor Proxy State . subscribe ( this , Ġthis :: on Tor Proxy StateChanged ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe init Ġthe Ġwallet Ġand Ġshutdown ĠTor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdestroy ĠF FI Ġwallet Ġobject ĊĠĠĠĠĠĠĠ ĠF FI Wallet . instance ?. destroy () ĊĠĠĠĠĠĠĠ ĠF FI Wallet . instance Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . post ( Wallet State . Not Ready ) ĊĠĠĠĠĠĠĠ Ġ// Ġstop Ġtor Ġproxy ĊĠĠĠĠĠĠĠ ĠEvent Bus . tor Proxy State . unsubscribe ( this ) ĊĠĠĠĠĠĠĠ Ġtor Manager . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġon Tor Proxy StateChanged ( tor Proxy State : ĠTor Proxy State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tor Ġproxy Ġstate Ġhas Ġchanged : Ġ$ tor Proxy State .") ĊĠĠĠĠĠĠĠ Ġif Ġ( tor Proxy State Ġis ĠTor Proxy State . Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( EventBus . wallet State . publish Subject . value Ġ== ĠWallet State . Not Ready Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . publish Subject . value Ġis ĠWallet State . Failed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" Initialize Ġwallet .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . post ( Wallet State . Initializing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Wallet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . post ( Wallet State . Started ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . wallet State . post ( Wallet State . Failed ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstanti ates Ġthe ĠTor Ġtransport Ġfor Ġthe Ġwallet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Tor Transport (): ĠFF IT r ansport Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcookie File Ġ= ĠFile ( tor Config . cookie FilePath ) ĊĠĠĠĠĠĠĠ Ġval Ġcookie String : ĠByteArray Ġ= Ġcookie File . read Bytes () ĊĠĠĠĠĠĠĠ Ġval Ġtor Cookie Ġ= ĠF FI Byte Vector ( cookie String ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFF IT r ansport Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNet Address String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config . control Host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config . control Port ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Cookie , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config . connection Port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config . sock 5 Username , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config . sock 5 Password ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstanti ates Ġthe Ġcom ms Ġconfiguration Ġfor Ġthe Ġwallet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Com ms Config ( wallet Config : ĠWallet Config ): ĠFF IC om ms Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFF IC om ms Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNet Address String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 7 . 0 . 0 . 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 9 0 6 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Tor Transport (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Config . wallet DB Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Config . get Wallet Files DirPath (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Wallet . discovery Timeout Sec , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Wallet . store And Forward Message Duration Sec , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork . WE ATHER W AX . uri Component , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe Ġlog Ġfile Ġobserver Ġonly Ġin Ġdebug Ġmode . ĊĠĠĠĠ Ġ* ĠWill Ġskip Ġif Ġthe Ġapp Ġis Ġin Ġrelease Ġconfig . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart LogFile Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog File Observer Ġ= ĠLog File Observer ( wallet Config . get Wallet Log FilePath ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog File Observer ?. start Watch ing () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStores Ġwallet 's Ġpublic Ġkey Ġhex Ġand Ġemoji Ġid 's Ġinto Ġthe Ġshared Ġprefs ĊĠĠĠĠ Ġ* Ġfor Ġfuture Ġconvenience . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsave Wallet PublicKey Hex To Shared Prefs () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġshared Ġpreferences Ġvalues Ġafter Ġinstantiation ĊĠĠĠĠĠĠĠ ĠF FI Wallet . instance ?. get PublicKey ()?. let Ġ{ ĠpublicKey FF I Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs Wrapper . publicKey HexString Ġ= ĠpublicKey FF I . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs Wrapper . emoji Id Ġ= ĠpublicKey FF I . get Emoji Id () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthe Ġwallet Ġand Ġsets Ġthe Ġsingleton Ġinstance Ġin Ġthe Ġwallet Ġcompanion Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Wallet () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( FF I Wallet . instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstore Ġnetwork Ġinfo Ġin Ġshared Ġpreferences Ġif Ġit 's Ġa Ġnew Ġwallet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis New Installation Ġ= Ġ! Wallet Util . wallet Exists ( wallet Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwallet Ġ= ĠF FI Wallet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs Wrapper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseed Phrase Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Com ms Config ( wallet Config ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Config . get Wallet Log FilePath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Wallet . instance Ġ= Ġwallet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNew Installation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Wallet . instance ?. set KeyValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Service . Companion . KeyValue Storage Keys . NETWORK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Repository . current Network !!. network . uri Component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( shared Prefs Wrapper . is Restore d Wallet Ġ&& Ġnetwork Repository . ffi Network Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Repository . ffi Network Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork . from ( FF I Wallet . instance ?. getKey Value ( Wallet Service . Companion . KeyValue Storage Keys . NETWORK ) Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart LogFile Observer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Base Node Ġ= Ġbase Node Shared Repository . current Base Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Base Node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Nodes . start Sync () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Nodes . set Next Base Node () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Wallet PublicKey Hex To Shared Prefs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ