package Ġver ge currency . ver ge wallet . service . model čĊč Ċ import Ġandroid . content . Context č Ċ import Ġandroid . content . SharedPreferences čĊč Ċ import Ġandroidx . security . crypto . Encrypted SharedPreferences č Ċ import Ġandroidx . security . crypto . Master Keys čĊč Ċ import Ġjava . io . IOException č Ċ import Ġjava . security . General Security Exception čĊč Ċ import Ġver ge currency . ver ge wallet . Constants čĊčĊč Ċ /** čĊ Ġ* ĠWarning Ġf ella Ġ: Ġthis Ġclass Ġis Ġa Ġsingleton Ġobject Ġif Ġyou Ġare Ġwondering Ġwhy ĠI Ġdid Ġthat Ġsh it show Ġ;) čĊ Ġ*/ č Ċ class ĠPreferences Manager Ġprivate Ġconstructor ( context : ĠContext ) Ġ{ čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġpreferences Ġ= Ġcontext . get SharedPreferences (" com . ver ge currency . ver ge wallet ", ĠContext . MODE _ PRIVATE ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFIRST _ LA UNCH Ġ= Ġ" first launch " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPIN Ġ= Ġ" pin " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPIN _ COUNT Ġ= Ġ" pin Count " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP REFER RED _ CUR RE NCY Ġ= Ġ" preferred Currency " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠUSING _ TOR Ġ= Ġ" using Tor " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLANGUAGE Ġ= Ġ" language " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠM NE MON IC Ġ= Ġ" mn emonic " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPAS SP HR ASE Ġ= Ġ" pass phrase " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠA MOUNT Ġ= Ġ" amount " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAUTH _ UNLOCK _ WAL LET Ġ= Ġ" auth Unlock Wallet " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAUTH _ SEND _ X VG Ġ= Ġ" auth Send X VG " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠW AL LET _ SERVICE _ URL Ġ= Ġ" wallet Service URL " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠW AL LET _ ID Ġ= Ġ" wallet Id " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠW AL LET _ NAME Ġ= Ġ" wallet Name " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠW AL LET _ SECRET Ġ= Ġ" wallet Secret " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEVICE _ TOKEN Ġ= Ġ" device Token " čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP REFER RED _ THEME Ġ= Ġ" preferred Theme " čĊčĊčĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠPreferences Manager ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġpreferences : ĠSharedPreferences čĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġencrypted Preferences : ĠSharedPreferences ? Ġ= Ġnull čĊčĊĠĠĠĠĠĠĠ Ġ// -------- Singleton Ġmethods čĊĠĠĠĠĠĠĠ Ġfun Ġinit ( context : ĠContext ): ĠPreferences Manager ? Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( INSTANCE Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" You Ġalready Ġinitialized Ġan Ġobject Ġof Ġthis Ġtype ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= ĠPreferences Manager ( context ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠPreferences Manager ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( INSTANCE Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" You Ġhaven 't Ġinitialized Ġan Ġobject Ġof Ġthis Ġtype Ġyet .") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ@ Throws ( General Security Exception :: class , ĠIOException :: class ) čĊĠĠĠĠĠĠĠ Ġfun Ġinit Encrypted Preferences ( context : ĠContext ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( encrypted Preferences Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster Key Alias Ġ= ĠMaster Keys . get OrCreate ( Master Keys . AES 2 5 6 _ GCM _ SPEC ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences Ġ= ĠEn crypted SharedPreferences . create ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . ver ge currency . ver ge wallet . secrets ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Key Alias , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn crypted SharedPreferences . Pref Key Encryption Scheme . AES 2 5 6 _ SI V , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn crypted SharedPreferences . Pref Value Encryption Scheme . AES 2 5 6 _ GCM čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ------- Pin čĊĠĠĠĠĠĠĠ Ġvar Ġpin : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( PIN , Ġ"") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( pin ) Ġ= Ġencrypted Preferences !!. edit (). putString ( PIN , Ġpin ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// ------- Pin Ġdigits čĊĠĠĠĠĠĠĠ Ġvar Ġpin Count : ĠInt čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getInt ( PIN _ COUNT , Ġ 6 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( pin Count ) Ġ= Ġencrypted Preferences !!. edit (). put Int ( PIN _ COUNT , Ġpin Count ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// -------- 1 2 words Ġmnemonic čĊĠĠĠĠĠĠĠ Ġvar Ġmnemonic : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( M NE MON IC , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( mn emonic ) Ġ= Ġencrypted Preferences !!. edit (). putString ( M NE MON IC , Ġmnemonic ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// ------- User Ġpassphrase čĊĠĠĠĠĠĠĠ Ġvar Ġpassphrase : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString ( PAS SP HR ASE , Ġ" mn emonic ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( pass phrase ) Ġ= Ġencrypted Preferences !!. edit (). putString ( PAS SP HR ASE , Ġpassphrase ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// --------- Preferred Ġcurrency čĊĠĠĠĠĠĠĠ Ġval Ġpreferred Currency : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( PREFERRED _ CUR RE NCY , ĠCurrency (" United ĠStates ĠD ollar ", Ġ" USD "). currency As JSON ) čĊčĊĠĠĠĠĠĠĠ Ġfun ĠsetSelected Currency ( preferred Currency : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences !!. edit (). putString ( PREFERRED _ CUR RE NCY , Ġpreferred Currency ). apply () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// --------- Using ĠTor čĊĠĠĠĠĠĠĠ Ġvar Ġusing Tor : ĠBoolean čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getBoolean ( USING _ TOR , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( is Using Tor ) Ġ= Ġencrypted Preferences !!. edit (). put Boolean ( USING _ TOR , Ġis Using Tor ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// --------- Wallet Ġamount čĊčĊĠĠĠĠĠĠĠ Ġvar Ġamount : ĠFloat čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. get Float ( AMOUNT , Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( amount ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Amount Ġ= Ġamount čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Amount Ġ< Ġ 0 f ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Amount Ġ= Ġ 0 f čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences !!. edit (). put Float ( AMOUNT , Ġw Amount ). apply () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// -------- wallet secret čĊĠĠĠĠĠĠĠ Ġvar Ġwallet Secret : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( WAL LET _ SECRET , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( secret ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Secret Ġ= Ġsecret čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Secret Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Secret Ġ= Ġ"" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences !!. edit (). putString ( WAL LET _ SECRET , Ġw Secret ). apply () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// -------- wallet secret čĊĠĠĠĠĠĠĠ Ġvar Ġdevice Token : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( DEVICE _ TOKEN , Ġ"") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( token ) Ġ= Ġencrypted Preferences !!. edit (). putString ( DEVICE _ TOKEN , Ġtoken ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// -------- auth Ġfor Ġunlock ing Ġwallet čĊĠĠĠĠĠĠĠ Ġvar Ġlocal Auth For Wallet Unlock : ĠBoolean čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getBoolean ( AUTH _ UNLOCK _ WAL LET , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġencrypted Preferences !!. edit (). put Boolean ( AUTH _ UNLOCK _ WAL LET , Ġvalue ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// -------- auth Ġfor Ġsending Ġx vg čĊĠĠĠĠĠĠĠ Ġvar Ġlocal Auth For Sending X VG : ĠBoolean čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getBoolean ( AUTH _ SEND _ X VG , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġencrypted Preferences !!. edit (). put Boolean ( AUTH _ SEND _ X VG , Ġvalue ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// -------- wallet id čĊĠĠĠĠĠĠĠ Ġvar Ġwallet Id : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( WAL LET _ ID , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( id ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Id Ġ= Ġid čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Id Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Id Ġ= Ġ"" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences !!. edit (). putString ( WAL LET _ ID , Ġw Id ). apply () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// -------- wallet name čĊĠĠĠĠĠĠĠ Ġvar Ġwallet Name : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġencrypted Preferences !!. getString ( WAL LET _ NAME , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( name ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Name Ġ= Ġname čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Name Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Name Ġ= Ġ"" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Preferences !!. edit (). putString ( WAL LET _ NAME , Ġw Name ). apply () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ// -------- v ws Ġendpoint čĊĠĠĠĠĠĠĠ Ġvar Ġwallet Service Url : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString ( WAL LET _ SERVICE _ URL , ĠConstants . V WS _ ENDPOINT ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( url ) Ġ= Ġpreferences . edit (). putString ( WAL LET _ SERVICE _ URL , Ġurl ). apply () čĊčĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Theme : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString ( PREFERRED _ THEME , Ġ" Fe ather ĠTheme ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( theme ) Ġ= Ġpreferences . edit (). putString ( PREFERRED _ THEME , Ġtheme ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// --------- Preferred Ġlanguage čĊčĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Language : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString ( LANGUAGE , ĠLanguage (" English ", Ġ" en "). language As Json ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( language ) Ġ= Ġpreferences . edit (). putString ( LANGUAGE , Ġlanguage ). apply () čĊčĊĠĠĠĠĠĠĠ Ġ// --------- First Ġlaunch čĊĠĠĠĠĠĠĠ Ġvar Ġis First Launch : ĠBoolean čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getBoolean ( FIRST _ LA UNCH , Ġtrue ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( first Launch Value ) Ġ= Ġpreferences . edit (). put Boolean ( FIRST _ LA UNCH , Ġfirst Launch Value ). apply () čĊĠĠĠ Ġ} čĊč Ċ } čĊ