package Ġcy . ag or ise . bits y bit shares wallet . fragments Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Anim atable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . collection . Long Sparse Array Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . google . common . primitives . Unsigned Long Ċ import Ġcom . google . firebase . crash ly t ics . Firebase Crash ly t ics Ċ import Ġcom . jak ew h art on . r xb ind ing 3 . widget . text Changes Ċ import Ġcy . ag or ise . bits y bit shares wallet . R Ċ import Ġcy . ag or ise . bits y bit shares wallet . adapters . Assets Adapter Ċ import Ġcy . ag or ise . bits y bit shares wallet . adapters . Auto Suggest Asset Adapter Ċ import Ġcy . ag or ise . bits y bit shares wallet . databinding . Fragment Receive Transaction Binding Ċ import Ġcy . ag or ise . bits y bit shares wallet . utils . Constants Ċ import Ġcy . ag or ise . bits y bit shares wallet . utils . Helper Ċ import Ġcy . ag or ise . bits y bit shares wallet . utils . show Keyboard Ċ import Ġcy . ag or ise . bits y bit shares wallet . utils . toast Ċ import Ġcy . ag or ise . bits y bit shares wallet . view models . Receive Transaction ViewModel Ċ import Ġcy . ag or ise . graph ene j .* Ċ import Ġcy . ag or ise . graph ene j . api . Connection Status Update Ċ import Ġcy . ag or ise . graph ene j . api . calls . List Assets Ċ import Ġcy . ag or ise . graph ene j . models . Json Rpc Response Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġjava . math . Round ingMode Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . Decimal Format Symbols Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . math . min Ċ Ċ class ĠReceive Transaction Fragment Ġ: ĠConnected Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Receive Transaction Frag " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRESP ONSE _ LIST _ AS SETS Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ WRITE _ EXTERNAL _ STORAGE _ PERMISSION Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠNumber Ġof Ġassets Ġto Ġrequest Ġfrom Ġthe ĠNetwork Service Ġto Ġshow Ġas Ġsuggestions Ġin Ġthe ĠAuto Complete TextView Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO _ SU G GEST _ AS SET _ LIMIT Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOTHER _ AS SET Ġ= Ġ" other _ asset " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Receive Transaction Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm ViewModel : ĠReceive Transaction ViewModel ĊĊĠĠĠ Ġ/** ĠCurrent Ġuser Ġaccount Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm User Account : ĠUser Account ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Asset : ĠAsset ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Assets Adapter : ĠAssets Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Auto Suggest Asset Adapter : ĠAuto Suggest Asset Adapter ĊĊĠĠĠ Ġprivate Ġvar Ġm Assets Ġ= ĠArrayList < cy . ag or ise . bits y bit shares wallet . database . entities . Asset >() ĊĊĠĠĠ Ġ/** ĠKeep s Ġtrack Ġof Ġthe Ġcurrent Ġselected Ġasset Ġsymbol Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġselected Asset Symbol Ġ= Ġ" B TS " ĊĊĠĠĠ Ġ/** ĠUsed Ġto Ġavoid Ġer asing Ġthe ĠQR Ġcode Ġwhen Ġthe Ġuser Ġselects Ġan Ġitem Ġfrom Ġthe ĠAuto Complete Ġsuggestions Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġselected In Auto Complete TextView Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠMap Ġused Ġto Ġkeep Ġtrack Ġof Ġrequest Ġand Ġresponse Ġid Ġpairs ĊĠĠĠ Ġprivate Ġval Ġresponse Map Ġ= ĠLong Sparse Array < Int >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnight Mode Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( Constants . KEY _ N IGHT _ MODE _ ACTIV ATED , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġthe Ġtoolbar Ġbackground Ġcolor Ġto Ġgreen ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar ? Ġ= Ġactivity ?. findViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġtoolbar ?. setBackground Resource ( if Ġ(! night Mode ) ĠR . color . color Receive Ġelse ĠR . color . color Toolbar Dark ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġthe Ġstatus Ġand Ġnavigation Ġbars Ġbackground Ġcolor Ġto Ġa Ġdark Ġgreen Ġor Ġjust Ġdark ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġactivity ?. window ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Bar Color Ġ= ĠContext Compat . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! night Mode ) ĠR . color . color Receive Dark Ġelse ĠR . color . color StatusBar Dark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. status Bar Color Ġ= Ġstatus Bar Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. navigation Bar Color Ġ= Ġstatus Bar Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Receive Transaction Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcrash ly t ics Ġ= ĠFirebase Crash ly t ics . getInstance () ĊĠĠĠĠĠĠĠ Ġcrash ly t ics . set Custom Key ( Constants . CR ASH LY T ICS _ KEY _ LAST _ SCREEN , ĠTAG ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfigure ĠViewModel ĊĠĠĠĠĠĠĠ Ġm ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Receive Transaction ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString ( Constants . KEY _ CURRENT _ ACCOUNT _ ID , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . getUser Account ( userId !! ). observe ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver < cy . ag or ise . bits y bit shares wallet . database . entities . User Account > Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm User Account Ġ= ĠUser Account ( user . id , Ġuser . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . getAll Non Zero (). observe ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver < List < cy . ag or ise . bits y bit shares wallet . database . entities . Asset >> Ġ{ Ġassets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets . addAll ( assets ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd ĠB TS Ġto Ġalways Ġshow Ġa ĠQR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Assets . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcy . ag or ise . bits y bit shares wallet . database . entities . Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 . 3 . 0 ", Ġ" B TS ", Ġ 5 , Ġ"", Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets . sort With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComparator Ġ{ Ġa , Ġb Ġ-> Ġa . toString (). compareTo ( b . toString (), Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġan Ġoption Ġat Ġthe Ġend Ġso Ġthe Ġuser Ġcan Ġsearch Ġfor Ġan Ġasset Ġother Ġthan Ġthe Ġones Ġsaved Ġin Ġthe Ġdb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġcy . ag or ise . bits y bit shares wallet . database . entities . Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOTHER _ AS SET , ĠgetString ( R . string . text __ other ), Ġ 0 , Ġ"", Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets . add ( asset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssets Adapter ( context !! , Ġandroid . R . layout . simple _ spinner _ item , Ġm Assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sp Asset . adapter Ġ= Ġm Assets Adapter ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġselect Ġthe Ġselected Asset Symbol ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Assets Adapter !!. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Assets Adapter !!. getItem ( i ) !!. symbol Ġ== Ġselected Asset Symbol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sp Asset . setSelection ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġm ViewModel . qr Code Bitmap . observe ( this , ĠObserver Ġ{ Ġbitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv QR . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . sp Asset . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assets Adapter ?. getItem ( position )?. let Ġ{ Ġasset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( asset . id Ġ== ĠOTHER _ AS SET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . til Asset . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . act v Asset . show Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Asset Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . til Asset . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Asset Symbol Ġ= Ġasset . symbol ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Asset Ġ= ĠAsset ( asset . id , Ġasset . toString (), Ġasset . precision ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QR () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUse ĠRx Java ĠDe bounce Ġto Ġcreate ĠQR Ġcode Ġonly Ġafter Ġthe Ġuser Ġstopped Ġtyping Ġan Ġamount ĊĠĠĠĠĠĠĠ Ġm Dis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ti et Amount . text Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġupdate QR () Ġ}, Ġ{ Ġm Asset Ġ= Ġnull Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġadapter Ġto Ġthe ĠAssets ĠAuto Complete TextView ĊĠĠĠĠĠĠĠ Ġm Auto Suggest Asset Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuto Suggest Asset Adapter ( context !! , Ġandroid . R . layout . simple _ dropdown _ item _ 1 line ) ĊĠĠĠĠĠĠĠ Ġbinding . act v Asset . setAdapter ( m Auto Suggest Asset Adapter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠUse ĠRx Java ĠDe bounce Ġto Ġavoid Ġmaking Ġcalls Ġto Ġthe ĠNetwork Service Ġon Ġevery Ġtext Ġchange Ġevent Ġand Ġalso Ġavoid ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġfirst Ġcall Ġwhen Ġthe ĠView Ġis Ġcreated ĊĠĠĠĠĠĠĠ Ġm Dis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . act v Asset . text Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. skip Initial Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toString (). trim (). toUpperCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! selected In Auto Complete TextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Asset Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QR () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected In Auto Complete TextView Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġlist Ġof Ġassets Ġthat Ġmatch Ġthe Ġalready Ġtyped Ġstring Ġby Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . length Ġ> Ġ 1 Ġ&& Ġm Network Service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġm Network Service ?. sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Assets ( it , ĠAUTO _ SU G GEST _ AS SET _ LIMIT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Assets . REQUIRED _ API ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġnull ) Ġresponse Map . append ( id , ĠRESP ONSE _ LIST _ AS SETS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġm Asset Ġ= Ġnull Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . act v Asset . setOn ItemClickListener Ġ{ Ġparent , Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . adapter . getItem ( position ) Ġas Ġcy . ag or ise . bits y bit shares wallet . database . entities . Asset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Asset Ġ= ĠAsset ( asset . id , Ġasset . toString (), Ġasset . precision ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected In Auto Complete TextView Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QR () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Json Rpc Response ( response : ĠJson Rpc Response <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( response Map . containsKey ( response . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Type Ġ= Ġresponse Map [ response . id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRESP ONSE _ LIST _ AS SETS Ġ-> Ġhandle List Assets ( response . result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Map . remove ( response . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Connection Status Update ( connection Status Update : ĠConnection Status Update ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connection Status Update . update Code Ġ== ĠConnection Status Update . DIS CONNECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġgot Ġa Ġdis connection Ġnotification , Ġwe Ġshould Ġclear Ġour Ġresponse Ġmap , Ġsince ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġits Ġstored Ġrequest Ġids Ġwill Ġnow Ġbe Ġreset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġlist Ġof Ġassets Ġreturned Ġfrom Ġthe Ġnode Ġthat Ġcorrespond Ġto Ġwhat Ġthe Ġuser Ġhas Ġtyped Ġin Ġthe ĠAsset ĊĠĠĠĠ Ġ* ĠAuto Complete TextView Ġand Ġadds Ġthem Ġto Ġits Ġadapter Ġto Ġshow Ġas Ġsuggestions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle List Assets ( result : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠList < *> Ġ&& Ġresult . isNotEmpty () Ġ&& Ġresult [ 0 ] Ġis ĠAsset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset List Ġ= Ġresult Ġas ĠList < Asset > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" handle List Assets ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġassets Ġ= ĠArrayList < cy . ag or ise . bits y bit shares wallet . database . entities . Asset >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(_ asset Ġin Ġasset List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġcy . ag or ise . bits y bit shares wallet . database . entities . Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ asset . objectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ asset . symbol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ asset . precision , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ asset . description Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ asset . issuer Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassets . add ( asset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Auto Suggest Asset Adapter . setData ( assets ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Auto Suggest Asset Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate QR () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Asset Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . iv QR . setImage Drawable ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġclean Ġthe Ġplease Ġpay Ġand Ġto Ġtext Ġat Ġthe Ġbottom Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġm Asset !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġobtain Ġthe Ġamount Ġfrom Ġthe ĠAmount ĠText ĠField Ġor Ġmake Ġit Ġzero Ġotherwise ĊĠĠĠĠĠĠĠ Ġval Ġamount : ĠLong Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Amount Ġ= Ġbinding . ti et Amount . text . toString (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( tmp Amount Ġ* ĠMath . pow ( 1 0 . 0 , Ġasset . precision . toDouble ())). to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= ĠAsset Amount ( Unsigned Long . valueOf ( amount ), Ġasset ) ĊĠĠĠĠĠĠĠ Ġval Ġtotal In Double Ġ= ĠUtil . from Base ( total ) ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠarrayOf ( Line Item (" transfer ", Ġ 1 , Ġtotal In Double )) ĊĠĠĠĠĠĠĠ Ġval Ġinvoice Ġ= ĠInvoice ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm User Account ?. name , Ġ"", Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset . symbol . replace First (" bit ", Ġ""), Ġitems , Ġ"", Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" invoice : Ġ" Ġ+ Ġinvoice . toJson String ()) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . update Invoice ( invoice , Ġmin ( binding . iv QR . width , Ġbinding . iv QR . height )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Amount Address UI ( amount , Ġasset . symbol , Ġasset . precision , Ġm User Account !!. name ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" NullPointerException . ĠMsg : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). record Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe ĠUI Ġto Ġshow Ġthe Ġamount Ġand Ġaccount Ġto Ġsend Ġthe Ġpayment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Amount Address UI ( ĊĠĠĠĠĠĠĠ Ġasset Amount : ĠLong , ĊĠĠĠĠĠĠĠ Ġasset Symbol : ĠString , ĊĠĠĠĠĠĠĠ Ġasset Precision : ĠInt , ĊĠĠĠĠĠĠĠ Ġaccount : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtxt Amount : ĠString Ġ= Ġif Ġ( asset Amount Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . template __ please _ send , ĠgetString ( R . string . text __ any _ amount ), Ġ" Ġ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDecimal Format (" #### ." Ġ+ Ġ(" # ". repeat ( asset Precision ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . rounding Mode Ġ= ĠRound ingMode . CE IL ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . decimal Format Symbols Ġ= ĠDecimal Format Symbols ( Locale . getDefault ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġasset Amount . toDouble () Ġ/ ĠMath . pow ( 1 0 . toDouble (), Ġasset Precision . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Amount Ġ= Ġdf . format ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . template __ please _ send , Ġstr Amount , Ġasset Symbol ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtxt Account Ġ= ĠgetString ( R . string . template __ to , Ġaccount ) ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Please Pay . text Ġ= Ġtxt Amount ĊĠĠĠĠĠĠĠ Ġbinding . tv To . text Ġ= Ġtxt Account ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ receive _ transaction , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAn imate Ġthe Ġshare Ġicon ĊĠĠĠĠĠĠĠ Ġval Ġshare Icon Ġ= Ġmenu . find Item ( R . id . menu _ share ). icon ĊĠĠĠĠĠĠĠ Ġif Ġ( share Icon Ġis ĠAnim atable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Icon . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . menu _ share ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Storage Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Storage Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġis Ġnot Ġalready Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( android . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ WRITE _ EXTERNAL _ STORAGE _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġis Ġalready Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare QR Screenshot () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ WRITE _ EXTERNAL _ STORAGE _ PERMISSION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshare QR Screenshot () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. toast ( getString ( R . string . msg __ storage _ permission _ necessary _ share )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġtakes Ġa Ġscreenshot Ġas Ġa Ġbitmap , Ġsaves Ġit Ġinto Ġa Ġtemporal Ġcache Ġimage Ġand Ġthen ĊĠĠĠĠ Ġ* Ġsends Ġan Ġintent Ġso Ġthe Ġuser Ġcan Ġselect Ġthe Ġdesired Ġmethod Ġto Ġshare Ġthe Ġimage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshare QR Screenshot () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġimprove , Ġshow Ġerrors Ġwhere Ġnecessary Ġso Ġthe Ġuser Ġcan Ġfix Ġit ĊĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġsharing Ġthe ĠQR Ġcode Ġimage Ġif Ġthe Ġfields Ġare Ġnot Ġfilled Ġcorrectly ĊĠĠĠĠĠĠĠ Ġif Ġ( m Asset Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet ĠScreen shot ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Ġ= ĠHelper . load Bitmap From View ( binding . container ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Uri Ġ= ĠHelper . save Temporal Bitmap ( context !! , Ġscreenshot ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġinformation Ġfor Ġshare Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠgetString ( R . string . msg __ invoice _ subject , Ġm User Account ?. name ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġbinding . tv Please Pay . text . toString () Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv To . text . toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġshare Ġintent Ġand Ġcall Ġit ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġshare Intent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠ Ġshare Intent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) Ġ// Ġtemp Ġpermission Ġfor Ġreceiving Ġapp Ġto Ġread Ġthis Ġfile ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ STREAM , Ġimage Uri ) ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ SUBJECT , Ġsubject ) ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ TEXT , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġshare Intent . type Ġ= Ġ"* /* " ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( share Intent , ĠgetString ( R . string . text __ share _ with ))) ĊĠĠĠ Ġ} Ċ }