package Ġcom . rn lib . ady en . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . ady en . checkout . base . Action Component Data Ċ import Ġcom . ady en . checkout . base . Component Error Ċ import Ġcom . ady en . checkout . base . Payment Component State Ċ import Ġcom . ady en . checkout . base . model . Payment Methods ApiResponse Ċ import Ġcom . ady en . checkout . base . model . payment methods . PaymentMethod Ċ import Ġcom . ady en . checkout . base . model . payments . request . Payment Component Data Ċ import Ġcom . ady en . checkout . base . model . payments . request . PaymentMethod Details Ċ import Ġcom . ady en . checkout . base . model . payments . request . Generic PaymentMethod Ċ import Ġcom . ady en . checkout . base . model . payments . response . Action Ċ import Ġcom . ady en . checkout . base . util . PaymentMethod Types Ċ import Ġcom . ady en . checkout . core . code . Lint Ċ import Ġcom . ady en . checkout . core . exception . Checkout Exception Ċ import Ġcom . ady en . checkout . core . log . Log Util Ċ import Ġcom . ady en . checkout . core . log . Logger Ċ Ċ import Ġcom . rn lib . ady en . Action Handler Ċ import Ġcom . rn lib . ady en . Ad yen Component Ċ import Ġcom . rn lib . ady en . Ad yen Component Configuration Ċ import Ġcom . rn lib . ady en . R Ċ import Ġcom . rn lib . ady en . service . Call Result Ċ import Ġcom . rn lib . ady en . service . Component Service Ċ import Ġcom . rn lib . ady en . ui . base . Drop In Bottom Sheet Dialog Fragment Ċ import Ġcom . rn lib . ady en . ui . component . Card Component Dialog Fragment Ċ import Ġcom . rn lib . ady en . ui . component . Generic Component Dialog Fragment Ċ import Ġcom . rn lib . ady en . ui . payment methods . PaymentMethod List Dialog Fragment Ċ Ċ import Ġcom . ady en . checkout . google pay . Google Pay Component Ċ import Ġcom . ady en . checkout . google pay . Google Pay Component State Ċ import Ġcom . ady en . checkout . google pay . Google Pay Configuration Ċ import Ġcom . ady en . checkout . redirect . Redirect Util Ċ import Ġcom . ady en . checkout . wechat pay . We Chat Pay Utils Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util . Locale Ċ Ċ /** Ċ Ġ* ĠActivity Ġthat Ġpresents Ġthe Ġavailable ĠPayment Methods Ġto Ġthe ĠShop per . Ċ Ġ*/ Ċ @ Suppress (" Too Many Functions ", Ġ" Synt hetic Accessor ") Ċ class ĠAd yen Component Activity Ġ: ĠAppCompatActivity (), ĠDrop In Bottom Sheet Dialog Fragment . Protocol , ĠAction Handler . Details Requested Interface Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠLog Util . getTag () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY MENT _ METHOD _ FRAGMENT _ TAG Ġ= Ġ" PAYMENT _ METHO DS _ DIALOG _ FRAGMENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOMPONENT _ FRAGMENT _ TAG Ġ= Ġ" COMPONENT _ DIALOG _ FRAGMENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLO ADING _ FRAGMENT _ TAG Ġ= Ġ" LOADING _ DIALOG _ FRAGMENT " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP AY MENT _ METHO DS _ RESPONSE _ KEY Ġ= Ġ" PAYMENT _ METHO DS _ RESPONSE _ KEY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAD Y EN _ COMPONENT _ CONFIGURATION _ KEY Ġ= Ġ" AD Y EN _ COMPONENT _ CONFIGURATION _ KEY " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIS _ WAIT ING _ FOR _ RESULT Ġ= Ġ" IS _ WAIT ING _ FOR _ RESULT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAD Y EN _ COMPONENT _ INT ENT Ġ= Ġ" AD Y EN _ COMPONENT _ INT ENT " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGOOGLE _ PAY _ REQUEST _ CODE Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Intent ( context : ĠContext , Ġad yen Component Configuration : ĠAd yen Component Configuration , Ġpayment Methods ApiResponse : ĠPayment Methods ApiResponse ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠAd yen Component Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( PAYMENT _ METHO DS _ RESPONSE _ KEY , Ġpayment Methods ApiResponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( AD Y EN _ COMPONENT _ CONFIGURATION _ KEY , Ġad yen Component Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( AD Y EN _ COMPONENT _ INT ENT , Ġad yen Component Configuration . result Handler Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġad yen Component Configuration : ĠAd yen Component Configuration ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġad yen Component ViewModel : ĠAd yen Component ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresult Intent : ĠIntent ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgoogle Pay Component : ĠGoogle Pay Component ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcall Result Intent Filter : ĠIntent Filter ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocal Broadcast Manager : ĠLocal Broadcast Manager ĊĊĠĠĠ Ġ@ Suppress ( Lint . PROTECT ED _ IN _ FINAL ) ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġaction Handler : ĠAction Handler ĊĊĠĠĠ Ġ// ĠIf Ġa Ġnew Ġintent Ġis Ġreceived Ġwe Ġcan Ġcontinue Ġprocessing , Ġotherwise Ġwe Ġmight Ġneed Ġto Ġtime Ġout ĊĠĠĠ Ġ@ Suppress ( Lint . PROTECT ED _ IN _ FINAL ) ĊĠĠĠ Ġprivate Ġvar Ġis Waiting Result Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġloading Dialog Ġ= ĠLoading Dialog Fragment . newInstance () ĊĠĠĠ Ġ// private Ġvar ĠisLoading Visible Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġcall Result Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" call Result Receiver Ġon Receive ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull Ġ&& Ġintent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Waiting Result Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . has Extra ( Component Service . API _ CALL _ RESULT _ KEY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Result Ġ= Ġintent . get Parcelable Extra < Call Result >( Component Service . API _ CALL _ RESULT _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call Result Ġ!= Ġnull ) Ġhandle Call Result ( call Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCheckout Exception (" No Ġextra Ġon Ġcall Result Receiver ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgoogle Pay Observer : ĠObserver < Google Pay Component State > Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it !!. isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Payments Call ( it . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgoogle Pay Error Observer : ĠObserver < Component Error > Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" Google Pay Ġerror Ġ- Ġ${ it ?. errorMessage }") ĊĠĠĠĠĠĠĠ Ġval Ġerr Obj Ġ: ĠJSONObject Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġerr Obj . put (" result Type "," ERROR ") ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġif Ġ( it Ġ!= Ġnull ) Ġ{" ERROR _ GENERAL "} Ġelse Ġ{" ERROR _ CANCEL LED "} ĊĠĠĠĠĠĠĠ Ġerr Obj . put (" code ", code ) ĊĠĠĠĠĠĠĠ Ġerr Obj . put (" message ", it ?. errorMessage . toString ()) ĊĠĠĠĠĠĠĠ Ġthis . send Result ( err Obj . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach Base Context ( new Base : ĠContext ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" attach Base Context ") ĊĠĠĠĠĠĠĠ Ġsuper . attach Base Context ( create Localized Context ( new Base )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFalse Ġpositive Ġfrom Ġcountry Start Position ĊĠĠĠ Ġ@ Suppress (" Magic Number ") ĊĠĠĠ Ġprivate Ġfun Ġcreate Localized Context ( base Context : ĠContext ?): ĠContext ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( base Context Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale String Ġ= Ġbase Context . get SharedPreferences ( Ad yen Component . DROP _ IN _ PRE FS , ĠContext . MODE _ PRIVATE ). getString ( Ad yen Component . LOCAL E _ PRE F , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" locale String Ġ- Ġ$ locale String ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 Ġ&& Ġ! TextUtils . isEmpty ( locale String )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfiguration ( base Context . resources . configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage End Position Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Start Position Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . set Locale ( Locale ( locale String !!. substring ( 0 , Ġlanguage End Position ), Ġlocale String . substring ( country Start Position ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context . create Configuration Context ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e ( TAG , Ġ" Failed Ġto Ġcreate Ġlocalized Ġcontext .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" onCreate Ġ- Ġ$ savedInstanceState ") ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ drop _ in ) ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Waiting Result Ġ= Ġit . getBoolean ( IS _ WAIT ING _ FOR _ RESULT , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġad yen Component ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Ad yen Component ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġad yen Component Configuration Ġ= Ġintent . get Parcelable Extra ( AD Y EN _ COMPONENT _ CONFIGURATION _ KEY ) !! ĊĊĠĠĠĠĠĠĠ Ġad yen Component ViewModel . ady en Component Configuration Ġ= Ġad yen Component Configuration ĊĊĠĠĠĠĠĠĠ Ġad yen Component ViewModel . payment Methods ApiResponse Ġ= Ġintent . get Parcelable Extra ( PAYMENT _ METHO DS _ RESPONSE _ KEY ) !! ĊĠĠĠĠĠĠĠ Ġval Ġpayment Method Ġ: ĠPayment Method Ġ= Ġad yen Component ViewModel . payment Methods ApiResponse . payment Methods ! ![ 0 ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ( payment Method . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Types . SCHEME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ady en Component ViewModel . payment Methods ApiResponse . get Stored Payment Methods () Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method List Dialog Fragment . newInstance ( false ). show ( support FragmentManager , ĠP AY MENT _ METHOD _ FRAGMENT _ TAG ) ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Component Dialog ( payment Method , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Types . GOOGLE _ PAY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgoogle pay Configuration Ġ= Ġad yen Component Configuration . getConfiguration For < Google Pay Configuration >( PaymentMethod Types . GOOGLE _ PAY , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Google Pay ( payment Method , Ġgoogle pay Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Types . WE CHAT _ PAY _ SDK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start We Chat Pay () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . show Component Dialog ( payment Method , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Intent Ġ= Ġif Ġ( savedInstanceState Ġ!= Ġnull Ġ&& ĠsavedInstanceState . containsKey ( AD Y EN _ COMPONENT _ INT ENT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState . get Parcelable ( AD Y EN _ COMPONENT _ INT ENT ) !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . get Parcelable Extra ( AD Y EN _ COMPONENT _ INT ENT ) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcall Result Intent Filter Ġ= ĠIntent Filter ( Component Service . get Call Result Action ( this )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġregister Broadcast Re ceiv ers ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager . register Receiver ( call Result Receiver , Ġcall Result Intent Filter ) ĊĊĠĠĠĠĠĠĠ Ġaction Handler Ġ= ĠAction Handler ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġaction Handler . restore State ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGOOGLE _ PAY _ REQUEST _ CODE Ġ-> Ġgoogle Pay Component . handle Activity Result ( result Code , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" on New Intent ") ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e ( TAG , Ġ" Null Ġintent ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Payments Call ( payment Component Data : ĠPayment Component Data <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Waiting Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset Loading ( true ) ĊĠĠĠĠĠĠĠ ĠComponent Service . request Payments Call ( this , Ġpayment Component Data , Ġad yen Component Configuration . service Component Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Details Call ( action Component Data : ĠAction Component Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Waiting Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset Loading ( true ) ĊĠĠĠĠĠĠĠ ĠComponent Service . request Details Call ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction Component Data . SERIAL IZER . serialize ( action Component Data ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġad yen Component Configuration . service Component Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( errorMessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . action _ failed , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" on Save InstanceState ") ĊĊĠĠĠĠĠĠĠ Ġout State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . put Parcelable ( PAYMENT _ METHO DS _ RESPONSE _ KEY , Ġad yen Component ViewModel . payment Methods ApiResponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . put Parcelable ( AD Y EN _ COMPONENT _ CONFIGURATION _ KEY , Ġad yen Component Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . put Boolean ( IS _ WAIT ING _ FOR _ RESULT , Ġis Waiting Result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . save State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġset Loading ( is Waiting Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" on Destroy ") ĊĠĠĠĠĠĠĠ Ġ// savedInstanceState ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager . unregister Receiver ( call Result Receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Component Dialog ( payment Method : ĠPayment Method , Ġwas In Expand Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" show Component Dialog ") ĊĠĠĠĠĠĠĠ Ġhide Fragment Dialog ( PAYMENT _ METHOD _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Fragment Ġ= Ġwhen Ġ( payment Method . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Types . SCHEME Ġ-> ĠCard Component Dialog Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGeneric Component Dialog Fragment ĊĠĠĠĠĠĠĠ Ġ}. newInstance ( payment Method , Ġad yen Component Configuration , Ġwas In Expand Mode ) ĊĊĠĠĠĠĠĠĠ Ġdialog Fragment . show ( support FragmentManager , ĠCOMPONENT _ FRAGMENT _ TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Payment Methods Dialog ( show In Expand Status : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" show Payment Methods Dialog ") ĊĠĠĠĠĠĠĠ Ġhide Fragment Dialog ( COMPONENT _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠ ĠPayment Method List Dialog Fragment . newInstance ( show In Expand Status ). show ( support FragmentManager , ĠP AY MENT _ METHOD _ FRAGMENT _ TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġterminate Drop In () Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" terminate Drop In ") ĊĠĠĠĠĠĠĠ Ġad yen Component Configuration . result Handler Intent . putExtra ( Ad yen Component . RESULT _ CANCEL _ KEY , Ġ" Cancelled "). let Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( 0 , ĠR . anim . fade _ out ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Google Pay ( payment Method : ĠPayment Method , Ġgoogle Pay Configuration : ĠGoogle Pay Configuration ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" start Google Pay ") ĊĠĠĠĠĠĠĠ Ġgoogle Pay Component Ġ= ĠGoogle Pay Component . PROVIDER . get ( this , Ġpayment Method , Ġgoogle Pay Configuration ) ĊĠĠĠĠĠĠĠ Ġgoogle Pay Component . observe ( this @ Ad yen Component Activity , Ġgoogle Pay Observer ) ĊĠĠĠĠĠĠĠ Ġgoogle Pay Component . observe Errors ( this @ Ad yen Component Activity , Ġgoogle Pay Error Observer ) ĊĊĠĠĠĠĠĠĠ Ġhide Fragment Dialog ( PAYMENT _ METHOD _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠ Ġgoogle Pay Component . start Google Pay Screen ( this , ĠGOOGLE _ PAY _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart We Chat Pay () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment Component Data Ġ= ĠPayment Component Data < PaymentMethod Details >() ĊĠĠĠĠĠĠĠ Ġpayment Component Data . payment Method Ġ= ĠGeneric PaymentMethod ( PaymentMethod Types . WE CHAT _ PAY _ SDK ) ĊĠĠĠĠĠĠĠ Ġthis . request Payments Call ( payment Component Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress ( Lint . PROTECT ED _ IN _ FINAL ) ĊĠĠĠ Ġprotected Ġfun Ġhandle Call Result ( call Result : ĠCall Result ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" handle Call Result Ġ- Ġ${ call Result . type . name }") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call Result . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall Result . Result Type . FINISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . send Result ( call Result . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall Result . Result Type . ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠAction . SERIAL IZER . deserialize ( JSONObject ( call Result . content )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . handle Action ( this , Ġaction , Ġthis :: send Result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall Result . Result Type . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" ERROR Ġ- Ġ${ call Result . content }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . payment _ failed , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall Result . Result Type . WAIT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCheckout Exception (" WAIT ĠCall Result Ġis Ġnot Ġexpected Ġto Ġbe Ġpropag ated .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Component (){ ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( 0 , ĠR . anim . fade _ out ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Result ( content : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġad yen Component Configuration . result Handler Intent . putExtra ( Ad yen Component . RESULT _ KEY , Ġcontent ). let Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Component () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" handle Intent : Ġaction Ġ- Ġ${ intent . action }") ĊĠĠĠĠĠĠĠ Ġis Waiting Result Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( We Chat Pay Utils . is Result Intent ( intent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" is Result Intent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . handle We Chat Pay Response ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRedirect Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġdata . toString (). startsWith ( Redirect Util . RE DIRECT _ RESULT _ SCHEME )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Handler . handle Redirect Response ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e ( TAG , Ġ" Unexpected Ġresponse Ġfrom ĠACTION _ VIEW Ġ- Ġ${ intent . data }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e ( TAG , Ġ" Unable Ġto Ġfind Ġaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Fragment Dialog ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Fragment By Tag ( tag )?. dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Fragment By Tag ( tag : ĠString ): ĠDialog Fragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Ġas ĠDialog Fragment ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loading ( show Loading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! loading Dialog . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog . show ( support FragmentManager , ĠLO ADING _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Fragment By Tag ( LOADING _ FRAGMENT _ TAG )?. dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ