diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt new file mode 100644 index 000000000000..521c4a1f36b8 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/di/AppModePaymentsFlowTrackingModule.kt @@ -0,0 +1,94 @@ +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 +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 +import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.components.SingletonComponent +import javax.inject.Qualifier + +@Module +@InstallIn(ViewModelComponent::class, SingletonComponent::class) +class AppModePaymentsFlowTrackingModule { + @Provides + fun provideDefaultPaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = + StoreManagementPaymentsFlowTrackerEventProvider() + + @Provides + @PointOfSaleMode + fun providePointOfSaleModePaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = + WooPosPaymentsFlowTrackerEventProvider() + + @Provides + @StoreManagementMode + fun provideStoreManagementModePaymentsFlowTrackerEventProvider(): PaymentsFlowTrackerEventProvider = + StoreManagementPaymentsFlowTrackerEventProvider() + + @Provides + @PointOfSaleMode + @Suppress("LongParameterList") + fun providePointOfSaleModePaymentsFlowTracker( + trackerWrapper: AnalyticsTrackerWrapper, + appPrefsWrapper: AppPrefsWrapper, + selectedSite: SelectedSite, + cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, + paymentReceiptHelper: PaymentReceiptHelper, + @PointOfSaleMode paymentsFlowTrackerEventProvider: PaymentsFlowTrackerEventProvider, + ): PaymentsFlowTracker = PaymentsFlowTracker( + trackerWrapper = trackerWrapper, + appPrefsWrapper = appPrefsWrapper, + selectedSite = selectedSite, + cardReaderTrackingInfoProvider = cardReaderTrackingInfoProvider, + paymentReceiptHelper = paymentReceiptHelper, + eventProvider = paymentsFlowTrackerEventProvider, + ) + + @Provides + @StoreManagementMode + @Suppress("LongParameterList") + fun provideStoreManagementModePaymentsFlowTracker( + trackerWrapper: AnalyticsTrackerWrapper, + appPrefsWrapper: AppPrefsWrapper, + selectedSite: SelectedSite, + cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, + paymentReceiptHelper: PaymentReceiptHelper, + @StoreManagementMode paymentsFlowTrackerEventProvider: PaymentsFlowTrackerEventProvider, + ): PaymentsFlowTracker = PaymentsFlowTracker( + trackerWrapper = trackerWrapper, + appPrefsWrapper = appPrefsWrapper, + selectedSite = selectedSite, + cardReaderTrackingInfoProvider = cardReaderTrackingInfoProvider, + 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 +@Retention(AnnotationRetention.BINARY) +annotation class PointOfSaleMode + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class StoreManagementMode 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..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 @@ -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,8 +43,8 @@ class CardReaderPaymentViewModel @Inject constructor( appPrefs: AppPrefs = AppPrefs, paymentCollectibilityChecker: CardReaderPaymentCollectibilityChecker, interacRefundableChecker: CardReaderInteracRefundableChecker, - tracker: PaymentsFlowTracker, - trackCancelledFlow: CardReaderTrackCanceledFlowAction, + @StoreManagementMode tracker: PaymentsFlowTracker, + @StoreManagementMode trackCancelledFlow: CardReaderTrackCanceledFlowAction, currencyFormatter: CurrencyFormatter, errorMapper: CardReaderPaymentErrorMapper, interacRefundErrorMapper: CardReaderInteracRefundErrorMapper, 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..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 @@ -2,61 +2,6 @@ package com.woocommerce.android.ui.payments.tracking 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_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 -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_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 -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 @@ -66,6 +11,7 @@ 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 @@ -90,10 +36,11 @@ class PaymentsFlowTracker @Inject constructor( private val selectedSite: SelectedSite, private val cardReaderTrackingInfoProvider: CardReaderTrackingInfoProvider, private val paymentReceiptHelper: PaymentReceiptHelper, + private val eventProvider: PaymentsFlowTrackerEventProvider, ) { @VisibleForTesting fun track( - stat: AnalyticsEvent, + stat: IAnalyticsEvent, properties: MutableMap = mutableMapOf(), errorType: String? = null, errorDescription: String? = null, @@ -211,14 +158,14 @@ 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) { 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)) } } } @@ -226,7 +173,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 @@ -237,14 +184,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, @@ -254,7 +201,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 ) @@ -263,7 +210,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() ) @@ -272,7 +219,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() @@ -282,7 +229,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() ) @@ -291,7 +238,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() @@ -300,7 +247,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) { @@ -309,41 +256,41 @@ 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() { - 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) { trackSoftwareUpdateEvent( - CARD_READER_SOFTWARE_UPDATE_FAILED, + eventProvider.CARD_READER_SOFTWARE_UPDATE_FAILED, requiredUpdate, "User manually cancelled the flow" ) @@ -351,67 +298,67 @@ 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) ) } 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?) { 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() { - 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( @@ -420,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 @@ -429,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()) @@ -475,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, ) @@ -483,24 +430,24 @@ 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( - event: AnalyticsEvent, + event: IAnalyticsEvent, requiredUpdate: Boolean, errorDescription: String? = null, ) { @@ -516,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( @@ -549,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, @@ -558,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, @@ -581,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) ) } @@ -594,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, @@ -618,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, @@ -633,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()) @@ -642,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()) @@ -651,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()) @@ -662,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 new file mode 100644 index 000000000000..8a6a6382c963 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/PaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,66 @@ +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 + 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 + 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 + 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 + 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 + 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 + 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 new file mode 100644 index 000000000000..90a2262c6772 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/tracking/StoreManagementPaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,183 @@ +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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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/payments/cardreader/payment/controller/CardReaderPaymentControllerFactory.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosCardReaderPaymentControllerFactory.kt similarity index 87% 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..b368c37291fa 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,15 +28,15 @@ 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, - private val trackCancelledFlow: CardReaderTrackCanceledFlowAction, + @PointOfSaleMode private val tracker: PaymentsFlowTracker, + @PointOfSaleMode private val trackCancelledFlow: CardReaderTrackCanceledFlowAction, private val currencyFormatter: CurrencyFormatter, private val errorMapper: CardReaderPaymentErrorMapper, private val interacRefundErrorMapper: CardReaderInteracRefundErrorMapper, 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 0d83e71d4411..b4dfd42ce02d 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 @@ -65,7 +64,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/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..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 @@ -36,6 +36,244 @@ 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 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" + } + + 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) { 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..9651383dae13 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/util/analytics/WooPosPaymentsFlowTrackerEventProvider.kt @@ -0,0 +1,184 @@ +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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 +} 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 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 ebb6d9674b16..69d87f3fbb18 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 @@ -104,7 +103,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, @@ -569,7 +568,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( @@ -704,7 +703,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) @@ -722,7 +721,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) @@ -752,7 +751,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( @@ -787,7 +786,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( @@ -823,7 +822,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( @@ -853,7 +852,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( @@ -893,7 +892,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( @@ -936,7 +935,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( @@ -980,7 +979,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( @@ -1021,7 +1020,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( @@ -1279,7 +1278,7 @@ class WooPosTotalsViewModelTest { @Suppress("LongMethod") private suspend fun createViewModelAndSetupForSuccessfulOrderCreation( - controllerFactory: CardReaderPaymentControllerFactory = paymentControllerFactory, + controllerFactory: WooPosCardReaderPaymentControllerFactory = paymentControllerFactory, itemClickedData: List = listOf( WooPosItemsViewModel.ItemClickedData.SimpleProduct( id = 1L @@ -1367,7 +1366,7 @@ class WooPosTotalsViewModelTest { totalsRepository: WooPosTotalsRepository = mock(), priceFormat: WooPosFormatPrice = mock(), savedState: SavedStateHandle = SavedStateHandle(), - cardReaderPaymentControllerFactory: CardReaderPaymentControllerFactory = paymentControllerFactory, + cardReaderPaymentControllerFactory: WooPosCardReaderPaymentControllerFactory = paymentControllerFactory, ) = WooPosTotalsViewModel( resourceProvider = resourceProvider, parentToChildrenEventReceiver = parentToChildrenEventReceiver,