package Ġcom . stripe . android . view Ċ Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . stripe . android . Api Result Callback Ċ import Ġcom . stripe . android . Customer Session Ċ import Ġcom . stripe . android . Payment Session Ċ import Ġcom . stripe . android . Stripe Ċ import Ġcom . stripe . android . core . Stripe Error Ċ import Ġcom . stripe . android . model . PaymentMethod Ċ import Ġcom . stripe . android . model . PaymentMethod Create Params Ċ import Ġcom . stripe . android . view . i 1 8 n . ErrorMessage Translator Ċ import Ġcom . stripe . android . view . i 1 8 n . Translator Manager Ċ Ċ internal Ġclass ĠAdd PaymentMethod ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġstripe : ĠStripe , ĊĠĠĠ Ġprivate Ġval Ġargs : ĠAdd PaymentMethod Activity Starter . Args , ĊĠĠĠ Ġprivate Ġval ĠerrorMessage Translator : ĠError Message Translator Ġ= ĊĠĠĠĠĠĠĠ ĠTrans lator Manager . get ErrorMessage Translator () Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġproduct Usage : ĠSet < String > Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠ ĠAdd PaymentMethod Activity . PRODUCT _ TOKEN , ĊĠĠĠĠĠĠĠ ĠPayment Session . PRODUCT _ TOKEN . take If Ġ{ Ġargs . is Payment Session Active Ġ} ĊĠĠĠ Ġ). toSet () ĊĊĠĠĠ Ġinternal Ġfun Ġcreate PaymentMethod ( ĊĠĠĠĠĠĠĠ Ġparams : ĠPayment Method Create Params ĊĠĠĠ Ġ): ĠLive Data < Result < PaymentMethod >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠMutable LiveData < Result < PaymentMethod >>() ĊĠĠĠĠĠĠĠ Ġstripe . create PaymentMethod ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Method Create Params Ġ= Ġupdated PaymentMethod Create Params ( params ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġobject Ġ: ĠApi Result Callback < PaymentMethod > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠPayment Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data . value Ġ= ĠResult . success ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data . value Ġ= ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġfun Ġupdated PaymentMethod Create Params ( ĊĠĠĠĠĠĠĠ Ġparams : ĠPayment Method Create Params ĊĠĠĠ Ġ) Ġ= Ġparams . copy ( product Usage Ġ= Ġproduct Usage ) ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġfun Ġattach PaymentMethod ( ĊĠĠĠĠĠĠĠ Ġcustomer Session : ĠCustomer Session , ĊĠĠĠĠĠĠĠ Ġpayment Method : ĠPayment Method ĊĠĠĠ Ġ): ĠLive Data < Result < PaymentMethod >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠMutable LiveData < Result < PaymentMethod >>() ĊĠĠĠĠĠĠĠ Ġcustomer Session . attach PaymentMethod ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Method Id Ġ= Ġpayment Method . id . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Usage Ġ= Ġproduct Usage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġobject Ġ: ĠCustomer Session . PaymentMethod Retrie val Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PaymentMethod Retrie ved ( payment Method : ĠPayment Method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data . value Ġ= ĠResult . success ( payment Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Error : ĠStripe Error ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data . value Ġ= ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Translator . translate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Error ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠFactory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstripe : ĠStripe , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġargs : ĠAdd PaymentMethod Activity Starter . Args ĊĠĠĠ Ġ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAdd PaymentMethod ViewModel ( stripe , Ġargs ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ