diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/DefaultEmbeddedSheetLauncher.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/DefaultEmbeddedSheetLauncher.kt index f61c52c3a33..9a6b455f0a1 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/DefaultEmbeddedSheetLauncher.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/DefaultEmbeddedSheetLauncher.kt @@ -17,7 +17,11 @@ import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject internal interface EmbeddedSheetLauncher { - fun launchForm(code: String, paymentMethodMetadata: PaymentMethodMetadata) + fun launchForm( + code: String, + paymentMethodMetadata: PaymentMethodMetadata, + hasSavedPaymentMethods: Boolean + ) fun launchManage( paymentMethodMetadata: PaymentMethodMetadata, @@ -82,8 +86,17 @@ internal class DefaultEmbeddedSheetLauncher @AssistedInject constructor( } } - override fun launchForm(code: String, paymentMethodMetadata: PaymentMethodMetadata) { - formActivityLauncher.launch(FormContract.Args(code, paymentMethodMetadata)) + override fun launchForm( + code: String, + paymentMethodMetadata: PaymentMethodMetadata, + hasSavedPaymentMethods: Boolean + ) { + val args = FormContract.Args( + selectedPaymentMethodCode = code, + paymentMethodMetadata = paymentMethodMetadata, + hasSavedPaymentMethods = hasSavedPaymentMethods + ) + formActivityLauncher.launch(args) } override fun launchManage( diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/EmbeddedContentHelper.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/EmbeddedContentHelper.kt index d176748c2e8..9fdd2877709 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/EmbeddedContentHelper.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/EmbeddedContentHelper.kt @@ -174,8 +174,14 @@ internal class DefaultEmbeddedContentHelper @AssistedInject constructor( selection = selectionHolder.selection.value, ) }, - transitionToFormScreen = { - sheetLauncher?.launchForm(it, paymentMethodMetadata) + transitionToFormScreen = { code -> + sheetLauncher?.launchForm( + code = code, + paymentMethodMetadata = paymentMethodMetadata, + hasSavedPaymentMethods = customerStateHolder.paymentMethods.value.any { + it.type?.code == code + } + ) }, paymentMethods = customerStateHolder.paymentMethods, mostRecentlySelectedSavedPaymentMethod = customerStateHolder.mostRecentlySelectedSavedPaymentMethod, diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/EmbeddedFormInteractorFactory.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/EmbeddedFormInteractorFactory.kt index 95f3f7a12a2..0426bc22f25 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/EmbeddedFormInteractorFactory.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/EmbeddedFormInteractorFactory.kt @@ -16,6 +16,7 @@ import javax.inject.Inject internal class EmbeddedFormInteractorFactory @Inject constructor( private val paymentMethodMetadata: PaymentMethodMetadata, private val paymentMethodCode: PaymentMethodCode, + private val hasSavedPaymentMethods: Boolean, private val embeddedSelectionHolder: EmbeddedSelectionHolder, private val embeddedFormHelperFactory: EmbeddedFormHelperFactory, @ViewModelScope private val viewModelScope: CoroutineScope @@ -52,7 +53,10 @@ internal class EmbeddedFormInteractorFactory @Inject constructor( usBankAccountArguments = usBankAccountFormArguments, reportFieldInteraction = { }, - headerInformation = null, + headerInformation = paymentMethodMetadata.formHeaderInformationForCode( + code = paymentMethodCode, + customerHasSavedPaymentMethods = hasSavedPaymentMethods + ), isLiveMode = paymentMethodMetadata.stripeIntent.isLiveMode, processing = stateFlowOf(false), paymentMethodIncentive = PaymentMethodIncentiveInteractor( diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityComponent.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityComponent.kt index 27757141206..88daecdf533 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityComponent.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityComponent.kt @@ -44,6 +44,9 @@ internal interface FormActivityComponent { @BindsInstance fun selectedPaymentMethodCode(selectedPaymentMethodCode: PaymentMethodCode): Builder + @BindsInstance + fun hasSavedPaymentMethods(hasSavedPaymentMethods: Boolean): Builder + @BindsInstance fun context(context: Context): Builder diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityViewModel.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityViewModel.kt index 9411a513468..aba73344584 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityViewModel.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormActivityViewModel.kt @@ -27,6 +27,7 @@ internal class FormActivityViewModel @Inject constructor( val component = DaggerFormActivityComponent.builder() .paymentMethodMetadata(args.paymentMethodMetadata) .selectedPaymentMethodCode(args.selectedPaymentMethodCode) + .hasSavedPaymentMethods(args.hasSavedPaymentMethods) .context(extras.requireApplication()) .savedStateHandle(extras.createSavedStateHandle()) .build() diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormContract.kt b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormContract.kt index 79878216e2a..5fde3d31c26 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormContract.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentelement/embedded/form/FormContract.kt @@ -51,6 +51,7 @@ internal object FormContract : ActivityResultContract