package Ġorg . erg op l atform . android . transactions Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . erg op l atform . android .* Ċ import Ġorg . erg op l atform . android . ui . Password Dialog Fragment Ċ import Ġorg . erg op l atform . android . ui . Single Live Event Ċ import Ġorg . erg op l atform . android . wallet . ENC _ TYPE _ DEVICE Ċ import Ġorg . erg op l atform . android . wallet . ENC _ TYPE _ PASSWORD Ċ import Ġorg . erg op l atform . android . wallet . Wallet Config Db Entity Ċ import Ġorg . erg op l atform . api . Aes Encryption Manager Ċ import Ġorg . erg op l atform . app kit . Address Ċ import Ġorg . erg op l atform . app kit . Parameters Ċ Ċ class ĠSend Funds ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġvar Ġwallet : ĠWallet Config Db Entity ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġreceiver Address : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc G ross Amount () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġamount ToSend : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc G ross Amount () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ lock Interface Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġlock Interface : ĠLive Data < Boolean > Ġ= Ġ_ lock Interface ĊĠĠĠ Ġprivate Ġval Ġ_ wallet Name Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġwallet Name : ĠLive Data < String > Ġ= Ġ_ wallet Name ĊĠĠĠ Ġprivate Ġval Ġ_ wallet Balance Ġ= ĠMutable LiveData < Float >() ĊĠĠĠ Ġval Ġwallet Balance : ĠLive Data < Float > Ġ= Ġ_ wallet Balance ĊĠĠĠ Ġprivate Ġval Ġ_ fee Amount Ġ= ĠMutable LiveData < Float >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnano E rg sTo E rg s ( Parameters . Min Fee ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġfee Amount : ĠLive Data < Float > Ġ= Ġ_ fee Amount ĊĠĠĠ Ġprivate Ġval Ġ_ g ross Amount Ġ= ĠMutable LiveData < Float >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġg ross Amount : ĠLive Data < Float > Ġ= Ġ_ g ross Amount ĊĠĠĠ Ġprivate Ġval Ġ_ payment Done LiveData Ġ= ĠSingle Live Event < Transaction Result >() ĊĠĠĠ Ġval Ġpayment Done LiveData : ĠLive Data < Transaction Result > Ġ= Ġ_ payment Done LiveData ĊĠĠĠ Ġprivate Ġval Ġ_ tx Id Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġtx Id : ĠLive Data < String > Ġ= Ġ_ tx Id ĊĊĊĠĠĠ Ġfun Ġinit Wallet ( ctx : ĠContext , Ġwallet Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwallet With State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database . getInstance ( ctx ). wallet Dao (). load Wallet With State ById ( wallet Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Ġ= Ġwallet With State ?. wallet Config ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet ?. displayName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ wallet Name . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet With State ?. state ?. balance ?. let Ġ{ Ġ_ wallet Balance . post Value ( nano E rg sTo E rg s ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcalc G ross Amount () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalc G ross Amount () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ g ross Amount . post Value ( fee Amount . value !! Ġ+ Ġamount ToSend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Receiver Address (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisValid E rg o Address ( receiver Address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Amount (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġamount ToSend Ġ>= Ġnano E rg sTo E rg s ( Parameters . Min Change Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare Payment ( fragment : ĠSend Funds Fragment Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wallet ?. encryption Type Ġ== ĠEN C _ TYPE _ PASSWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Dialog Fragment (). show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . child FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( wallet ?. encryption Type Ġ== ĠEN C _ TYPE _ DEVICE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . show Bio metric Prompt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Payment With Password ( password : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwallet ?. secret Storage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmnemonic : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Data Ġ= ĠA es Encryption Manager . decrypt Data ( password , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmnemonic Ġ= Ġdeserialize Secrets ( String ( decrypt Data !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPassword Ġwrong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mn emonic Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġde serialization Ġerror , Ġcorrupted Ġdb Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Payment With Mnemonic Async ( mn emonic ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock Interface . post Value ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Payment User Auth () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġdon 't Ġhandle Ġexceptions Ġhere Ġby Ġintention : Ġwe Ġthrow Ġthem Ġback Ġto Ġthe Ġfragment Ġwhich ĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġshow Ġa Ġsn ackbar Ġto Ġgive Ġthe Ġuser Ġa Ġhint Ġwhat Ġwent Ġwrong ĊĠĠĠĠĠĠĠ Ġwallet ?. secret Storage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmnemonic : ĠString ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecrypt Data Ġ= ĠA es Encryption Manager . decrypt Data With Device Key ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmnemonic Ġ= Ġdeserialize Secrets ( String ( decrypt Data !! )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Payment With Mnemonic Async ( mn emonic !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock Interface . post Value ( true ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Payment With Mnemonic Async ( mn emonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġer go Tx Result : ĠTransaction Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġer go Tx Result Ġ= Ġsend E rg o Tx ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAddress . create ( receiver Address ), Ġer gs To Nano E rg s ( amount ToSend ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmnemonic , Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ lock Interface . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( er go Tx Result . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNode Connector . getInstance (). invalidate Cache () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tx Id . post Value ( er go Tx Result . tx Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ payment Done LiveData . post Value ( er go Tx Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }