Skip to content

Commit 7f0be5f

Browse files
authoredFeb 27, 2024
Merge pull request #10926 from woocommerce/issue/10784-blaze-analytics-part-III
Issue/10784 blaze analytics part iii
2 parents 7b2b7fe + 58ac0b4 commit 7f0be5f

File tree

4 files changed

+38
-20
lines changed

4 files changed

+38
-20
lines changed
 

‎WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt

+2
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,8 @@ enum class AnalyticsEvent(val siteless: Boolean = false) {
10181018
BLAZE_CREATION_PAYMENT_SUBMIT_CAMPAIGN_TAPPED,
10191019
BLAZE_CREATION_ADD_PAYMENT_METHOD_WEB_VIEW_DISPLAYED,
10201020
BLAZE_CREATION_ADD_PAYMENT_METHOD_SUCCESS,
1021+
BLAZE_CAMPAIGN_CREATION_SUCCESS,
1022+
BLAZE_CAMPAIGN_CREATION_FAILED,
10211023
BLAZE_CREATION_EDIT_AD_AI_SUGGESTION_TAPPED,
10221024
BLAZE_CREATION_EDIT_AD_SAVE_TAPPED,
10231025
BLAZE_CREATION_EDIT_BUDGET_SAVE_TAPPED,

‎WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsTracker.kt

+1
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,7 @@ class AnalyticsTracker private constructor(
617617
const val KEY_BLAZE_DURATION = "duration"
618618
const val KEY_BLAZE_TOTAL_BUDGET = "total_budget"
619619
const val KEY_BLAZE_IS_AI_CONTENT = "is_ai_suggested_ad_content"
620+
const val KEY_BLAZE_ERROR = "blaze_creation_error"
620621

621622
const val PRODUCT_TYPES = "product_types"
622623
const val HAS_ADDONS = "has_addons"

‎WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/ad/BlazeCampaignCreationEditAdViewModel.kt

+24-19
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import android.os.Parcelable
44
import androidx.lifecycle.SavedStateHandle
55
import androidx.lifecycle.asLiveData
66
import androidx.lifecycle.viewModelScope
7+
import com.woocommerce.android.analytics.AnalyticsEvent.BLAZE_CREATION_EDIT_AD_AI_SUGGESTION_TAPPED
8+
import com.woocommerce.android.analytics.AnalyticsEvent.BLAZE_CREATION_EDIT_AD_SAVE_TAPPED
9+
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
710
import com.woocommerce.android.model.Product
811
import com.woocommerce.android.ui.blaze.BlazeRepository
912
import com.woocommerce.android.ui.blaze.BlazeRepository.AiSuggestionForAd
@@ -22,8 +25,8 @@ import javax.inject.Inject
2225

2326
@HiltViewModel
2427
class BlazeCampaignCreationEditAdViewModel @Inject constructor(
25-
private val blazeRepository: BlazeRepository,
26-
savedStateHandle: SavedStateHandle
28+
savedStateHandle: SavedStateHandle,
29+
private val analyticsTrackerWrapper: AnalyticsTrackerWrapper,
2730
) : ScopedViewModel(savedStateHandle) {
2831
companion object {
2932
private const val TAGLINE_MAX_LENGTH = 32
@@ -44,43 +47,45 @@ class BlazeCampaignCreationEditAdViewModel @Inject constructor(
4447

4548
private fun loadSuggestions() {
4649
viewModelScope.launch {
47-
blazeRepository.fetchAdSuggestions(navArgs.productId).getOrNull()?.let { list ->
48-
val index = list.indexOfFirst { it.tagLine == navArgs.tagline && it.description == navArgs.description }
49-
val suggestions = list.map { AiSuggestionForAd(it.tagLine, it.description) }
50-
if (index != -1) {
51-
_viewState.update {
52-
_viewState.value.copy(
53-
suggestions = suggestions,
54-
suggestionIndex = index
55-
)
56-
}
57-
} else {
58-
_viewState.update {
59-
_viewState.value.copy(
60-
suggestions = listOf(AiSuggestionForAd(navArgs.tagline, navArgs.description)) + suggestions,
61-
suggestionIndex = 0
62-
)
63-
}
50+
val suggestions: List<AiSuggestionForAd> = navArgs.aiSuggestionsForAd.toList()
51+
val index =
52+
suggestions.indexOfFirst { it.tagLine == navArgs.tagline && it.description == navArgs.description }
53+
if (index != -1) {
54+
_viewState.update {
55+
_viewState.value.copy(
56+
suggestions = suggestions,
57+
suggestionIndex = index
58+
)
59+
}
60+
} else {
61+
_viewState.update {
62+
_viewState.value.copy(
63+
suggestions = listOf(AiSuggestionForAd(navArgs.tagline, navArgs.description)) + suggestions,
64+
suggestionIndex = 0
65+
)
6466
}
6567
}
6668
}
6769
}
6870

6971
fun onNextSuggestionTapped() {
72+
analyticsTrackerWrapper.track(stat = BLAZE_CREATION_EDIT_AD_AI_SUGGESTION_TAPPED)
7073
_viewState.update {
7174
val index = _viewState.value.suggestionIndex
7275
_viewState.value.copy(suggestionIndex = index + 1)
7376
}
7477
}
7578

7679
fun onPreviousSuggestionTapped() {
80+
analyticsTrackerWrapper.track(stat = BLAZE_CREATION_EDIT_AD_AI_SUGGESTION_TAPPED)
7781
_viewState.update {
7882
val index = _viewState.value.suggestionIndex
7983
_viewState.value.copy(suggestionIndex = index - 1)
8084
}
8185
}
8286

8387
fun onSaveTapped() {
88+
analyticsTrackerWrapper.track(stat = BLAZE_CREATION_EDIT_AD_SAVE_TAPPED)
8489
triggerEvent(
8590
ExitWithResult(
8691
EditAdResult(

‎WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/payment/BlazeCampaignPaymentSummaryViewModel.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import androidx.lifecycle.SavedStateHandle
55
import androidx.lifecycle.asLiveData
66
import androidx.lifecycle.viewModelScope
77
import com.woocommerce.android.R
8+
import com.woocommerce.android.analytics.AnalyticsEvent.BLAZE_CAMPAIGN_CREATION_FAILED
9+
import com.woocommerce.android.analytics.AnalyticsEvent.BLAZE_CAMPAIGN_CREATION_SUCCESS
810
import com.woocommerce.android.analytics.AnalyticsEvent.BLAZE_CREATION_PAYMENT_SUBMIT_CAMPAIGN_TAPPED
11+
import com.woocommerce.android.analytics.AnalyticsTracker
912
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
1013
import com.woocommerce.android.support.help.HelpOrigin
1114
import com.woocommerce.android.ui.blaze.BlazeRepository
@@ -104,6 +107,7 @@ class BlazeCampaignPaymentSummaryViewModel @Inject constructor(
104107
if (campaignCreationState.value == CampaignCreationState.Loading) {
105108
return
106109
}
110+
analyticsTrackerWrapper.track(stat = BLAZE_CREATION_PAYMENT_SUBMIT_CAMPAIGN_TAPPED)
107111

108112
launch {
109113
campaignCreationState.value = CampaignCreationState.Loading
@@ -113,7 +117,7 @@ class BlazeCampaignPaymentSummaryViewModel @Inject constructor(
113117
).fold(
114118
onSuccess = {
115119
campaignCreationState.value = null
116-
analyticsTrackerWrapper.track(stat = BLAZE_CREATION_PAYMENT_SUBMIT_CAMPAIGN_TAPPED)
120+
analyticsTrackerWrapper.track(stat = BLAZE_CAMPAIGN_CREATION_SUCCESS)
117121
triggerEvent(NavigateToStartingScreenWithSuccessBottomSheet)
118122
},
119123
onFailure = {
@@ -126,6 +130,12 @@ class BlazeCampaignPaymentSummaryViewModel @Inject constructor(
126130

127131
else -> R.string.blaze_campaign_creation_error
128132
}
133+
analyticsTrackerWrapper.track(
134+
stat = BLAZE_CAMPAIGN_CREATION_FAILED,
135+
properties = mapOf(
136+
AnalyticsTracker.KEY_BLAZE_ERROR to it.message
137+
)
138+
)
129139
campaignCreationState.value = CampaignCreationState.Failed(errorMessage)
130140
}
131141
)

0 commit comments

Comments
 (0)