Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
tjclawson-stripe committed Jan 15, 2025
1 parent 513fcf6 commit ce8663f
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ import com.stripe.android.ExperimentalAllowsRemovalOfLastSavedPaymentMethodApi
import com.stripe.android.ExperimentalCardBrandFilteringApi
import com.stripe.android.common.configuration.ConfigurationDefaults
import com.stripe.android.common.ui.DelegateDrawable
import com.stripe.android.lpmfoundations.paymentmethod.PaymentMethodMetadata
import com.stripe.android.model.CardBrand
import com.stripe.android.model.PaymentIntent
import com.stripe.android.model.SetupIntent
import com.stripe.android.paymentelement.confirmation.intent.IntentConfirmationInterceptor
import com.stripe.android.paymentelement.embedded.DefaultEmbeddedActivityLauncher
import com.stripe.android.paymentelement.embedded.EmbeddedActivityLauncher
import com.stripe.android.paymentelement.embedded.EmbeddedConfirmationHelper
import com.stripe.android.paymentelement.embedded.SharedPaymentElementViewModel
import com.stripe.android.paymentsheet.CreateIntentCallback
Expand All @@ -48,6 +45,7 @@ class EmbeddedPaymentElement private constructor(
init {
sharedViewModel.initEmbeddedActivityLauncher(activityResultCaller, lifecycleOwner)
}

/**
* Contains information about the customer's selected payment option.
* Use this to display the payment option in your own UI.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import androidx.lifecycle.LifecycleOwner
import com.stripe.android.lpmfoundations.paymentmethod.PaymentMethodMetadata

internal interface EmbeddedActivityLauncher {
fun launchForm(code: String, paymentMethodMetadata: PaymentMethodMetadata?)
var launchForm: ((code: String, paymentMethodMetadata: PaymentMethodMetadata?) -> Unit)?
}

internal class DefaultEmbeddedActivityLauncher(
Expand All @@ -20,23 +20,25 @@ internal class DefaultEmbeddedActivityLauncher(
activityResultCaller.registerForActivityResult(
FormContract()
) { result ->
if (result is FormResult.Complete){
if (result is FormResult.Complete) {
selectionHolder.set(result.selection)
}
}

override var launchForm: ((code: String, paymentMethodMetadata: PaymentMethodMetadata?) -> Unit)? =
{ code, metadata ->
formActivityLauncher.launch(FormContract.Args(code, metadata))
}

init {
lifecycleOwner.lifecycle.addObserver(
object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
formActivityLauncher.unregister()
launchForm = null
super.onDestroy(owner)
}
}
)
}

override fun launchForm(code: String, paymentMethodMetadata: PaymentMethodMetadata?) {
formActivityLauncher.launch(FormContract.Args(code, paymentMethodMetadata))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ internal interface EmbeddedContentHelper {
embeddedViewDisplaysMandateText: Boolean,
)

fun setLaunchForm(launchForm: (code: String, paymentMethodMetaData: PaymentMethodMetadata?) -> Unit)
fun setFormLauncher(launchForm: ((code: String, paymentMethodMetaData: PaymentMethodMetadata?) -> Unit)?)
}

internal fun interface EmbeddedContentHelperFactory {
Expand Down Expand Up @@ -123,8 +123,8 @@ internal class DefaultEmbeddedContentHelper @AssistedInject constructor(
)
}

override fun setLaunchForm(
launchForm: (code: String, paymentMethodMetaData: PaymentMethodMetadata?) -> Unit
override fun setFormLauncher(
launchForm: ((code: String, paymentMethodMetaData: PaymentMethodMetadata?) -> Unit)?
) {
this.launchForm = launchForm
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ import com.stripe.android.view.ActivityStarter
import kotlinx.parcelize.Parcelize

internal class FormActivity : AppCompatActivity() {
private val args: FormContract.Args by lazy {
FormContract.Args.fromIntent(intent) ?: throw IllegalStateException(
"Args required"
)
private val args: FormContract.Args? by lazy {
FormContract.Args.fromIntent(intent)
}

@OptIn(ExperimentalMaterialApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (args == null) finish()

setContent {
StripeTheme {
val bottomSheetState = rememberStripeBottomSheetState()
Expand All @@ -44,7 +44,7 @@ internal class FormActivity : AppCompatActivity() {
finish()
}
) {
Text(args.selectedPaymentMethodCode)
Text(args?.selectedPaymentMethodCode ?: "Whoops")
}
}
}
Expand All @@ -54,7 +54,6 @@ internal class FormActivity : AppCompatActivity() {
super.finish()
fadeOut()
}

}

internal sealed interface FormResult : Parcelable {
Expand Down Expand Up @@ -82,8 +81,6 @@ internal sealed interface FormResult : Parcelable {
}
}



internal class FormContract : ActivityResultContract<FormContract.Args, FormResult>() {
override fun createIntent(context: Context, input: Args): Intent {
return Intent(context, FormActivity::class.java)
Expand Down Expand Up @@ -112,4 +109,3 @@ internal class FormContract : ActivityResultContract<FormContract.Args, FormResu
internal const val EXTRA_ARGS: String = "extra_activity_args"
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,11 @@ internal class SharedPaymentElementViewModel @Inject constructor(

fun initEmbeddedActivityLauncher(activityResultCaller: ActivityResultCaller, lifecycleOwner: LifecycleOwner) {
val launcher = DefaultEmbeddedActivityLauncher(activityResultCaller, lifecycleOwner, selectionHolder)
setLaunchForm(launcher::launchForm)
setFormLauncher(launcher.launchForm)
}

private fun setLaunchForm(launch: (code: String, paymentMethodMetaData: PaymentMethodMetadata?) -> Unit) {
embeddedContentHelper.setLaunchForm(launch)
private fun setFormLauncher(launch: ((code: String, paymentMethodMetadata: PaymentMethodMetadata?) -> Unit)?) {
embeddedContentHelper.setFormLauncher(launch)
}

suspend fun configure(
Expand Down

0 comments on commit ce8663f

Please sign in to comment.