package Ġio . horizontal systems . bank wallet . modules . wallet connect . main Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġio . horizontal systems . bank wallet . R Ċ import Ġio . horizontal systems . bank wallet . core . managers . Wallet Connect Interactor Ċ import Ġio . horizontal systems . bank wallet . core . providers . Translator Ċ import Ġio . horizontal systems . bank wallet . modules . wallet connect . Wallet Connect Request Ċ import Ġio . horizontal systems . bank wallet . modules . wallet connect . Wallet Connect Service Ċ import Ġio . horizontal systems . core . Single Live Event Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ class ĠWallet Connect Main ViewModel ( private Ġval Ġservice : ĠWallet Connect Service ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġconnecting LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġpeer Meta LiveData Ġ= ĠMutable LiveData < Peer Meta View Item ?> () ĊĠĠĠ Ġval Ġbutton States LiveData Ġ= ĠMutable LiveData < Button States >() ĊĠĠĠ Ġval Ġclose Visible LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġsigned Transactions Visible LiveData Ġ= ĠMutable LiveData < Boolean >( false ) ĊĠĠĠ Ġval Ġhint LiveData Ġ= ĠMutable LiveData < Int ?> () ĊĠĠĠ Ġval Ġerror LiveData Ġ= ĠMutable LiveData < String ?> () ĊĠĠĠ Ġval Ġstatus LiveData Ġ= ĠMutable LiveData < Status ?> () ĊĠĠĠ Ġval Ġclose Live Event Ġ= ĠSingle Live Event < Unit >() ĊĠĠĠ Ġval Ġopen Request Live Event Ġ= ĠSingle Live Event < Wallet Connect Request >() ĊĊĠĠĠ Ġenum Ġclass ĠStatus Ġ{ ĊĠĠĠĠĠĠĠ ĠOFF LINE , ĠON LINE , ĠCONNECT ING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠButton State ( val Ġvisible : ĠBoolean , Ġval Ġenabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEnabled ( true , Ġtrue ), ĠDisabled ( true , Ġfalse ), ĠHidden ( false , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠButton States ( ĊĠĠĠĠĠĠĠ Ġval Ġconnect : ĠButton State , ĊĠĠĠĠĠĠĠ Ġval Ġdisconnect : ĠButton State , ĊĠĠĠĠĠĠĠ Ġval Ġcancel : ĠButton State , ĊĠĠĠĠĠĠĠ Ġval Ġreconnect : ĠButton State ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsync ( service . state , Ġservice . connection State ) ĊĊĠĠĠĠĠĠĠ Ġservice . state Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync ( it , Ġservice . connection State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice . connection State Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync ( service . state , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġservice . request Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Request Live Event . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( service . connection State Ġ== ĠWallet Connect Interactor . State . Connected Ġ&& Ġservice . state Ġ== ĠWallet Connect Service . State . Waiting For Approve Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . reject Session () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Live Event . post Value ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . approve Session () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . kill Session () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . reconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync ( state : ĠWallet Connect Service . State , Ġconnection State : ĠWallet Connect Interactor . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠWallet Connect Service . State . K illed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Live Event . post Value ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpeer Meta View Item Ġ= Ġservice . remote Peer Meta ?. let Ġ{ Ġpeer Meta Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPeer Meta View Item ( peer Meta . name , Ġpeer Meta . url , Ġpeer Meta . description , Ġpeer Meta . icons . last OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpeer Meta LiveData . post Value ( peer Meta View Item ) ĊĊĠĠĠĠĠĠĠ Ġconnecting LiveData . post Value ( connection State Ġ== ĠWallet Connect Interactor . State . Connecting ) ĊĠĠĠĠĠĠĠ Ġclose Visible LiveData . post Value ( state Ġ== ĠWallet Connect Service . State . Ready ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcancel Btn State Ġ= Ġget Cancel Button State ( state ) ĊĠĠĠĠĠĠĠ Ġval Ġconnect Btn State Ġ= Ġget Connect Button State ( state , Ġconnection State ) ĊĠĠĠĠĠĠĠ Ġval Ġdisconnect Btn State Ġ= Ġget Disconnect Button State ( state , Ġconnection State ) ĊĠĠĠĠĠĠĠ Ġval Ġreconnect Btn State Ġ= Ġget Re connect Button State ( connection State ) ĊĊĠĠĠĠĠĠĠ Ġbutton States LiveData . post Value ( Button States ( connect Btn State , Ġdisconnect Btn State , Ġcancel Btn State , Ġreconnect Btn State )) ĊĊĠĠĠĠĠĠĠ Ġstatus LiveData . post Value ( getStatus ( connection State )) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġhint Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġis ĠWallet Connect Interactor . State . Disconnected Ġ-> ĠR . string . Wallet Connect _ Re connect _ Hint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ!= ĠWallet Connect Interactor . State . Connected Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠWallet Connect Service . State . Waiting For Approve Session Ġ-> ĠR . string . Wallet Connect _ Approve _ Hint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠWallet Connect Service . State . Ready Ġ-> ĠR . string . Wallet Connect _ Ready _ Hint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhint LiveData . post Value ( hint ) ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġif Ġ( connection State Ġis ĠWallet Connect Interactor . State . Disconnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection State . error Ġis ĠWallet Connect Interactor . Session Error . Socket Disconnected Ġ&& Ġconnection State . error . cause Ġis ĠUnknown Host Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrans lator . getString ( R . string . Hud _ Text _ No Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State . error . message Ġ?: Ġconnection State . error :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror LiveData . post Value ( error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetStatus ( connection State : ĠWallet Connect Interactor . State ): ĠStatus ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( service . remote Peer Meta Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( connection State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Connect Interactor . State . Connecting Ġ-> ĠStatus . CONNECT ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Connect Interactor . State . Connected Ġ-> ĠStatus . ON LINE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWallet Connect Interactor . State . Disconnected Ġ-> ĠStatus . OFF LINE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Connect Interactor . State . Idle Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cancel Button State ( state : ĠWallet Connect Service . State ): ĠButton State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( state Ġ!= ĠWallet Connect Service . State . Ready ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton State . Enabled ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton State . Hidden ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Connect Button State ( state : ĠWallet Connect Service . State , Ġconnection State : ĠWallet Connect Interactor . State ): ĠButton State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠWallet Connect Service . State . Waiting For Approve Session Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ== ĠWallet Connect Interactor . State . Connected Ġ-> ĠButton State . Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠButton State . Hidden ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Disconnect Button State ( state : ĠWallet Connect Service . State , Ġconnection State : ĠWallet Connect Interactor . State ): ĠButton State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== ĠWallet Connect Service . State . Ready Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ== ĠWallet Connect Interactor . State . Connected Ġ-> ĠButton State . Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠButton State . Hidden ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Re connect Button State ( connection State : ĠWallet Connect Interactor . State ): ĠButton State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( connection State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWallet Connect Interactor . State . Disconnected Ġ-> ĠButton State . Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWallet Connect Interactor . State . Connecting Ġ-> ĠButton State . Disabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠButton State . Hidden ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠPeer Meta View Item ( val Ġname : ĠString , Ġval Ġurl : ĠString , Ġval Ġdescription : ĠString ?, Ġval Ġicon : ĠString ?) Ċ