Skip to content

Commit

Permalink
NT-2059:Update stripe SDK (#1319)
Browse files Browse the repository at this point in the history
  • Loading branch information
Arkariang committed Jul 14, 2021
1 parent 82ada47 commit c6f42dc
Show file tree
Hide file tree
Showing 16 changed files with 222 additions and 210 deletions.
14 changes: 4 additions & 10 deletions app/build.gradle
Expand Up @@ -4,7 +4,7 @@ buildscript {
}

dependencies {
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
}
}

Expand Down Expand Up @@ -218,12 +218,6 @@ android {
}
}

configurations.all {
resolutionStrategy.force 'com.android.support:appcompat-v7:27.1.1'
resolutionStrategy.force 'com.android.support:animated-vector-drawable:27.1.1'
resolutionStrategy.force 'com.android.support:customtabs:27.1.1'
}

buildFeatures {
viewBinding true
}
Expand Down Expand Up @@ -270,7 +264,7 @@ repositories {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.annotation:annotation:1.2.0'
implementation 'androidx.appcompat:appcompat:1.4.0-alpha02'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.browser:browser:1.3.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.preference:preference-ktx:1.1.1'
Expand All @@ -286,7 +280,7 @@ dependencies {
implementation "com.google.android.gms:play-services-wallet:18.1.3"
implementation "com.google.android.exoplayer:exoplayer:2.14.1"
implementation 'com.google.android:flexbox:1.1.0'
implementation 'com.google.android.material:material:1.4.0-rc01'
implementation 'com.google.android.material:material:1.5.0-alpha01'
final dagger_version = "2.37"
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
Expand All @@ -298,7 +292,7 @@ dependencies {
implementation "com.jakewharton.timber:timber:4.7.1"
implementation 'com.optimizely.ab:android-sdk:3.10.1'
implementation 'com.qualtrics:digital:1.3'
implementation "com.stripe:stripe-android:12.0.1"
implementation "com.stripe:stripe-android:16.10.0"
final okhttp_version = "4.8.+"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
implementation "com.squareup.okhttp3:okhttp-urlconnection:$okhttp_version"
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/kickstarter/ApplicationModule.java
Expand Up @@ -80,6 +80,7 @@
import com.kickstarter.services.interceptors.WebRequestInterceptor;
import com.kickstarter.ui.SharedPreferenceKey;
import com.optimizely.ab.android.sdk.OptimizelyManager;
import com.stripe.android.PaymentConfiguration;
import com.stripe.android.Stripe;

import org.joda.time.DateTime;
Expand Down Expand Up @@ -596,6 +597,9 @@ Stripe provideStripe(final @ApplicationContext @NonNull Context context, final @
final String stripePublishableKey = apiEndpoint == ApiEndpoint.PRODUCTION
? Secrets.StripePublishableKey.PRODUCTION
: Secrets.StripePublishableKey.STAGING;
PaymentConfiguration.init(
context,
stripePublishableKey);
return new Stripe(context, stripePublishableKey);
}

Expand Down
15 changes: 0 additions & 15 deletions app/src/main/java/com/kickstarter/mock/factories/CardFactory.kt

This file was deleted.

@@ -0,0 +1,34 @@
package com.kickstarter.mock.factories

import com.stripe.android.model.CardParams
import java.util.Calendar

class CardParamsFactory {

companion object {
@JvmOverloads
fun params(
number: String? = "4242424242424242",
expMonth: Int? = 1,
expYear: Int? = 2025,
cvc: String? = "555"
): CardParams {
return CardParams(
number = number ?: "",
expMonth = expMonth ?: 1,
expYear = expYear ?: 2025,
cvc = cvc
)
}

fun unionPay() = params("620", 1, futureYear(), "555")

fun visa() = params("424", 1, futureYear(), "555")

fun unknown() = params("000", 1, futureYear(), "555")

private fun futureYear(): Int {
return Calendar.getInstance().get(Calendar.YEAR) + 2
}
}
}
50 changes: 45 additions & 5 deletions app/src/main/java/com/kickstarter/mock/factories/TokenFactory.kt
@@ -1,14 +1,54 @@
package com.kickstarter.mock.factories

import com.stripe.android.model.Card
import com.stripe.android.model.Token
import java.util.Date
import org.json.JSONObject

class TokenFactory private constructor() {
companion object {

fun token(card: Card): Token {
return Token("id", false, Date(), false, card)
private val RAW_TOKEN_NO_ID = JSONObject(
"""
{
"object": "token",
"card": {
"id": "card_189fi32eZvKYlo2CHK8NPRME",
"object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"cvc_check": null,
"dynamic_last4": null,
"exp_month": 8,
"exp_year": 2017,
"funding": "credit",
"last4": "4242",
"metadata": {},
"name": null,
"tokenization_method": null
},
"client_ip": null,
"created": 1462905355,
"livemode": false,
"type": "card",
"used": false,
"id": "btok_9xJAbronBnS9bH"
}
""".trimIndent()
)

/**
* Returns a Token
* @return Token
* see: https://github.com/stripe/stripe-android/blob/ad426ca33105e7bc5f17c027f8146354d13f75ae/payments-core/src/test/java/com/stripe/android/model/TokenTest.kt
*/
fun token(): Token {
return requireNotNull(Token.fromJson(RAW_TOKEN_NO_ID))
}
}
}
18 changes: 9 additions & 9 deletions app/src/main/java/com/kickstarter/models/StoredCard.kt
Expand Up @@ -3,7 +3,7 @@ package com.kickstarter.models
import android.os.Parcelable
import auto.parcel.AutoParcel
import com.kickstarter.R
import com.stripe.android.model.Card
import com.stripe.android.model.CardBrand
import type.CreditCardTypes
import java.util.Date

Expand Down Expand Up @@ -46,14 +46,14 @@ abstract class StoredCard : Parcelable {

internal fun issuer(cardType: CreditCardTypes): String {
return when (cardType) {
CreditCardTypes.AMEX -> Card.CardBrand.AMERICAN_EXPRESS
CreditCardTypes.DINERS -> Card.CardBrand.DINERS_CLUB
CreditCardTypes.DISCOVER -> Card.CardBrand.DISCOVER
CreditCardTypes.JCB -> Card.CardBrand.JCB
CreditCardTypes.MASTERCARD -> Card.CardBrand.MASTERCARD
CreditCardTypes.UNION_PAY -> Card.CardBrand.UNIONPAY
CreditCardTypes.VISA -> Card.CardBrand.VISA
else -> Card.CardBrand.UNKNOWN
CreditCardTypes.AMEX -> CardBrand.AmericanExpress.code
CreditCardTypes.DINERS -> CardBrand.DinersClub.code
CreditCardTypes.DISCOVER -> CardBrand.Discover.code
CreditCardTypes.JCB -> CardBrand.JCB.code
CreditCardTypes.MASTERCARD -> CardBrand.MasterCard.code
CreditCardTypes.UNION_PAY -> CardBrand.UnionPay.code
CreditCardTypes.VISA -> CardBrand.Visa.code
else -> CardBrand.Unknown.code
}
}

Expand Down
18 changes: 8 additions & 10 deletions app/src/main/java/com/kickstarter/ui/fragments/NewCardFragment.kt
Expand Up @@ -26,7 +26,7 @@ import com.kickstarter.ui.extensions.onChange
import com.kickstarter.ui.extensions.showSnackbar
import com.kickstarter.viewmodels.NewCardFragmentViewModel
import com.stripe.android.ApiResultCallback
import com.stripe.android.model.Card
import com.stripe.android.model.CardParams
import com.stripe.android.model.Token
import com.stripe.android.view.CardInputListener
import kotlinx.android.synthetic.main.form_new_card.allowed_card_warning
Expand Down Expand Up @@ -171,17 +171,15 @@ class NewCardFragment : BaseFragment<NewCardFragmentViewModel.ViewModel>() {
card_input_widget.clearFocus()
cardholder_name.onFocusChangeListener = cardFocusChangeListener
postal_code.onFocusChangeListener = cardFocusChangeListener
card_input_widget.postalCodeEnabled = false
card_input_widget.setCardNumberTextWatcher(cardNumberWatcher)
card_input_widget.setCvcNumberTextWatcher(cardValidityWatcher)
card_input_widget.setExpiryDateTextWatcher(cardValidityWatcher)
card_input_widget.setCardInputListener(object : CardInputListener {
override fun onFocusChange(focusField: String) {
override fun onFocusChange(focusField: CardInputListener.FocusField) {
this@NewCardFragment.viewModel.inputs.cardFocus(true)
}

override fun onPostalCodeComplete() {
}

override fun onCardComplete() {
cardChanged()
}
Expand All @@ -197,13 +195,13 @@ class NewCardFragment : BaseFragment<NewCardFragmentViewModel.ViewModel>() {
}

private fun cardChanged() {
this.viewModel.inputs.card(card_input_widget.card)
this.viewModel.inputs.card(card_input_widget.cardParams)
}

private fun createStripeToken(card: Card) {
this.viewModel.environment.stripe().createToken(
card,
object : ApiResultCallback<Token> {
private fun createStripeToken(card: CardParams) {
this.viewModel.environment.stripe().createCardToken(
cardParams = card,
callback = object : ApiResultCallback<Token> {
override fun onSuccess(result: Token) {
this@NewCardFragment.viewModel.inputs.stripeTokenResultSuccessful(result)
}
Expand Down
Expand Up @@ -418,7 +418,7 @@ class PledgeFragment : BaseFragment<PledgeFragmentViewModel.ViewModel>(), Reward
this.viewModel.outputs.showSCAFlow()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe { this.viewModel.environment.stripe().authenticateSetup(this, it) }
.subscribe { this.viewModel.environment.stripe().handleNextActionForSetupIntent(this, it) }

this.viewModel.outputs.showPledgeError()
.compose(bindToLifecycle())
Expand Down
Expand Up @@ -29,6 +29,7 @@ import com.kickstarter.ui.data.PledgeStatusData
import com.kickstarter.ui.data.ProjectData
import com.kickstarter.ui.fragments.BackingFragment
import com.stripe.android.model.Card
import com.stripe.android.model.CardBrand
import org.joda.time.DateTime
import rx.Observable
import rx.subjects.BehaviorSubject
Expand Down Expand Up @@ -490,7 +491,7 @@ interface BackingFragmentViewModel {
CreditCardPaymentType.ANDROID_PAY -> Either.Right(R.string.googlepay_button_content_description)
CreditCardPaymentType.APPLE_PAY -> Either.Right(R.string.apple_pay_content_description)
CreditCardPaymentType.CREDIT_CARD -> Either.Left(StoredCard.issuer(CreditCardTypes.safeValueOf(paymentSource.type())))
else -> Either.Left(Card.CardBrand.UNKNOWN)
else -> Either.Left(CardBrand.Unknown.code)
}
}

Expand Down

0 comments on commit c6f42dc

Please sign in to comment.