/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠAd yen ĠN . V . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġopen Ġsource Ġand Ġavailable Ġunder Ġthe ĠMIT Ġlicense . ĠSee Ġthe ĠLICENSE Ġfile Ġfor Ġmore Ġinfo . Ċ Ġ*/ Ċ Ċ package Ġcom . ady en react n atives dk Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . ady en . checkout . ady en 3 ds 2 . Ad yen 3 DS 2 Component Ċ import Ġcom . ady en . checkout . ady en 3 ds 2 . Ad yen 3 DS 2 Configuration Ċ import Ġcom . ady en . checkout . await . Await Component Ċ import Ġcom . ady en . checkout . await . Await Configuration Ċ import Ġcom . ady en . checkout . components . Action Component Data Ċ import Ġcom . ady en . checkout . components . Action Component Provider Ċ import Ġcom . ady en . checkout . components . base . Base Action Component Ċ import Ġcom . ady en . checkout . components . base . Base Configuration Builder Ċ import Ġcom . ady en . checkout . components . base . Configuration Ċ import Ġcom . ady en . checkout . components . base . Intent Handling Component Ċ import Ġcom . ady en . checkout . components . model . payments . response . Action Ċ import Ġcom . ady en . checkout . core . api . Environment Ċ 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 . ady en . checkout . qrcode . QR Code Component Ċ import Ġcom . ady en . checkout . qrcode . QR Code Configuration Ċ import Ġcom . ady en . checkout . redirect . Redirect Component Ċ import Ġcom . ady en . checkout . redirect . Redirect Configuration Ċ import Ġcom . ady en . checkout . wechat pay . We Chat Pay Action Component Ċ import Ġcom . ady en . checkout . wechat pay . We Chat Pay Action Configuration Ċ import Ġjava . util .* ĊĊ Ċ class ĠAction Handler Configuration ( ĊĠĠĠ Ġval Ġshop per Locale : ĠLocale , ĊĠĠĠ Ġval Ġenvironment : ĠEnvironment , ĊĠĠĠ Ġval Ġclient Key : ĠString Ċ ) Ċ Ċ interface ĠAction Handling Interface Ġ{ ĊĠĠĠ Ġ// ĠSame Ġsignature Ġas Ġthe ĠFragment ĠProtocol Ġinterface ĊĠĠĠ Ġfun Ġprovide ( action Component Data : ĠAction Component Data ) ĊĠĠĠ Ġfun ĠonError ( error : ĠException ) ĊĠĠĠ Ġfun ĠonClose () ĊĠĠĠ Ġfun Ġon Finish () Ċ Ċ } Ċ Ċ class ĠAction Handler ( ĊĠĠĠ Ġprivate Ġval Ġcallback : ĠAction Handling Interface , ĊĠĠĠ Ġprivate Ġval Ġconfiguration : ĠAction Handler Configuration Ċ ) Ġ: ĠObserver < Action Component Data > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠLog Util . getTag () ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUNKNOWN _ ACTION Ġ= Ġ" UNKNOWN ĠACTION " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ FRAGMENT _ TAG Ġ= Ġ" ACTION _ DIALOG _ FRAGMENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ ACTION Ġ= Ġ" bundle _ action " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġloaded Component : ĠBase Action Component < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġloaded Action : ĠAction ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonChanged ( component Data : ĠAction Component Data ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( component Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . provide ( component Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave State ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbundle ?. put Parcelable ( B UNDLE _ ACTION , Ġloaded Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrestore State ( activity : ĠFragment Activity , Ġbundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġloaded Action Ġ= Ġbundle ?. get Parcelable ( B UNDLE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġload Component ( activity , Ġloaded Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SuppressWarnings (" Return Count ") ĊĠĠĠ Ġprivate Ġfun Ġload Component ( activity : ĠFragment Activity , Ġaction : ĠAction ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġget Action Provider For ( action ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( provider . requires View ( action )) Ġreturn ĊĠĠĠĠĠĠĠ Ġload Component ( activity , Ġprovider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Action ( activity : ĠFragment Activity , Ġaction : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" handle Action Ġ- Ġ${ action . type }") ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġget Action Provider For ( action ) ĊĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . e ( TAG , Ġ" Unknown ĠAction Ġ- Ġ${ action . type }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloaded Action Ġ= Ġaction ĊĊĠĠĠĠĠĠĠ Ġactivity . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( provider . requires View ( action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" handle Action Ġ- Ġaction Ġis Ġview able , Ġrequesting Ġdisplay Action Ġcallback " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġactivity . support FragmentManager ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Fragment Ġ= ĠAction Component Dialog Fragment ( configuration , Ġcallback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Fragment . show ( fragment Manager , ĠACTION _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Fragment . set To Handle When Starting () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Component ( activity , Ġprovider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Component ?. handle Action ( activity , Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Component ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠFragment Activity , ĊĠĠĠĠĠĠĠ Ġprovider : ĠAction Component Provider < out ĠBase Action Component < out ĠConfiguration >, Ġout ĠConfiguration > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Action Component For ( activity , Ġprovider , Ġconfiguration ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Component Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ( activity , Ġthis @ Action Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve Errors ( activity , Ġ{ Ġcallback . onError ( it . exception ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" handle Action Ġ- Ġloaded Ġa Ġnew Ġcomponent Ġ- Ġ${ this :: class . java . simple Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Redirect Response ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle We Chat Pay Response ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġloaded Component Ġ?: Ġthrow ĠCheckout Exception (" Action Ġcomponent Ġis Ġnot Ġloaded ") ĊĠĠĠĠĠĠĠ ĠLogger . d ( TAG , Ġ" handle Action Ġ- Ġloaded Ġcomponent Ġtype : Ġ${ component :: class . java . simple Name }") ĊĠĠĠĠĠĠĠ Ġif Ġ( component Ġ! is ĠIntent Handling Component ) Ġthrow ĠCheckout Exception (" Loaded Ġcomponent Ġcannot Ġhandle Ġintent s ") ĊĠĠĠĠĠĠĠ Ġcomponent . handle Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Action Provider For ( action : ĠAction ): ĠAction Component Provider < out ĠBase Action Component < out ĠConfiguration >, Ġout ĠConfiguration >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Action Providers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRedirect Component . PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd yen 3 DS 2 Component . PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWe Chat Pay Action Component . PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAwait Component . PROVIDER , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQR Code Component . PROVIDER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġall Action Providers . first OrNull Ġ{ Ġit . can Handle Action ( action ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Action Component For ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠFragment Activity , ĊĠĠĠĠĠĠĠ Ġprovider : ĠAction Component Provider < out ĠBase Action Component < out ĠConfiguration >, Ġout ĠConfiguration >, ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠAction Handler Configuration ĊĠĠĠ Ġ): ĠBase Action Component < out ĠConfiguration > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRedirect Component . PROVIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRedirect Component . PROVIDER . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Config For Action ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd yen 3 DS 2 Component . PROVIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAd yen 3 DS 2 Component . PROVIDER . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Config For Action ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWe Chat Pay Action Component . PROVIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWe Chat Pay Action Component . PROVIDER . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Config For Action ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAwait Component . PROVIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAwait Component . PROVIDER . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Config For Action ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQR Code Component . PROVIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQR Code Component . PROVIDER . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Config For Action ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCheckout Exception (" Unable Ġto Ġfind Ġcomponent Ġfor Ġprovider Ġ- Ġ$ provider ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠConfiguration > ĠgetDefault Config For Action ( ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠAction Handler Configuration ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshop per Locale Ġ= Ġconfiguration . shop per Locale ĊĠĠĠĠĠĠĠ Ġval Ġenvironment Ġ= Ġconfiguration . environment ĊĠĠĠĠĠĠĠ Ġval Ġclient Key Ġ= Ġconfiguration . client Key ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġdefault Ġbuilder Ġfor ĠConfiguration Ġtype ĊĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠBase Configuration Builder < out ĠConfiguration > Ġ= Ġwhen Ġ( T :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAwait Configuration :: class Ġ-> ĠAwait Configuration . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop per Locale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRedirect Configuration :: class Ġ-> ĠRedirect Configuration . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop per Locale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQR Code Configuration :: class Ġ-> ĠQR Code Configuration . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop per Locale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd yen 3 DS 2 Configuration :: class Ġ-> ĠAd yen 3 DS 2 Configuration . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop per Locale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWe Chat Pay Action Configuration :: class Ġ-> ĠWe Chat Pay Action Configuration . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop per Locale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠCheckout Exception (" Unable Ġto Ġfind Ġcomponent Ġconfiguration Ġfor Ġclass Ġ- Ġ${ T :: class }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () Ġas ĠT ĊĠĠĠ Ġ} Ċ } Ċ