package Ġcom . stripe . android . view Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . text . util . Link ify Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . text . util . Link ify Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . stripe . android . Customer Session Ċ import Ġcom . stripe . android . Payment Configuration Ċ import Ġcom . stripe . android . R Ċ import Ġcom . stripe . android . Stripe Ċ import Ġcom . stripe . android . model . PaymentMethod Ċ import Ġcom . stripe . android . model . PaymentMethod Create Params Ċ Ċ /** Ċ Ġ* ĠActivity Ġused Ġto Ġdisplay Ġa Ġ[ Add PaymentMethod View ] Ġand Ġreceive Ġthe Ġresulting Ċ Ġ* Ġ[ PaymentMethod ] Ġin Ġthe Ġ` Activity # on Activity Result ( int , Ġint , ĠIntent )` Ġof Ġthe Ċ Ġ* Ġlaunch ing ĠActivity . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠShould Ġbe Ġstarted Ġwith Ġ[ Add PaymentMethod Activity Starter ]. Ċ Ġ*/ Ċ class ĠAdd PaymentMethod Activity Ġ: ĠStripe Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠAdd PaymentMethod Activity Starter . Args Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAdd PaymentMethod Activity Starter . Args . create ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstripe : ĠStripe Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment Configuration Ġ= Ġargs . payment Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠPayment Configuration . getInstance ( this ) ĊĠĠĠĠĠĠĠ ĠStripe ( application Context , Ġpayment Configuration . publish able Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpayment MethodType : ĠPayment Method . Type Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġargs . payment MethodType ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġshould Attach To Customer : ĠBoolean Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment MethodType . is Re usable Ġ&& Ġargs . should Attach To Customer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadd PaymentMethod View : ĠAdd PaymentMethod View Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate PaymentMethod View ( args ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id Ġ= ĠR . id . stripe _ add _ payment _ method _ form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcustomer Session : ĠCustomer Session Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCustomer Session . getInstance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠAdd PaymentMethod ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , ĠAdd PaymentMethod ViewModel . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe , Ġcustomer Session , Ġargs ĊĠĠĠĠĠĠĠ Ġ)) [ Add PaymentMethod ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtitle String Res : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ String Res ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( payment MethodType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method . Type . Card Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . title _ add _ a _ card ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method . Type . F px Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . title _ bank _ account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported ĠPayment ĠMethod Ġtype : Ġ${ payment MethodType . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġconfigure View ( args ) ĊĠĠĠĠĠĠĠ ĠviewModel . log Product Usage () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġadd PaymentMethod View . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure View ( args : ĠAdd PaymentMethod Activity Starter . Args ) Ġ{ ĊĠĠĠĠĠĠĠ Ġargs . window Flags ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Stub . layout Resource Ġ= ĠR . layout . add _ payment _ method _ layout ĊĠĠĠĠĠĠĠ Ġval Ġscroll View Ġ= Ġview Stub . inflate () Ġas ĠViewGroup ĊĠĠĠĠĠĠĠ Ġval Ġcontent Root : ĠViewGroup Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View . findViewById ( R . id . stripe _ add _ payment _ method _ content _ root ) ĊĠĠĠĠĠĠĠ Ġcontent Root . addView ( add PaymentMethod View ) ĊĠĠĠĠĠĠĠ Ġcreate Footer View ( content Root )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd PaymentMethod View . accessibility Traversal Before Ġ= Ġit . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . accessibility Traversal After Ġ= Ġadd PaymentMethod View . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Root . addView ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetTitle ( title String Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate PaymentMethod View ( ĊĠĠĠĠĠĠĠ Ġargs : ĠAdd PaymentMethod Activity Starter . Args ĊĠĠĠ Ġ): ĠAdd PaymentMethod View Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( payment MethodType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method . Type . Card Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd PaymentMethod Card View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Address Fields Ġ= Ġargs . billing Address Fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method . Type . F px Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd PaymentMethod F px View . create ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported ĠPayment ĠMethod Ġtype : Ġ${ payment MethodType . code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Footer View ( ĊĠĠĠĠĠĠĠ Ġcontent Root : ĠViewGroup ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( args . add PaymentMethod Footer Layout Id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfooter View Ġ= Ġlayout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . add PaymentMethod Footer Layout Id , Ġcontent Root , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfooter View . id Ġ= ĠR . id . stripe _ add _ payment _ method _ footer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( footer View Ġis ĠTextView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLink ify Compat . add Links ( footer View , ĠLink ify . ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . enable Accessible Clickable Span Support ( footer View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter View . movement Method Ġ= ĠLink Movement Method . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfooter View ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Action Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate PaymentMethod ( viewModel , Ġadd PaymentMethod View . create Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate PaymentMethod ( ĊĠĠĠĠĠĠĠ ĠviewModel : ĠAdd PaymentMethod ViewModel , ĊĠĠĠĠĠĠĠ Ġparams : ĠPayment Method Create Params ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ProgressBar Visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠviewModel . create PaymentMethod ( params ). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd PaymentMethod ViewModel . PaymentMethod Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Attach To Customer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattach PaymentMethod To Customer ( it . payment Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish With PaymentMethod ( it . payment Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd PaymentMethod ViewModel . PaymentMethod Result . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ProgressBar Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach PaymentMethod To Customer ( payment Method : ĠPayment Method ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . attach PaymentMethod ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Method ĊĠĠĠĠĠĠĠ Ġ). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd PaymentMethod ViewModel . PaymentMethod Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish With PaymentMethod ( it . payment Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd PaymentMethod ViewModel . PaymentMethod Result . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ProgressBar Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( it . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish With PaymentMethod ( payment Method : ĠPayment Method ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ProgressBar Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Extras ( Add PaymentMethod Activity Starter . Result ( payment Method ). to Bundle ())) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ProgressBar Visibility Changed ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd PaymentMethod View . set Com munic ating Progress ( visible ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠTOKEN _ ADD _ PAYMENT _ METHOD _ ACTIVITY : ĠString Ġ= Ġ" Add PaymentMethod Activity " ĊĠĠĠ Ġ} Ċ } Ċ