Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,10 @@ internal class PlaygroundSettings private constructor(
PassiveCaptchaDefinition,
AttestationOnIntentConfirmationDefinition,
EnableTapToAddSettingsDefinition,
FeatureFlagSettingsDefinition(
FeatureFlags.nfcDirect,
PlaygroundConfigurationData.IntegrationType.paymentFlows().toList(),
),
CustomStripeApiDefinition,
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.stripe.android.common.taptoadd

import android.os.Build
import com.stripe.android.common.exception.stripeErrorMessage
import com.stripe.android.common.taptoadd.nfcdirect.NfcDirectCollectionHandler
import com.stripe.android.common.taptoadd.nfcdirect.NfcDirectConnectionManager
import com.stripe.android.core.strings.ResolvableString
import com.stripe.android.core.strings.resolvableString
import com.stripe.android.lpmfoundations.paymentmethod.PaymentMethodMetadata
Expand Down Expand Up @@ -44,6 +47,13 @@ internal interface TapToAddCollectionHandler {
errorReporter: ErrorReporter,
createCardPresentSetupIntentCallbackRetriever: CreateCardPresentSetupIntentCallbackRetriever,
): TapToAddCollectionHandler {
// Check if using NFC Direct
if (connectionManager is NfcDirectConnectionManager &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
) {
return NfcDirectCollectionHandler(connectionManager)
}

return if (isStripeTerminalSdkAvailable()) {
DefaultTapToAddCollectionHandler(
terminalWrapper = terminalWrapper,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.stripe.android.common.taptoadd

import android.content.Context
import android.os.Build
import com.stripe.android.common.taptoadd.nfcdirect.DefaultIsNfcDirectAvailable
import com.stripe.android.common.taptoadd.nfcdirect.IsNfcDirectAvailable
import com.stripe.android.common.taptoadd.nfcdirect.NfcDirectConnectionManager
import com.stripe.android.core.injection.IOContext
import com.stripe.android.paymentelement.CreateCardPresentSetupIntentCallback
import com.stripe.android.paymentelement.TapToAddPreview
Expand Down Expand Up @@ -31,6 +35,11 @@ internal interface TapToAddModule {
retriever: DefaultCreateCardPresentSetupIntentCallbackRetriever
): CreateCardPresentSetupIntentCallbackRetriever

@Binds
fun bindsIsNfcDirectAvailable(
isNfcDirectAvailable: DefaultIsNfcDirectAvailable
): IsNfcDirectAvailable

companion object {
@Provides
fun providesCreateCardPresentSetupIntentCallback(
Expand All @@ -42,12 +51,22 @@ internal interface TapToAddModule {

@Provides
fun providesTapToAddConnectionManager(
isNfcDirectAvailable: IsNfcDirectAvailable,
isStripeTerminalSdkAvailable: IsStripeTerminalSdkAvailable,
terminalWrapper: TerminalWrapper,
errorReporter: ErrorReporter,
applicationContext: Context,
@IOContext workContext: CoroutineContext
): TapToAddConnectionManager {
// Prefer NFC Direct (lightweight) over Terminal SDK when available
if (isNfcDirectAvailable() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return NfcDirectConnectionManager(
context = applicationContext,
workContext = workContext,
)
}

// Fall back to Terminal SDK
return TapToAddConnectionManager.create(
applicationContext = applicationContext,
isStripeTerminalSdkAvailable = isStripeTerminalSdkAvailable,
Expand Down
Loading
Loading