package Ġcom . stripe . android Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Owner Ċ import Ġandroidx . saved state . Saved State Registry Owner Ċ import Ġcom . stripe . android . Payment Session . Payment Session Listener Ċ import Ġcom . stripe . android . view . Activity Starter Ċ import Ġcom . stripe . android . view . Payment Flow Activity Ċ import Ġcom . stripe . android . view . Payment Flow Activity Starter Ċ import Ġcom . stripe . android . view . Payment Methods Activity Ċ import Ġcom . stripe . android . view . Payment Methods Activity Starter Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġsingle Ġstart - to - finish Ġpayment Ġoperation . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ Using ĠAndroid Ġbasic Ġintegration ]( https :// stripe . com / docs / mobile / android / basic ) Ġfor Ġmore Ċ Ġ* Ġinformation . Ċ Ġ* Ċ Ġ* ĠIf Ġ[ Payment Session Config . should Pref etch Customer ] Ġis Ġ` true `, Ġand Ġthe Ġcustomer Ġhas Ġpreviously Ċ Ġ* Ġselected Ġa Ġpayment Ġmethod , Ġ[ Payment Session Data . payment Method ] Ġwill Ġbe Ġupdated Ġwith Ġthe Ċ Ġ* Ġpayment Ġmethod Ġand Ġ[ Payment Session Listener . on Payment Session Data Changed ] Ġwill Ġbe Ġcalled . Ċ Ġ*/ Ċ class ĠPayment Session Ġ@ Visible ForTesting Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠ ĠviewModel Store Owner : ĠViewModel Store Owner , ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġsaved State Registry Owner : ĠSaved State Registry Owner , ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠPayment Session Config , ĊĠĠĠ Ġcustomer Session : ĠCustomer Session , ĊĠĠĠ Ġprivate Ġval Ġpayment Methods Activity Starter : ĊĠĠĠĠĠĠĠ ĠActivity Starter < Payment Methods Activity , ĠPayment Methods Activity Starter . Args >, ĊĠĠĠ Ġprivate Ġval Ġpayment Flow Activity Starter : ĊĠĠĠĠĠĠĠ ĠActivity Starter < Payment Flow Activity , ĠPayment Flow Activity Starter . Args >, ĊĠĠĠ Ġpayment Session Data : ĠPayment Session Data Ġ= ĠPayment Session Data ( config ) Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġval ĠviewModel : ĠPayment Session ViewModel Ġ= ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Store Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Session ViewModel . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State Registry Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Session Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustomer Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) [ Payment Session ViewModel :: class . java ] ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġvar Ġlistener : ĠPayment Session Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġlifecycle Observer Ġ= Ġobject Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle . add Observer ( lifecycle Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . network State . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġnetwork State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Com munic ating StateChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( network State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Session ViewModel . Network State . Active Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Session ViewModel . Network State . Inactive Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . payment Session Data LiveData . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Payment Session Data Changed ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠPayment Session Ġattached Ġto Ġthe Ġgiven Ġhost ĠActivity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġa Ġ` Component Activity ` Ġfrom Ġwhich Ġto Ġlaunch Ġother ĠStripe ĠActiv ities . ĠThis ĊĠĠĠĠ Ġ* ĠActivity Ġwill Ġreceive Ġresults Ġin ĊĠĠĠĠ Ġ* Ġ` Activity # on Activity Result ( int , Ġint , ĠIntent )` Ġthat Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġpassed Ġback Ġto Ġthis Ġsession . ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig Ġa Ġ[ Payment Session Config ] Ġthat Ġconfig ures Ġthis Ġ[ Payment Session ] Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( activity : ĠComponent Activity , Ġconfig : ĠPayment Session Config ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġactivity . application Context , ĊĠĠĠĠĠĠĠ Ġactivity . application , ĊĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠ ĠCustomer Session . getInstance (), ĊĠĠĠĠĠĠĠ ĠPayment Methods Activity Starter ( activity ), ĊĠĠĠĠĠĠĠ ĠPayment Flow Activity Starter ( activity , Ġconfig ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠPayment Session Ġattached Ġto Ġthe Ġgiven Ġhost ĠFragment . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfragment Ġa Ġ` Fragment ` Ġfrom Ġwhich Ġto Ġlaunch Ġother ĠStripe ĠActiv ities . ĠThis ĊĠĠĠĠ Ġ* ĠFragment Ġwill Ġreceive Ġresults Ġin Ġ` Fragment # on Activity Result ( int , Ġint , ĠIntent )` Ġthat Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġpassed Ġback Ġto Ġthis Ġsession . ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig Ġa Ġ[ Payment Session Config ] Ġthat Ġconfig ures Ġthis Ġ[ Payment Session ] Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( fragment : ĠFragment , Ġconfig : ĠPayment Session Config ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġfragment . require Activity (). application Context , ĊĠĠĠĠĠĠĠ Ġfragment . require Activity (). application , ĊĠĠĠĠĠĠĠ Ġfragment , ĊĠĠĠĠĠĠĠ Ġfragment , ĊĠĠĠĠĠĠĠ Ġfragment , ĊĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠ ĠCustomer Session . getInstance (), ĊĠĠĠĠĠĠĠ ĠPayment Methods Activity Starter ( fragment ), ĊĠĠĠĠĠĠĠ ĠPayment Flow Activity Starter ( fragment , Ġconfig ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNotify Ġthis Ġpayment Ġsession Ġthat Ġit Ġis Ġcomplete ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Completed () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . on Completed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġhandle ĠActivity Ġresults Ġfrom ĠStripe Ġactivities . ĠPass Ġdata Ġhere Ġfrom Ġyour ĊĠĠĠĠ Ġ* Ġhost 's Ġ`# on Activity Result ( int , Ġint , ĠIntent )` Ġfunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code Ġthe Ġrequest Ġcode Ġused Ġto Ġopen Ġthe Ġresulting Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param ĠresultCode Ġa Ġresult Ġcode Ġrepresenting Ġthe Ġsuccess Ġof Ġthe Ġintended Ġaction ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġan Ġ[ Intent ] Ġwith Ġthe Ġresulting Ġdata Ġfrom Ġthe ĠActivity ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġactivity Ġresult Ġwas Ġhandled Ġby Ġthis Ġfunction , ĊĠĠĠĠ Ġ* Ġotherwise Ġ` false ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Payment Data ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! VALID _ REQUEST _ CODES . contains ( request Code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ C ANCE LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPayment Methods Activity Starter . REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf ĠresultCode Ġof Ġ` Payment Methods Activity ` Ġis Ġ` Activity . RESULT _ C ANCE LED `, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġuser Ġt apped Ġback Ġvia Ġthe Ġtoolbar Ġor Ġdevice Ġback Ġbutton . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon PaymentMethod Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Customer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġreturn Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Methods Activity Starter . REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon PaymentMethod Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Flow Activity Starter . REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . get Parcelable Extra < Payment Session Data >( EXTRA _ PAYMENT _ SESSION _ DATA )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Payment Flow Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon PaymentMethod Result ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . on PaymentMethod Result ( Payment Methods Activity Starter . Result . from Intent ( data )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġ[ Payment Session ] Ġwith Ġa Ġ[ Payment Session Listener ] Ġto Ġbe Ġnotified Ġof ĊĠĠĠĠ Ġ* Ġdata Ġchanges . ĠThe Ġreference Ġto Ġthe Ġ[ listener ] Ġwill Ġbe Ġreleased Ġwhen Ġthe Ġhost Ġ( i . e . ĊĠĠĠĠ Ġ* Ġ` Activity ` Ġor Ġ` Fragment `) Ġis Ġdestroyed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġ[ listener ] Ġwill Ġbe Ġimmediately Ġcalled Ġwith Ġthe Ġcurrent Ġ[ Payment Session Data ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġ[ Payment Session Config . should Pref etch Customer ] Ġis Ġtrue , Ġa Ġnew Ġ` Customer ` Ġinstance ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġfetched . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġa Ġ[ Payment Session Listener ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit ( ĊĠĠĠĠĠĠĠ Ġlistener : ĠPayment Session Listener ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĊĠĠĠĠĠĠĠ ĠviewModel . on Listener Attached () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( config . should Pref etch Customer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Customer ( is Initial Fetch Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch Ġthe Ġ[ Payment Methods Activity ] Ġto Ġallow Ġthe Ġuser Ġto Ġselect Ġa Ġpayment Ġmethod , ĊĠĠĠĠ Ġ* Ġor Ġto Ġadd Ġa Ġnew Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġinitial Ġselected ĠPayment ĠMethod ĠID Ġuses Ġthe Ġfollowing Ġlogic . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 1 . ĠIf Ġ{@ param Ġuser Selected PaymentMethod Id } Ġis Ġspecified , Ġuse Ġthat ĊĠĠĠĠ Ġ* ĠĠ 2 . ĠIf Ġthe Ġinstance 's Ġ[ Payment Session Data . payment Method ] Ġis Ġnon - null , Ġuse Ġthat ĊĠĠĠĠ Ġ* ĠĠ 3 . ĠIf Ġthe Ġinstance 's Ġ[ Payment Session Prefs . get PaymentMethod Id ] Ġis Ġnon - null , Ġuse Ġthat ĊĠĠĠĠ Ġ* ĠĠ 4 . ĠOtherwise , Ġchoose Ġthe Ġmost Ġrecently Ġadded ĠPayment ĠMethod ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġselected PaymentMethod Id Ġif Ġnon - null , Ġthe ĠID Ġof Ġthe ĠPayment ĠMethod Ġthat Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġinitially Ġselected Ġon Ġthe ĠPayment ĠMethod Ġselection Ġscreen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpresent PaymentMethod Selection ( selected PaymentMethod Id : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment Methods Activity Starter . start For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Methods Activity Starter . Args . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial PaymentMethod Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getSelected PaymentMethod Id ( selected PaymentMethod Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Add PaymentMethod Footer ( config . add PaymentMethod Footer Layout Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs Payment Session Active ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Payment Configuration ( Payment Configuration . getInstance ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set PaymentMethod Types ( config . payment Method Types ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Should Show Google Pay ( config . should Show Google Pay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWindow Flags ( config . window Flags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Billing Address Fields ( config . billing Address Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Use Google Pay ( viewModel . payment Session Data . use Google Pay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Can Delete Payment Methods ( config . can Delete Payment Methods ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġcart Ġtotal Ġfor Ġthis ĠPayment Session . ĠThis Ġshould Ġnot Ġinclude Ġshipping Ġcosts . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcart Total Ġthe Ġcurrent Ġtotal Ġprice Ġfor Ġall Ġnon - shipping Ġand Ġnon - tax Ġitems Ġin ĊĠĠĠĠ Ġ* Ġa Ġcustomer 's Ġcart ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Cart Total (@ Int Range ( from Ġ= Ġ 0 ) Ġcart Total : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . update Cart Total ( cart Total ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch Ġthe Ġ[ Payment Flow Activity ] Ġto Ġallow Ġthe Ġuser Ġto Ġfill Ġin Ġpayment Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpresent Shipping Flow () Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment Flow Activity Starter . start For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Flow Activity Starter . Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Session Config Ġ= Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Session Data Ġ= ĠviewModel . payment Session Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Payment Session Active Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Flags Ġ= Ġconfig . window Flags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġthe Ġpayment Ġmethod Ġassociated Ġwith Ġthis Ġ[ Payment Session ] Ġin Ġ[ Payment Session Data ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWill Ġtrigger Ġa Ġcall Ġto Ġ[ Payment Session Listener . on Payment Session Data Changed ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear PaymentMethod () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . clear PaymentMethod () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Customer ( is Initial Fetch : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . fetch Customer ( is Initial Fetch ). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPayment Session ViewModel . Fetch Customer Result . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. onError ( it . errorCode , Ġit . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRepresents Ġa Ġlistener Ġfor ĠPayment Session Ġactions , Ġused Ġto Ġupdate Ġthe Ġhost Ġactivity ĊĠĠĠĠ Ġ* Ġwhen Ġnecessary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠPayment Session Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNotification Ġmethod Ġcalled Ġwhen Ġnetwork Ġcommunication Ġis Ġbeginning Ġor Ġending . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġis Com munic ating Ġ` true ` Ġif Ġcommunication Ġis Ġstarting , Ġ` false ` Ġif Ġit Ġis Ġstopping . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Com munic ating StateChanged ( is Com munic ating : ĠBoolean ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNotification Ġmethod Ġcalled Ġwhen Ġan Ġerror Ġhas Ġoccurred . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠerrorCode Ġa Ġnetwork Ġcode Ġassociated Ġwith Ġthe Ġerror ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠerrorMessage Ġa Ġmessage Ġassociated Ġwith Ġthe Ġerror ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( errorCode : ĠInt , ĠerrorMessage : ĠString ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNotification Ġmethod Ġcalled Ġwhen Ġthe Ġ[ Payment Session Data ] Ġfor Ġthis Ġsession Ġhas Ġchanged . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġupdated Ġ[ Payment Session Data ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Payment Session Data Changed ( data : ĠPayment Session Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠPRODUCT _ TOKEN : ĠString Ġ= Ġ" Payment Session " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠEX TRA _ PAYMENT _ SESSION _ DATA : ĠString Ġ= Ġ" extra _ payment _ session _ data " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVALID _ REQUEST _ CODES Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Methods Activity Starter . REQUEST _ CODE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Flow Activity Starter . REQUEST _ CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ