package Ġcom . stripe . android . payments heet . view models Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . distinct Until Changed Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġandroidx . lifecycle . switch Map Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . stripe . android . google pay . Stripe Google Pay Contract Ċ import Ġcom . stripe . android . model . Payment Intent Ċ import Ġcom . stripe . android . model . PaymentMethod Ċ import Ġcom . stripe . android . payments heet . Google Pay Repository Ċ import Ġcom . stripe . android . payments heet . Payment Sheet Ċ import Ġcom . stripe . android . payments heet . Prefs Repository Ċ import Ġcom . stripe . android . payments heet . model . Add PaymentMethod Config Ċ import Ġcom . stripe . android . payments heet . model . Payment Selection Ċ import Ġcom . stripe . android . payments heet . ui . Sheet Mode Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* ĠBase Ġ` ViewModel ` Ġfor Ġactivities Ġthat Ġuse Ġ` Bottom Sheet `. Ċ Ġ*/ Ċ internal Ġabstract Ġclass ĠSheet ViewModel < Transition Target Type >( ĊĠĠĠ Ġinternal Ġval Ġconfig : ĠPayment Sheet . Configuration ?, ĊĠĠĠ Ġprivate Ġval Ġis Google Pay Enabled : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġgoogle Pay Repository : ĠGoogle Pay Repository , ĊĠĠĠ Ġprotected Ġval Ġprefs Repository : ĠP refs Repository , ĊĠĠĠ Ġprotected Ġval Ġwork Context : ĠCor outine Context Ġ= ĠDispatch ers . IO Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġinternal Ġval Ġcustomer Config Ġ= Ġconfig ?. customer ĊĊĠĠĠ Ġ// Ġa Ġfatal Ġerror ĊĠĠĠ Ġprivate Ġval Ġ_ fatal Ġ= ĠMutable LiveData < Throwable >() ĊĠĠĠ Ġinternal Ġval Ġfatal : ĠLive Data < Throwable > Ġ= Ġ_ fatal ĊĊĠĠĠ Ġprivate Ġval Ġ_ is Google Pay Ready Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġinternal Ġval Ġis Google Pay Ready : ĠLive Data < Boolean > Ġ= Ġ_ is Google Pay Ready . distinct Until Changed () ĊĊĠĠĠ Ġprotected Ġval Ġ_ launch Google Pay Ġ= ĠMutable LiveData < Stripe Google Pay Contract . Args >() ĊĠĠĠ Ġinternal Ġval Ġlaunch Google Pay : ĠLive Data < Stripe Google Pay Contract . Args > Ġ= Ġ_ launch Google Pay ĊĊĠĠĠ Ġprotected Ġval Ġ_ payment Intent Ġ= ĠMutable LiveData < Payment Intent ?> () ĊĠĠĠ Ġinternal Ġval Ġpayment Intent : ĠLive Data < Payment Intent ?> Ġ= Ġ_ payment Intent ĊĊĠĠĠ Ġprotected Ġval Ġ_ payment Methods Ġ= ĠMutable LiveData < List < PaymentMethod >>() ĊĠĠĠ Ġinternal Ġval Ġpayment Methods : ĠLive Data < List < PaymentMethod >> Ġ= Ġ_ payment Methods ĊĊĠĠĠ Ġprivate Ġval Ġ_ transition Ġ= ĠMutable LiveData < Transition Target Type ? >( null ) ĊĠĠĠ Ġinternal Ġval Ġtransition : ĠLive Data < Transition Target Type ?> Ġ= Ġ_ transition ĊĊĠĠĠ Ġprivate Ġval Ġ_ selection Ġ= ĠMutable LiveData < Payment Selection ?> () ĊĠĠĠ Ġinternal Ġval Ġselection : ĠLive Data < Payment Selection ?> Ġ= Ġ_ selection ĊĊĠĠĠ Ġprivate Ġval Ġ_ sheet Mode Ġ= ĠMutable LiveData < Sheet Mode >() ĊĠĠĠ Ġval Ġsheet Mode : ĠLive Data < Sheet Mode > Ġ= Ġ_ sheet Mode . distinct Until Changed () ĊĊĠĠĠ Ġprotected Ġval Ġ_ processing Ġ= ĠMutable LiveData ( true ) ĊĠĠĠ Ġval Ġprocessing : ĠLive Data < Boolean > Ġ= Ġ_ processing ĊĊĠĠĠ Ġ// Ġa Ġmessage Ġshown Ġto Ġthe Ġuser ĊĠĠĠ Ġprotected Ġval Ġ_ user Message Ġ= ĠMutable LiveData < User Message ?> () ĊĠĠĠ Ġinternal Ġval Ġuser Message : ĠLive Data < User Message ?> Ġ= Ġ_ user Message ĊĊĠĠĠ Ġval Ġc ta Enabled : ĠLive Data < Boolean > Ġ= Ġprocessing . switch Map Ġ{ Ġis Processing Ġ-> ĊĠĠĠĠĠĠĠ Ġtransition . switch Map Ġ{ Ġtransition Target Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection . switch Map Ġ{ Ġpayment Selection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMutable LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Processing Ġ&& Ġtransition Target Ġ!= Ġnull Ġ&& Ġpayment Selection Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Is Google Pay Ready () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Add PaymentMethod Config () Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġemit Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMed iator LiveData < Add PaymentMethod Config ?> (). also Ġ{ Ġconfig LiveData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( payment Intent , Ġpayment Methods , Ġis Google Pay Ready ). forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig LiveData . add Source ( source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig LiveData . value Ġ= Ġcreate Add PaymentMethod Config () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. distinct Until Changed () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Add PaymentMethod Config (): ĠAdd PaymentMethod Config ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment Intent Value Ġ= Ġpayment Intent . value ĊĠĠĠĠĠĠĠ Ġval Ġpayment Methods Value Ġ= Ġpayment Methods . value ĊĠĠĠĠĠĠĠ Ġval Ġis Google Pay Ready Value Ġ= Ġis Google Pay Ready . value ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Intent Value Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Methods Value Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Google Pay Ready Value Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd PaymentMethod Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Intent Ġ= Ġpayment Intent Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Methods Ġ= Ġpayment Methods Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Google Pay Ready Ġ= Ġis Google Pay Ready Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Is Google Pay Ready () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Google Pay Ready . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Google Pay Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( work Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Google Pay Ready . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Pay Repository . is Ready (). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Google Pay Ready . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Mode ( mode : ĠSheet Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ sheet Mode . post Value ( mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtransition To ( target : ĠTransition Target Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ user Message . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ transition . post Value ( target ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Fatal ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ fatal . post Value ( throwable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon ApiError ( errorMessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ user Message . value Ġ= ĠerrorMessage ?. let Ġ{ ĠUser Message . Error ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ_ processing . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Selection ( selection : ĠPayment Selection ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selection . value Ġ= Ġselection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ user Message . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Saved Selection () Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( work Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs Repository . get Saved Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠUser Message Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġmessage : ĠString ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmessage : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠUser Message () ĊĠĠĠ Ġ} Ċ } Ċ