diff --git a/stripe/src/main/java/com/stripe/android/model/CardParams.kt b/stripe/src/main/java/com/stripe/android/model/CardParams.kt index 28f4b71445f..1efcf78a6dc 100644 --- a/stripe/src/main/java/com/stripe/android/model/CardParams.kt +++ b/stripe/src/main/java/com/stripe/android/model/CardParams.kt @@ -1,5 +1,6 @@ package com.stripe.android.model +import com.stripe.android.CardUtils import kotlinx.parcelize.Parcelize /** @@ -7,6 +8,11 @@ import kotlinx.parcelize.Parcelize */ @Parcelize data class CardParams internal constructor( + /** + * The likely [CardBrand] based on the [number]. + */ + val brand: CardBrand, + private val loggingTokens: Set = emptySet(), /** @@ -79,6 +85,7 @@ data class CardParams internal constructor( */ var metadata: Map? = null ) : TokenParams(Token.Type.Card, loggingTokens) { + val last4: String get() = number.takeLast(4) @JvmOverloads constructor( @@ -152,6 +159,7 @@ data class CardParams internal constructor( */ metadata: Map? = null ) : this( + brand = CardUtils.getPossibleCardBrand(number), loggingTokens = emptySet(), number = number, expMonth = expMonth, diff --git a/stripe/src/main/java/com/stripe/android/view/CardInputWidget.kt b/stripe/src/main/java/com/stripe/android/view/CardInputWidget.kt index 10f3ae1a36b..a35eaa4bbdb 100644 --- a/stripe/src/main/java/com/stripe/android/view/CardInputWidget.kt +++ b/stripe/src/main/java/com/stripe/android/view/CardInputWidget.kt @@ -255,7 +255,8 @@ class CardInputWidget @JvmOverloads constructor( else -> { shouldShowErrorIcon = false return CardParams( - setOf(LOGGING_TOKEN), + brand = brand, + loggingTokens = setOf(LOGGING_TOKEN), number = cardNumber.value, expMonth = expirationDate.month, expYear = expirationDate.year, diff --git a/stripe/src/main/java/com/stripe/android/view/CardMultilineWidget.kt b/stripe/src/main/java/com/stripe/android/view/CardMultilineWidget.kt index 258b5891ef2..9819ef95c6a 100644 --- a/stripe/src/main/java/com/stripe/android/view/CardMultilineWidget.kt +++ b/stripe/src/main/java/com/stripe/android/view/CardMultilineWidget.kt @@ -212,7 +212,8 @@ class CardMultilineWidget @JvmOverloads constructor( .takeIf { shouldShowPostalCode } return CardParams( - setOf(CARD_MULTILINE_TOKEN), + brand = brand, + loggingTokens = setOf(CARD_MULTILINE_TOKEN), number = validatedCardNumber?.value.orEmpty(), expMonth = expirationDate.month, expYear = expirationDate.year, diff --git a/stripe/src/test/java/com/stripe/android/model/CardParamsFixtures.kt b/stripe/src/test/java/com/stripe/android/model/CardParamsFixtures.kt index d7d481329a0..c85e8553d65 100644 --- a/stripe/src/test/java/com/stripe/android/model/CardParamsFixtures.kt +++ b/stripe/src/test/java/com/stripe/android/model/CardParamsFixtures.kt @@ -24,6 +24,7 @@ internal object CardParamsFixtures { ) val WITH_ATTRIBUTION = CardParams( + brand = CardBrand.Visa, loggingTokens = setOf(CardInputWidget.LOGGING_TOKEN), number = CardNumberFixtures.VISA_NO_SPACES, expMonth = 12, diff --git a/stripe/src/test/java/com/stripe/android/view/CardInputWidgetTest.kt b/stripe/src/test/java/com/stripe/android/view/CardInputWidgetTest.kt index 6bfea17b7ae..fe1c1e41d14 100644 --- a/stripe/src/test/java/com/stripe/android/view/CardInputWidgetTest.kt +++ b/stripe/src/test/java/com/stripe/android/view/CardInputWidgetTest.kt @@ -140,6 +140,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -185,6 +186,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -234,6 +236,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -279,6 +282,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -330,6 +334,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.DinersClub, loggingTokens = ATTRIBUTION, number = DINERS_CLUB_14_NO_SPACES, expMonth = 12, @@ -373,6 +378,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.DinersClub, loggingTokens = ATTRIBUTION, number = DINERS_CLUB_14_NO_SPACES, expMonth = 12, @@ -481,6 +487,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -511,6 +518,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -543,6 +551,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -1190,6 +1199,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -1232,6 +1242,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -1553,6 +1564,7 @@ internal class CardInputWidgetTest { assertThat(cardInputWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, diff --git a/stripe/src/test/java/com/stripe/android/view/CardMultilineWidgetTest.kt b/stripe/src/test/java/com/stripe/android/view/CardMultilineWidgetTest.kt index eeed1be1cc9..e3d0b4be5b2 100644 --- a/stripe/src/test/java/com/stripe/android/view/CardMultilineWidgetTest.kt +++ b/stripe/src/test/java/com/stripe/android/view/CardMultilineWidgetTest.kt @@ -25,6 +25,7 @@ import com.stripe.android.cards.DefaultCardAccountRangeStore import com.stripe.android.model.Address import com.stripe.android.model.BinFixtures import com.stripe.android.model.Card +import com.stripe.android.model.CardBrand import com.stripe.android.model.CardParams import com.stripe.android.model.PaymentMethod import com.stripe.android.model.PaymentMethodCreateParams @@ -181,6 +182,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -209,6 +211,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -236,6 +239,7 @@ internal class CardMultilineWidgetTest { assertThat(noZipCardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -263,6 +267,7 @@ internal class CardMultilineWidgetTest { assertThat(noZipCardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -290,6 +295,7 @@ internal class CardMultilineWidgetTest { assertThat(noZipCardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.AmericanExpress, loggingTokens = ATTRIBUTION, number = AMEX_NO_SPACES, expMonth = 12, @@ -746,6 +752,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -776,6 +783,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -849,6 +857,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12, @@ -902,6 +911,7 @@ internal class CardMultilineWidgetTest { assertThat(cardMultilineWidget.cardParams) .isEqualTo( CardParams( + brand = CardBrand.Visa, loggingTokens = ATTRIBUTION, number = VISA_NO_SPACES, expMonth = 12,