package Ġcom . stripe . example . activity Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . material . Linear Progress Indicator Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . stripe . android . model . Address Ċ import Ġcom . stripe . android . model . Confirm Payment Intent Params Ċ import Ġcom . stripe . android . model . PaymentMethod Create Params Ċ import Ġcom . stripe . android . payments . payment launcher . Payment Launcher Ċ import Ġcom . stripe . android . payments . payment launcher . Payment Result Ċ import Ġcom . stripe . example . R Ċ import Ġcom . stripe . example . Settings Ċ import Ġcom . stripe . example . module . Stripe Intent ViewModel Ċ Ċ /** Ċ Ġ* ĠAn ĠActivity Ġto Ġdemonstrate Ġ[ Payment Launcher ] Ġwith ĠJet pack ĠCompose . Ċ Ġ*/ Ċ class ĠCompose Example Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠStripe Intent ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompose Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠCompose Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġin Progress Ġby ĠviewModel . in Progress . observe As State ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġby ĠviewModel . status . observe As State ("") ĊĊĠĠĠĠĠĠĠ Ġcreate Payment Launcher (). let Ġ{ Ġpayment Launcher Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 1 0 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Progress Indicator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . payment _ auth _ intro ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( vertical Ġ= Ġ 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġconfirm Params 3 ds 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Name Ġ= ĠR . string . confirm _ with _ 3 ds 1 _ button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Launcher Ġ= Ġpayment Launcher , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Progress Ġ= Ġin Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġconfirm Params 3 ds 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Name Ġ= ĠR . string . confirm _ with _ 3 ds 2 _ button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Launcher Ġ= Ġpayment Launcher , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Progress Ġ= Ġin Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider ( modifier Ġ= ĠModifier . padding ( vertical Ġ= Ġ 5 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġ[ Payment Launcher ] Ġin Ġa Ġ[ Composable ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun Ġcreate Payment Launcher (): ĠPayment Launcher Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠSettings ( Local Context . current ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPayment Launcher . create For Compose ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish able Key Ġ= Ġsettings . publish able Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe AccountId Ġ= Ġsettings . stripe AccountId ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPayment Result . Completed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . status . value Ġ+= Ġ"\ n \ n Payment Intent Ġconfirmation Ġsucceeded \ n \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . in Progress . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPayment Result . Canceled Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . status . value Ġ+= Ġ"\ n \ n Payment Intent Ġconfirmation Ġcancelled \ n \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . in Progress . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPayment Result . Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . status . value Ġ+= Ġ"\ n \ n Payment Intent Ġconfirmation Ġfailed Ġwith Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" throwable Ġ${ it . throwable } Ġ\ n \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . in Progress . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠConfirm Button ( ĊĠĠĠĠĠĠĠ Ġparams : ĠPayment Method Create Params , ĊĠĠĠĠĠĠĠ Ġ@ String Res Ġbutton Name : ĠInt , ĊĠĠĠĠĠĠĠ Ġpayment Launcher : ĠPayment Launcher , ĊĠĠĠĠĠĠĠ Ġin Progress : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġcreate And Confirm Payment Intent ( params , Ġpayment Launcher ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġ! in Progress ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( string Resource ( button Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate And Confirm Payment Intent ( ĊĠĠĠĠĠĠĠ Ġparams : ĠPayment Method Create Params , ĊĠĠĠĠĠĠĠ Ġpayment Launcher : ĠPayment Launcher , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . create Payment Intent (" us "). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success Ġ{ Ġresponse Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfirm Payment Intent Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm Payment Intent Params . create With PaymentMethod Create Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Method Create Params Ġ= Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret Ġ= Ġresponse Data . getString (" secret "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshipping Ġ= ĠSH IP PING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Launcher . confirm ( confirm Payment Intent Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSee Ġhttps :// stripe . com / docs / payments / 3 d - secure # three - ds - cards Ġfor Ġmore Ġoptions . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfirm Params 3 ds 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Create Params . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Create Params . Card . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Number (" 4 0 0 0 0 0 0 0 0 0 0 0 3 2 3 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Expiry Month ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Expiry Year ( 2 0 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set C vc (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfirm Params 3 ds 1 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Create Params . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Method Create Params . Card . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Number (" 4 0 0 0 0 0 0 0 0 0 0 0 3 0 6 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Expiry Month ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Expiry Year ( 2 0 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set C vc (" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSH IP PING Ġ= ĠConfirm Payment Intent Params . Shipping ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= ĠAddress . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set City (" San ĠFrancisco ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Country (" US ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Line 1 (" 1 2 3 ĠMarket ĠSt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Line 2 ("# 3 4 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Postal Code (" 9 4 1 0 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setState (" CA ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" J en ny ĠR osen ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier Ġ= Ġ" Fe dex ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Number Ġ= Ġ" 1 2 3 4 5 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ