From 8e3d6d4bb89e77633572a8fa703375193c563502 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 15 Jan 2025 20:50:33 +0100 Subject: [PATCH 01/18] Declare `AppMode` class --- .../src/main/kotlin/com/woocommerce/android/ui/AppMode.kt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt new file mode 100644 index 000000000000..51acf2e83359 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt @@ -0,0 +1,6 @@ +package com.woocommerce.android.ui + +sealed class AppMode { + object PointOfSale : AppMode() + object StoreManagement : AppMode() +} From 5ff7d40bcb25d9b3b448bcf349f82894b81cc762 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 15 Jan 2025 20:53:55 +0100 Subject: [PATCH 02/18] Inject `AppMode` into `PaymentsFlowTracker` --- .../android/ui/payments/tracking/PaymentsFlowTracker.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index 333f652bc90b..f6b788f1484c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -72,6 +72,7 @@ import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPayment import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPaymentStatusErrorType.Generic import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.tracker.OrderDurationRecorder +import com.woocommerce.android.ui.AppMode import com.woocommerce.android.ui.payments.cardreader.cardReaderBatteryLevelPercent import com.woocommerce.android.ui.payments.cardreader.onboarding.CardReaderOnboardingState import com.woocommerce.android.ui.payments.cardreader.onboarding.OnboardingCtaReasonTapped @@ -90,6 +91,7 @@ class PaymentsFlowTracker @Inject constructor( private val selectedSite: SelectedSite, private val cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, private val paymentReceiptHelper: PaymentReceiptHelper, + private val appFlow: AppMode, ) { @VisibleForTesting fun track( From 39a1f933fe74fce428dfbdd7a2f31eb5d4a86cc7 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 15 Jan 2025 20:56:22 +0100 Subject: [PATCH 03/18] Define DI for @PointOfSale and @StoreManagement `PaymentsFlowTracker` instances --- .../woocommerce/android/di/AppModeModule.kt | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt new file mode 100644 index 000000000000..7dbf49a008f2 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt @@ -0,0 +1,76 @@ +package com.woocommerce.android.di + +import com.woocommerce.android.AppPrefsWrapper +import com.woocommerce.android.analytics.AnalyticsTrackerWrapper +import com.woocommerce.android.tools.SelectedSite +import com.woocommerce.android.ui.AppMode +import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper +import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoProvider +import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.components.SingletonComponent +import javax.inject.Qualifier + +@Module +@InstallIn(ViewModelComponent::class, SingletonComponent::class) +class AppModeModule { + @Provides + fun provideAppMode(): AppMode = AppMode.StoreManagement + + @Provides + @PointOfSaleMode + fun providePointOfSaleMode(): AppMode = AppMode.PointOfSale + + @Provides + @StoreManagementMode + fun provideStoreManagementMode(): AppMode = AppMode.StoreManagement + + @Provides + @PointOfSaleMode + @Suppress("LongParameterList") + fun providePointOfSaleModePaymentsFlowTracker( + trackerWrapper: AnalyticsTrackerWrapper, + appPrefsWrapper: AppPrefsWrapper, + selectedSite: SelectedSite, + cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, + paymentReceiptHelper: PaymentReceiptHelper, + @PointOfSaleMode appFlow: AppMode + ): PaymentsFlowTracker = PaymentsFlowTracker( + trackerWrapper, + appPrefsWrapper, + selectedSite, + cardReaderTrackingInfoProvider, + paymentReceiptHelper, + appFlow + ) + + @Provides + @StoreManagementMode + @Suppress("LongParameterList") + fun provideStoreManagementModePaymentsFlowTracker( + trackerWrapper: AnalyticsTrackerWrapper, + appPrefsWrapper: AppPrefsWrapper, + selectedSite: SelectedSite, + cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, + paymentReceiptHelper: PaymentReceiptHelper, + @StoreManagementMode appFlow: AppMode + ): PaymentsFlowTracker = PaymentsFlowTracker( + trackerWrapper, + appPrefsWrapper, + selectedSite, + cardReaderTrackingInfoProvider, + paymentReceiptHelper, + appFlow + ) +} + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class PointOfSaleMode + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class StoreManagementMode From dfdb3cb7b357aa02e790f56e4fcd1488db9747b5 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 15 Jan 2025 20:57:28 +0100 Subject: [PATCH 04/18] Use @StoreManagementMode version of controller in store management mode --- .../payments/cardreader/payment/CardReaderPaymentViewModel.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt index f8a978cb4084..a75a1178a859 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.map import com.woocommerce.android.AppPrefs import com.woocommerce.android.cardreader.CardReaderManager import com.woocommerce.android.cardreader.payments.PaymentData +import com.woocommerce.android.di.StoreManagementMode import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.ui.orders.details.OrderDetailRepository import com.woocommerce.android.ui.payments.cardreader.CardReaderCountryConfigProvider @@ -42,7 +43,7 @@ class CardReaderPaymentViewModel @Inject constructor( appPrefs: AppPrefs = AppPrefs, paymentCollectibilityChecker: CardReaderPaymentCollectibilityChecker, interacRefundableChecker: CardReaderInteracRefundableChecker, - tracker: PaymentsFlowTracker, + @StoreManagementMode tracker: PaymentsFlowTracker, trackCancelledFlow: CardReaderTrackCanceledFlowAction, currencyFormatter: CurrencyFormatter, errorMapper: CardReaderPaymentErrorMapper, From 33516f1059d41413c1e1e532a95d36629fedd255 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 15 Jan 2025 20:58:20 +0100 Subject: [PATCH 05/18] Move controller factory to POS and make POS-oriented --- ...oPosCardReaderPaymentControllerFactory.kt} | 10 +++++-- .../home/totals/WooPosTotalsViewModel.kt | 3 +- .../home/totals/WooPosTotalsViewModelTest.kt | 29 +++++++++---------- 3 files changed, 22 insertions(+), 20 deletions(-) rename WooCommerce/src/main/kotlin/com/woocommerce/android/ui/{payments/cardreader/payment/controller/CardReaderPaymentControllerFactory.kt => woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt} (88%) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerFactory.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt similarity index 88% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerFactory.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt index 7dde174b3f5b..289bebb93301 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/controller/CardReaderPaymentControllerFactory.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt @@ -1,7 +1,8 @@ -package com.woocommerce.android.ui.payments.cardreader.payment.controller +package com.woocommerce.android.ui.woopos.home.totals import com.woocommerce.android.AppPrefs import com.woocommerce.android.cardreader.CardReaderManager +import com.woocommerce.android.di.PointOfSaleMode import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.ui.orders.details.OrderDetailRepository import com.woocommerce.android.ui.payments.cardreader.CardReaderCountryConfigProvider @@ -14,6 +15,9 @@ import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderInteracR import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentCollectibilityChecker import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentErrorMapper import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentOrderHelper +import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentController +import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentStateProvider +import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderTrackCanceledFlowAction import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper import com.woocommerce.android.ui.payments.receipt.PaymentReceiptShare import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoKeeper @@ -24,14 +28,14 @@ import org.wordpress.android.fluxc.store.WooCommerceStore import javax.inject.Inject import kotlin.reflect.KMutableProperty0 -class CardReaderPaymentControllerFactory @Inject constructor( +class WooPosCardReaderPaymentControllerFactory @Inject constructor( private val cardReaderManager: CardReaderManager, private val orderRepository: OrderDetailRepository, private val selectedSite: SelectedSite, private val appPrefs: AppPrefs = AppPrefs, private val paymentCollectibilityChecker: CardReaderPaymentCollectibilityChecker, private val interacRefundableChecker: CardReaderInteracRefundableChecker, - private val tracker: PaymentsFlowTracker, + @PointOfSaleMode private val tracker: PaymentsFlowTracker, private val trackCancelledFlow: CardReaderTrackCanceledFlowAction, private val currencyFormatter: CurrencyFormatter, private val errorMapper: CardReaderPaymentErrorMapper, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt index e041c7c3ee2e..1732784d3daa 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt @@ -11,7 +11,6 @@ import com.woocommerce.android.cardreader.connection.CardReaderStatus.NotConnect import com.woocommerce.android.model.Order import com.woocommerce.android.ui.payments.cardreader.onboarding.CardReaderFlowParam.PaymentOrRefund import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentController -import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentControllerFactory import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentOrRefundState import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentOrRefundState.CardReaderPaymentState import com.woocommerce.android.ui.woopos.cardreader.WooPosCardReaderFacade @@ -63,7 +62,7 @@ class WooPosTotalsViewModel @Inject constructor( private val analyticsTracker: WooPosAnalyticsTracker, private val networkStatus: WooPosNetworkStatus, private val isReceiptSendingSupported: WooPosEmailReceiptIsSendingSupported, - private val cardReaderPaymentControllerFactory: CardReaderPaymentControllerFactory, + private val cardReaderPaymentControllerFactory: WooPosCardReaderPaymentControllerFactory, private val uiStringParser: UiStringParser, savedState: SavedStateHandle, ) : ViewModel() { diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModelTest.kt index b3c13bd998ac..afe38ddb2143 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModelTest.kt @@ -21,7 +21,6 @@ import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentE import com.woocommerce.android.ui.payments.cardreader.payment.CardReaderPaymentOrderHelper import com.woocommerce.android.ui.payments.cardreader.payment.PaymentFlowError import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentController -import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentControllerFactory import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentOrRefundState import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentOrRefundState.CardReaderPaymentState import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderPaymentStateProvider @@ -102,7 +101,7 @@ class WooPosTotalsViewModelTest { private val cardReaderConfigProvider: CardReaderCountryConfigProvider = mock() private val paymentReceiptShare: PaymentReceiptShare = mock() private val uiStringParser: UiStringParser = mock() - private val paymentControllerFactory = CardReaderPaymentControllerFactory( + private val paymentControllerFactory = WooPosCardReaderPaymentControllerFactory( cardReaderManager = cardReaderManager, orderRepository = orderRepository, selectedSite = selectedSite, @@ -562,7 +561,7 @@ class WooPosTotalsViewModelTest { whenever(uiStringParser.asString(any())).thenReturn("Unfortunately, this payment has been declined.") val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -697,7 +696,7 @@ class WooPosTotalsViewModelTest { whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) createViewModelAndSetupForSuccessfulOrderCreation(controllerFactory = factory) @@ -715,7 +714,7 @@ class WooPosTotalsViewModelTest { whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val vm = createViewModelAndSetupForSuccessfulOrderCreation(controllerFactory = factory) @@ -745,7 +744,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -779,7 +778,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -815,7 +814,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -844,7 +843,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -883,7 +882,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -925,7 +924,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -968,7 +967,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -1006,7 +1005,7 @@ class WooPosTotalsViewModelTest { val readerStatus = MutableStateFlow(CardReaderStatus.Connected(mock())) whenever(cardReaderFacade.readerStatus).thenReturn(readerStatus) val mockCardReaderPaymentController: CardReaderPaymentController = mock() - val factory: CardReaderPaymentControllerFactory = mock() + val factory: WooPosCardReaderPaymentControllerFactory = mock() whenever(factory.create(any(), any(), any())).thenReturn(mockCardReaderPaymentController) val paymentState = MutableStateFlow( @@ -1147,7 +1146,7 @@ class WooPosTotalsViewModelTest { @Suppress("LongMethod") private suspend fun createViewModelAndSetupForSuccessfulOrderCreation( - controllerFactory: CardReaderPaymentControllerFactory = paymentControllerFactory, + controllerFactory: WooPosCardReaderPaymentControllerFactory = paymentControllerFactory, itemClickedData: List = listOf( WooPosItemsViewModel.ItemClickedData.SimpleProduct( id = 1L @@ -1235,7 +1234,7 @@ class WooPosTotalsViewModelTest { totalsRepository: WooPosTotalsRepository = mock(), priceFormat: WooPosFormatPrice = mock(), savedState: SavedStateHandle = SavedStateHandle(), - cardReaderPaymentControllerFactory: CardReaderPaymentControllerFactory = paymentControllerFactory, + cardReaderPaymentControllerFactory: WooPosCardReaderPaymentControllerFactory = paymentControllerFactory, ) = WooPosTotalsViewModel( resourceProvider = resourceProvider, parentToChildrenEventReceiver = parentToChildrenEventReceiver, From 8dc911727d340f16ea8d0ccc4b7b4b7277941840 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 12:08:21 +0100 Subject: [PATCH 06/18] Generate POS-scoped payment flow-related analytics events --- .../util/analytics/WooPosAnalyticsEvent.kt | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt index 30b8f41588ec..f1164d4ff373 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt @@ -36,6 +36,240 @@ sealed class WooPosAnalyticsEvent : IAnalyticsEvent { override val name: String = "order_creation_success" } } + + sealed class PaymentFlowTrackerEvent : WooPosAnalyticsEvent() { + data object CardPresentCollectInteracPaymentFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_interac_payment_failed" + } + + data object CardPresentCollectInteracPaymentSuccess : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_interac_payment_success" + } + + data object CardPresentCollectInteracRefundCancelled : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_interac_refund_cancelled" + } + + data object CardPresentCollectPaymentCancelled : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_payment_cancelled" + } + + data object CardPresentCollectPaymentFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_payment_failed" + } + + data object CardPresentCollectPaymentSuccess : PaymentFlowTrackerEvent() { + override val name: String = "card_present_collect_payment_success" + } + + data object CardPresentConnectionLearnMoreTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_connection_learn_more_tapped" + } + + data object CardPresentOnboardingCompleted : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_completed" + } + + data object CardPresentOnboardingCtaFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_cta_failed" + } + + data object CardPresentOnboardingCtaTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_cta_tapped" + } + + data object CardPresentOnboardingLearnMoreTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_learn_more_tapped" + } + + data object CardPresentOnboardingNotCompleted : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_not_completed" + } + + data object CardPresentOnboardingStepSkipped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_onboarding_step_skipped" + } + + data object CardPresentPaymentFailedContactSupportTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_payment_failed_contact_support_tapped" + } + + data object CardPresentSelectReaderTypeBluetoothTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_select_reader_type_bluetooth_tapped" + } + + data object CardPresentSelectReaderTypeBuiltInTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_select_reader_type_built_in_tapped" + } + + data object CardPresentTapToPayNotAvailable : PaymentFlowTrackerEvent() { + override val name: String = "card_present_tap_to_pay_not_available" + } + + data object CardPresentTapToPayPaymentFailedEnableNfcTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_present_tap_to_pay_payment_failed_enable_nfc_tapped" + } + + data object CardReaderAutomaticDisconnect : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_automatic_disconnect" + } + + data object CardReaderAutoConnectionStarted : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_auto_connection_started" + } + + data object CardReaderConnectionFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_connection_failed" + } + + data object CardReaderConnectionSuccess : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_connection_success" + } + + data object CardReaderConnectionTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_connection_tapped" + } + + data object CardReaderDisconnectTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_disconnect_tapped" + } + + data object CardReaderDiscoveryFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_discovery_failed" + } + + data object CardReaderDiscoveryReaderDiscovered : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_discovery_reader_discovered" + } + + data object CardReaderDiscoveryTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_discovery_tapped" + } + + data object CardReaderLocationFailure : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_location_failure" + } + + data object CardReaderLocationMissingTapped : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_location_missing_tapped" + } + + data object CardReaderLocationSuccess : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_location_success" + } + + data object CardReaderSoftwareUpdateAlertInstallClicked : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_software_update_alert_install_clicked" + } + + data object CardReaderSoftwareUpdateAlertShown : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_software_update_alert_shown" + } + + data object CardReaderSoftwareUpdateFailed : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_software_update_failed" + } + + data object CardReaderSoftwareUpdateStarted : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_software_update_started" + } + + data object CardReaderSoftwareUpdateSuccess : PaymentFlowTrackerEvent() { + override val name: String = "card_reader_software_update_success" + } + + data object DisableCashOnDeliveryFailed : PaymentFlowTrackerEvent() { + override val name: String = "disable_cash_on_delivery_failed" + } + + data object DisableCashOnDeliverySuccess : PaymentFlowTrackerEvent() { + override val name: String = "disable_cash_on_delivery_success" + } + + data object EnableCashOnDeliveryFailed : PaymentFlowTrackerEvent() { + override val name: String = "enable_cash_on_delivery_failed" + } + + data object EnableCashOnDeliverySuccess : PaymentFlowTrackerEvent() { + override val name: String = "enable_cash_on_delivery_success" + } + + data object InPersonPaymentsLearnMoreTapped : PaymentFlowTrackerEvent() { + override val name: String = "in_person_payments_learn_more_tapped" + } + + data object ManageCardReadersAutomaticDisconnectBuiltInReader : PaymentFlowTrackerEvent() { + override val name: String = "manage_card_readers_automatic_disconnect_built_in_reader" + } + + data object PaymentsFlowOrderCollectPaymentTapped : PaymentFlowTrackerEvent() { + override val name: String = "payments_flow_order_collect_payment_tapped" + } + + data object PaymentsHubCashOnDeliveryToggled : PaymentFlowTrackerEvent() { + override val name: String = "payments_hub_cash_on_delivery_toggled" + } + + data object PaymentsHubCashOnDeliveryToggledLearnMoreTapped : PaymentFlowTrackerEvent() { + override val name: String = "payments_hub_cash_on_delivery_toggled_learn_more_tapped" + } + + data object PaymentsOnboardingDismissed : PaymentFlowTrackerEvent() { + override val name: String = "payments_onboarding_dismissed" + } + + data object PaymentsOnboardingShown : PaymentFlowTrackerEvent() { + override val name: String = "payments_onboarding_shown" + } + + data object ReceiptEmailFailed : PaymentFlowTrackerEvent() { + override val name: String = "receipt_email_failed" + } + + data object ReceiptEmailTapped : PaymentFlowTrackerEvent() { + override val name: String = "receipt_email_tapped" + } + + data object ReceiptPrintCanceled : PaymentFlowTrackerEvent() { + override val name: String = "receipt_print_canceled" + } + + data object ReceiptPrintFailed : PaymentFlowTrackerEvent() { + override val name: String = "receipt_print_failed" + } + + data object ReceiptPrintSuccess : PaymentFlowTrackerEvent() { + override val name: String = "receipt_print_success" + } + + data object ReceiptPrintTapped : PaymentFlowTrackerEvent() { + override val name: String = "receipt_print_tapped" + } + + data object ReceiptUrlFetchingFails : PaymentFlowTrackerEvent() { + override val name: String = "receipt_url_fetching_fails" + } + + data object ReceiptViewTapped : PaymentFlowTrackerEvent() { + override val name: String = "receipt_view_tapped" + } + + data object PaymentsFlowFailed : PaymentFlowTrackerEvent() { + override val name: String = "payments_flow_failed" + } + + data object PaymentsFlowCanceled : PaymentFlowTrackerEvent() { + override val name: String = "payments_flow_canceled" + } + + data object PaymentsFlowCollect : PaymentFlowTrackerEvent() { + override val name: String = "payments_flow_collect" + } + + data object PaymentsFlowCompleted : PaymentFlowTrackerEvent() { + override val name: String = "payments_flow_completed" + } + } } internal fun IAnalyticsEvent.addProperties(additionalProperties: Map) { From ecf9ce70a1b64fdf437567a47ee9893926a78271 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 12:08:44 +0100 Subject: [PATCH 07/18] Introduce app mode-specific PaymentsFlowTrackerEventProvider to replace AppMode --- .../woocommerce/android/di/AppModeModule.kt | 38 ++++++++++--------- .../com/woocommerce/android/ui/AppMode.kt | 6 --- .../payments/tracking/PaymentsFlowTracker.kt | 11 +++--- .../PaymentsFlowTrackerEventProvider.kt | 7 ++++ ...agementPaymentsFlowTrackerEventProvider.kt | 9 +++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 10 +++++ 6 files changed, 52 insertions(+), 29 deletions(-) delete mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt index 7dbf49a008f2..2e27585dcd87 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt @@ -3,10 +3,12 @@ package com.woocommerce.android.di import com.woocommerce.android.AppPrefsWrapper import com.woocommerce.android.analytics.AnalyticsTrackerWrapper import com.woocommerce.android.tools.SelectedSite -import com.woocommerce.android.ui.AppMode import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoProvider import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker +import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTrackerEventProvider +import com.woocommerce.android.ui.payments.tracking.StoreManagementPaymentsFlowTrackerEventProvider +import com.woocommerce.android.ui.woopos.util.analytics.WooPosPaymentsFlowTrackerEventProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -18,15 +20,15 @@ import javax.inject.Qualifier @InstallIn(ViewModelComponent::class, SingletonComponent::class) class AppModeModule { @Provides - fun provideAppMode(): AppMode = AppMode.StoreManagement + fun provideAppMode(): PaymentsFlowTrackerEventProvider = StoreManagementPaymentsFlowTrackerEventProvider() @Provides @PointOfSaleMode - fun providePointOfSaleMode(): AppMode = AppMode.PointOfSale + fun providePointOfSaleMode(): PaymentsFlowTrackerEventProvider = WooPosPaymentsFlowTrackerEventProvider() @Provides @StoreManagementMode - fun provideStoreManagementMode(): AppMode = AppMode.StoreManagement + fun provideStoreManagementMode(): PaymentsFlowTrackerEventProvider = StoreManagementPaymentsFlowTrackerEventProvider() @Provides @PointOfSaleMode @@ -37,14 +39,14 @@ class AppModeModule { selectedSite: SelectedSite, cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, paymentReceiptHelper: PaymentReceiptHelper, - @PointOfSaleMode appFlow: AppMode + @PointOfSaleMode paymentsFlowTrackerEventProvider: PaymentsFlowTrackerEventProvider, ): PaymentsFlowTracker = PaymentsFlowTracker( - trackerWrapper, - appPrefsWrapper, - selectedSite, - cardReaderTrackingInfoProvider, - paymentReceiptHelper, - appFlow + trackerWrapper = trackerWrapper, + appPrefsWrapper = appPrefsWrapper, + selectedSite = selectedSite, + cardReaderTrackingInfoProvider = cardReaderTrackingInfoProvider, + paymentReceiptHelper = paymentReceiptHelper, + eventProvider = paymentsFlowTrackerEventProvider, ) @Provides @@ -56,14 +58,14 @@ class AppModeModule { selectedSite: SelectedSite, cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, paymentReceiptHelper: PaymentReceiptHelper, - @StoreManagementMode appFlow: AppMode + @StoreManagementMode paymentsFlowTrackerEventProvider: PaymentsFlowTrackerEventProvider, ): PaymentsFlowTracker = PaymentsFlowTracker( - trackerWrapper, - appPrefsWrapper, - selectedSite, - cardReaderTrackingInfoProvider, - paymentReceiptHelper, - appFlow + trackerWrapper = trackerWrapper, + appPrefsWrapper = appPrefsWrapper, + selectedSite = selectedSite, + cardReaderTrackingInfoProvider = cardReaderTrackingInfoProvider, + paymentReceiptHelper = paymentReceiptHelper, + eventProvider = paymentsFlowTrackerEventProvider, ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt deleted file mode 100644 index 51acf2e83359..000000000000 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/AppMode.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.woocommerce.android.ui - -sealed class AppMode { - object PointOfSale : AppMode() - object StoreManagement : AppMode() -} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index f6b788f1484c..19945453353d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -1,5 +1,6 @@ package com.woocommerce.android.ui.payments.tracking +import android.util.Log import androidx.annotation.VisibleForTesting import com.woocommerce.android.AppPrefsWrapper import com.woocommerce.android.analytics.AnalyticsEvent @@ -13,7 +14,6 @@ import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_CONNECTION_ import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_COMPLETED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_FAILED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_NOT_COMPLETED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_STEP_SKIPPED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED @@ -66,13 +66,13 @@ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_PAYMENT_ import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_POS_ONBOARDING_STATE import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_REASON import com.woocommerce.android.analytics.AnalyticsTrackerWrapper +import com.woocommerce.android.analytics.IAnalyticsEvent import com.woocommerce.android.cardreader.connection.event.SoftwareUpdateStatus.Failed import com.woocommerce.android.cardreader.payments.CardInteracRefundStatus.RefundStatusErrorType import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPaymentStatusErrorType import com.woocommerce.android.cardreader.payments.CardPaymentStatus.CardPaymentStatusErrorType.Generic import com.woocommerce.android.tools.SelectedSite import com.woocommerce.android.tracker.OrderDurationRecorder -import com.woocommerce.android.ui.AppMode import com.woocommerce.android.ui.payments.cardreader.cardReaderBatteryLevelPercent import com.woocommerce.android.ui.payments.cardreader.onboarding.CardReaderOnboardingState import com.woocommerce.android.ui.payments.cardreader.onboarding.OnboardingCtaReasonTapped @@ -91,11 +91,11 @@ class PaymentsFlowTracker @Inject constructor( private val selectedSite: SelectedSite, private val cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, private val paymentReceiptHelper: PaymentReceiptHelper, - private val appFlow: AppMode, + private val eventProvider: PaymentsFlowTrackerEventProvider, ) { @VisibleForTesting fun track( - stat: AnalyticsEvent, + stat: IAnalyticsEvent, properties: MutableMap = mutableMapOf(), errorType: String? = null, errorDescription: String? = null, @@ -213,7 +213,7 @@ class PaymentsFlowTracker @Inject constructor( } fun trackOnboardingLearnMoreTapped() { - track(CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED) + track(eventProvider.CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED) } fun trackOnboardingState(state: CardReaderOnboardingState) { @@ -409,6 +409,7 @@ class PaymentsFlowTracker @Inject constructor( } fun trackPaymentSucceeded() { + Log.d("PaymentsFlowTracker", "trackPaymentSucceeded: ${this.eventProvider}") track(CARD_PRESENT_COLLECT_PAYMENT_SUCCESS, getAndResetFlowsDuration()) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt new file mode 100644 index 000000000000..24771450c486 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,7 @@ +package com.woocommerce.android.ui.payments.tracking + +import com.woocommerce.android.analytics.IAnalyticsEvent + +interface PaymentsFlowTrackerEventProvider { + val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt new file mode 100644 index 000000000000..4417a17d7319 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,9 @@ +package com.woocommerce.android.ui.payments.tracking + +import com.woocommerce.android.analytics.AnalyticsEvent +import com.woocommerce.android.analytics.IAnalyticsEvent + +class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider { + override val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt new file mode 100644 index 000000000000..75f55d65ef74 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,10 @@ +package com.woocommerce.android.ui.woopos.util.analytics + +import com.woocommerce.android.analytics.IAnalyticsEvent +import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTrackerEventProvider +import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEvent.PaymentFlowTrackerEvent + +class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider { + override val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingLearnMoreTapped +} From b571007610ae7de8480619410fd6a3b53d2bca21 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 12:42:09 +0100 Subject: [PATCH 08/18] Access analytics events via provider --- .../ui/payments/tracking/PaymentsFlowTracker.kt | 15 +++++---------- .../tracking/PaymentsFlowTrackerEventProvider.kt | 5 +++++ ...eManagementPaymentsFlowTrackerEventProvider.kt | 15 +++++++++++++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 15 +++++++++++++++ 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index 19945453353d..b87dd813207c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -11,11 +11,6 @@ import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAY import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_FAILED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_SUCCESS import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_COMPLETED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_NOT_COMPLETED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_ONBOARDING_STEP_SKIPPED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED @@ -218,9 +213,9 @@ class PaymentsFlowTracker @Inject constructor( fun trackOnboardingState(state: CardReaderOnboardingState) { when (state) { - is CardReaderOnboardingState.OnboardingCompleted -> track(CARD_PRESENT_ONBOARDING_COMPLETED) + is CardReaderOnboardingState.OnboardingCompleted -> track(eventProvider.CARD_PRESENT_ONBOARDING_COMPLETED) else -> getOnboardingNotCompletedReason(state)?.let { - track(CARD_PRESENT_ONBOARDING_NOT_COMPLETED, mutableMapOf(KEY_REASON to it)) + track(eventProvider.CARD_PRESENT_ONBOARDING_NOT_COMPLETED, mutableMapOf(KEY_REASON to it)) } } } @@ -228,7 +223,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackOnboardingSkippedState(state: CardReaderOnboardingState) { getOnboardingNotCompletedReason(state)?.let { track( - CARD_PRESENT_ONBOARDING_STEP_SKIPPED, + eventProvider.CARD_PRESENT_ONBOARDING_STEP_SKIPPED, mutableMapOf( KEY_REASON to it, "remind_later" to false @@ -239,14 +234,14 @@ class PaymentsFlowTracker @Inject constructor( fun trackOnboardingCtaTapped(reason: OnboardingCtaReasonTapped) { track( - CARD_PRESENT_ONBOARDING_CTA_TAPPED, + eventProvider.CARD_PRESENT_ONBOARDING_CTA_TAPPED, mutableMapOf(KEY_REASON to reason.value) ) } fun trackOnboardingCtaFailed(reason: OnboardingCtaReasonTapped, description: String) { track( - CARD_PRESENT_ONBOARDING_CTA_FAILED, + eventProvider.CARD_PRESENT_ONBOARDING_CTA_FAILED, mutableMapOf( KEY_REASON to reason.value, KEY_ERROR_DESC to description, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index 24771450c486..b0e7d79877c4 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -4,4 +4,9 @@ import com.woocommerce.android.analytics.IAnalyticsEvent interface PaymentsFlowTrackerEventProvider { val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent + val CARD_PRESENT_ONBOARDING_COMPLETED: IAnalyticsEvent + val CARD_PRESENT_ONBOARDING_NOT_COMPLETED: IAnalyticsEvent + val CARD_PRESENT_ONBOARDING_STEP_SKIPPED: IAnalyticsEvent + val CARD_PRESENT_ONBOARDING_CTA_TAPPED: IAnalyticsEvent + val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index 4417a17d7319..60dba949262e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -6,4 +6,19 @@ import com.woocommerce.android.analytics.IAnalyticsEvent class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider { override val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED + + override val CARD_PRESENT_ONBOARDING_COMPLETED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_COMPLETED + + override val CARD_PRESENT_ONBOARDING_NOT_COMPLETED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_NOT_COMPLETED + + override val CARD_PRESENT_ONBOARDING_STEP_SKIPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_STEP_SKIPPED + + override val CARD_PRESENT_ONBOARDING_CTA_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_TAPPED + + override val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_FAILED } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index 75f55d65ef74..da335946382b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -7,4 +7,19 @@ import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEvent.Pay class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider { override val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent get() = PaymentFlowTrackerEvent.CardPresentOnboardingLearnMoreTapped + + override val CARD_PRESENT_ONBOARDING_COMPLETED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingCompleted + + override val CARD_PRESENT_ONBOARDING_NOT_COMPLETED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingNotCompleted + + override val CARD_PRESENT_ONBOARDING_STEP_SKIPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingStepSkipped + + override val CARD_PRESENT_ONBOARDING_CTA_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingCtaTapped + + override val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentOnboardingCtaFailed } From ae45e60038dd18c5ce9fda57b828b9776ef347db Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 12:54:54 +0100 Subject: [PATCH 09/18] Access analytics events via provider --- .../ui/payments/tracking/PaymentsFlowTracker.kt | 8 ++++---- .../tracking/PaymentsFlowTrackerEventProvider.kt | 4 ++++ ...toreManagementPaymentsFlowTrackerEventProvider.kt | 12 ++++++++++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 12 ++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index b87dd813207c..91f9facca074 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -251,7 +251,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackCashOnDeliveryToggled(isEnabled: Boolean) { track( - PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED, + eventProvider.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED, mutableMapOf( KEY_IS_ENABLED to isEnabled ) @@ -260,7 +260,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackCashOnDeliveryEnabledSuccess(source: CashOnDeliverySource) { track( - ENABLE_CASH_ON_DELIVERY_SUCCESS, + eventProvider.ENABLE_CASH_ON_DELIVERY_SUCCESS, mutableMapOf( KEY_CASH_ON_DELIVERY_SOURCE to source.toString() ) @@ -269,7 +269,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackCashOnDeliveryEnabledFailure(source: CashOnDeliverySource, errorMessage: String?) { track( - ENABLE_CASH_ON_DELIVERY_FAILED, + eventProvider.ENABLE_CASH_ON_DELIVERY_FAILED, errorDescription = errorMessage, properties = mutableMapOf( KEY_CASH_ON_DELIVERY_SOURCE to source.toString() @@ -279,7 +279,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackCashOnDeliveryDisabledSuccess(source: CashOnDeliverySource) { track( - DISABLE_CASH_ON_DELIVERY_SUCCESS, + eventProvider.DISABLE_CASH_ON_DELIVERY_SUCCESS, mutableMapOf( KEY_CASH_ON_DELIVERY_SOURCE to source.toString() ) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index b0e7d79877c4..c621a4e7dc4c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -9,4 +9,8 @@ interface PaymentsFlowTrackerEventProvider { val CARD_PRESENT_ONBOARDING_STEP_SKIPPED: IAnalyticsEvent val CARD_PRESENT_ONBOARDING_CTA_TAPPED: IAnalyticsEvent val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent + val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED: IAnalyticsEvent + val ENABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + val ENABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index 60dba949262e..0fa88ac479b4 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -21,4 +21,16 @@ class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEvent override val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent get() = AnalyticsEvent.CARD_PRESENT_ONBOARDING_CTA_FAILED + + override val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED + + override val ENABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.ENABLE_CASH_ON_DELIVERY_SUCCESS + + override val ENABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.ENABLE_CASH_ON_DELIVERY_FAILED + + override val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.DISABLE_CASH_ON_DELIVERY_SUCCESS } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index da335946382b..cd23151f6551 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -22,4 +22,16 @@ class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider override val CARD_PRESENT_ONBOARDING_CTA_FAILED: IAnalyticsEvent get() = PaymentFlowTrackerEvent.CardPresentOnboardingCtaFailed + + override val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsHubCashOnDeliveryToggled + + override val ENABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.EnableCashOnDeliverySuccess + + override val ENABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.EnableCashOnDeliveryFailed + + override val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.DisableCashOnDeliverySuccess } From 4a729d380106e130090a218e69aab0576709113b Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 13:00:44 +0100 Subject: [PATCH 10/18] Access analytics events via provider --- .../ui/payments/tracking/PaymentsFlowTracker.kt | 17 +++++------------ .../PaymentsFlowTrackerEventProvider.kt | 4 ++++ ...anagementPaymentsFlowTrackerEventProvider.kt | 12 ++++++++++++ .../util/analytics/WooPosAnalyticsEvent.kt | 4 ++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 12 ++++++++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index 91f9facca074..aa7e0b71f4ba 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -31,17 +31,10 @@ import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_LOCATION_SUC import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_STARTED import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.DISABLE_CASH_ON_DELIVERY_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.DISABLE_CASH_ON_DELIVERY_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.ENABLE_CASH_ON_DELIVERY_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.ENABLE_CASH_ON_DELIVERY_SUCCESS import com.woocommerce.android.analytics.AnalyticsEvent.IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED import com.woocommerce.android.analytics.AnalyticsEvent.MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED -import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_ONBOARDING_DISMISSED import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_ONBOARDING_SHOWN import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_EMAIL_FAILED @@ -288,7 +281,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackCashOnDeliveryDisabledFailure(source: CashOnDeliverySource, errorMessage: String?) { track( - DISABLE_CASH_ON_DELIVERY_FAILED, + eventProvider.DISABLE_CASH_ON_DELIVERY_FAILED, errorDescription = errorMessage, properties = mutableMapOf( KEY_CASH_ON_DELIVERY_SOURCE to source.toString() @@ -297,7 +290,7 @@ class PaymentsFlowTracker @Inject constructor( } fun trackCashOnDeliveryLearnMoreTapped() { - track(PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED) + track(eventProvider.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED) } fun trackPaymentGatewaySelected(pluginType: PluginType) { @@ -306,13 +299,13 @@ class PaymentsFlowTracker @Inject constructor( STRIPE_EXTENSION_GATEWAY -> "woocommerce-stripe-gateway" } track( - AnalyticsEvent.CARD_PRESENT_PAYMENT_GATEWAY_SELECTED, + eventProvider.CARD_PRESENT_PAYMENT_GATEWAY_SELECTED, mutableMapOf(KEY_PAYMENT_GATEWAY to preferredPlugin) ) } fun trackSoftwareUpdateStarted(requiredUpdate: Boolean) { - trackSoftwareUpdateEvent(CARD_READER_SOFTWARE_UPDATE_STARTED, requiredUpdate) + trackSoftwareUpdateEvent(eventProvider.CARD_READER_SOFTWARE_UPDATE_STARTED, requiredUpdate) } fun trackSoftwareUpdateAlertShown() { @@ -498,7 +491,7 @@ class PaymentsFlowTracker @Inject constructor( } private fun trackSoftwareUpdateEvent( - event: AnalyticsEvent, + event: IAnalyticsEvent, requiredUpdate: Boolean, errorDescription: String? = null, ) { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index c621a4e7dc4c..0e35bd86d51d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -13,4 +13,8 @@ interface PaymentsFlowTrackerEventProvider { val ENABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent val ENABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent + val DISABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED: IAnalyticsEvent + val CARD_PRESENT_PAYMENT_GATEWAY_SELECTED: IAnalyticsEvent + val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index 0fa88ac479b4..fd24e9f550ad 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -33,4 +33,16 @@ class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEvent override val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent get() = AnalyticsEvent.DISABLE_CASH_ON_DELIVERY_SUCCESS + + override val DISABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.DISABLE_CASH_ON_DELIVERY_FAILED + + override val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED + + override val CARD_PRESENT_PAYMENT_GATEWAY_SELECTED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_PAYMENT_GATEWAY_SELECTED + + override val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_STARTED } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt index f1164d4ff373..73a703e25264 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosAnalyticsEvent.kt @@ -94,6 +94,10 @@ sealed class WooPosAnalyticsEvent : IAnalyticsEvent { override val name: String = "card_present_payment_failed_contact_support_tapped" } + data object CardPresentPaymentGatewaySelected : PaymentFlowTrackerEvent() { + override val name: String = "card_present_payment_gateway_selected" + } + data object CardPresentSelectReaderTypeBluetoothTapped : PaymentFlowTrackerEvent() { override val name: String = "card_present_select_reader_type_bluetooth_tapped" } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index cd23151f6551..b214f7b166b9 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -34,4 +34,16 @@ class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider override val DISABLE_CASH_ON_DELIVERY_SUCCESS: IAnalyticsEvent get() = PaymentFlowTrackerEvent.DisableCashOnDeliverySuccess + + override val DISABLE_CASH_ON_DELIVERY_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.DisableCashOnDeliveryFailed + + override val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsHubCashOnDeliveryToggledLearnMoreTapped + + override val CARD_PRESENT_PAYMENT_GATEWAY_SELECTED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentPaymentGatewaySelected + + override val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateStarted } From fca1c49100bcf5c80d7042bcc6eb26c056fced85 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 13:05:18 +0100 Subject: [PATCH 11/18] Access analytics events via provider --- .../ui/payments/tracking/PaymentsFlowTracker.kt | 10 +++++----- .../tracking/PaymentsFlowTrackerEventProvider.kt | 4 ++++ ...oreManagementPaymentsFlowTrackerEventProvider.kt | 13 +++++++++++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 13 +++++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index aa7e0b71f4ba..375f8923ba2d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -309,26 +309,26 @@ class PaymentsFlowTracker @Inject constructor( } fun trackSoftwareUpdateAlertShown() { - track(CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN) + track(eventProvider.CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN) } fun trackSoftwareUpdateAlertInstallClicked() { - track(CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED) + track(eventProvider.CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED) } fun trackSoftwareUpdateUnknownStatus() { track( - CARD_READER_SOFTWARE_UPDATE_FAILED, + eventProvider.CARD_READER_SOFTWARE_UPDATE_FAILED, errorDescription = "Unknown software update status" ) } fun trackSoftwareUpdateSucceeded(requiredUpdate: Boolean) { - trackSoftwareUpdateEvent(CARD_READER_SOFTWARE_UPDATE_SUCCESS, requiredUpdate) + trackSoftwareUpdateEvent(eventProvider.CARD_READER_SOFTWARE_UPDATE_SUCCESS, requiredUpdate) } fun trackSoftwareUpdateFailed(status: Failed, requiredUpdate: Boolean) { - trackSoftwareUpdateEvent(CARD_READER_SOFTWARE_UPDATE_FAILED, requiredUpdate, status.message) + trackSoftwareUpdateEvent(eventProvider.CARD_READER_SOFTWARE_UPDATE_FAILED, requiredUpdate, status.message) } fun trackSoftwareUpdateCancelled(requiredUpdate: Boolean) { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index 0e35bd86d51d..9f0727803179 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -17,4 +17,8 @@ interface PaymentsFlowTrackerEventProvider { val PAYMENTS_HUB_CASH_ON_DELIVERY_TOGGLED_LEARN_MORE_TAPPED: IAnalyticsEvent val CARD_PRESENT_PAYMENT_GATEWAY_SELECTED: IAnalyticsEvent val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent + val CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN: IAnalyticsEvent + val CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED: IAnalyticsEvent + val CARD_READER_SOFTWARE_UPDATE_FAILED: IAnalyticsEvent + val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index fd24e9f550ad..22b7db453b04 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -45,4 +45,17 @@ class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEvent override val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_STARTED + + override val CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN + + override val CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED + + override val CARD_READER_SOFTWARE_UPDATE_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_FAILED + + override val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_SUCCESS + } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index b214f7b166b9..64cc94d861a7 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -46,4 +46,17 @@ class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider override val CARD_READER_SOFTWARE_UPDATE_STARTED: IAnalyticsEvent get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateStarted + + override val CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateAlertShown + + override val CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateAlertInstallClicked + + override val CARD_READER_SOFTWARE_UPDATE_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateFailed + + override val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateSuccess + } From fa9274ebb9bc8be1c0d5fb703ca29641286d46a7 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 13:09:04 +0100 Subject: [PATCH 12/18] Access analytics events via provider --- .../android/ui/payments/tracking/PaymentsFlowTracker.kt | 4 ++-- .../ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index 375f8923ba2d..fa5ce4b3c3b5 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -333,7 +333,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackSoftwareUpdateCancelled(requiredUpdate: Boolean) { trackSoftwareUpdateEvent( - CARD_READER_SOFTWARE_UPDATE_FAILED, + eventProvider.CARD_READER_SOFTWARE_UPDATE_FAILED, requiredUpdate, "User manually cancelled the flow" ) @@ -341,7 +341,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackReadersDiscovered(count: Int) { track( - CARD_READER_DISCOVERY_READER_DISCOVERED, + eventProvider.CARD_READER_DISCOVERY_READER_DISCOVERED, mutableMapOf("reader_count" to count) ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index 9f0727803179..dad1404a93be 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -21,4 +21,5 @@ interface PaymentsFlowTrackerEventProvider { val CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED: IAnalyticsEvent val CARD_READER_SOFTWARE_UPDATE_FAILED: IAnalyticsEvent val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent + val CARD_READER_DISCOVERY_READER_DISCOVERED: IAnalyticsEvent } From 4f88246350986ebb53e528cbdd54b71c5d9374d4 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 13:11:52 +0100 Subject: [PATCH 13/18] Access analytics events via provider --- .../payments/tracking/PaymentsFlowTracker.kt | 10 +++++----- .../PaymentsFlowTrackerEventProvider.kt | 5 +++++ ...nagementPaymentsFlowTrackerEventProvider.kt | 18 ++++++++++++++++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 18 ++++++++++++++++++ 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index fa5ce4b3c3b5..80a371dcdc41 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -348,25 +348,25 @@ class PaymentsFlowTracker @Inject constructor( fun trackReaderDiscoveryFailed(errorMessage: String) { track( - CARD_READER_DISCOVERY_FAILED, + eventProvider.CARD_READER_DISCOVERY_FAILED, errorDescription = errorMessage ) } fun trackDiscoveryTapped() { - track(CARD_READER_DISCOVERY_TAPPED) + track(eventProvider.CARD_READER_DISCOVERY_TAPPED) } fun trackAutoConnectionStarted() { - track(CARD_READER_AUTO_CONNECTION_STARTED) + track(eventProvider.CARD_READER_AUTO_CONNECTION_STARTED) } fun trackOnConnectTapped() { - track(CARD_READER_CONNECTION_TAPPED) + track(eventProvider.CARD_READER_CONNECTION_TAPPED) } fun trackFetchingLocationSucceeded() { - track(CARD_READER_LOCATION_SUCCESS) + track(eventProvider.CARD_READER_LOCATION_SUCCESS) } fun trackFetchingLocationFailed(errorDescription: String?) { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index dad1404a93be..a75f33fc6520 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -22,4 +22,9 @@ interface PaymentsFlowTrackerEventProvider { val CARD_READER_SOFTWARE_UPDATE_FAILED: IAnalyticsEvent val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent val CARD_READER_DISCOVERY_READER_DISCOVERED: IAnalyticsEvent + val CARD_READER_DISCOVERY_FAILED: IAnalyticsEvent + val CARD_READER_DISCOVERY_TAPPED: IAnalyticsEvent + val CARD_READER_AUTO_CONNECTION_STARTED: IAnalyticsEvent + val CARD_READER_CONNECTION_TAPPED: IAnalyticsEvent + val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index 22b7db453b04..568c9ba98a2b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -58,4 +58,22 @@ class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEvent override val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent get() = AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_SUCCESS + override val CARD_READER_DISCOVERY_READER_DISCOVERED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_DISCOVERY_READER_DISCOVERED + + override val CARD_READER_DISCOVERY_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_DISCOVERY_FAILED + + override val CARD_READER_DISCOVERY_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_DISCOVERY_TAPPED + + override val CARD_READER_AUTO_CONNECTION_STARTED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_AUTO_CONNECTION_STARTED + + override val CARD_READER_CONNECTION_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_CONNECTION_TAPPED + + override val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_LOCATION_SUCCESS + } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index 64cc94d861a7..93ec769e18f9 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -59,4 +59,22 @@ class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider override val CARD_READER_SOFTWARE_UPDATE_SUCCESS: IAnalyticsEvent get() = PaymentFlowTrackerEvent.CardReaderSoftwareUpdateSuccess + override val CARD_READER_DISCOVERY_READER_DISCOVERED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderDiscoveryReaderDiscovered + + override val CARD_READER_DISCOVERY_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderDiscoveryFailed + + override val CARD_READER_DISCOVERY_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderDiscoveryTapped + + override val CARD_READER_AUTO_CONNECTION_STARTED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderAutoConnectionStarted + + override val CARD_READER_CONNECTION_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderConnectionTapped + + override val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderLocationSuccess + } From 564813fdc287f4780141ff8cfe887fe343a67e41 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 13:30:16 +0100 Subject: [PATCH 14/18] Access analytics events via provider --- .../woocommerce/android/di/AppModeModule.kt | 3 +- .../payments/tracking/PaymentsFlowTracker.kt | 118 ++++++------------ .../PaymentsFlowTrackerEventProvider.kt | 36 ++++++ ...agementPaymentsFlowTrackerEventProvider.kt | 104 +++++++++++++++ .../WooPosPaymentsFlowTrackerEventProvider.kt | 104 +++++++++++++++ 5 files changed, 283 insertions(+), 82 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt index 2e27585dcd87..02aa11e790da 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt @@ -28,7 +28,8 @@ class AppModeModule { @Provides @StoreManagementMode - fun provideStoreManagementMode(): PaymentsFlowTrackerEventProvider = StoreManagementPaymentsFlowTrackerEventProvider() + fun provideStoreManagementMode(): PaymentsFlowTrackerEventProvider = + StoreManagementPaymentsFlowTrackerEventProvider() @Provides @PointOfSaleMode diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt index 80a371dcdc41..2e2d58411c17 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTracker.kt @@ -1,50 +1,7 @@ package com.woocommerce.android.ui.payments.tracking -import android.util.Log import androidx.annotation.VisibleForTesting import com.woocommerce.android.AppPrefsWrapper -import com.woocommerce.android.analytics.AnalyticsEvent -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_CANCELLED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_AUTOMATIC_DISCONNECT -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_AUTO_CONNECTION_STARTED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_CONNECTION_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_CONNECTION_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_CONNECTION_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_DISCONNECT_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_DISCOVERY_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_DISCOVERY_READER_DISCOVERED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_DISCOVERY_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_LOCATION_FAILURE -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_LOCATION_MISSING_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_LOCATION_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_INSTALL_CLICKED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_ALERT_SHOWN -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.CARD_READER_SOFTWARE_UPDATE_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER -import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_ONBOARDING_DISMISSED -import com.woocommerce.android.analytics.AnalyticsEvent.PAYMENTS_ONBOARDING_SHOWN -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_EMAIL_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_EMAIL_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_CANCELED -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_FAILED -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_SUCCESS -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_PRINT_TAPPED -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_URL_FETCHING_FAILS -import com.woocommerce.android.analytics.AnalyticsEvent.RECEIPT_VIEW_TAPPED import com.woocommerce.android.analytics.AnalyticsTracker import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_CASH_ON_DELIVERY_SOURCE import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_ERROR_DESC @@ -371,38 +328,37 @@ class PaymentsFlowTracker @Inject constructor( fun trackFetchingLocationFailed(errorDescription: String?) { track( - CARD_READER_LOCATION_FAILURE, + eventProvider.CARD_READER_LOCATION_FAILURE, errorDescription = errorDescription, ) } fun trackMissingLocationTapped() { - track(CARD_READER_LOCATION_MISSING_TAPPED) + track(eventProvider.CARD_READER_LOCATION_MISSING_TAPPED) } fun trackConnectionFailed() { - track(CARD_READER_CONNECTION_FAILED) + track(eventProvider.CARD_READER_CONNECTION_FAILED) } fun trackConnectionSucceeded() { - track(CARD_READER_CONNECTION_SUCCESS) + track(eventProvider.CARD_READER_CONNECTION_SUCCESS) } fun trackPaymentFailed(errorMessage: String, errorType: CardPaymentStatusErrorType = Generic) { track( - CARD_PRESENT_COLLECT_PAYMENT_FAILED, + eventProvider.CARD_PRESENT_COLLECT_PAYMENT_FAILED, errorType = errorType.toString(), errorDescription = errorMessage ) } fun trackPaymentSucceeded() { - Log.d("PaymentsFlowTracker", "trackPaymentSucceeded: ${this.eventProvider}") - track(CARD_PRESENT_COLLECT_PAYMENT_SUCCESS, getAndResetFlowsDuration()) + track(eventProvider.CARD_PRESENT_COLLECT_PAYMENT_SUCCESS, getAndResetFlowsDuration()) } fun trackInteracPaymentSucceeded() { - track(CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS, getAndResetFlowsDuration()) + track(eventProvider.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS, getAndResetFlowsDuration()) } fun trackInteracPaymentFailed( @@ -411,7 +367,7 @@ class PaymentsFlowTracker @Inject constructor( errorType: RefundStatusErrorType = RefundStatusErrorType.Generic ) { track( - CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED, + eventProvider.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED, properties = mutableMapOf("orderId" to orderId), errorType = errorType.toString(), errorDescription = errorMessage @@ -420,42 +376,42 @@ class PaymentsFlowTracker @Inject constructor( fun trackPrintReceiptTapped() { track( - RECEIPT_PRINT_TAPPED, + eventProvider.RECEIPT_PRINT_TAPPED, properties = mutableMapOf(getReceiptSource()) ) } fun trackEmailReceiptTapped() { track( - RECEIPT_EMAIL_TAPPED, + eventProvider.RECEIPT_EMAIL_TAPPED, properties = mutableMapOf(getReceiptSource()) ) } fun trackPrintReceiptCancelled() { track( - RECEIPT_PRINT_CANCELED, + eventProvider.RECEIPT_PRINT_CANCELED, properties = mutableMapOf(getReceiptSource()) ) } fun trackPrintReceiptFailed() { track( - RECEIPT_PRINT_FAILED, + eventProvider.RECEIPT_PRINT_FAILED, properties = mutableMapOf(getReceiptSource()) ) } fun trackPrintReceiptSucceeded() { track( - RECEIPT_PRINT_SUCCESS, + eventProvider.RECEIPT_PRINT_SUCCESS, properties = mutableMapOf(getReceiptSource()) ) } fun trackReceiptViewTapped(properties: Map) { track( - RECEIPT_VIEW_TAPPED, + eventProvider.RECEIPT_VIEW_TAPPED, properties = properties.toMutableMap().also { it.putAll( mapOf(getReceiptSource()) @@ -466,7 +422,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackReceiptUrlFetchingFails(errorDescription: String) { track( - RECEIPT_URL_FETCHING_FAILS, + eventProvider.RECEIPT_URL_FETCHING_FAILS, properties = mutableMapOf(getReceiptSource()), errorDescription = errorDescription, ) @@ -474,20 +430,20 @@ class PaymentsFlowTracker @Inject constructor( fun trackPaymentCancelled(currentPaymentState: String?) { track( - CARD_PRESENT_COLLECT_PAYMENT_CANCELLED, + eventProvider.CARD_PRESENT_COLLECT_PAYMENT_CANCELLED, errorDescription = "User manually cancelled the payment during state $currentPaymentState" ) } fun trackCollectPaymentTapped(deviceType: String) { trackerWrapper.track( - PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED, + eventProvider.PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED, mapOf(KEY_HORIZONTAL_SIZE_CLASS to deviceType) ) } fun trackDisconnectTapped() { - track(CARD_READER_DISCONNECT_TAPPED) + track(eventProvider.CARD_READER_DISCONNECT_TAPPED) } private fun trackSoftwareUpdateEvent( @@ -507,32 +463,32 @@ class PaymentsFlowTracker @Inject constructor( fun trackInteracRefundCancelled(currentRefundState: String?) { track( - CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED, + eventProvider.CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED, errorDescription = "User manually cancelled the payment during state $currentRefundState" ) } fun trackLearnMoreConnectionClicked() { - track(CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED) + track(eventProvider.CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED) } fun trackIPPLearnMoreClicked(source: String) { track( - stat = IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED, + stat = eventProvider.IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED, properties = mutableMapOf(AnalyticsTracker.IPP_LEARN_MORE_SOURCE to source) ) } fun trackSelectReaderTypeBuiltInTapped() { - track(CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED) + track(eventProvider.CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED) } fun trackSelectReaderTypeBluetoothTapped() { - track(CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED) + track(eventProvider.CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED) } fun trackManageCardReadersAutomaticDisconnectOfBuiltInReader() { - track(MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER) + track(eventProvider.MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER) } fun trackTapToPayNotAvailableReason( @@ -540,7 +496,7 @@ class PaymentsFlowTracker @Inject constructor( source: String, ) { track( - CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE, + eventProvider.CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE, properties = mutableMapOf( KEY_REASON to reason::class.java.simpleName, AnalyticsTracker.KEY_SOURCE to source, @@ -549,20 +505,20 @@ class PaymentsFlowTracker @Inject constructor( } fun trackAutomaticReadDisconnectWhenConnectedAnotherType() { - track(CARD_READER_AUTOMATIC_DISCONNECT) + track(eventProvider.CARD_READER_AUTOMATIC_DISCONNECT) } fun trackPaymentFailedContactSupportTapped() { - track(CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED) + track(eventProvider.CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED) } fun trackPaymentFailedEnabledNfcTapped() { - track(CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED) + track(eventProvider.CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED) } fun trackPaymentsFlowFailed(source: String, flow: String) { track( - AnalyticsEvent.PAYMENTS_FLOW_FAILED, + eventProvider.PAYMENTS_FLOW_FAILED, properties = mutableMapOf( AnalyticsTracker.KEY_SOURCE to source, AnalyticsTracker.KEY_FLOW to flow, @@ -572,7 +528,7 @@ class PaymentsFlowTracker @Inject constructor( fun trackPaymentsFlowCanceled(flow: String) { track( - AnalyticsEvent.PAYMENTS_FLOW_CANCELED, + eventProvider.PAYMENTS_FLOW_CANCELED, properties = mutableMapOf(AnalyticsTracker.KEY_FLOW to flow) ) } @@ -585,7 +541,7 @@ class PaymentsFlowTracker @Inject constructor( timeElapsed: Long?, ) { track( - AnalyticsEvent.PAYMENTS_FLOW_COLLECT, + eventProvider.PAYMENTS_FLOW_COLLECT, properties = mutableMapOf( AnalyticsTracker.KEY_ORDER_ID to orderId, AnalyticsTracker.KEY_FLOW to flow, @@ -609,7 +565,7 @@ class PaymentsFlowTracker @Inject constructor( amountNormalized: Long, ) { track( - AnalyticsEvent.PAYMENTS_FLOW_COMPLETED, + eventProvider.PAYMENTS_FLOW_COMPLETED, properties = mutableMapOf( AnalyticsTracker.KEY_FLOW to flow, AnalyticsTracker.KEY_PAYMENT_METHOD to paymentMethod, @@ -624,7 +580,7 @@ class PaymentsFlowTracker @Inject constructor( when (sharingResult) { is PaymentReceiptShare.ReceiptShareResult.Error.FileCreation -> { track( - RECEIPT_EMAIL_FAILED, + eventProvider.RECEIPT_EMAIL_FAILED, errorType = "file_creation_failed", errorDescription = "File creation failed", properties = mutableMapOf(getReceiptSource()) @@ -633,7 +589,7 @@ class PaymentsFlowTracker @Inject constructor( is PaymentReceiptShare.ReceiptShareResult.Error.FileDownload -> { track( - RECEIPT_EMAIL_FAILED, + eventProvider.RECEIPT_EMAIL_FAILED, errorType = "file_download_failed", errorDescription = "File download failed", properties = mutableMapOf(getReceiptSource()) @@ -642,7 +598,7 @@ class PaymentsFlowTracker @Inject constructor( is PaymentReceiptShare.ReceiptShareResult.Error.Sharing -> { track( - RECEIPT_EMAIL_FAILED, + eventProvider.RECEIPT_EMAIL_FAILED, errorType = "no_app_found", errorDescription = sharingResult.exception.message, properties = mutableMapOf(getReceiptSource()) @@ -653,14 +609,14 @@ class PaymentsFlowTracker @Inject constructor( fun trackOnboardingShownInPosFlow(state: CardReaderOnboardingState) { track( - PAYMENTS_ONBOARDING_SHOWN, + eventProvider.PAYMENTS_ONBOARDING_SHOWN, mutableMapOf(KEY_POS_ONBOARDING_STATE to (getOnboardingNotCompletedReason(state) ?: "completed")) ) } fun trackOnboardingDismissedInPosFlow(state: CardReaderOnboardingState) { track( - PAYMENTS_ONBOARDING_DISMISSED, + eventProvider.PAYMENTS_ONBOARDING_DISMISSED, mutableMapOf(KEY_POS_ONBOARDING_STATE to (getOnboardingNotCompletedReason(state) ?: "completed")) ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt index a75f33fc6520..8a6a6382c963 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -2,6 +2,7 @@ package com.woocommerce.android.ui.payments.tracking import com.woocommerce.android.analytics.IAnalyticsEvent +@Suppress("VariableNaming") interface PaymentsFlowTrackerEventProvider { val CARD_PRESENT_ONBOARDING_LEARN_MORE_TAPPED: IAnalyticsEvent val CARD_PRESENT_ONBOARDING_COMPLETED: IAnalyticsEvent @@ -27,4 +28,39 @@ interface PaymentsFlowTrackerEventProvider { val CARD_READER_AUTO_CONNECTION_STARTED: IAnalyticsEvent val CARD_READER_CONNECTION_TAPPED: IAnalyticsEvent val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent + val CARD_READER_LOCATION_FAILURE: IAnalyticsEvent + val CARD_READER_LOCATION_MISSING_TAPPED: IAnalyticsEvent + val CARD_READER_CONNECTION_FAILED: IAnalyticsEvent + val CARD_READER_CONNECTION_SUCCESS: IAnalyticsEvent + val CARD_PRESENT_COLLECT_PAYMENT_FAILED: IAnalyticsEvent + val CARD_PRESENT_COLLECT_PAYMENT_SUCCESS: IAnalyticsEvent + val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS: IAnalyticsEvent + val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED: IAnalyticsEvent + val RECEIPT_PRINT_TAPPED: IAnalyticsEvent + val RECEIPT_EMAIL_TAPPED: IAnalyticsEvent + val RECEIPT_PRINT_CANCELED: IAnalyticsEvent + val RECEIPT_PRINT_FAILED: IAnalyticsEvent + val RECEIPT_PRINT_SUCCESS: IAnalyticsEvent + val RECEIPT_VIEW_TAPPED: IAnalyticsEvent + val RECEIPT_URL_FETCHING_FAILS: IAnalyticsEvent + val CARD_PRESENT_COLLECT_PAYMENT_CANCELLED: IAnalyticsEvent + val PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED: IAnalyticsEvent + val CARD_READER_DISCONNECT_TAPPED: IAnalyticsEvent + val CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED: IAnalyticsEvent + val CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED: IAnalyticsEvent + val IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED: IAnalyticsEvent + val CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED: IAnalyticsEvent + val CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED: IAnalyticsEvent + val MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER: IAnalyticsEvent + val CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE: IAnalyticsEvent + val CARD_READER_AUTOMATIC_DISCONNECT: IAnalyticsEvent + val CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED: IAnalyticsEvent + val CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED: IAnalyticsEvent + val PAYMENTS_FLOW_FAILED: IAnalyticsEvent + val PAYMENTS_FLOW_CANCELED: IAnalyticsEvent + val PAYMENTS_FLOW_COLLECT: IAnalyticsEvent + val PAYMENTS_FLOW_COMPLETED: IAnalyticsEvent + val RECEIPT_EMAIL_FAILED: IAnalyticsEvent + val PAYMENTS_ONBOARDING_SHOWN: IAnalyticsEvent + val PAYMENTS_ONBOARDING_DISMISSED: IAnalyticsEvent } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt index 568c9ba98a2b..90a2262c6772 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -76,4 +76,108 @@ class StoreManagementPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEvent override val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent get() = AnalyticsEvent.CARD_READER_LOCATION_SUCCESS + override val CARD_READER_LOCATION_FAILURE: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_LOCATION_FAILURE + + override val CARD_READER_LOCATION_MISSING_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_LOCATION_MISSING_TAPPED + + override val CARD_READER_CONNECTION_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_CONNECTION_FAILED + + override val CARD_READER_CONNECTION_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_CONNECTION_SUCCESS + + override val CARD_PRESENT_COLLECT_PAYMENT_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_FAILED + + override val CARD_PRESENT_COLLECT_PAYMENT_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_SUCCESS + + override val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS + + override val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED + + override val RECEIPT_PRINT_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_PRINT_TAPPED + + override val RECEIPT_EMAIL_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_EMAIL_TAPPED + + override val RECEIPT_PRINT_CANCELED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_PRINT_CANCELED + + override val RECEIPT_PRINT_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_PRINT_FAILED + + override val RECEIPT_PRINT_SUCCESS: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_PRINT_SUCCESS + + override val RECEIPT_VIEW_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_VIEW_TAPPED + + override val RECEIPT_URL_FETCHING_FAILS: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_URL_FETCHING_FAILS + + override val CARD_PRESENT_COLLECT_PAYMENT_CANCELLED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_PAYMENT_CANCELLED + + override val PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED + + override val CARD_READER_DISCONNECT_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_DISCONNECT_TAPPED + + override val CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED + + override val CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED + + override val IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED + + override val CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED + + override val CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED + + override val MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER: IAnalyticsEvent + get() = AnalyticsEvent.MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER + + override val CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE + + override val CARD_READER_AUTOMATIC_DISCONNECT: IAnalyticsEvent + get() = AnalyticsEvent.CARD_READER_AUTOMATIC_DISCONNECT + + override val CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED + + override val CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED: IAnalyticsEvent + get() = AnalyticsEvent.CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED + + override val PAYMENTS_FLOW_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_FLOW_FAILED + + override val PAYMENTS_FLOW_CANCELED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_FLOW_CANCELED + + override val PAYMENTS_FLOW_COLLECT: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_FLOW_COLLECT + + override val PAYMENTS_FLOW_COMPLETED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_FLOW_COMPLETED + + override val RECEIPT_EMAIL_FAILED: IAnalyticsEvent + get() = AnalyticsEvent.RECEIPT_EMAIL_FAILED + + override val PAYMENTS_ONBOARDING_SHOWN: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_ONBOARDING_SHOWN + + override val PAYMENTS_ONBOARDING_DISMISSED: IAnalyticsEvent + get() = AnalyticsEvent.PAYMENTS_ONBOARDING_DISMISSED } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt index 93ec769e18f9..9651383dae13 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -77,4 +77,108 @@ class WooPosPaymentsFlowTrackerEventProvider : PaymentsFlowTrackerEventProvider override val CARD_READER_LOCATION_SUCCESS: IAnalyticsEvent get() = PaymentFlowTrackerEvent.CardReaderLocationSuccess + override val CARD_READER_LOCATION_FAILURE: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderLocationFailure + + override val CARD_READER_LOCATION_MISSING_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderLocationMissingTapped + + override val CARD_READER_CONNECTION_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderConnectionFailed + + override val CARD_READER_CONNECTION_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderConnectionSuccess + + override val CARD_PRESENT_COLLECT_PAYMENT_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectPaymentFailed + + override val CARD_PRESENT_COLLECT_PAYMENT_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectPaymentSuccess + + override val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectInteracPaymentSuccess + + override val CARD_PRESENT_COLLECT_INTERAC_PAYMENT_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectInteracPaymentFailed + + override val RECEIPT_PRINT_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptPrintTapped + + override val RECEIPT_EMAIL_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptEmailTapped + + override val RECEIPT_PRINT_CANCELED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptPrintCanceled + + override val RECEIPT_PRINT_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptPrintFailed + + override val RECEIPT_PRINT_SUCCESS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptPrintSuccess + + override val RECEIPT_VIEW_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptViewTapped + + override val RECEIPT_URL_FETCHING_FAILS: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptUrlFetchingFails + + override val CARD_PRESENT_COLLECT_PAYMENT_CANCELLED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectPaymentCancelled + + override val PAYMENTS_FLOW_ORDER_COLLECT_PAYMENT_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsFlowOrderCollectPaymentTapped + + override val CARD_READER_DISCONNECT_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderDisconnectTapped + + override val CARD_PRESENT_COLLECT_INTERAC_REFUND_CANCELLED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentCollectInteracRefundCancelled + + override val CARD_PRESENT_CONNECTION_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentConnectionLearnMoreTapped + + override val IN_PERSON_PAYMENTS_LEARN_MORE_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.InPersonPaymentsLearnMoreTapped + + override val CARD_PRESENT_SELECT_READER_TYPE_BUILT_IN_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentSelectReaderTypeBuiltInTapped + + override val CARD_PRESENT_SELECT_READER_TYPE_BLUETOOTH_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentSelectReaderTypeBluetoothTapped + + override val MANAGE_CARD_READERS_AUTOMATIC_DISCONNECT_BUILT_IN_READER: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ManageCardReadersAutomaticDisconnectBuiltInReader + + override val CARD_PRESENT_TAP_TO_PAY_NOT_AVAILABLE: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentTapToPayNotAvailable + + override val CARD_READER_AUTOMATIC_DISCONNECT: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardReaderAutomaticDisconnect + + override val CARD_PRESENT_PAYMENT_FAILED_CONTACT_SUPPORT_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentPaymentFailedContactSupportTapped + + override val CARD_PRESENT_TAP_TO_PAY_PAYMENT_FAILED_ENABLE_NFC_TAPPED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.CardPresentTapToPayPaymentFailedEnableNfcTapped + + override val PAYMENTS_FLOW_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsFlowFailed + + override val PAYMENTS_FLOW_CANCELED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsFlowCanceled + + override val PAYMENTS_FLOW_COLLECT: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsFlowCollect + + override val PAYMENTS_FLOW_COMPLETED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsFlowCompleted + + override val RECEIPT_EMAIL_FAILED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.ReceiptEmailFailed + + override val PAYMENTS_ONBOARDING_SHOWN: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsOnboardingShown + + override val PAYMENTS_ONBOARDING_DISMISSED: IAnalyticsEvent + get() = PaymentFlowTrackerEvent.PaymentsOnboardingDismissed } From 2b3748103ec03d2ea8b1fb3729d9c9372d61ab4d Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 14:39:57 +0100 Subject: [PATCH 15/18] Implement mode-specific `CardReaderTrackCanceledFlowAction` instances --- .../com/woocommerce/android/di/AppModeModule.kt | 13 +++++++++++++ .../payment/CardReaderPaymentViewModel.kt | 2 +- .../WooPosCardReaderPaymentControllerFactory.kt | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt index 02aa11e790da..290496c3fe3c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt @@ -3,6 +3,7 @@ package com.woocommerce.android.di import com.woocommerce.android.AppPrefsWrapper import com.woocommerce.android.analytics.AnalyticsTrackerWrapper import com.woocommerce.android.tools.SelectedSite +import com.woocommerce.android.ui.payments.cardreader.payment.controller.CardReaderTrackCanceledFlowAction import com.woocommerce.android.ui.payments.receipt.PaymentReceiptHelper import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoProvider import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker @@ -68,6 +69,18 @@ class AppModeModule { paymentReceiptHelper = paymentReceiptHelper, eventProvider = paymentsFlowTrackerEventProvider, ) + + @Provides + @PointOfSaleMode + fun providePointOfSaleModeCardReaderTrackCanceledFlowAction( + @PointOfSaleMode tracker: PaymentsFlowTracker + ): CardReaderTrackCanceledFlowAction = CardReaderTrackCanceledFlowAction(tracker) + + @Provides + @StoreManagementMode + fun provideStoreManagementModeCardReaderTrackCanceledFlowAction( + @StoreManagementMode tracker: PaymentsFlowTracker + ): CardReaderTrackCanceledFlowAction = CardReaderTrackCanceledFlowAction(tracker) } @Qualifier diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt index a75a1178a859..41b0a0d93676 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/payment/CardReaderPaymentViewModel.kt @@ -44,7 +44,7 @@ class CardReaderPaymentViewModel @Inject constructor( paymentCollectibilityChecker: CardReaderPaymentCollectibilityChecker, interacRefundableChecker: CardReaderInteracRefundableChecker, @StoreManagementMode tracker: PaymentsFlowTracker, - trackCancelledFlow: CardReaderTrackCanceledFlowAction, + @StoreManagementMode trackCancelledFlow: CardReaderTrackCanceledFlowAction, currencyFormatter: CurrencyFormatter, errorMapper: CardReaderPaymentErrorMapper, interacRefundErrorMapper: CardReaderInteracRefundErrorMapper, diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt index 289bebb93301..b368c37291fa 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt @@ -36,7 +36,7 @@ class WooPosCardReaderPaymentControllerFactory @Inject constructor( private val paymentCollectibilityChecker: CardReaderPaymentCollectibilityChecker, private val interacRefundableChecker: CardReaderInteracRefundableChecker, @PointOfSaleMode private val tracker: PaymentsFlowTracker, - private val trackCancelledFlow: CardReaderTrackCanceledFlowAction, + @PointOfSaleMode private val trackCancelledFlow: CardReaderTrackCanceledFlowAction, private val currencyFormatter: CurrencyFormatter, private val errorMapper: CardReaderPaymentErrorMapper, private val interacRefundErrorMapper: CardReaderInteracRefundErrorMapper, From c1ed31620734ebd7dbca76402ace5e5c419deb92 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Thu, 16 Jan 2025 20:32:47 +0100 Subject: [PATCH 16/18] Update PaymentsFlowTrackerTest --- .../android/ui/payments/tracking/PaymentsFlowTrackerTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerTest.kt index 9c5a1f108cb9..3cbf6242c049 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerTest.kt @@ -102,6 +102,7 @@ class PaymentsFlowTrackerTest : BaseUnitTest() { selectedSite, cardReaderTrackingInfoProvider, paymentReceiptHelper, + StoreManagementPaymentsFlowTrackerEventProvider() ) @Test From f514c178454fafa06a5412b9d69487e46390cf01 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 22 Jan 2025 13:15:19 +0100 Subject: [PATCH 17/18] Rename module class and methods --- ...dule.kt => AppModePaymentsFlowTrackingModule.kt} | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) rename WooCommerce/src/main/kotlin/com/woocommerce/android/di/{AppModeModule.kt => AppModePaymentsFlowTrackingModule.kt} (85%) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt similarity index 85% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt index 02aa11e790da..b547f4c3438b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModeModule.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt @@ -13,22 +13,23 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.components.ViewModelComponent -import dagger.hilt.components.SingletonComponent import javax.inject.Qualifier @Module -@InstallIn(ViewModelComponent::class, SingletonComponent::class) -class AppModeModule { +@InstallIn(ViewModelComponent::class) +class AppModePaymentsFlowTrackingModule { @Provides - fun provideAppMode(): PaymentsFlowTrackerEventProvider = StoreManagementPaymentsFlowTrackerEventProvider() + fun provideDefaultPaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = + StoreManagementPaymentsFlowTrackerEventProvider() @Provides @PointOfSaleMode - fun providePointOfSaleMode(): PaymentsFlowTrackerEventProvider = WooPosPaymentsFlowTrackerEventProvider() + fun providePointOfSaleModePaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = + WooPosPaymentsFlowTrackerEventProvider() @Provides @StoreManagementMode - fun provideStoreManagementMode(): PaymentsFlowTrackerEventProvider = + fun provideStoreManagementModePaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = StoreManagementPaymentsFlowTrackerEventProvider() @Provides From 576327b238955687a80686f7234ea082413d3fb4 Mon Sep 17 00:00:00 2001 From: samiuelson Date: Wed, 22 Jan 2025 13:35:18 +0100 Subject: [PATCH 18/18] Revert SingletonComponent, removed by mistake --- .../android/di/AppModePaymentsFlowTrackingModule.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt index b547f4c3438b..44d714ef26f5 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt @@ -13,10 +13,11 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.components.SingletonComponent import javax.inject.Qualifier @Module -@InstallIn(ViewModelComponent::class) +@InstallIn(ViewModelComponent::class, SingletonComponent::class) class AppModePaymentsFlowTrackingModule { @Provides fun provideDefaultPaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider =