Skip to content

Commit

Permalink
Adopt DI and remove channel
Browse files Browse the repository at this point in the history
  • Loading branch information
cttsai-stripe committed Feb 13, 2025
1 parent 9ee7981 commit fd810c1
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,13 @@ import com.stripe.android.link.repositories.LinkApiRepository
import com.stripe.android.link.repositories.LinkRepository
import com.stripe.android.networking.StripeApiRepository
import com.stripe.android.networking.StripeRepository
import com.stripe.android.paymentelement.AnalyticEventCallback
import com.stripe.android.paymentelement.ExperimentalAnalyticEventCallbackApi
import com.stripe.android.paymentelement.confirmation.ALLOWS_MANUAL_CONFIRMATION
import com.stripe.android.payments.core.analytics.ErrorReporter
import com.stripe.android.payments.core.analytics.RealErrorReporter
import com.stripe.android.payments.core.injection.PRODUCT_USAGE
import com.stripe.android.paymentsheet.AnalyticEventInterceptor
import com.stripe.android.paymentsheet.analytics.DefaultEventReporter
import com.stripe.android.paymentsheet.analytics.EventReporter
import com.stripe.android.repository.ConsumersApiService
Expand Down Expand Up @@ -164,5 +167,10 @@ internal interface NativeLinkModule {
@Provides
@NativeLinkScope
fun provideEventReporterMode(): EventReporter.Mode = EventReporter.Mode.Custom

@OptIn(ExperimentalAnalyticEventCallbackApi::class)
@Provides
@NativeLinkScope
fun provideAnalyticEventCallback(): AnalyticEventCallback? = AnalyticEventInterceptor.analyticEventCallback
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.stripe.android.paymentelement

import dev.drewhamilton.poko.Poko
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.receiveAsFlow

/**
* Called when an analytic event is emitted.
Expand Down Expand Up @@ -55,13 +53,3 @@ abstract class AnalyticEvent internal constructor() {
@Poko
class RemovedSavedPaymentMethod internal constructor(val paymentMethodType: String) : AnalyticEvent()
}

@OptIn(ExperimentalAnalyticEventCallbackApi::class)
internal object AnalyticManager {
private val _events = Channel<AnalyticEvent>(Channel.BUFFERED)
val events = _events.receiveAsFlow()

suspend fun produceEvent(event: AnalyticEvent) {
_events.send(event)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ import com.stripe.android.link.LinkConfigurationCoordinator
import com.stripe.android.link.RealLinkConfigurationCoordinator
import com.stripe.android.link.injection.LinkAnalyticsComponent
import com.stripe.android.link.injection.LinkComponent
import com.stripe.android.paymentelement.AnalyticEventCallback
import com.stripe.android.paymentelement.EmbeddedPaymentElement
import com.stripe.android.paymentelement.EmbeddedPaymentElement.ConfigureResult
import com.stripe.android.paymentelement.EmbeddedPaymentElement.PaymentOptionDisplayData
import com.stripe.android.paymentelement.ExperimentalAnalyticEventCallbackApi
import com.stripe.android.paymentelement.ExperimentalEmbeddedPaymentElementApi
import com.stripe.android.paymentelement.confirmation.ALLOWS_MANUAL_CONFIRMATION
import com.stripe.android.paymentelement.confirmation.ConfirmationHandler
Expand All @@ -41,6 +43,7 @@ import com.stripe.android.payments.core.analytics.RealErrorReporter
import com.stripe.android.payments.core.injection.PRODUCT_USAGE
import com.stripe.android.payments.core.injection.STATUS_BAR_COLOR
import com.stripe.android.payments.core.injection.StripeRepositoryModule
import com.stripe.android.paymentsheet.AnalyticEventInterceptor
import com.stripe.android.paymentsheet.BuildConfig
import com.stripe.android.paymentsheet.DefaultPrefsRepository
import com.stripe.android.paymentsheet.PaymentSheet
Expand Down Expand Up @@ -342,5 +345,9 @@ internal interface SharedPaymentElementViewModelModule {
fun provideStripeImageLoader(context: Context): StripeImageLoader {
return StripeImageLoader(context)
}

@OptIn(ExperimentalAnalyticEventCallbackApi::class)
@Provides
fun provideAnalyticEventCallback(): AnalyticEventCallback? = AnalyticEventInterceptor.analyticEventCallback
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,10 @@ import androidx.core.app.ActivityOptionsCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.stripe.android.paymentelement.AnalyticManager
import com.stripe.android.paymentelement.ExperimentalAnalyticEventCallbackApi
import com.stripe.android.paymentelement.confirmation.intent.IntentConfirmationInterceptor
import com.stripe.android.paymentsheet.state.PaymentElementLoader
import com.stripe.android.uicore.utils.AnimationConstants
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.jetbrains.annotations.TestOnly

/**
Expand All @@ -44,16 +39,6 @@ internal class DefaultPaymentSheetLauncher(
}
}
)
lifecycleOwner.lifecycleScope.launch {
// lifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
AnalyticManager.events.collect { event ->
withContext(Dispatchers.Default) {
AnalyticEventInterceptor.analyticEventCallback
?.onEvent(event)
}
}
// }
}
}

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.stripe.android.model.LinkMode
import com.stripe.android.model.PaymentMethodCode
import com.stripe.android.networking.PaymentAnalyticsRequestFactory
import com.stripe.android.paymentelement.AnalyticEvent
import com.stripe.android.paymentelement.AnalyticManager
import com.stripe.android.paymentelement.AnalyticEventCallback
import com.stripe.android.paymentelement.ExperimentalAnalyticEventCallbackApi
import com.stripe.android.paymentelement.confirmation.intent.DeferredIntentConfirmationType
import com.stripe.android.paymentsheet.PaymentSheet
Expand All @@ -25,6 +25,7 @@ internal class DefaultEventReporter @Inject internal constructor(
private val analyticsRequestExecutor: AnalyticsRequestExecutor,
private val paymentAnalyticsRequestFactory: PaymentAnalyticsRequestFactory,
private val durationProvider: DurationProvider,
private val analyticEventCallback: AnalyticEventCallback?,
@IOContext private val workContext: CoroutineContext
) : EventReporter {

Expand Down Expand Up @@ -139,7 +140,7 @@ internal class DefaultEventReporter @Inject internal constructor(

override fun onShowNewPaymentOptions() {
CoroutineScope(workContext).launch {
AnalyticManager.produceEvent(AnalyticEvent.PresentedSheet())
analyticEventCallback?.onEvent(AnalyticEvent.PresentedSheet())
}
fireEvent(
PaymentSheetEvent.ShowNewPaymentOptions(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@ import com.stripe.android.link.LinkConfigurationCoordinator
import com.stripe.android.link.RealLinkConfigurationCoordinator
import com.stripe.android.link.injection.LinkAnalyticsComponent
import com.stripe.android.link.injection.LinkComponent
import com.stripe.android.paymentelement.AnalyticEventCallback
import com.stripe.android.paymentelement.ExperimentalAnalyticEventCallbackApi
import com.stripe.android.payments.core.analytics.ErrorReporter
import com.stripe.android.payments.core.analytics.RealErrorReporter
import com.stripe.android.paymentsheet.AnalyticEventInterceptor
import com.stripe.android.paymentsheet.BuildConfig
import com.stripe.android.paymentsheet.DefaultPrefsRepository
import com.stripe.android.paymentsheet.PaymentSheet
Expand Down Expand Up @@ -162,5 +165,9 @@ internal abstract class PaymentSheetCommonModule {
fun providesCvcRecollectionInteractorFactory(): CvcRecollectionInteractor.Factory {
return DefaultCvcRecollectionInteractor.Factory
}

@OptIn(ExperimentalAnalyticEventCallbackApi::class)
@Provides
fun provideAnalyticEventCallback(): AnalyticEventCallback? = AnalyticEventInterceptor.analyticEventCallback
}
}

0 comments on commit fd810c1

Please sign in to comment.