Skip to content

Commit aa19643

Browse files
committed
WIP
1 parent 813e396 commit aa19643

File tree

43 files changed

+305
-800
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+305
-800
lines changed

payments-core/src/main/java/com/stripe/android/model/parsers/PaymentMethodWithLinkDetailsJsonParser.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ internal object PaymentMethodWithLinkDetailsJsonParser : ModelJsonParser<Payment
4141
last4 = consumerPaymentDetails.last4,
4242
)
4343
}
44-
is ConsumerPaymentDetails.Passthrough,
4544
null -> {
4645
null
4746
}

payments-model/src/main/java/com/stripe/android/model/ConsumerPaymentDetails.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,27 +71,27 @@ data class ConsumerPaymentDetails(
7171
}
7272
}
7373

74-
@Parcelize
75-
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
76-
data class Passthrough(
77-
override val id: String,
78-
val paymentMethodId: String,
79-
override val last4: String,
80-
override val billingAddress: BillingAddress? = null,
81-
override val billingEmailAddress: String? = null,
82-
) : PaymentDetails(
83-
id = id,
84-
type = TYPE,
85-
isDefault = false,
86-
nickname = null,
87-
billingAddress = billingAddress,
88-
billingEmailAddress = billingEmailAddress
89-
) {
90-
91-
companion object {
92-
const val TYPE = "card"
93-
}
94-
}
74+
// @Parcelize
75+
// @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
76+
// data class Passthrough(
77+
// override val id: String,
78+
// val paymentMethodId: String,
79+
// override val last4: String,
80+
// override val billingAddress: BillingAddress? = null,
81+
// override val billingEmailAddress: String? = null,
82+
// ) : PaymentDetails(
83+
// id = id,
84+
// type = TYPE,
85+
// isDefault = false,
86+
// nickname = null,
87+
// billingAddress = billingAddress,
88+
// billingEmailAddress = billingEmailAddress
89+
// ) {
90+
//
91+
// companion object {
92+
// const val TYPE = "card"
93+
// }
94+
// }
9595

9696
@Parcelize
9797
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)

paymentsheet/src/main/java/com/stripe/android/common/validation/PaymentMethodUtils.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,5 @@ internal fun ConsumerPaymentDetails.PaymentDetails.isSupportedWithBillingConfig(
3535
allowedCountries.contains(it.value.uppercase())
3636
} ?: false
3737
is ConsumerPaymentDetails.BankAccount -> allowedCountries.contains(CountryCode.US.value)
38-
is ConsumerPaymentDetails.Passthrough -> false
3938
}
4039
}

paymentsheet/src/main/java/com/stripe/android/link/LinkActivityViewModel.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,6 @@ internal class LinkActivityViewModel @Inject constructor(
306306
billingPhone = selectedPayment.billingPhone,
307307
linkAccount = linkAccount,
308308
)
309-
is LinkPaymentMethod.LinkPaymentDetails -> linkConfirmationHandler.confirm(
310-
paymentDetails = selectedPayment.linkPaymentDetails,
311-
cvc = selectedPayment.collectedCvc,
312-
billingPhone = selectedPayment.billingPhone,
313-
linkAccount = linkAccount,
314-
)
315309
}
316310
}.onSuccess { confirmResult ->
317311
dismissWithResult(

paymentsheet/src/main/java/com/stripe/android/link/LinkControllerInteractor.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import com.stripe.android.paymentsheet.paymentdatacollection.ach.TransformToBank
3636
import com.stripe.android.paymentsheet.paymentdatacollection.ach.transformBankIconCodeToBankIcon
3737
import com.stripe.android.paymentsheet.state.LinkState
3838
import com.stripe.android.paymentsheet.ui.getCardBrandIconForVerticalMode
39-
import com.stripe.android.paymentsheet.ui.getLinkIcon
4039
import com.stripe.android.uicore.isSystemDarkTheme
4140
import com.stripe.android.uicore.utils.combineAsStateFlow
4241
import com.stripe.android.uicore.utils.mapAsStateFlow
@@ -666,9 +665,7 @@ internal fun ConsumerPaymentDetails.PaymentDetails.toPreview(
666665
val label = context.getString(com.stripe.android.R.string.stripe_link)
667666
val sublabel = buildString {
668667
// It should never be `Passthrough`, but handling it here just in case.
669-
if (this@toPreview !is ConsumerPaymentDetails.Passthrough) {
670-
append(displayName.resolve(context))
671-
}
668+
append(displayName.resolve(context))
672669
append(" •••• ")
673670
append(last4)
674671
}
@@ -688,8 +685,6 @@ internal fun ConsumerPaymentDetails.PaymentDetails.getIconDrawableRes(isDarkThem
688685
getIconDrawableRes(PaymentMethodPreviewDetails.BankAccount(bankIconCode, bankName, last4), isDarkTheme)
689686
is ConsumerPaymentDetails.Card ->
690687
getIconDrawableRes(PaymentMethodPreviewDetails.Card(brand, funding, last4), isDarkTheme)
691-
is ConsumerPaymentDetails.Passthrough ->
692-
getLinkIcon(iconOnly = true)
693688
}
694689
}
695690

paymentsheet/src/main/java/com/stripe/android/link/LinkPaymentDetails.kt

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,25 @@ package com.stripe.android.link
22

33
import android.os.Parcelable
44
import com.stripe.android.model.ConsumerPaymentDetails
5+
import com.stripe.android.model.PaymentMethod
56
import com.stripe.android.model.PaymentMethodCreateParams
67
import com.stripe.android.ui.core.forms.convertToFormValuesMap
78
import kotlinx.parcelize.Parcelize
89

910
/**
1011
* The payment method selected by the user within their Link account, including the parameters
1112
* needed to confirm the Stripe Intent.
12-
*
13-
* @param paymentDetails The [ConsumerPaymentDetails.PaymentDetails] selected by the user
14-
* @param paymentMethodCreateParams The [PaymentMethodCreateParams] to be used to confirm
15-
* the Stripe Intent.
1613
*/
17-
internal sealed class LinkPaymentDetails(
18-
open val paymentDetails: ConsumerPaymentDetails.PaymentDetails,
19-
open val paymentMethodCreateParams: PaymentMethodCreateParams
20-
) : Parcelable {
14+
internal sealed interface LinkPaymentDetails : Parcelable {
2115

2216
/**
2317
* A [ConsumerPaymentDetails.PaymentDetails] that is already saved to the consumer's account.
2418
*/
2519
@Parcelize
2620
class Saved(
27-
override val paymentDetails: ConsumerPaymentDetails.Passthrough,
28-
override val paymentMethodCreateParams: PaymentMethodCreateParams
29-
) : LinkPaymentDetails(paymentDetails, paymentMethodCreateParams)
21+
val paymentMethod: PaymentMethod,
22+
val paymentDetails: ConsumerPaymentDetails.PaymentDetails,
23+
) : LinkPaymentDetails
3024

3125
/**
3226
* A new [ConsumerPaymentDetails.PaymentDetails], whose data was just collected from the user.
@@ -35,10 +29,10 @@ internal sealed class LinkPaymentDetails(
3529
*/
3630
@Parcelize
3731
class New(
38-
override val paymentDetails: ConsumerPaymentDetails.PaymentDetails,
39-
override val paymentMethodCreateParams: PaymentMethodCreateParams,
40-
val originalParams: PaymentMethodCreateParams
41-
) : LinkPaymentDetails(paymentDetails, paymentMethodCreateParams) {
32+
val paymentDetails: ConsumerPaymentDetails.PaymentDetails,
33+
val paymentMethodCreateParams: PaymentMethodCreateParams,
34+
val originalParams: PaymentMethodCreateParams,
35+
) : LinkPaymentDetails {
4236

4337
/**
4438
* Build a flat map of the values entered by the user when creating this payment method,

paymentsheet/src/main/java/com/stripe/android/link/LinkPaymentMethod.kt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ internal sealed class LinkPaymentMethod(
2020
val cvcReady = !currentDetails.cvcCheck.requiresRecollection || collectedCvc?.isNotEmpty() == true
2121
!currentDetails.isExpired && cvcReady
2222
}
23-
is ConsumerPaymentDetailsModel.Passthrough -> true
2423
}
2524

2625
/**
@@ -39,23 +38,4 @@ internal sealed class LinkPaymentMethod(
3938
collectedCvc = collectedCvc,
4039
billingPhone = billingPhone
4140
)
42-
43-
/**
44-
* The payment method selected by the user within their Link account, including the parameters
45-
* needed to confirm the Stripe Intent
46-
*
47-
* @see [com.stripe.android.link.confirmation.LinkConfirmationHandler.confirm]
48-
* via [com.stripe.android.link.LinkPaymentDetails]
49-
*
50-
*/
51-
@Parcelize
52-
internal data class LinkPaymentDetails(
53-
val linkPaymentDetails: com.stripe.android.link.LinkPaymentDetails,
54-
override val collectedCvc: String?,
55-
override val billingPhone: String?
56-
) : LinkPaymentMethod(
57-
details = linkPaymentDetails.paymentDetails,
58-
collectedCvc = collectedCvc,
59-
billingPhone = billingPhone
60-
)
6141
}

paymentsheet/src/main/java/com/stripe/android/link/account/DefaultLinkAccountManager.kt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -203,17 +203,15 @@ internal class DefaultLinkAccountManager @Inject constructor(
203203
override suspend fun createCardPaymentDetails(
204204
paymentMethodCreateParams: PaymentMethodCreateParams
205205
): Result<LinkPaymentDetails.New> {
206-
val linkAccountValue = linkAccountHolder.linkAccountInfo.value.account
207-
return if (linkAccountValue != null) {
208-
linkAccountValue.let { account ->
209-
linkRepository.createCardPaymentDetails(
210-
paymentMethodCreateParams = paymentMethodCreateParams,
211-
userEmail = account.email,
212-
stripeIntent = config.stripeIntent,
213-
consumerSessionClientSecret = account.clientSecret,
214-
).onSuccess {
215-
errorReporter.report(ErrorReporter.SuccessEvent.LINK_CREATE_CARD_SUCCESS)
216-
}
206+
val account = linkAccountHolder.linkAccountInfo.value.account
207+
return if (account != null) {
208+
linkRepository.createCardPaymentDetails(
209+
paymentMethodCreateParams = paymentMethodCreateParams,
210+
userEmail = account.email,
211+
stripeIntent = config.stripeIntent,
212+
consumerSessionClientSecret = account.clientSecret,
213+
).onSuccess {
214+
errorReporter.report(ErrorReporter.SuccessEvent.LINK_CREATE_CARD_SUCCESS)
217215
}
218216
} else {
219217
errorReporter.report(ErrorReporter.UnexpectedErrorEvent.LINK_ATTACH_CARD_WITH_NULL_ACCOUNT)
@@ -226,16 +224,20 @@ internal class DefaultLinkAccountManager @Inject constructor(
226224
override suspend fun shareCardPaymentDetails(
227225
cardPaymentDetails: LinkPaymentDetails.New
228226
): Result<LinkPaymentDetails.Saved> {
227+
val paymentDetails = cardPaymentDetails.paymentDetails
229228
return runCatching {
230229
requireNotNull(linkAccountHolder.linkAccountInfo.value.account)
231230
}.mapCatching { account ->
232-
val paymentDetails = cardPaymentDetails.paymentDetails
233-
val paymentMethodCreateParams = cardPaymentDetails.originalParams
234231
linkRepository.shareCardPaymentDetails(
235232
id = paymentDetails.id,
233+
paymentMethodCreateParams = cardPaymentDetails.originalParams,
236234
consumerSessionClientSecret = account.clientSecret,
237-
paymentMethodCreateParams = paymentMethodCreateParams,
238235
).getOrThrow()
236+
}.map { paymentMethod ->
237+
LinkPaymentDetails.Saved(
238+
paymentMethod = paymentMethod,
239+
paymentDetails = paymentDetails,
240+
)
239241
}
240242
}
241243

paymentsheet/src/main/java/com/stripe/android/link/confirmation/CompleteLinkFlow.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,6 @@ internal class DefaultCompleteLinkFlow @Inject constructor(
7171
cvc = selectedPaymentDetails.collectedCvc,
7272
billingPhone = selectedPaymentDetails.billingPhone
7373
)
74-
is LinkPaymentMethod.LinkPaymentDetails -> linkConfirmationHandler.confirm(
75-
paymentDetails = selectedPaymentDetails.linkPaymentDetails,
76-
linkAccount = linkAccount,
77-
cvc = selectedPaymentDetails.collectedCvc,
78-
billingPhone = selectedPaymentDetails.billingPhone
79-
)
8074
}
8175
},
8276
paymentMethodSelection = selectedPaymentDetails

paymentsheet/src/main/java/com/stripe/android/link/confirmation/DefaultLinkConfirmationHandler.kt

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,17 @@ package com.stripe.android.link.confirmation
33
import com.stripe.android.core.Logger
44
import com.stripe.android.core.strings.resolvableString
55
import com.stripe.android.link.LinkConfiguration
6-
import com.stripe.android.link.LinkPaymentDetails
76
import com.stripe.android.link.model.LinkAccount
87
import com.stripe.android.lpmfoundations.paymentmethod.PaymentMethodSaveConsentBehavior
98
import com.stripe.android.model.Address
10-
import com.stripe.android.model.ConfirmPaymentIntentParams
119
import com.stripe.android.model.ConsumerPaymentDetails
1210
import com.stripe.android.model.LinkMode
1311
import com.stripe.android.model.PassiveCaptchaParams
1412
import com.stripe.android.model.PaymentIntent
1513
import com.stripe.android.model.PaymentMethod
1614
import com.stripe.android.model.PaymentMethod.Type.USBankAccount
1715
import com.stripe.android.model.PaymentMethodCreateParams
18-
import com.stripe.android.model.PaymentMethodOptionsParams
1916
import com.stripe.android.model.SetupIntent
20-
import com.stripe.android.model.wallets.Wallet
2117
import com.stripe.android.paymentelement.confirmation.ConfirmationHandler
2218
import com.stripe.android.paymentelement.confirmation.PaymentMethodConfirmationOption
2319
import com.stripe.android.paymentelement.confirmation.link.LinkPassthroughConfirmationOption
@@ -48,22 +44,6 @@ internal class DefaultLinkConfirmationHandler @Inject constructor(
4844
}
4945
}
5046

51-
override suspend fun confirm(
52-
paymentDetails: LinkPaymentDetails,
53-
linkAccount: LinkAccount,
54-
cvc: String?,
55-
billingPhone: String?
56-
): Result {
57-
return confirm {
58-
confirmationArgs(
59-
paymentDetails = paymentDetails,
60-
linkAccount = linkAccount,
61-
cvc = cvc,
62-
billingPhone = billingPhone
63-
)
64-
}
65-
}
66-
6747
private suspend fun confirm(
6848
createArgs: () -> ConfirmationHandler.Args
6949
): Result {
@@ -99,30 +79,6 @@ internal class DefaultLinkConfirmationHandler @Inject constructor(
9979
}
10080
}
10181

102-
private fun confirmationArgs(
103-
paymentDetails: LinkPaymentDetails,
104-
linkAccount: LinkAccount,
105-
cvc: String?,
106-
billingPhone: String?
107-
): ConfirmationHandler.Args {
108-
return when (paymentDetails) {
109-
is LinkPaymentDetails.New -> {
110-
newConfirmationArgs(
111-
paymentDetails = paymentDetails.paymentDetails,
112-
linkAccount = linkAccount,
113-
cvc = cvc,
114-
billingPhone = billingPhone
115-
)
116-
}
117-
is LinkPaymentDetails.Saved -> {
118-
savedConfirmationArgs(
119-
paymentDetails = paymentDetails,
120-
cvc = cvc
121-
)
122-
}
123-
}
124-
}
125-
12682
private fun newConfirmationArgs(
12783
paymentDetails: ConsumerPaymentDetails.PaymentDetails,
12884
linkAccount: LinkAccount,
@@ -184,38 +140,6 @@ internal class DefaultLinkConfirmationHandler @Inject constructor(
184140
}
185141
}
186142

187-
private fun savedConfirmationArgs(
188-
paymentDetails: LinkPaymentDetails.Saved,
189-
cvc: String?
190-
): ConfirmationHandler.Args {
191-
return ConfirmationHandler.Args(
192-
intent = configuration.stripeIntent,
193-
confirmationOption = PaymentMethodConfirmationOption.Saved(
194-
paymentMethod = PaymentMethod.Builder()
195-
.setId(paymentDetails.paymentDetails.paymentMethodId)
196-
.setCode(paymentDetails.paymentMethodCreateParams.typeCode)
197-
.setCard(
198-
PaymentMethod.Card(
199-
last4 = paymentDetails.paymentDetails.last4,
200-
wallet = Wallet.LinkWallet(paymentDetails.paymentDetails.last4),
201-
)
202-
)
203-
.setType(PaymentMethod.Type.Card)
204-
.build(),
205-
optionsParams = PaymentMethodOptionsParams.Card(
206-
setupFutureUsage = ConfirmPaymentIntentParams.SetupFutureUsage.OffSession,
207-
cvc = cvc?.takeIf {
208-
configuration.passthroughModeEnabled.not()
209-
}
210-
),
211-
passiveCaptchaParams = passiveCaptchaParams
212-
),
213-
appearance = PaymentSheet.Appearance(),
214-
initializationMode = configuration.initializationMode,
215-
shippingDetails = configuration.shippingDetails
216-
)
217-
}
218-
219143
class Factory @Inject constructor(
220144
private val configuration: LinkConfiguration,
221145
private val passiveCaptchaParams: PassiveCaptchaParams?,
@@ -271,7 +195,6 @@ internal fun computeExpectedPaymentMethodType(
271195
return when (paymentDetails) {
272196
is ConsumerPaymentDetails.BankAccount -> computeBankAccountExpectedPaymentMethodType(configuration)
273197
is ConsumerPaymentDetails.Card -> ConsumerPaymentDetails.Card.TYPE
274-
is ConsumerPaymentDetails.Passthrough -> ConsumerPaymentDetails.Card.TYPE
275198
}
276199
}
277200

0 commit comments

Comments
 (0)