From f44d52328f35737e8346d04f30ce7f9c4fcd269c Mon Sep 17 00:00:00 2001 From: CLAUDE HANGUI Date: Mon, 28 Mar 2022 18:23:47 +0000 Subject: [PATCH 1/5] track firebase events on explore dash related to merchant details flow --- .../services/analytics/AnalyticsConstants.kt | 13 ++++ .../exploredash/ui/ExploreViewModel.kt | 73 +++++++++++++++++++ .../features/exploredash/ui/ItemDetails.kt | 36 +++++++-- .../features/exploredash/ui/SearchFragment.kt | 20 ++++- 4 files changed, 135 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt b/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt index 0e2f19cb51..26f5ef8b21 100644 --- a/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt +++ b/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt @@ -159,5 +159,18 @@ object AnalyticsConstants { const val FILTER_ATM_APPLY_ACTION = "explore_filter_atm_apply_action" const val FILTER_ATM_CANCEL_ACTION = "explore_filter_atm_cancel_action" const val FILTER_ATM_SWIPE_ACTION = "explore_filter_atm_swipe_action" + + const val MERCHANT_DETAILS_SHOW_ALL_LOCATIONS = "explore_merchant_details_all_locations" + const val MERCHANT_DETAILS_NAVIGATION = "explore_merchant_details_navigation" + const val MERCHANT_DETAILS_DIAL_PHONE_CALL = "explore_merchant_details_dial_phone" + const val MERCHANT_DETAILS_OPEN_WEBSITE = "explore_merchant_details_open_website" + const val MERCHANT_DETAILS_BUY_GIFT_CARD = "explore_merchant_details_buy_gift_card" + const val MERCHANT_DETAILS_BACK_TO_ALL_LOCATIONS = "explore_merchant_details_back" + const val MERCHANT_DETAILS_BACK_TOP = "explore_merchant_details_back_top" + const val MERCHANT_DETAILS_BACK_BOTTOM = "explore_merchant_details_back_bottom" + const val MERCHANT_DETAILS_PAY_WITH_DASH = "explore_merchant_details_pay_with_dash" + const val MERCHANT_DETAILS_SCROLL_UP = "explore_merchant_details_scroll_up" + + } } \ No newline at end of file diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt index 9c3fd01021..5362e4f960 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt @@ -844,4 +844,77 @@ class ExploreViewModel @Inject constructor( } } } + + fun trackAllMerchantLocationsEvents() { + analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SHOW_ALL_LOCATIONS, bundleOf()) + } + + fun trackNavigationIconEvent() { + if (exploreTopic == ExploreTopic.Merchants) { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_NAVIGATION, + bundleOf() + ) + } + } + + fun trackDialPhoneCallIconEvent() { + if (exploreTopic == ExploreTopic.Merchants) { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_DIAL_PHONE_CALL, + bundleOf() + ) + } + } + + fun trackOpenWebsiteIconEvent() { + if (exploreTopic == ExploreTopic.Merchants) { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_OPEN_WEBSITE, + bundleOf() + ) + } + } + + fun trackBuyGiftCardEvent() { + analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BUY_GIFT_CARD, bundleOf()) + } + + fun trackBackToAllLocationsEvent() { + analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_TO_ALL_LOCATIONS, bundleOf()) + } + + fun trackTopBackPressEvent() { + if(exploreTopic == ExploreTopic.Merchants) { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_TOP, + bundleOf() + ) + } + } + + fun trackBottomBackPressEvent() { + if (exploreTopic == ExploreTopic.Merchants) { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_BOTTOM, + bundleOf() + ) + } + } + + fun trackScrollToTopEvent() { + if (exploreTopic == ExploreTopic.Merchants){ + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SCROLL_UP, + bundleOf() + ) + } + } + + fun trackPayWithDashEvent() { + analyticsService.logEvent( + AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_PAY_WITH_DASH, + bundleOf() + ) + } } \ No newline at end of file diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ItemDetails.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ItemDetails.kt index 60245fd676..37ad24fc7b 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ItemDetails.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ItemDetails.kt @@ -41,10 +41,14 @@ import java.util.* class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, attrs) { private val binding = ItemDetailsViewBinding.inflate(LayoutInflater.from(context), this) - private var onSendDashClicked: (() -> Unit)? = null + private var onSendDashClicked: ((isPayingWithDash: Boolean) -> Unit)? = null private var onReceiveDashClicked: (() -> Unit)? = null private var onShowAllLocationsClicked: (() -> Unit)? = null private var onBackButtonClicked: (() -> Unit)? = null + private var onNavigationButtonClicked: (() -> Unit)? = null + private var onDialPhoneButtonClicked: (() -> Unit)? = null + private var onOpenWebsiteButtonClicked: (() -> Unit)? = null + private var onBuyGiftCardButtonClicked: (() -> Unit)? = null init { orientation = VERTICAL @@ -60,7 +64,7 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, } } - fun setOnSendDashClicked(listener: () -> Unit) { + fun setOnSendDashClicked(listener: (Boolean) -> Unit) { onSendDashClicked = listener } @@ -76,6 +80,22 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, onBackButtonClicked = listener } + fun setOnNavigationButtonClicked(listener: () -> Unit) { + onNavigationButtonClicked = listener + } + + fun setOnDialPhoneButtonClicked(listener: () -> Unit) { + onDialPhoneButtonClicked = listener + } + + fun setOnOpenWebsiteButtonClicked(listener: () -> Unit) { + onOpenWebsiteButtonClicked = listener + } + + fun setOnBuyGiftCardButtonClicked(listener: () -> Unit) { + onBuyGiftCardButtonClicked = listener + } + fun getMerchantType(type: String?): String { return when (cleanMerchantTypeValue(type)) { MerchantType.ONLINE -> resources.getString(R.string.explore_online_merchant) @@ -102,6 +122,7 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, linkBtn.isVisible = !item.website.isNullOrEmpty() linkBtn.setOnClickListener { openWebsite(item.website!!) + onOpenWebsiteButtonClicked?.invoke() } directionBtn.isVisible = !isOnline && @@ -109,11 +130,13 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, !item.googleMaps.isNullOrBlank()) directionBtn.setOnClickListener { openMaps(item) + onNavigationButtonClicked?.invoke() } callBtn.isVisible = !isOnline && !item.phone.isNullOrEmpty() callBtn.setOnClickListener { dialPhone(item.phone!!) + onDialPhoneButtonClicked?.invoke() } } } @@ -142,11 +165,14 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, if (isDash) { payBtn.isVisible = true payBtn.text = context.getText(R.string.explore_pay_with_dash) - payBtn.setOnClickListener { onSendDashClicked?.invoke() } + payBtn.setOnClickListener { onSendDashClicked?.invoke(true) } } else { payBtn.isVisible = !merchant.deeplink.isNullOrBlank() payBtn.text = context.getText(R.string.explore_buy_gift_card) - payBtn.setOnClickListener { openDeeplink(merchant.deeplink!!) } + payBtn.setOnClickListener { + openDeeplink(merchant.deeplink!!) + onBuyGiftCardButtonClicked?.invoke() + } } showAllBtn.setOnClickListener { onShowAllLocationsClicked?.invoke() } @@ -177,7 +203,7 @@ class ItemDetails(context: Context, attrs: AttributeSet): LinearLayout(context, showAllBtn.isVisible = false backButton.isVisible = false - sellBtn.setOnClickListener { onSendDashClicked?.invoke() } + sellBtn.setOnClickListener { onSendDashClicked?.invoke(false) } buyBtn.setOnClickListener { onReceiveDashClicked?.invoke() } buyBtn.isVisible = atm.type != AtmType.SELL diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt index 6f7646e871..5c1d077045 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt @@ -412,6 +412,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.upButton.setOnClickListener { binding.searchResults.scrollToPosition(0) + viewModel.trackScrollToTopEvent() } binding.resetFiltersBtn.setOnClickListener { @@ -453,13 +454,22 @@ class SearchFragment : Fragment(R.layout.fragment_search) { } private fun setupItemDetails() { - binding.itemDetails.setOnSendDashClicked { viewModel.sendDash() } + binding.itemDetails.setOnSendDashClicked { isPayingWithDash -> + if (isPayingWithDash){ + viewModel.trackPayWithDashEvent() + } + viewModel.sendDash() + } binding.itemDetails.setOnReceiveDashClicked { viewModel.receiveDash() } - binding.itemDetails.setOnBackButtonClicked { viewModel.backFromMerchantLocation() } + binding.itemDetails.setOnBackButtonClicked { + viewModel.backFromMerchantLocation() + viewModel.trackBackToAllLocationsEvent() + } binding.itemDetails.setOnShowAllLocationsClicked { viewModel.selectedItem.value?.let { merchant -> if (merchant is Merchant && merchant.merchantId != null && !merchant.source.isNullOrEmpty()) { viewModel.openAllMerchantLocations(merchant.merchantId!!, merchant.source!!) + viewModel.trackAllMerchantLocationsEvents() } } } @@ -472,6 +482,10 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.toolbarTitle.text = getToolbarTitle() } } + binding.itemDetails.setOnNavigationButtonClicked { viewModel.trackNavigationIconEvent() } + binding.itemDetails.setOnDialPhoneButtonClicked { viewModel.trackDialPhoneCallIconEvent() } + binding.itemDetails.setOnOpenWebsiteButtonClicked { viewModel.trackOpenWebsiteIconEvent() } + binding.itemDetails.setOnBuyGiftCardButtonClicked { viewModel.trackBuyGiftCardEvent() } } private fun setupScreenTransitions() { @@ -537,6 +551,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.toolbar.setNavigationOnClickListener { hardBackAction.invoke() + viewModel.trackTopBackPressEvent() } requireActivity().onBackPressedDispatcher.addCallback( @@ -544,6 +559,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) { object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { hardBackAction.invoke() + viewModel.trackBottomBackPressEvent() } }) } From 9fb2d7c5c2fb7c40e5b0149ca527929b80559346 Mon Sep 17 00:00:00 2001 From: CLAUDE HANGUI Date: Tue, 29 Mar 2022 13:43:47 +0000 Subject: [PATCH 2/5] rename merchant details event --- .../wallet/common/services/analytics/AnalyticsConstants.kt | 4 ++-- .../dash/wallet/features/exploredash/ui/ExploreViewModel.kt | 4 ++-- .../org/dash/wallet/features/exploredash/ui/SearchFragment.kt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt b/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt index 26f5ef8b21..fc3675c20d 100644 --- a/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt +++ b/common/src/main/java/org/dash/wallet/common/services/analytics/AnalyticsConstants.kt @@ -160,12 +160,12 @@ object AnalyticsConstants { const val FILTER_ATM_CANCEL_ACTION = "explore_filter_atm_cancel_action" const val FILTER_ATM_SWIPE_ACTION = "explore_filter_atm_swipe_action" - const val MERCHANT_DETAILS_SHOW_ALL_LOCATIONS = "explore_merchant_details_all_locations" + const val MERCHANT_DETAILS_SHOW_ALL_LOCATIONS = "explore_merchant_details_go_to_all" const val MERCHANT_DETAILS_NAVIGATION = "explore_merchant_details_navigation" const val MERCHANT_DETAILS_DIAL_PHONE_CALL = "explore_merchant_details_dial_phone" const val MERCHANT_DETAILS_OPEN_WEBSITE = "explore_merchant_details_open_website" const val MERCHANT_DETAILS_BUY_GIFT_CARD = "explore_merchant_details_buy_gift_card" - const val MERCHANT_DETAILS_BACK_TO_ALL_LOCATIONS = "explore_merchant_details_back" + const val MERCHANT_DETAILS_BACK_FROM_ALL_LOCATIONS = "explore_merchant_details_back_from_all" const val MERCHANT_DETAILS_BACK_TOP = "explore_merchant_details_back_top" const val MERCHANT_DETAILS_BACK_BOTTOM = "explore_merchant_details_back_bottom" const val MERCHANT_DETAILS_PAY_WITH_DASH = "explore_merchant_details_pay_with_dash" diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt index 5362e4f960..4216859408 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt @@ -880,8 +880,8 @@ class ExploreViewModel @Inject constructor( analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BUY_GIFT_CARD, bundleOf()) } - fun trackBackToAllLocationsEvent() { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_TO_ALL_LOCATIONS, bundleOf()) + fun trackFromAllLocationsEvent() { + analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_FROM_ALL_LOCATIONS, bundleOf()) } fun trackTopBackPressEvent() { diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt index 5c1d077045..7713e386a3 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt @@ -463,7 +463,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.itemDetails.setOnReceiveDashClicked { viewModel.receiveDash() } binding.itemDetails.setOnBackButtonClicked { viewModel.backFromMerchantLocation() - viewModel.trackBackToAllLocationsEvent() + viewModel.trackFromAllLocationsEvent() } binding.itemDetails.setOnShowAllLocationsClicked { viewModel.selectedItem.value?.let { merchant -> From ce1505f2164581b6b9845b53b68764c00614d6a2 Mon Sep 17 00:00:00 2001 From: CLAUDE HANGUI Date: Tue, 29 Mar 2022 13:44:46 +0000 Subject: [PATCH 3/5] rename function to track merchant details event --- .../org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt | 2 +- .../org/dash/wallet/features/exploredash/ui/SearchFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt index 4216859408..7db1c941a1 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt @@ -880,7 +880,7 @@ class ExploreViewModel @Inject constructor( analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BUY_GIFT_CARD, bundleOf()) } - fun trackFromAllLocationsEvent() { + fun trackBackFromAllLocationsEvent() { analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_FROM_ALL_LOCATIONS, bundleOf()) } diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt index 7713e386a3..d2878f921b 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt @@ -463,7 +463,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.itemDetails.setOnReceiveDashClicked { viewModel.receiveDash() } binding.itemDetails.setOnBackButtonClicked { viewModel.backFromMerchantLocation() - viewModel.trackFromAllLocationsEvent() + viewModel.trackBackFromAllLocationsEvent() } binding.itemDetails.setOnShowAllLocationsClicked { viewModel.selectedItem.value?.let { merchant -> From 04b6abd3f112c3acd4974f0a27d0d2708cf684c9 Mon Sep 17 00:00:00 2001 From: CLAUDE HANGUI Date: Wed, 30 Mar 2022 10:32:34 +0000 Subject: [PATCH 4/5] - set function to handle event tracking - refactor tracking of events on merchants/atms on explore dash --- .../exploredash/ui/ExploreViewModel.kt | 133 +++++------------- .../features/exploredash/ui/SearchFragment.kt | 40 ++++-- 2 files changed, 62 insertions(+), 111 deletions(-) diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt index 7db1c941a1..eac8b6f603 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt @@ -712,16 +712,16 @@ class ExploreViewModel @Inject constructor( when { hasZoomLevelChanged(currentZoomLevel) -> { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.ZOOM_MERCHANT_MAP, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.ZOOM_MERCHANT_MAP) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.ZOOM_ATM_MAP, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.ZOOM_ATM_MAP) } } hasCameraCenterChanged(currentGeoBounds) -> { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.PAN_MERCHANT_MAP, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.PAN_MERCHANT_MAP) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.PAN_ATM_MAP, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.PAN_ATM_MAP) } } } @@ -734,9 +734,9 @@ class ExploreViewModel @Inject constructor( fun triggerMarkerClickEvent(){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.SELECT_MERCHANT_MARKER, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.SELECT_MERCHANT_MARKER) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.SELECT_ATM_MARKER, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.SELECT_ATM_MARKER) } } @@ -745,49 +745,49 @@ class ExploreViewModel @Inject constructor( giftCardPaymentOn: Boolean) { if (dashPaymentOn){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECT_DASH, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECT_DASH) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECT_DASH, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECT_DASH) } } if (giftCardPaymentOn){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECT_GIFT_CARD, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECT_GIFT_CARD) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECT_GIFT_CARD, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECT_GIFT_CARD) } } if (sortByDistance == ExploreViewModel.DEFAULT_SORT_BY_DISTANCE){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SORT_BY_DISTANCE, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SORT_BY_DISTANCE) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SORT_BY_DISTANCE, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SORT_BY_DISTANCE) } } else { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SORT_BY_NAME, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SORT_BY_NAME) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SORT_BY_NAME, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SORT_BY_NAME) } } if ( _selectedTerritory.value.isEmpty()){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_CURRENT_LOCATION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_CURRENT_LOCATION) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_CURRENT_LOCATION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_CURRENT_LOCATION) } } else { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECTED_LOCATION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SELECTED_LOCATION) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECTED_LOCATION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SELECTED_LOCATION) } } - analyticsService.logEvent( + trackEvent( when(_selectedRadiusOption.value){ 1 -> { if (exploreTopic == ExploreTopic.Merchants) AnalyticsConstants.ExploreDash.FILTER_MERCHANT_ONE_MILE @@ -805,116 +805,47 @@ class ExploreViewModel @Inject constructor( if (exploreTopic == ExploreTopic.Merchants) AnalyticsConstants.ExploreDash.FILTER_MERCHANT_TWENTY_MILE else AnalyticsConstants.ExploreDash.FILTER_ATM_TWENTY_MILE } - }, bundleOf() + } ) if (_isLocationEnabled.value == true){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_LOCATION_ALLOWED, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_LOCATION_ALLOWED) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_LOCATION_ALLOWED, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_LOCATION_ALLOWED) } } else { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_LOCATION_DENIED, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_LOCATION_DENIED) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_LOCATION_DENIED, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_LOCATION_DENIED) } } if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_APPLY_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_APPLY_ACTION) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_APPLY_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_APPLY_ACTION) } } fun trackDismissEvent() { if (isDialogDismissedOnCancel){ if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_CANCEL_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_CANCEL_ACTION) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_CANCEL_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_CANCEL_ACTION) } } else { if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SWIPE_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_MERCHANT_SWIPE_ACTION) } else { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SWIPE_ACTION, bundleOf()) + trackEvent(AnalyticsConstants.ExploreDash.FILTER_ATM_SWIPE_ACTION) } } } - fun trackAllMerchantLocationsEvents() { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SHOW_ALL_LOCATIONS, bundleOf()) - } - - fun trackNavigationIconEvent() { - if (exploreTopic == ExploreTopic.Merchants) { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_NAVIGATION, - bundleOf() - ) - } - } - - fun trackDialPhoneCallIconEvent() { - if (exploreTopic == ExploreTopic.Merchants) { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_DIAL_PHONE_CALL, - bundleOf() - ) - } - } - - fun trackOpenWebsiteIconEvent() { - if (exploreTopic == ExploreTopic.Merchants) { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_OPEN_WEBSITE, - bundleOf() - ) - } - } - - fun trackBuyGiftCardEvent() { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BUY_GIFT_CARD, bundleOf()) - } - - fun trackBackFromAllLocationsEvent() { - analyticsService.logEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_FROM_ALL_LOCATIONS, bundleOf()) - } - - fun trackTopBackPressEvent() { - if(exploreTopic == ExploreTopic.Merchants) { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_TOP, - bundleOf() - ) - } - } - - fun trackBottomBackPressEvent() { - if (exploreTopic == ExploreTopic.Merchants) { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_BOTTOM, - bundleOf() - ) - } - } - - fun trackScrollToTopEvent() { - if (exploreTopic == ExploreTopic.Merchants){ - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SCROLL_UP, - bundleOf() - ) - } - } - - fun trackPayWithDashEvent() { - analyticsService.logEvent( - AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_PAY_WITH_DASH, - bundleOf() - ) + fun trackEvent(event: String){ + analyticsService.logEvent(event, bundleOf()) } } \ No newline at end of file diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt index d2878f921b..b0d93b36fe 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/SearchFragment.kt @@ -412,7 +412,9 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.upButton.setOnClickListener { binding.searchResults.scrollToPosition(0) - viewModel.trackScrollToTopEvent() + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SCROLL_UP) + } } binding.resetFiltersBtn.setOnClickListener { @@ -456,20 +458,20 @@ class SearchFragment : Fragment(R.layout.fragment_search) { private fun setupItemDetails() { binding.itemDetails.setOnSendDashClicked { isPayingWithDash -> if (isPayingWithDash){ - viewModel.trackPayWithDashEvent() + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_PAY_WITH_DASH) } viewModel.sendDash() } binding.itemDetails.setOnReceiveDashClicked { viewModel.receiveDash() } binding.itemDetails.setOnBackButtonClicked { viewModel.backFromMerchantLocation() - viewModel.trackBackFromAllLocationsEvent() + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_FROM_ALL_LOCATIONS) } binding.itemDetails.setOnShowAllLocationsClicked { viewModel.selectedItem.value?.let { merchant -> if (merchant is Merchant && merchant.merchantId != null && !merchant.source.isNullOrEmpty()) { viewModel.openAllMerchantLocations(merchant.merchantId!!, merchant.source!!) - viewModel.trackAllMerchantLocationsEvents() + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_SHOW_ALL_LOCATIONS) } } } @@ -482,10 +484,22 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.toolbarTitle.text = getToolbarTitle() } } - binding.itemDetails.setOnNavigationButtonClicked { viewModel.trackNavigationIconEvent() } - binding.itemDetails.setOnDialPhoneButtonClicked { viewModel.trackDialPhoneCallIconEvent() } - binding.itemDetails.setOnOpenWebsiteButtonClicked { viewModel.trackOpenWebsiteIconEvent() } - binding.itemDetails.setOnBuyGiftCardButtonClicked { viewModel.trackBuyGiftCardEvent() } + binding.itemDetails.setOnNavigationButtonClicked { + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_NAVIGATION) + } + } + binding.itemDetails.setOnDialPhoneButtonClicked { + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_DIAL_PHONE_CALL) + } + } + binding.itemDetails.setOnOpenWebsiteButtonClicked { + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_OPEN_WEBSITE) + } + } + binding.itemDetails.setOnBuyGiftCardButtonClicked { viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BUY_GIFT_CARD) } } private fun setupScreenTransitions() { @@ -551,7 +565,9 @@ class SearchFragment : Fragment(R.layout.fragment_search) { binding.toolbar.setNavigationOnClickListener { hardBackAction.invoke() - viewModel.trackTopBackPressEvent() + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_TOP) + } } requireActivity().onBackPressedDispatcher.addCallback( @@ -559,7 +575,9 @@ class SearchFragment : Fragment(R.layout.fragment_search) { object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { hardBackAction.invoke() - viewModel.trackBottomBackPressEvent() + if (isMerchant()){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.MERCHANT_DETAILS_BACK_BOTTOM) + } } }) } @@ -826,4 +844,6 @@ class SearchFragment : Fragment(R.layout.fragment_search) { else -> BottomSheetBehavior.STATE_EXPANDED } } + + private fun isMerchant(): Boolean = args.type == ExploreTopic.Merchants } From 6036b85098ed737a64d7433ba287fe7d51513808 Mon Sep 17 00:00:00 2001 From: CLAUDE HANGUI Date: Wed, 30 Mar 2022 10:36:22 +0000 Subject: [PATCH 5/5] refactor tracking event of click on merchant/atm --- .../wallet/features/exploredash/ui/ExploreMapFragment.kt | 7 ++++++- .../wallet/features/exploredash/ui/ExploreViewModel.kt | 8 -------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreMapFragment.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreMapFragment.kt index 5d89e7cd56..4ad96cb6af 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreMapFragment.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreMapFragment.kt @@ -44,6 +44,7 @@ import com.google.maps.android.collections.MarkerManager import com.google.maps.android.ktx.awaitMap import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.* +import org.dash.wallet.common.services.analytics.AnalyticsConstants import org.dash.wallet.features.exploredash.R import org.dash.wallet.features.exploredash.data.model.MerchantType import org.dash.wallet.features.exploredash.data.model.SearchResult @@ -227,7 +228,11 @@ class ExploreMapFragment : SupportMapFragment() { if (isGooglePlayServicesAvailable()) { markerCollection = MarkerManager(googleMap).newCollection() markerCollection?.setOnMarkerClickListener { marker -> - viewModel.triggerMarkerClickEvent() + if (viewModel.exploreTopic == ExploreTopic.Merchants){ + viewModel.trackEvent(AnalyticsConstants.ExploreDash.SELECT_MERCHANT_MARKER) + } else { + viewModel.trackEvent(AnalyticsConstants.ExploreDash.SELECT_ATM_MARKER) + } viewModel.onMapMarkerSelected(marker.tag as Int) true } diff --git a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt index eac8b6f603..17202641e5 100644 --- a/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt +++ b/features/exploredash/src/main/java/org/dash/wallet/features/exploredash/ui/ExploreViewModel.kt @@ -732,14 +732,6 @@ class ExploreViewModel @Inject constructor( private fun hasCameraCenterChanged(currentCenterPosition: GeoBounds): Boolean = locationProvider.distanceBetweenCenters(previousCameraGeoBounds, currentCenterPosition) != 0.0 - fun triggerMarkerClickEvent(){ - if (exploreTopic == ExploreTopic.Merchants){ - trackEvent(AnalyticsConstants.ExploreDash.SELECT_MERCHANT_MARKER) - } else { - trackEvent(AnalyticsConstants.ExploreDash.SELECT_ATM_MARKER) - } - } - fun trackFilterEvents( dashPaymentOn: Boolean, giftCardPaymentOn: Boolean) {