Skip to content

Commit

Permalink
[Financial Connections] Compose support. (#5117)
Browse files Browse the repository at this point in the history
* Adds composable functions.

* Adds example.

* Updates changelog.

* Updates naming to `remember`.

* Ktlint fixes.

* Regenerates API.
  • Loading branch information
carlosmuvi-stripe committed Jun 6, 2022
1 parent 4390817 commit 3ef8752
Show file tree
Hide file tree
Showing 9 changed files with 212 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
@@ -1,4 +1,10 @@
# CHANGELOG

## X.X.X

### Financial Connections
* [ADDED][5117](https://github.com/stripe/stripe-android/pull/5117) Adds rememberFinancialConnectionsSheet and rememberFinancialConnectionsSheetForToken.

## 20.5.0 - 2022-06-01
This release contains several bug fixes for Payments and PaymentSheet, deprecates the PaymentSheet's `primaryButtonColor` api in favor of the new [appearance api](https://stripe.com/docs/elements/appearance-api?platform=android), and adds card brand icons to the card details form.

Expand Down
16 changes: 16 additions & 0 deletions financial-connections-example/build.gradle
Expand Up @@ -35,6 +35,11 @@ android {

buildFeatures {
viewBinding true
compose true
}

composeOptions {
kotlinCompilerExtensionVersion "$androidxComposeVersion"
}

kotlinOptions {
Expand All @@ -54,8 +59,19 @@ dependencies {
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"

// Jetpack Compose
implementation "androidx.activity:activity-compose:$androidxActivityVersion"
implementation "androidx.compose.material:material:$androidxComposeVersion"
implementation "androidx.compose.runtime:runtime-livedata:$androidxComposeVersion"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$androidxLifecycleVersion"
implementation "androidx.compose.ui:ui:$androidxComposeVersion"
implementation "androidx.compose.ui:ui-tooling-preview:$androidxComposeVersion"

testImplementation "junit:junit:$junitVersion"
testImplementation "androidx.test.ext:junit-ktx:$androidTestJunitVersion"

androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$androidxComposeVersion"
debugImplementation "androidx.compose.ui:ui-tooling:$androidxComposeVersion"
debugImplementation "androidx.compose.ui:ui-test-manifest:$androidxComposeVersion"
}
3 changes: 3 additions & 0 deletions financial-connections-example/src/main/AndroidManifest.xml
Expand Up @@ -22,6 +22,9 @@
<activity
android:name="com.stripe.android.financialconnections.example.FinancialConnectionsBankAccountTokenExampleActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name="com.stripe.android.financialconnections.example.FinancialConnectionsComposeExampleActivity"
android:theme="@style/AppTheme.NoActionBar" />
</application>

</manifest>
@@ -0,0 +1,76 @@
package com.stripe.android.financialconnections.example

import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Button
import androidx.compose.material.Divider
import androidx.compose.material.LinearProgressIndicator
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.stripe.android.financialconnections.example.FinancialConnectionsExampleViewEffect.OpenFinancialConnectionsSheetExample
import com.stripe.android.financialconnections.rememberFinancialConnectionsSheet

class FinancialConnectionsComposeExampleActivity : AppCompatActivity() {

private val viewModel by viewModels<FinancialConnectionsExampleViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
FinancialConnectionsScreen()
}
}


@Composable
private fun FinancialConnectionsScreen() {
val state: FinancialConnectionsExampleState by viewModel.state.collectAsState()
val viewEffect: FinancialConnectionsExampleViewEffect? by viewModel.viewEffect.collectAsState(null)
val financialConnectionsSheet = rememberFinancialConnectionsSheet(viewModel::onFinancialConnectionsSheetResult)

LaunchedEffect(viewEffect) {
viewEffect?.let {
when (it) {
is OpenFinancialConnectionsSheetExample -> financialConnectionsSheet.present(it.configuration)
}
}
}

FinancialConnectionsContent(
state = state,
onButtonClick = { viewModel.startFinancialConnectionsSessionForData() }
)
}

@Composable
private fun FinancialConnectionsContent(
state: FinancialConnectionsExampleState,
onButtonClick: () -> Unit
) {
Column(modifier = Modifier.padding(horizontal = 10.dp)) {
if (state.loading) {
LinearProgressIndicator(
modifier = Modifier.fillMaxWidth(),
)
}
Button(
onClick = { onButtonClick() },
) {
Text("Connect Accounts!")
}

Divider(modifier = Modifier.padding(vertical = 5.dp))
Text(text = state.status)
}
}
}
Expand Up @@ -50,6 +50,10 @@ class FinancialConnectionsLauncherActivity : AppCompatActivity() {
activity.getString(R.string.collect_bank_account_for_bank_account_token),
FinancialConnectionsBankAccountTokenExampleActivity::class.java
),
Item(
activity.getString(R.string.collect_bank_account_for_data_compose),
FinancialConnectionsComposeExampleActivity::class.java
),
)

override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ExamplesViewHolder {
Expand Down
Expand Up @@ -2,6 +2,7 @@
<string name="app_name">Financial Connections Example</string>
<string name="launch_connections_sheet">Connect an Account</string>
<string name="collect_bank_account_for_data">Collect account for data</string>
<string name="collect_bank_account_for_data_compose">Jetpack Compose - Collect bank account for data</string>
<string name="collect_bank_account_for_bank_account_token">Collect bank account for Connect payouts</string>
<string name="collect_bank_account_for_data_title">Collect Accounts</string>
<string name="collect_bank_account_for_bank_account_token_title">Collect Bank Account Token</string>
Expand Down

0 comments on commit 3ef8752

Please sign in to comment.