Skip to content

Commit

Permalink
Merge branch 'master' into brnunes/composelauncher
Browse files Browse the repository at this point in the history
  • Loading branch information
brnunes-stripe committed Jul 27, 2022
2 parents e74d3aa + e107d7d commit 78708b0
Show file tree
Hide file tree
Showing 176 changed files with 3,922 additions and 1,690 deletions.
12 changes: 8 additions & 4 deletions .github/workflows/financialconnections_pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ on:
jobs:
# Checkout base branch and build the APK
build-base:
name: Build base
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.base.sha }}
ref: ${{ github.base_ref }}
- name: Build base branch
run: ./gradlew :financial-connections-example:assembleRelease && mv financial-connections-example/build/outputs/apk/release/financial-connections-example-release-unsigned.apk financial-connections-example/build/outputs/apk/release/financial-connections-example-release-base.apk
- name: Upload APK
Expand All @@ -24,9 +26,11 @@ jobs:

# Checkout PR branch and build the APK
build-pr:
name: Build PR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Checkout
uses: actions/checkout@v3
- name: Build PR branch
run: ./gradlew :financial-connections-example:assembleRelease && mv financial-connections-example/build/outputs/apk/release/financial-connections-example-release-unsigned.apk financial-connections-example/build/outputs/apk/release/financial-connections-example-release-pr.apk
- name: Upload APK
Expand All @@ -40,7 +44,7 @@ jobs:
needs: [ build-base, build-pr ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
- name: Download APKs
uses: actions/download-artifact@v1
with:
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@

## X.X.X

### PaymentSheet
* [FIXED][5321](https://github.com/stripe/stripe-android/pull/5321) Fixed issue with forever loading and mochi library.

### Payments
* [FIXED][5308](https://github.com/stripe/stripe-android/pull/5308) OXXO so that processing is considered a successful terminal state, similar to Konbini and Boleto.
* [FIXED][5138](https://github.com/stripe/stripe-android/pull/5138) Fixed an issue where PaymentSheet will show a failure even when 3DS2 Payment/SetupIntent is successful.
* [ADDED][5274](https://github.com/stripe/stripe-android/pull/5274) Create `rememberLauncher` method enabling usage of `GooglePayLauncher`, `GooglePayPaymentMethodLauncher` and `PaymentLauncher` in Compose.
* [DEPRECATED][5274](https://github.com/stripe/stripe-android/pull/5274) Deprecate `PaymentLauncher.createForCompose` in favor of `PaymentLauncher.rememberLauncher`.

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ ext {
// material 1.6 causes paymentsheet to not render correctly.
// see here: https://github.com/material-components/material-components-android/issues/2702
materialVersion = '1.5.0'
daggerVersion = '2.42'
daggerVersion = '2.43'
playServicesWalletVersion = '19.1.0'
placesVersion = '2.6.0'
playServicesVersion = '1.6.4'
Expand Down
1 change: 1 addition & 0 deletions example/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
<activity android:name=".activity.BecsDebitPaymentMethodActivity" />
<activity android:name=".activity.BacsDebitPaymentMethodActivity" />
<activity android:name=".activity.SofortPaymentMethodActivity" />
<activity android:name=".activity.IDEALPaymentMethodActivity" />
<activity android:name=".activity.UpiPaymentActivity" />
<activity android:name=".activity.UpiWaitingActivity" />
<activity android:name=".activity.KlarnaSourceActivity" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
package com.stripe.example.activity

import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.DropdownMenu
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon
import androidx.compose.material.LinearProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowDropDown
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.lifecycleScope
import com.stripe.android.model.Address
import com.stripe.android.model.PaymentMethod
import com.stripe.android.model.PaymentMethodCreateParams

class IDEALPaymentMethodActivity : StripeIntentActivity() {
private val bankNameMap = mapOf(
"abn_amro" to "ABN AMRO",
"asn_bank" to "ASN Bank",
"bunq" to "Bunq",
"handelsbanken" to "Handelsbanken",
"ing" to "ING",
"knab" to "Knab",
"moneyou" to "Moneyou",
"rabobank" to "Rabobank",
"revolut" to "Revolut",
"regiobank" to "RegioBank",
"sns_bank" to "SNS Bank (De Volksbank)",
"triodos_bank" to "Triodos Bank",
"van_lanschot" to "Van Lanschot"
)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launchWhenStarted {
setContent {
IDEALScreen()
}
}
}

@Composable
private fun IDEALScreen() {
val inProgress by viewModel.inProgress.observeAsState(false)
val status by viewModel.status.observeAsState("")
val scrollState = rememberScrollState()
val name = remember { mutableStateOf("Johnny Lawrence") }
var selectedBank by remember { mutableStateOf(bankNameMap.firstNotNullOf { it.key }) }
var expandedBankDropdown by remember { mutableStateOf(false) }

if (inProgress) {
LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
}
if (status.isNotEmpty()) {
Text(text = status)
} else {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp)
.verticalScroll(scrollState)
) {
OutlinedTextField(
modifier = Modifier.fillMaxWidth(),
label = { Text("Name") },
value = name.value,
maxLines = 1,
onValueChange = { name.value = it }
)
Box(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp, bottom = 16.dp)
) {
OutlinedTextField(
value = bankNameMap[selectedBank] ?: "",
onValueChange = {},
enabled = false,
trailingIcon = {
Icon(
Icons.Filled.ArrowDropDown,
contentDescription = null,
tint = MaterialTheme.colors.onBackground,
modifier = Modifier.height(24.dp)
)
},
modifier = Modifier
.fillMaxWidth()
.clickable(onClick = { expandedBankDropdown = true })
)
DropdownMenu(
expanded = expandedBankDropdown,
onDismissRequest = { expandedBankDropdown = false }
) {
bankNameMap.forEach {
DropdownMenuItem(onClick = {
selectedBank = it.key
expandedBankDropdown = false
}) {
Text(it.value)
}
}
}
}
Button(
onClick = {
createAndConfirmPaymentIntent(
country = "NL",
paymentMethodCreateParams = PaymentMethodCreateParams.create(
ideal = PaymentMethodCreateParams.Ideal(selectedBank),
billingDetails = PaymentMethod.BillingDetails(
name = name.value,
phone = "1-800-555-1234",
email = "jrosen@example.com",
address = Address.Builder()
.setCity("San Francisco")
.setCountry("US")
.setLine1("123 Market St")
.setLine2("#345")
.setPostalCode("94107")
.setState("CA")
.build()
)
)
)
},
modifier = Modifier.fillMaxWidth()
) {
Text("Confirm with iDEAL")
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ class LauncherActivity : AppCompatActivity() {
activity.getString(R.string.sofort_example),
SofortPaymentMethodActivity::class.java
),
Item(
"iDEAL Payment Example",
IDEALPaymentMethodActivity::class.java
),
Item(
activity.getString(R.string.upi_example),
UpiPaymentActivity::class.java
Expand Down
6 changes: 3 additions & 3 deletions identity/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Stripe Android SDK identity module
This module provides support for the Stripe Identity product, see https://stripe.com/identity for
more details.
# Stripe Android SDK Identity module
This module provides support for the Stripe Identity product, please refer to the
[documentation](https://www.stripe.com/docs/identity/verify-identity-documents) for more details.

Note: If you intend to use this SDK with Stripe's Identity service, you must not modify this SDK.
Using a modified version of this SDK with Stripe's Identity service, without Stripe's written
Expand Down
62 changes: 19 additions & 43 deletions link/api/link.api
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public final class com/stripe/android/link/LinkActivityContract$Args : com/strip
public static final field $stable I
public static final field CREATOR Landroid/os/Parcelable$Creator;
public static final field Companion Lcom/stripe/android/link/LinkActivityContract$Args$Companion;
public final fun copy (Lcom/stripe/android/model/StripeIntent;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/link/LinkPaymentDetails;Lcom/stripe/android/link/LinkActivityContract$Args$InjectionParams;)Lcom/stripe/android/link/LinkActivityContract$Args;
public static synthetic fun copy$default (Lcom/stripe/android/link/LinkActivityContract$Args;Lcom/stripe/android/model/StripeIntent;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/link/LinkPaymentDetails;Lcom/stripe/android/link/LinkActivityContract$Args$InjectionParams;ILjava/lang/Object;)Lcom/stripe/android/link/LinkActivityContract$Args;
public final fun copy (Lcom/stripe/android/model/StripeIntent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/link/LinkPaymentDetails;Lcom/stripe/android/link/LinkActivityContract$Args$InjectionParams;)Lcom/stripe/android/link/LinkActivityContract$Args;
public static synthetic fun copy$default (Lcom/stripe/android/link/LinkActivityContract$Args;Lcom/stripe/android/model/StripeIntent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/link/LinkPaymentDetails;Lcom/stripe/android/link/LinkActivityContract$Args$InjectionParams;ILjava/lang/Object;)Lcom/stripe/android/link/LinkActivityContract$Args;
public fun describeContents ()I
public fun equals (Ljava/lang/Object;)Z
public fun hashCode ()I
Expand Down Expand Up @@ -95,69 +95,42 @@ public final class com/stripe/android/link/LinkActivityResult$Canceled$Creator :
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/link/LinkActivityResult$Failed : com/stripe/android/link/LinkActivityResult {
public final class com/stripe/android/link/LinkActivityResult$Completed : com/stripe/android/link/LinkActivityResult {
public static final field $stable I
public static final field CREATOR Landroid/os/Parcelable$Creator;
public fun <init> (Ljava/lang/Throwable;)V
public final fun component1 ()Ljava/lang/Throwable;
public final fun copy (Ljava/lang/Throwable;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public static synthetic fun copy$default (Lcom/stripe/android/link/LinkActivityResult$Failed;Ljava/lang/Throwable;ILjava/lang/Object;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public static final field INSTANCE Lcom/stripe/android/link/LinkActivityResult$Completed;
public fun describeContents ()I
public fun equals (Ljava/lang/Object;)Z
public final fun getError ()Ljava/lang/Throwable;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public fun writeToParcel (Landroid/os/Parcel;I)V
}

public final class com/stripe/android/link/LinkActivityResult$Failed$Creator : android/os/Parcelable$Creator {
public final class com/stripe/android/link/LinkActivityResult$Completed$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/link/LinkActivityResult$Completed;
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
public final fun newArray (I)[Lcom/stripe/android/link/LinkActivityResult$Failed;
public final fun newArray (I)[Lcom/stripe/android/link/LinkActivityResult$Completed;
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public abstract class com/stripe/android/link/LinkActivityResult$Success : com/stripe/android/link/LinkActivityResult {
public static final field $stable I
}

public final class com/stripe/android/link/LinkActivityResult$Success$Completed : com/stripe/android/link/LinkActivityResult$Success {
public static final field $stable I
public static final field CREATOR Landroid/os/Parcelable$Creator;
public static final field INSTANCE Lcom/stripe/android/link/LinkActivityResult$Success$Completed;
public fun describeContents ()I
public fun writeToParcel (Landroid/os/Parcel;I)V
}

public final class com/stripe/android/link/LinkActivityResult$Success$Completed$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/link/LinkActivityResult$Success$Completed;
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
public final fun newArray (I)[Lcom/stripe/android/link/LinkActivityResult$Success$Completed;
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/link/LinkActivityResult$Success$Selected : com/stripe/android/link/LinkActivityResult$Success {
public final class com/stripe/android/link/LinkActivityResult$Failed : com/stripe/android/link/LinkActivityResult {
public static final field $stable I
public static final field CREATOR Landroid/os/Parcelable$Creator;
public fun <init> (Lcom/stripe/android/link/LinkPaymentDetails;)V
public final fun component1 ()Lcom/stripe/android/link/LinkPaymentDetails;
public final fun copy (Lcom/stripe/android/link/LinkPaymentDetails;)Lcom/stripe/android/link/LinkActivityResult$Success$Selected;
public static synthetic fun copy$default (Lcom/stripe/android/link/LinkActivityResult$Success$Selected;Lcom/stripe/android/link/LinkPaymentDetails;ILjava/lang/Object;)Lcom/stripe/android/link/LinkActivityResult$Success$Selected;
public fun <init> (Ljava/lang/Throwable;)V
public final fun component1 ()Ljava/lang/Throwable;
public final fun copy (Ljava/lang/Throwable;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public static synthetic fun copy$default (Lcom/stripe/android/link/LinkActivityResult$Failed;Ljava/lang/Throwable;ILjava/lang/Object;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public fun describeContents ()I
public fun equals (Ljava/lang/Object;)Z
public final fun getPaymentDetails ()Lcom/stripe/android/link/LinkPaymentDetails;
public final fun getError ()Ljava/lang/Throwable;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public fun writeToParcel (Landroid/os/Parcel;I)V
}

public final class com/stripe/android/link/LinkActivityResult$Success$Selected$Creator : android/os/Parcelable$Creator {
public final class com/stripe/android/link/LinkActivityResult$Failed$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/link/LinkActivityResult$Success$Selected;
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/link/LinkActivityResult$Failed;
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
public final fun newArray (I)[Lcom/stripe/android/link/LinkActivityResult$Success$Selected;
public final fun newArray (I)[Lcom/stripe/android/link/LinkActivityResult$Failed;
public synthetic fun newArray (I)[Ljava/lang/Object;
}

Expand Down Expand Up @@ -200,6 +173,9 @@ public final class com/stripe/android/link/LinkPaymentDetails$Saved$Creator : an
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/link/LinkPaymentLauncher$Companion {
}

public final class com/stripe/android/link/LinkPaymentLauncher_Factory {
public fun <init> (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V
public static fun create (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/stripe/android/link/LinkPaymentLauncher_Factory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ class LinkActivityContract :
* Arguments for launching [LinkActivity] to confirm a payment with Link.
*
* @param stripeIntent The Stripe Intent that is being processed
* @param completePayment Whether the payment should be completed, or the selected payment
* method should be returned as a result.
* @param merchantName The customer-facing business name.
* @param customerEmail Email of the customer, used to pre-fill the form.
* @param customerPhone Phone number of the customer, used to pre-fill the form.
Expand All @@ -38,7 +36,6 @@ class LinkActivityContract :
@Parcelize
data class Args internal constructor(
internal val stripeIntent: StripeIntent,
internal val completePayment: Boolean,
internal val merchantName: String,
internal val customerEmail: String? = null,
internal val customerPhone: String? = null,
Expand Down

0 comments on commit 78708b0

Please sign in to comment.