package Ġeu . genome . sdk . payment . ui čĊč Ċ import Ġandroid . app . Activity č Ċ import Ġandroid . app . Application č Ċ import Ġandroid . content . Intent č Ċ import Ġeu . genome . sdk . payment . core . My Android ViewModel č Ċ import Ġeu . genome . sdk . payment . data . Pay Result č Ċ import Ġeu . genome . sdk . payment . data module . repository . Pay Repository č Ċ import Ġeu . genome . sdk . payment . model . Pay Payment Info č Ċ import Ġeu . genome . sdk . payment . model . request . Payment Dto č Ċ import Ġeu . genome . sdk . payment . model . request . Transaction Type č Ċ import Ġeu . genome . sdk . payment . model . response . ResponseStatus č Ċ import Ġeu . genome . sdk . payment . ui . navigation . SDK Navigation č Ċ import Ġeu . genome . sdk . payment . ui . navigation . Three DS Navigation č Ċ import Ġeu . genome . sdk . payment . ui . state . Payment ViewState č Ċ import Ġeu . genome . sdk . payment . ui . state . Payment ViewState Impl č Ċ import Ġeu . genome . sdk . payment . utils .* č Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers č Ċ import Ġio . reactivex . rx kotlin . addTo č Ċ import Ġio . reactivex . rx kotlin . subscribe By č Ċ import Ġio . reactivex . schedul ers . Schedulers č Ċ import Ġorg . k oin . core . component . K oin Component č Ċ import Ġorg . k oin . core . component . inject čĊčĊč Ċ internal Ġclass ĠMain ViewModel ( čĊĠĠĠ Ġapplication : ĠApplication č Ċ ) Ġ: ĠMy Android ViewModel ( application ), ĠK oin Component Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġrepository : ĠPay Repository Ġby Ġinject () čĊĠĠĠ Ġprivate Ġval Ġip Helper : ĠIp Helper Ġby Ġinject () čĊčĊĠĠĠ Ġprivate Ġval Ġ_ view State Ġ= ĠPayment ViewState Impl () čĊĠĠĠ Ġval Ġview State : ĠPayment ViewState čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ view State čĊčĊĠĠĠ Ġprivate Ġval Ġ_ main Navigation Ġ= ĠSingle Live Event < SDK Navigation >() čĊĠĠĠ Ġval Ġmain Navigation : ĠSingle Live Event < SDK Navigation > čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ main Navigation čĊčĊĠĠĠ Ġfun Ġprepare For Payment ( čĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity ?, Ġpayment Info : ĠPay Payment Info , Ġcard Number : ĠString , čĊĠĠĠĠĠĠĠ Ġexp Month : ĠString , Ġexp Year : ĠString , Ġcv v : ĠString , Ġcard Holder : ĠString čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġstate . value Ġ= ĠState Enum . UN ITER UP TED LOADING čĊĠĠĠĠĠĠĠ Ġval Ġpayment Ġ= ĠPayment Dto ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠapiVersion Ġ= Ġ_ view State . pay Init Data . value ?. apiVersion , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Id Ġ= Ġpayment Info . transaction Id , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Type Ġ= Ġpayment Info . transaction Type , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġpayment Info . amount , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġpayment Info . currency . currency Code , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number Ġ= Ġcard Number , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Exp Month Ġ= Ġexp Month , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Exp Year Ġ= Ġexp Year , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv v Ġ= Ġcv v , čĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġpayment Info . firstName ?. take If Ġ{ Ġ! it . isEmpty () Ġ} Ġ?: Ġ" Ġ", čĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġpayment Info . lastName ?. take If Ġ{ Ġ! it . isEmpty () Ġ} Ġ?: Ġ" Ġ", čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Holder Ġ= Ġcard Holder , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġpayment Info . address , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Ġ= Ġpayment Info . city , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Ġ= Ġpayment Info . zip , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġpayment Info . country , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Phone Ġ= Ġpayment Info . user Phone , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Email Ġ= Ġpayment Info . user Email , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ip Ġ= Ġip Helper . getUser Ip (), čĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey Ġ= Ġ_ view State . pay Init Data . value ?. publicKey , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate _ of _ birth Ġ= Ġpayment Info . birthday , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant UserID Ġ= Ġpayment Info . merchant Info ?. merchant UserID , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant DomainName Ġ= Ġpayment Info . merchant Info ?. merchant DomainName , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Aff ili ate ID Ġ= Ġpayment Info . merchant Info ?. merchant Aff ili ate ID , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant ProductName Ġ= Ġpayment Info . merchant Info ?. merchant ProductName , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Descriptor Ġ= Ġpayment Info . merchant Info ?. merchant Descriptor , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Phone Ġ= Ġpayment Info . merchant Info ?. merchant Phone , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmid Reference Ġ= Ġpayment Info . merchant Info ?. mid Reference čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġif Ġ(! payment Info . sale 3 d Redirect Url . isNull OrEmpty () Ġ&& Ġ! payment Info . sale 3 d CallBack Url . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment . redirect Url Ġ= Ġpayment Info . sale 3 d Redirect Url čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment . call Back Url Ġ= Ġpayment Info . sale 3 d CallBack Url čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ_ view State . tmp Payment Dto Data . value Ġ= Ġpayment čĊĠĠĠĠĠĠĠ Ġsend Signature Request Data ( activity , Ġpayment . generate Data For Signature ()) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġpay ( signature : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġview State . tmp Payment Dto Data . value ?. let Ġ{ Ġpayment Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment . signature Ġ= Ġsignature čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . pay ( payment , Ġview State . pay Init Data . value ?. payment Gateway ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ== ĠResponse Status . success ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . value Ġ= ĠState Enum . COMPLETE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( payment . transaction Type ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Type . AUTH 3 D , ĠTransaction Type . S ALE 3 D Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view State . auth Payment Response . value Ġ= Ġit čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view State . sale Payment Response . value Ġ= Ġit čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view State . tmp Payment Dto Data . value Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view State . tmp Payment Dto Data . value Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ"${ it . message }" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . post Value ( State Enum . ERROR ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). addTo ( dis pos ables ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġsend Broadcast Result ( activity : ĠActivity ?, Ġdata : ĠPay Result ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġactivity ?. finish () čĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Constants . PAY _ CALLBACK _ BRO ADCAST ) čĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . set Package ( activity ?. packageName ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . Companion . Extra . PAY _ BRO ADCAST _ DATA , Ġdata ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġactivity ?. send Broadcast ( intent ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġsend Signature Request Data ( activity : ĠActivity ?, Ġdata : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Constants . PAY _ CALLBACK _ BRO ADCAST _ SIGNATURE ) čĊĠĠĠĠĠĠĠ Ġdata . let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . set Package ( activity ?. packageName ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . Companion . Extra . PAY _ BRO ADCAST _ SIGNATURE _ DATA , Ġdata ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġactivity ?. send Broadcast ( intent ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnavigate Three DS () Ġ{ čĊĠĠĠĠĠĠĠ Ġ_ main Navigation . value Ġ= ĠThree DS Navigation čĊĠĠĠ Ġ} čĊč Ċ } čĊ