package Ġcom . stripe . example . activity Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . stripe . android . create Card Token Ċ import Ġcom . stripe . android . model . Card Params Ċ import Ġcom . stripe . android . model . Token Ċ import Ġcom . stripe . example . R Ċ import Ġcom . stripe . example . Stripe Factory Ċ import Ġcom . stripe . example . databinding . Create Card Token Activity Binding Ċ import Ġcom . stripe . example . databinding . Token Item Binding Ċ Ċ class ĠCreate Card Token Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġview Binding : ĠCreate Card Token Activity Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCreate Card Token Activity Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsn ackbar Controller : ĠSn ackbar Controller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar Controller ( view Binding . coordinator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( view Binding . root ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠAdapter ( this ) ĊĠĠĠĠĠĠĠ Ġview Binding . tokens List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġview Binding . tokens List . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayoutManager . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel : ĠCreate Card Token ViewModel Ġby Ġview Models () ĊĊĠĠĠĠĠĠĠ Ġview Binding . create Token Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBackground Task Tracker . onStart () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . card Input Widget . card Params ?. let Ġ{ Ġcard Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Request Start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . create Card Token ( card Params ). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Request End () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . add Token ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsn ackbar Controller . show ( getString ( R . string . invalid _ card _ details )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Binding . card Input Widget . set Card Valid Callback Ġ{ ĠisValid , Ġinvalid Fields Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadded Ġas Ġan Ġexample Ġ- Ġno - op ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Binding . card Input Widget . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Request Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġview Binding . create Token Button . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Request End () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . progress Bar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġview Binding . create Token Button . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠAdapter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . Adapter < Adapter . Token ViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtokens : ĠMutable List < Token > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtokens . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġi : ĠInt ): ĠToken ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠToken ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToken Item Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . layout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Group , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠToken ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . update ( tokens [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġadd Token ( token : ĠToken ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( 0 , Ġtoken ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġclass ĠToken ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġview Binding : ĠToken Item Binding ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( view Binding . root ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġupdate ( token : ĠToken ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . last 4 . text Ġ= Ġtoken . card ?. last 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . tokenId . text Ġ= Ġtoken . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠCreate Card Token ViewModel ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication ĊĠĠĠ Ġ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstripe Ġ= ĠStripe Factory ( application ). create () ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Card Token ( card Params : ĠCard Params ): ĠLive Data < Token > Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe . create Card Token ( card Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackground Task Tracker . on Stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Stripe Example ", Ġ" Error Ġwhile Ġcreating Ġcard Ġtoken ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ