package Ġio . horizontal systems . bank wallet . modules . swap . settings Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġio . horizontal systems . bank wallet . core . Clear able Ċ import Ġio . horizontal systems . bank wallet . core . I Address Parser Ċ import Ġio . horizontal systems . bank wallet . core . converted Error Ċ import Ġio . horizontal systems . bank wallet . entities . Address Ċ import Ġio . horizontal systems . core . Single Live Event Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . math . BigDecimal Ċ Ċ interface ĠI Recipient Address Service Ġ{ ĊĠĠĠ Ġval Ġinitial Address : ĠAddress ? ĊĠĠĠ Ġval Ġrecipient Address Error : ĠThrowable ? ĊĠĠĠ Ġval Ġrecipient Address Error Observable : ĠObservable < Unit > ĊĊĠĠĠ Ġfun Ġset Recipient Address ( address : ĠAddress ?) ĊĠĠĠ Ġfun Ġset Recipient Amount ( amount : ĠBigDecimal ) Ċ } Ċ Ċ class ĠRe cipient Address ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice : ĠI Recipient Address Service , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġresolution Service : ĠAddress Resolution Service , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaddress Parser : ĠI Address Parser , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinput Field Placeholder : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclear ables : ĠList < Clear able > Ċ ) Ġ: ĠViewModel (), ĠI Verified Input ViewModel Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġset Text LiveData Ġ= ĠMutable LiveData < String ?> () ĊĠĠĠ Ġoverride Ġval Ġca ution LiveData Ġ= ĠMutable LiveData < Ca ution ? >( null ) ĊĠĠĠ Ġoverride Ġval ĠisLoading LiveData Ġ= ĠSingle Live Event < Boolean >() ĊĠĠĠ Ġoverride Ġval Ġinitial Value : ĠString ? Ġ= Ġservice . initial Address ?. title ĊĊĠĠĠ Ġprivate Ġvar Ġis Editing Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġforce Show Error Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . recipient Address Error Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresolution Service . resolve Finished Async ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġaddress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce Show Error Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( address . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . set Recipient Address ( address . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresolution Service . is Res olving Async ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading LiveData . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsync () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChange Text ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġforce Show Error Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġservice . set Recipient Address ( text ?. let Ġ{ ĠAddress ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġresolution Service . setText ( text ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( text Ġ== Ġnull Ġ|| Ġtext . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġaddress Data Ġ= Ġaddress Parser . parse ( text ) ĊĊĠĠĠĠĠĠĠ Ġaddress Data . amount ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . set Recipient Amount ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonChange Focus ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforce Show Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Editing Ġ= Ġhas Focus ĊĠĠĠĠĠĠĠ Ġsync () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( is Editing Ġ&& Ġ! force Show Error ) Ġ|| Ġresolution Service . is Res olving ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġca ution LiveData . post Value ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġca ution Ġ= Ġservice . recipient Address Error ?. converted Error ?. localized Message ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCa ution ( it , ĠCa ution . Type . Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġca ution LiveData . post Value ( ca ution ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear ables . forEach ( Clear able :: clear ) ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} Ċ } Ċ