package Ġio . horizontal systems . bank wallet . modules . send . bin ance Ċ Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcash . z . ecc . android . sdk . ext . collect With Ċ import Ġio . horizontal systems . bank wallet . R Ċ import Ġio . horizontal systems . bank wallet . core .* Ċ import Ġio . horizontal systems . bank wallet . entities . Address Ċ import Ġio . horizontal systems . bank wallet . entities . Wallet Ċ import Ġio . horizontal systems . bank wallet . modules . amount . Send Amount Service Ċ import Ġio . horizontal systems . bank wallet . modules . send . Send Confirmation Data Ċ import Ġio . horizontal systems . bank wallet . modules . send . Send Result Ċ import Ġio . horizontal systems . bank wallet . modules . x rate . X Rate Service Ċ import Ġio . horizontal systems . bank wallet . ui . compose . Trans latable String Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ class ĠSend Bin ance ViewModel ( ĊĠĠĠ Ġval Ġwallet : ĠWallet , ĊĠĠĠ Ġprivate Ġval Ġadapter : ĠIS end Bin ance Adapter , ĊĠĠĠ Ġprivate Ġval Ġamount Service : ĠSend Amount Service , ĊĠĠĠ Ġprivate Ġval Ġaddress Service : ĠSend Bin ance Address Service , ĊĠĠĠ Ġprivate Ġval Ġfee Service : ĠSend Bin ance Fee Service , ĊĠĠĠ Ġprivate Ġval Ġx Rate Service : ĠX Rate Service , Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġfee Coin Ġby Ġfee Service :: fee Coin ĊĠĠĠ Ġval Ġfee Coin Max Allowed Decimal s Ġ= Ġfee Coin . decimals ĊĊĠĠĠ Ġval Ġcoin Max Allowed Decimal s Ġ= Ġwallet . platform Coin . decimals ĊĠĠĠ Ġval Ġfi at Max Allowed Decimal s Ġ= ĠApp . app Config Provider . fi at Decimal ĊĠĠĠ Ġval Ġmemo MaxLength Ġ= Ġ 1 2 0 ĊĊĠĠĠ Ġprivate Ġvar Ġamount State Ġ= Ġamount Service . state Flow . value ĊĠĠĠ Ġprivate Ġvar Ġaddress State Ġ= Ġaddress Service . state Flow . value ĊĠĠĠ Ġprivate Ġvar Ġfee State Ġ= Ġfee Service . state Flow . value ĊĠĠĠ Ġprivate Ġvar Ġmemo : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġui State Ġby Ġmutable State Of ( ĊĠĠĠĠĠĠĠ ĠSend Bin ance Ui State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Balance Ġ= Ġamount State . available Balance , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Ġ= Ġfee State . fee , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Ca ution Ġ= Ġfee State . fee Ca ution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ca ution Ġ= Ġamount State . amount Ca ution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Error Ġ= Ġaddress State . address Error , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Be Send Ġ= Ġamount State . can Be Send Ġ&& Ġaddress State . can Be Send Ġ&& Ġfee State . can Be Send , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġcoin Rate Ġby Ġmutable State Of ( x Rate Service . get Rate ( wallet . coin . uid )) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġfee Coin Rate Ġby Ġmutable State Of ( x Rate Service . get Rate ( fee Coin . coin . uid )) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġsend Result Ġby Ġmutable State Of < Send Result ? >( null ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠApp Logger (" Send -${ wallet . coin . code }") ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġamount Service . state Flow . collect With ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Updated Amount State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġaddress Service . state Flow . collect With ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Updated Address State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfee Service . state Flow . collect With ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Updated Fee State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġx Rate Service . get Rate Flow ( wallet . coin . uid ). collect With ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Rate Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġx Rate Service . get Rate Flow ( fee Coin . coin . uid ). collect With ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Coin Rate Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfee Service . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Enter Amount ( amount : ĠBigDecimal ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġamount Service . set Amount ( amount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Enter Address ( address : ĠAddress ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġaddress Service . set Address ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Enter Memo ( memo : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . memo Ġ= Ġmemo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Updated Address State ( address State : ĠSend Bin ance Address Service . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . address State Ġ= Ġaddress State ĊĊĠĠĠĠĠĠĠ Ġemit State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Updated Amount State ( amount State : ĠSend Amount Service . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . amount State Ġ= Ġamount State ĊĊĠĠĠĠĠĠĠ Ġemit State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Updated Fee State ( fee State : ĠSend Bin ance Fee Service . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fee State Ġ= Ġfee State ĊĊĠĠĠĠĠĠĠ Ġemit State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit State () Ġ{ ĊĠĠĠĠĠĠĠ Ġui State Ġ= ĠSend Bin ance Ui State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Balance Ġ= Ġamount State . available Balance , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Ġ= Ġadapter . fee , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Ca ution Ġ= Ġfee State . fee Ca ution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ca ution Ġ= Ġamount State . amount Ca ution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Error Ġ= Ġaddress State . address Error , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Be Send Ġ= Ġamount State . can Be Send Ġ&& Ġaddress State . can Be Send Ġ&& Ġfee State . can Be Send , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Confirmation Data (): ĠSend Confirmation Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSend Confirmation Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount State . amount !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Ġ= Ġfee State . fee , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġaddress State . address !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Ġ= Ġwallet . coin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee Coin Ġ= Ġfee Coin . coin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemo Ġ= Ġmemo ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Send () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsend () Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġlogger . getS coped Unique () ĊĠĠĠĠĠĠĠ Ġlogger . info (" click ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Result Ġ= ĠSend Result . Sending ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Ġ= Ġadapter . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount State . amount !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress State . address !!. hex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). blocking Get () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" success ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Result Ġ= ĠSend Result . Sent ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warning (" failed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Result Ġ= ĠSend Result . Failed ( create Ca ution ( e )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Ca ution ( error : ĠThrowable ) Ġ= Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠUnknown Host Exception Ġ-> ĠH SC a ution ( Trans latable String . Res String ( R . string . Hud _ Text _ No Internet )) ĊĠĠĠĠĠĠĠ Ġis ĠLocal ized Exception Ġ-> ĠH SC a ution ( Trans latable String . Res String ( error . error Text Res )) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠH SC a ution ( Trans latable String . Plain String ( error . message Ġ?: Ġ"")) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠSend Bin ance Ui State ( ĊĠĠĠ Ġval Ġavailable Balance : ĠBigDecimal , ĊĠĠĠ Ġval Ġfee : ĠBigDecimal ?, ĊĠĠĠ Ġval Ġfee Ca ution : ĠH SC a ution ?, ĊĠĠĠ Ġval Ġaddress Error : ĠThrowable ?, ĊĠĠĠ Ġval Ġamount Ca ution : ĠH SC a ution ?, ĊĠĠĠ Ġval Ġcan Be Send : ĠBoolean , Ċ ) Ċ