Skip to content

Commit a514f29

Browse files
authored
Merge pull request #14868 from woocommerce/issue/WOOMOB-1010-update-jetpack-setup-tracking
[Jetpack Setup] Update tracking plan
2 parents f032e8d + 895f0b1 commit a514f29

File tree

6 files changed

+29
-167
lines changed

6 files changed

+29
-167
lines changed

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -147,22 +147,6 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv
147147
LOGIN_JETPACK_SITE_CREDENTIAL_RESET_PASSWORD_BUTTON_TAPPED(siteless = true),
148148
LOGIN_JETPACK_SITE_CREDENTIAL_DID_SHOW_ERROR_ALERT(siteless = true),
149149
LOGIN_JETPACK_SITE_CREDENTIAL_DID_FINISH_LOGIN(siteless = true),
150-
LOGIN_JETPACK_SETUP_SCREEN_VIEWED(siteless = true),
151-
LOGIN_JETPACK_SETUP_SCREEN_DISMISSED(siteless = true),
152-
LOGIN_JETPACK_SETUP_INSTALL_SUCCESSFUL(siteless = true),
153-
LOGIN_JETPACK_SETUP_INSTALL_FAILED(siteless = true),
154-
LOGIN_JETPACK_SETUP_ACTIVATION_SUCCESSFUL(siteless = true),
155-
LOGIN_JETPACK_SETUP_ACTIVATION_FAILED(siteless = true),
156-
LOGIN_JETPACK_SETUP_FETCH_JETPACK_CONNECTION_URL_SUCCESSFUL(siteless = true),
157-
LOGIN_JETPACK_SETUP_FETCH_JETPACK_CONNECTION_URL_FAILED(siteless = true),
158-
LOGIN_JETPACK_SETUP_CANNOT_FIND_WPCOM_USER(siteless = true),
159-
LOGIN_JETPACK_SETUP_AUTHORIZED_USING_DIFFERENT_WPCOM_ACCOUNT(siteless = true),
160-
LOGIN_JETPACK_SETUP_ALL_STEPS_MARKED_DONE(siteless = true),
161-
LOGIN_JETPACK_SETUP_ERROR_CHECKING_JETPACK_CONNECTION(siteless = true),
162-
LOGIN_JETPACK_SETUP_GO_TO_STORE_BUTTON_TAPPED(siteless = true),
163-
LOGIN_JETPACK_FETCHING_WPCOM_SITES_FAILED(siteless = true),
164-
LOGIN_JETPACK_SETUP_GET_SUPPORT_BUTTON_TAPPED(siteless = true),
165-
LOGIN_JETPACK_SETUP_TRY_AGAIN_BUTTON_TAPPED(siteless = true),
166150

167151
// -- Dashboard
168152
DASHBOARD_PULLED_TO_REFRESH,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ class AnalyticsTracker private constructor(
537537
const val VALUE_JETPACK_SETUP_TAP_GO_TO_STORE = "go_to_store"
538538
const val VALUE_JETPACK_SETUP_TAP_SUPPORT = "support"
539539
const val VALUE_JETPACK_SETUP_TAP_TRY_AGAIN = "try_again"
540+
const val VALUE_JETPACK_SETUP_TAP_CONTINUE_SETUP = "continue_setup"
540541
const val KEY_CONNECTION_TYPE = "connection_type"
541542
const val VALUE_CONNECTION_TYPE_NATIVE = "native"
542543
const val VALUE_CONNECTION_TYPE_WEB = "web"

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/JetpackActivationRepository.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package com.woocommerce.android.ui.login.jetpack
22

33
import com.woocommerce.android.OnChangedException
44
import com.woocommerce.android.WooException
5-
import com.woocommerce.android.analytics.AnalyticsEvent
6-
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
75
import com.woocommerce.android.model.JetpackConnectionStatus
86
import com.woocommerce.android.model.JetpackSiteRegistrationStatus
97
import com.woocommerce.android.tools.SelectedSite
@@ -26,8 +24,7 @@ class JetpackActivationRepository @Inject constructor(
2624
private val siteStore: SiteStore,
2725
private val jetpackStore: JetpackStore,
2826
private val wooCommerceStore: WooCommerceStore,
29-
private val selectedSite: SelectedSite,
30-
private val analyticsTrackerWrapper: AnalyticsTrackerWrapper
27+
private val selectedSite: SelectedSite
3128
) {
3229
companion object {
3330
private const val DEFAULT_MAX_RETRY = 2
@@ -134,9 +131,6 @@ class JetpackActivationRepository @Inject constructor(
134131
}
135132

136133
result.data?.currentUser?.wpcomEmail.isNullOrEmpty() -> {
137-
analyticsTrackerWrapper.track(
138-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_CANNOT_FIND_WPCOM_USER
139-
)
140134
WooLog.w(WooLog.T.LOGIN, "Cannot find Jetpack Email in response")
141135
Result.failure(JetpackMissingConnectionEmailException())
142136
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/main/JetpackActivationMainViewModel.kt

Lines changed: 15 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -145,36 +145,18 @@ class JetpackActivationMainViewModel @Inject constructor(
145145
}.asLiveData()
146146

147147
init {
148-
if (!useApplicationPasswords) {
149-
analyticsTrackerWrapper.track(AnalyticsEvent.LOGIN_JETPACK_SETUP_SCREEN_VIEWED)
150-
}
151-
152148
monitorCurrentStep()
153149
handleErrorStates()
154150
startNextStep()
155151
}
156152

157153
fun onCloseClick() {
158-
if (useApplicationPasswords) {
159-
trackSetupFlow(tap = AnalyticsTracker.VALUE_DISMISS)
160-
} else {
161-
analyticsTrackerWrapper.track(
162-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_SCREEN_DISMISSED,
163-
properties = mapOf(
164-
AnalyticsTracker.KEY_JETPACK_INSTALLATION_STEP to
165-
currentStep.value.type.analyticsName
166-
)
167-
)
168-
}
154+
trackSetupFlow(tap = AnalyticsTracker.VALUE_DISMISS)
169155
triggerEvent(Exit)
170156
}
171157

172158
fun onContinueClick() = launch {
173-
if (useApplicationPasswords) {
174-
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_GO_TO_STORE)
175-
} else {
176-
analyticsTrackerWrapper.track(stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_GO_TO_STORE_BUTTON_TAPPED)
177-
}
159+
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_GO_TO_STORE)
178160

179161
val loggedInEmail = accountRepository.getUserAccount()?.email
180162
if (jetpackConnectedEmail == loggedInEmail) {
@@ -184,9 +166,7 @@ class JetpackActivationMainViewModel @Inject constructor(
184166
jetpackActivationRepository.setSelectedSiteAndCleanOldSites(site)
185167
triggerEvent(GoToStore)
186168

187-
if (useApplicationPasswords) {
188-
analyticsTrackerWrapper.track(stat = AnalyticsEvent.JETPACK_SETUP_SYNCHRONIZATION_COMPLETED)
189-
}
169+
analyticsTrackerWrapper.track(stat = AnalyticsEvent.JETPACK_SETUP_SYNCHRONIZATION_COMPLETED)
190170
} else {
191171
triggerEvent(ShowWooNotInstalledScreen(navArgs.siteUrl))
192172
}
@@ -210,32 +190,14 @@ class JetpackActivationMainViewModel @Inject constructor(
210190
}
211191

212192
fun onRetryClick() {
213-
if (useApplicationPasswords) {
214-
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_TRY_AGAIN)
215-
} else {
216-
analyticsTrackerWrapper.track(
217-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_TRY_AGAIN_BUTTON_TAPPED,
218-
properties = mapOf(
219-
AnalyticsTracker.KEY_JETPACK_INSTALLATION_STEP to
220-
currentStep.value.type.analyticsName
221-
)
222-
)
223-
}
193+
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_TRY_AGAIN)
194+
224195
startNextStep()
225196
}
226197

227198
fun onGetHelpClick() {
228-
if (useApplicationPasswords) {
229-
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_SUPPORT)
230-
} else {
231-
analyticsTrackerWrapper.track(
232-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_GET_SUPPORT_BUTTON_TAPPED,
233-
properties = mapOf(
234-
AnalyticsTracker.KEY_JETPACK_INSTALLATION_STEP to
235-
currentStep.value.type.analyticsName
236-
),
237-
)
238-
}
199+
trackSetupFlow(tap = AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_SUPPORT)
200+
239201
triggerEvent(NavigateToHelpScreen(JETPACK_INSTALLATION))
240202
}
241203

@@ -263,9 +225,7 @@ class JetpackActivationMainViewModel @Inject constructor(
263225
val stepType = step.type
264226
WooLog.d(WooLog.T.LOGIN, "Jetpack Activation: handle step: $stepType")
265227

266-
if (useApplicationPasswords) {
267-
trackSetupFlow()
268-
}
228+
trackSetupFlow()
269229

270230
when (stepType) {
271231
StepType.Installation -> {
@@ -294,13 +254,7 @@ class JetpackActivationMainViewModel @Inject constructor(
294254
}
295255

296256
StepType.Done -> {
297-
if (useApplicationPasswords) {
298-
analyticsTrackerWrapper.track(stat = AnalyticsEvent.JETPACK_SETUP_COMPLETED)
299-
} else {
300-
analyticsTrackerWrapper.track(
301-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_ALL_STEPS_MARKED_DONE
302-
)
303-
}
257+
analyticsTrackerWrapper.track(stat = AnalyticsEvent.JETPACK_SETUP_COMPLETED)
304258

305259
currentStep.value = Step(
306260
type = StepType.Done,
@@ -335,76 +289,32 @@ class JetpackActivationMainViewModel @Inject constructor(
335289
).collect { status ->
336290
when (status) {
337291
is PluginInstalled -> {
338-
if (!useApplicationPasswords) {
339-
analyticsTrackerWrapper.track(AnalyticsEvent.LOGIN_JETPACK_SETUP_INSTALL_SUCCESSFUL)
340-
}
341292
currentStep.value = Step(type = StepType.Activation, state = StepState.Ongoing)
342293
}
343294

344295
is PluginInstallFailed -> {
345-
trackPluginInstallationError(status)
296+
trackSetupFlow(failure = "Jetpack installation failed: $status")
346297
currentStep.update { state -> state.copy(state = StepState.Error(status.errorCode)) }
347298
}
348299

349300
is PluginActivated -> {
350-
if (!useApplicationPasswords) {
351-
analyticsTrackerWrapper.track(AnalyticsEvent.LOGIN_JETPACK_SETUP_ACTIVATION_SUCCESSFUL)
352-
}
353301
currentStep.value = Step(type = StepType.Connection, state = StepState.Ongoing)
354302
}
355303

356304
is PluginActivationFailed -> {
357-
trackPluginActivationError(status)
305+
trackSetupFlow(failure = "Jetpack activation failed: $status")
358306
currentStep.update { state -> state.copy(state = StepState.Error(status.errorCode)) }
359307
}
360308
}
361309
}
362310
}
363311

364-
private fun trackPluginActivationError(status: PluginActivationFailed) {
365-
if (useApplicationPasswords) {
366-
trackSetupFlow(failure = "Jetpack activation failed: $status")
367-
} else {
368-
analyticsTrackerWrapper.track(
369-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_ACTIVATION_FAILED,
370-
properties = mapOf(AnalyticsTracker.KEY_ERROR_CODE to status.errorCode.toString()),
371-
errorContext = this@JetpackActivationMainViewModel::class.simpleName,
372-
errorType = status.errorType,
373-
errorDescription = status.errorDescription
374-
)
375-
}
376-
}
377-
378-
private fun trackPluginInstallationError(status: PluginInstallFailed) {
379-
if (useApplicationPasswords) {
380-
trackSetupFlow(failure = "Jetpack installation failed: $status")
381-
} else {
382-
analyticsTrackerWrapper.track(
383-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_INSTALL_FAILED,
384-
properties = mapOf(AnalyticsTracker.KEY_ERROR_CODE to status.errorCode.toString()),
385-
errorContext = this@JetpackActivationMainViewModel::class.simpleName,
386-
errorType = status.errorType,
387-
errorDescription = status.errorDescription
388-
)
389-
}
390-
}
391-
392312
@Suppress("LongMethod")
393313
private suspend fun startJetpackConnection() {
394314
val onFailure: (Throwable) -> Unit = {
395315
val error = (it as? OnChangedException)?.error as? JetpackStore.JetpackError
396316

397-
if (useApplicationPasswords) {
398-
trackSetupFlow(failure = "Jetpack connection failed: ${it.message}")
399-
} else {
400-
analyticsTrackerWrapper.track(
401-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_FETCH_JETPACK_CONNECTION_URL_FAILED,
402-
properties = mapOf(AnalyticsTracker.KEY_ERROR_CODE to error?.errorCode.toString()),
403-
errorContext = this@JetpackActivationMainViewModel::class.simpleName,
404-
errorType = it::class.simpleName,
405-
errorDescription = it.message.orEmpty()
406-
)
407-
}
317+
trackSetupFlow(failure = "Jetpack connection failed: ${it.message}")
408318
currentStep.update { state -> state.copy(state = StepState.Error(error?.errorCode)) }
409319
}
410320

@@ -436,12 +346,6 @@ class JetpackActivationMainViewModel @Inject constructor(
436346
val currentSite = site.await()
437347
jetpackActivationRepository.fetchJetpackConnectionUrl(currentSite, useApplicationPasswords).fold(
438348
onSuccess = { connectionUrl ->
439-
if (!useApplicationPasswords) {
440-
analyticsTrackerWrapper.track(
441-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_FETCH_JETPACK_CONNECTION_URL_SUCCESSFUL
442-
)
443-
}
444-
445349
if (useApplicationPasswords) {
446350
// Depending on the site's connection status, we should provide different URLs to the webview.
447351
// If the site is already registered with WordPress.com, we can use the API-given URL as-is. We
@@ -493,11 +397,6 @@ class JetpackActivationMainViewModel @Inject constructor(
493397
onSuccess = { email ->
494398
jetpackConnectedEmail = email
495399
if (accountRepository.getUserAccount()?.email != email) {
496-
if (!useApplicationPasswords) {
497-
analyticsTrackerWrapper.track(
498-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_AUTHORIZED_USING_DIFFERENT_WPCOM_ACCOUNT
499-
)
500-
}
501400
WooLog.d(
502401
WooLog.T.LOGIN,
503402
"Jetpack Activation: connection made using a different email than the logged in one"
@@ -510,17 +409,7 @@ class JetpackActivationMainViewModel @Inject constructor(
510409
onFailure = {
511410
val error = (it as? OnChangedException)?.error as? JetpackStore.JetpackError
512411

513-
if (useApplicationPasswords) {
514-
trackSetupFlow(failure = "Jetpack connection validation failed: ${it.message}")
515-
} else {
516-
analyticsTrackerWrapper.track(
517-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_ERROR_CHECKING_JETPACK_CONNECTION,
518-
properties = mapOf(AnalyticsTracker.KEY_ERROR_CODE to error?.errorCode.toString()),
519-
errorContext = this@JetpackActivationMainViewModel::class.simpleName,
520-
errorType = it::class.simpleName,
521-
errorDescription = it.message.orEmpty()
522-
)
523-
}
412+
trackSetupFlow(failure = "Jetpack connection validation failed: ${it.message}")
524413
currentStep.update { state -> state.copy(state = StepState.Error(error?.errorCode)) }
525414
if (it is JetpackActivationRepository.JetpackMissingConnectionEmailException) {
526415
// If we can't find a connected email, we can't confirm the site connection. Let's
@@ -538,16 +427,8 @@ class JetpackActivationMainViewModel @Inject constructor(
538427
connectionStep.value = ConnectionStep.Approved
539428
},
540429
onFailure = {
541-
if (useApplicationPasswords) {
542-
trackSetupFlow(failure = "Site connection confirmation failed: ${it.message}")
543-
} else {
544-
analyticsTrackerWrapper.track(
545-
stat = AnalyticsEvent.LOGIN_JETPACK_FETCHING_WPCOM_SITES_FAILED,
546-
errorContext = this@JetpackActivationMainViewModel::class.simpleName,
547-
errorType = it::class.simpleName,
548-
errorDescription = it.message.orEmpty()
549-
)
550-
}
430+
trackSetupFlow(failure = "Site connection confirmation failed: ${it.message}")
431+
551432
currentStep.update { state -> state.copy(state = StepState.Error(null)) }
552433
}
553434
)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/start/JetpackActivationStartViewModel.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,15 @@ class JetpackActivationStartViewModel @Inject constructor(
5959

6060
fun onHelpButtonClick() {
6161
analyticsTrackerWrapper.track(
62-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_GET_SUPPORT_BUTTON_TAPPED,
62+
stat = AnalyticsEvent.JETPACK_SETUP_FLOW,
6363
properties = mapOf(
64-
AnalyticsTracker.KEY_JETPACK_INSTALLATION_STEP to
64+
AnalyticsTracker.KEY_STEP to if (navArgs.jetpackStatus.isJetpackInstalled) {
6565
JetpackActivationMainViewModel.StepType.Connection.analyticsName
66-
),
66+
} else {
67+
JetpackActivationMainViewModel.StepType.Installation.analyticsName
68+
},
69+
AnalyticsTracker.KEY_TAP to AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_SUPPORT,
70+
)
6771
)
6872
triggerEvent(NavigateToHelpScreen(JETPACK_INSTALLATION))
6973
}
@@ -80,12 +84,13 @@ class JetpackActivationStartViewModel @Inject constructor(
8084
fun onContinueButtonClick() {
8185
if (isConnectionDismissed.value) {
8286
analyticsTrackerWrapper.track(
83-
stat = AnalyticsEvent.LOGIN_JETPACK_SETUP_TRY_AGAIN_BUTTON_TAPPED,
87+
stat = AnalyticsEvent.JETPACK_SETUP_FLOW,
8488
properties = mapOf(
85-
AnalyticsTracker.KEY_JETPACK_INSTALLATION_STEP to
86-
JetpackActivationMainViewModel.StepType.Connection.analyticsName
89+
AnalyticsTracker.KEY_STEP to JetpackActivationMainViewModel.StepType.Connection.analyticsName,
90+
AnalyticsTracker.KEY_TAP to AnalyticsTracker.VALUE_JETPACK_SETUP_TAP_CONTINUE_SETUP,
8791
)
8892
)
93+
8994
isConnectionDismissed.value = false
9095
triggerEvent(
9196
ContinueJetpackConnection(

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/login/jetpack/JetpackActivationRepositoryTest.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.woocommerce.android.ui.login.jetpack
22

3-
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
43
import com.woocommerce.android.model.JetpackConnectionStatus
54
import com.woocommerce.android.model.JetpackSiteRegistrationStatus
65
import com.woocommerce.android.tools.SelectedSite
@@ -29,15 +28,13 @@ class JetpackActivationRepositoryTest : BaseUnitTest() {
2928
}
3029
private val wooCommerceStore: WooCommerceStore = mock()
3130
private val selectedSite: SelectedSite = mock()
32-
private val analyticsTracker: AnalyticsTrackerWrapper = mock()
3331

3432
private val repository = JetpackActivationRepository(
3533
dispatcher = dispatcher,
3634
siteStore = siteStore,
3735
jetpackStore = jetpackStore,
3836
wooCommerceStore = wooCommerceStore,
39-
selectedSite = selectedSite,
40-
analyticsTrackerWrapper = analyticsTracker
37+
selectedSite = selectedSite
4138
)
4239

4340
@Test

0 commit comments

Comments
 (0)