package Ġcom . stripe . android . payments heet . injection Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . stripe . android . Logger Ċ import Ġcom . stripe . android . Payment Configuration Ċ import Ġcom . stripe . android . Payment Controller Ċ import Ġcom . stripe . android . Stripe Intent Result Ċ import Ġcom . stripe . android . Stripe Payment Controller Ċ import Ġcom . stripe . android . model . Stripe Intent Ċ import Ġcom . stripe . android . networking . ApiRequest Ċ import Ġcom . stripe . android . networking . Stripe Api Repository Ċ import Ġcom . stripe . android . payments . Payment Flow Result Processor Ċ import Ġcom . stripe . android . payments . Payment Intent Flow Result Processor Ċ import Ġcom . stripe . android . payments . Setup Intent Flow Result Processor Ċ import Ġcom . stripe . android . payments heet . Default Google Pay Repository Ċ import Ġcom . stripe . android . payments heet . Default Prefs Repository Ċ import Ġcom . stripe . android . payments heet . Google Pay Repository Ċ import Ġcom . stripe . android . payments heet . Payment Sheet Contract Ċ import Ġcom . stripe . android . payments heet . Prefs Repository Ċ import Ġcom . stripe . android . payments heet . model . Payment Intent Client Secret Ċ import Ġcom . stripe . android . payments heet . model . Setup Intent Client Secret Ċ import Ġcom . stripe . android . payments heet . repositories . Payment Methods Api Repository Ċ import Ġcom . stripe . android . payments heet . repositories . Payment Methods Repository Ċ import Ġcom . stripe . android . payments heet . repositories . Stripe Intent Repository Ċ import Ġdagger . Lazy Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġjavax . inject . Provider Ċ import Ġjavax . inject . Singleton Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ @ Module Ċ internal Ġclass ĠPayment Sheet ViewModel Module Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġnon - singleton ĠPayment Configuration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNeeds Ġto Ġbe Ġre calculated Ġwhenever Ġneeded Ġto Ġallow Ġclient Ġto Ġset Ġthe Ġpublish able Key Ġand ĊĠĠĠĠ Ġ* Ġstripe AccountId Ġin ĠPayment Configuration Ġany Ġtime Ġbefore Ġconfiguring Ġthe ĠFlow Controller ĊĠĠĠĠ Ġ* Ġthrough Ġconfigure With Payment Intent Ġor Ġconfigure With Setup Intent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠShould Ġalways Ġbe Ġinjected Ġwith Ġ[ Lazy ] Ġor Ġ[ Provider ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Payment Configuration ( application : ĠApplication ): ĠPayment Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPayment Configuration . getInstance ( application ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠBelow Ġare Ġall ĠSingleton Ġinstance Ġto Ġbe Ġinjected Ġinto ĠPayment Sheet ViewModel ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Api RequestOptions ( ĊĠĠĠĠĠĠĠ Ġlazy Payment Configuration : ĠLazy < Payment Configuration > ĊĠĠĠ Ġ) Ġ= ĠApi Request . Options ( ĊĠĠĠĠĠĠĠ ĠapiKey Ġ= Ġlazy Payment Configuration . get (). publish able Key , ĊĠĠĠĠĠĠĠ Ġstripe Account Ġ= Ġlazy Payment Configuration . get (). stripe AccountId ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Stripe Api Repository ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġlazy Payment Configuration : ĠLazy < Payment Configuration > ĊĠĠĠ Ġ) Ġ= ĠStripe Api Repository ( ĊĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠ Ġ{ Ġlazy Payment Configuration . get (). publish able Key Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Stripe Intent Repository ( ĊĠĠĠĠĠĠĠ Ġstripe Api Repository : ĠStripe Api Repository , ĊĠĠĠĠĠĠĠ Ġlazy Payment Config : ĠLazy < Payment Configuration > ĊĠĠĠ Ġ): ĠStripe Intent Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStripe Intent Repository . Api ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository Ġ= Ġstripe Api Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options Ġ= ĠApi Request . Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Payment Config . get (). publish able Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Payment Config . get (). stripe AccountId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Context Ġ= ĠDispatch ers . IO ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Payment Methods Api Repository ( ĊĠĠĠĠĠĠĠ Ġstripe Api Repository : ĠStripe Api Repository , ĊĠĠĠĠĠĠĠ Ġlazy Payment Config : ĠLazy < Payment Configuration > ĊĠĠĠ Ġ): ĠPayment Methods Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPayment Methods Api Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository Ġ= Ġstripe Api Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish able Key Ġ= Ġlazy Payment Config . get (). publish able Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe AccountId Ġ= Ġlazy Payment Config . get (). stripe AccountId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Context Ġ= ĠDispatch ers . IO ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Payment Flow Result Processor ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġstarter Args : ĠPayment Sheet Contract . Args , ĊĠĠĠĠĠĠĠ Ġlazy Payment Config : ĠLazy < Payment Configuration >, ĊĠĠĠĠĠĠĠ Ġstripe Api Repository : ĠStripe Api Repository , ĊĠĠĠ Ġ): ĠPayment Flow Result Processor < out ĠStripe Intent , ĠStripe Intent Result < Stripe Intent >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( starter Args . client Secret ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPayment Intent Client Secret Ġ-> ĠPayment Intent Flow Result Processor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlazy Payment Config . get (). publish able Key Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Api Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . IO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSetup Intent Client Secret Ġ-> ĠSetup Intent Flow Result Processor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlazy Payment Config . get (). publish able Key Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Api Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . IO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Google Pay Repository ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġstarter Args : ĠPayment Sheet Contract . Args ĊĠĠĠ Ġ): ĠGoogle Pay Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstarter Args . config ?. google Pay ?. environment ?. let Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Google Pay Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠGoogle Pay Repository . Disabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Prefs Repository ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġstarter Args : ĠPayment Sheet Contract . Args , ĊĠĠĠĠĠĠĠ Ġgoogle Pay Repository : ĠGoogle Pay Repository ĊĠĠĠ Ġ): ĠP refs Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstarter Args . config ?. customer ?. let Ġ{ Ġ( id ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Prefs Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustomer Id Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Google Pay Ready Ġ= Ġ{ Ġgoogle Pay Repository . is Ready (). first () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Context Ġ= ĠDispatch ers . IO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠP refs Repository . No op () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠReplace Ġwith Ġan Ġactual Ġlogger ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Logger () Ġ= ĠLogger . noop () ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ IO Context ĊĠĠĠ Ġfun Ġprovide Work Context (): ĠCor outine Context Ġ= ĠDispatch ers . IO ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Stripe Payment Controller ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġstripe Api Repository : ĠStripe Api Repository , ĊĠĠĠĠĠĠĠ Ġlazy Payment Configuration : ĠLazy < Payment Configuration >, ĊĠĠĠ Ġ): ĠPayment Controller Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStripe Payment Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlazy Payment Configuration . get (). publish able Key Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Api Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ