Skip to content

Commit f74b244

Browse files
authored
feat: Migrate to Team analytics update WPB-16050 (#3877)
1 parent dc3887f commit f74b244

File tree

14 files changed

+86
-351
lines changed

14 files changed

+86
-351
lines changed

app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import androidx.lifecycle.SavedStateHandle
2626
import androidx.lifecycle.viewModelScope
2727
import com.wire.android.datastore.GlobalDataStore
2828
import com.wire.android.datastore.UserDataStore
29-
import com.wire.android.feature.analytics.AnonymousAnalyticsManager
30-
import com.wire.android.feature.analytics.model.AnalyticsEvent
3129
import com.wire.android.migration.userDatabase.ShouldTriggerMigrationForUserUserCase
3230
import com.wire.android.model.ImageAsset.UserAvatarAsset
3331
import com.wire.android.model.NameBasedAvatar
@@ -55,8 +53,7 @@ class HomeViewModel @Inject constructor(
5553
private val needsToRegisterClient: NeedsToRegisterClientUseCase,
5654
private val canMigrateFromPersonalToTeam: CanMigrateFromPersonalToTeamUseCase,
5755
private val observeLegalHoldStatusForSelfUser: ObserveLegalHoldStateForSelfUserUseCase,
58-
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase,
59-
private val analyticsManager: AnonymousAnalyticsManager,
56+
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase
6057
) : SavedStateViewModel(savedStateHandle) {
6158

6259
@VisibleForTesting
@@ -141,12 +138,4 @@ class HomeViewModel @Inject constructor(
141138
homeState = homeState.copy(shouldDisplayWelcomeMessage = false)
142139
}
143140
}
144-
145-
fun sendOpenProfileEvent() {
146-
analyticsManager.sendEvent(
147-
AnalyticsEvent.UserProfileOpened(
148-
isMigrationDotActive = homeState.shouldShowCreateTeamUnreadIndicator
149-
)
150-
)
151-
}
152141
}

app/src/main/kotlin/com/wire/android/ui/userprofile/self/SelfUserProfileScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ fun SelfUserProfileScreen(
163163
)
164164
},
165165
onCreateAccount = {
166-
viewModelSelf.sendPersonalToTeamMigrationEvent()
167166
navigator.navigate(NavigationCommand(TeamMigrationScreenDestination))
168167
},
169168
onAccountDetailsClick = { navigator.navigate(NavigationCommand(MyAccountScreenDestination)) },

app/src/main/kotlin/com/wire/android/ui/userprofile/self/SelfUserProfileViewModel.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.wire.android.notification.WireNotificationManager
3939
import com.wire.android.ui.legalhold.banner.LegalHoldUIState
4040
import com.wire.android.ui.userprofile.self.dialog.StatusDialogData
4141
import com.wire.android.util.dispatchers.DispatcherProvider
42+
import com.wire.kalium.common.functional.getOrNull
4243
import com.wire.kalium.logic.data.call.Call
4344
import com.wire.kalium.logic.data.id.QualifiedIdMapper
4445
import com.wire.kalium.logic.data.id.toQualifiedID
@@ -61,7 +62,6 @@ import com.wire.kalium.logic.feature.user.IsReadOnlyAccountUseCase
6162
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
6263
import com.wire.kalium.logic.feature.user.ObserveValidAccountsUseCase
6364
import com.wire.kalium.logic.feature.user.UpdateSelfAvailabilityStatusUseCase
64-
import com.wire.kalium.common.functional.getOrNull
6565
import dagger.hilt.android.lifecycle.HiltViewModel
6666
import kotlinx.coroutines.flow.SharingStarted
6767
import kotlinx.coroutines.flow.StateFlow
@@ -325,14 +325,6 @@ class SelfUserProfileViewModel @Inject constructor(
325325
)
326326
}
327327

328-
fun sendPersonalToTeamMigrationEvent() {
329-
anonymousAnalyticsManager.sendEvent(
330-
AnalyticsEvent.PersonalTeamMigration.ClickedPersonalTeamMigrationCta(
331-
createTeamButtonClicked = true
332-
)
333-
)
334-
}
335-
336328
sealed class ErrorCodes {
337329
data object DownloadUserInfoError : ErrorCodes()
338330
}

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/TeamMigrationScreen.kt

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ import com.wire.android.ui.common.dimensions
5555
import com.wire.android.ui.common.preview.MultipleThemePreviews
5656
import com.wire.android.ui.theme.WireTheme
5757
import com.wire.android.ui.userprofile.teammigration.common.ConfirmMigrationLeaveDialog
58-
import com.wire.android.ui.userprofile.teammigration.step1.TEAM_MIGRATION_TEAM_PLAN_STEP
59-
import com.wire.android.ui.userprofile.teammigration.step2.TEAM_MIGRATION_TEAM_NAME_STEP
60-
import com.wire.android.ui.userprofile.teammigration.step3.TEAM_MIGRATION_CONFIRMATION_STEP
61-
import com.wire.android.ui.userprofile.teammigration.step4.TEAM_MIGRATION_DONE_STEP
6258

6359
@OptIn(ExperimentalMaterialNavigationApi::class, ExperimentalAnimationApi::class)
6460
@WireDestination(style = PopUpNavigationAnimation::class)
@@ -99,10 +95,18 @@ fun TeamMigrationScreen(
9995
.background(color = colorsScheme().surface)
10096
) {
10197
val closeIconContentDescription = when (teamMigrationViewModel.teamMigrationState.currentStep) {
102-
TEAM_MIGRATION_TEAM_PLAN_STEP -> stringResource(R.string.personal_to_team_migration_close_team_account_content_description)
103-
TEAM_MIGRATION_TEAM_NAME_STEP -> stringResource(R.string.personal_to_team_migration_close_team_name_content_description)
104-
TEAM_MIGRATION_CONFIRMATION_STEP -> stringResource(R.string.personal_to_team_migration_close_confirmation_content_description)
105-
TEAM_MIGRATION_DONE_STEP -> stringResource(R.string.personal_to_team_migration_close_team_created_content_description)
98+
TeamMigrationViewModel.TEAM_MIGRATION_TEAM_PLAN_STEP ->
99+
stringResource(R.string.personal_to_team_migration_close_team_account_content_description)
100+
101+
TeamMigrationViewModel.TEAM_MIGRATION_TEAM_NAME_STEP ->
102+
stringResource(R.string.personal_to_team_migration_close_team_name_content_description)
103+
104+
TeamMigrationViewModel.TEAM_MIGRATION_CONFIRMATION_STEP ->
105+
stringResource(R.string.personal_to_team_migration_close_confirmation_content_description)
106+
107+
TeamMigrationViewModel.TEAM_MIGRATION_DONE_STEP ->
108+
stringResource(R.string.personal_to_team_migration_close_team_created_content_description)
109+
106110
else -> stringResource(R.string.personal_to_team_migration_close_icon_content_description)
107111
}
108112

@@ -113,7 +117,6 @@ fun TeamMigrationScreen(
113117
if (navController.currentDestination?.route == NavGraphs.personalToTeamMigration.destinations.last().route) {
114118
navigator.navigateBack()
115119
} else {
116-
teamMigrationViewModel.sendPersonalToTeamMigrationDismissed()
117120
teamMigrationViewModel.showMigrationLeaveDialog()
118121
}
119122
}
@@ -139,17 +142,9 @@ fun TeamMigrationScreen(
139142

140143
if (teamMigrationViewModel.teamMigrationState.shouldShowMigrationLeaveDialog) {
141144
ConfirmMigrationLeaveDialog(
142-
onContinue = {
143-
teamMigrationViewModel.sendPersonalTeamCreationFlowCanceledEvent(
144-
modalContinueClicked = true
145-
)
146-
teamMigrationViewModel.hideMigrationLeaveDialog()
147-
}
145+
onContinue = teamMigrationViewModel::hideMigrationLeaveDialog
148146
) {
149147
teamMigrationViewModel.hideMigrationLeaveDialog()
150-
teamMigrationViewModel.sendPersonalTeamCreationFlowCanceledEvent(
151-
modalLeaveClicked = true
152-
)
153148
navigator.navigateBack()
154149
}
155150
}

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/TeamMigrationState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@ data class TeamMigrationState(
2727
val currentStep: Int = 0,
2828
val username: String = "",
2929
val teamUrl: String = "",
30-
val migrationFailure: MigrateFromPersonalToTeamFailure? = null
30+
val migrationFailure: MigrateFromPersonalToTeamFailure? = null,
31+
val isMigrationDotActive: Boolean = false
3132
)

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/TeamMigrationViewModel.kt

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import androidx.compose.runtime.mutableStateOf
2222
import androidx.compose.runtime.setValue
2323
import androidx.lifecycle.ViewModel
2424
import androidx.lifecycle.viewModelScope
25+
import com.wire.android.datastore.UserDataStore
2526
import com.wire.android.feature.analytics.AnonymousAnalyticsManager
2627
import com.wire.android.feature.analytics.model.AnalyticsEvent
2728
import com.wire.kalium.logic.feature.server.GetTeamUrlUseCase
@@ -38,6 +39,7 @@ class TeamMigrationViewModel @Inject constructor(
3839
private val anonymousAnalyticsManager: AnonymousAnalyticsManager,
3940
private val migrateFromPersonalToTeam: MigrateFromPersonalToTeamUseCase,
4041
private val observeSelfUser: ObserveSelfUserUseCase,
42+
private val dataStore: UserDataStore,
4143
private val getTeamUrl: GetTeamUrlUseCase
4244
) : ViewModel() {
4345

@@ -47,6 +49,7 @@ class TeamMigrationViewModel @Inject constructor(
4749
init {
4850
setUsername()
4951
setTeamUrl()
52+
observeMigrationDotActive()
5053
}
5154

5255
fun showMigrationLeaveDialog() {
@@ -57,50 +60,9 @@ class TeamMigrationViewModel @Inject constructor(
5760
teamMigrationState = teamMigrationState.copy(shouldShowMigrationLeaveDialog = false)
5861
}
5962

60-
fun sendPersonalToTeamMigrationDismissed() {
61-
anonymousAnalyticsManager.sendEvent(
62-
AnalyticsEvent.PersonalTeamMigration.ClickedPersonalTeamMigrationCta(
63-
dismissCreateTeamButtonClicked = true
64-
)
65-
)
66-
}
67-
68-
fun sendPersonalTeamCreationFlowStartedEvent(step: Int) {
69-
anonymousAnalyticsManager.sendEvent(
70-
AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowStarted(
71-
step = step
72-
)
73-
)
74-
}
75-
7663
fun setCurrentStep(step: Int) {
7764
teamMigrationState = teamMigrationState.copy(currentStep = step)
78-
}
79-
80-
fun sendPersonalTeamCreationFlowCanceledEvent(
81-
modalLeaveClicked: Boolean? = null,
82-
modalContinueClicked: Boolean? = null
83-
) {
84-
anonymousAnalyticsManager.sendEvent(
85-
AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowCanceled(
86-
teamName = teamMigrationState.teamNameTextState.text.toString(),
87-
modalLeaveClicked = modalLeaveClicked,
88-
modalContinueClicked = modalContinueClicked
89-
)
90-
)
91-
}
92-
93-
fun sendPersonalTeamCreationFlowCompletedEvent(
94-
modalOpenTeamManagementButtonClicked: Boolean? = null,
95-
backToWireButtonClicked: Boolean? = null
96-
) {
97-
anonymousAnalyticsManager.sendEvent(
98-
AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowCompleted(
99-
teamName = teamMigrationState.teamNameTextState.text.toString(),
100-
modalOpenTeamManagementButtonClicked = modalOpenTeamManagementButtonClicked,
101-
backToWireButtonClicked = backToWireButtonClicked
102-
)
103-
)
65+
sendPersonalTeamCreationFlowStepEvent(step)
10466
}
10567

10668
fun setIsMigratingState(isMigrating: Boolean) {
@@ -148,4 +110,35 @@ class TeamMigrationViewModel @Inject constructor(
148110
teamMigrationState = teamMigrationState.copy(teamUrl = getTeamUrl())
149111
}
150112
}
113+
114+
private fun observeMigrationDotActive() {
115+
viewModelScope.launch {
116+
dataStore.isCreateTeamNoticeRead().collect { isRead ->
117+
teamMigrationState = teamMigrationState.copy(
118+
isMigrationDotActive = !isRead
119+
)
120+
}
121+
}
122+
}
123+
124+
private fun sendPersonalTeamCreationFlowStepEvent(step: Int) {
125+
val event = when (step) {
126+
TEAM_MIGRATION_TEAM_PLAN_STEP -> AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowTeamPlan(
127+
isMigrationDotActive = teamMigrationState.isMigrationDotActive
128+
)
129+
130+
TEAM_MIGRATION_TEAM_NAME_STEP -> AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowTeamName
131+
TEAM_MIGRATION_CONFIRMATION_STEP -> AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowConfirm
132+
TEAM_MIGRATION_DONE_STEP -> AnalyticsEvent.PersonalTeamMigration.PersonalTeamCreationFlowCompleted
133+
else -> null
134+
}
135+
event?.let { anonymousAnalyticsManager.sendEvent(event) }
136+
}
137+
138+
companion object {
139+
const val TEAM_MIGRATION_TEAM_PLAN_STEP = 1
140+
const val TEAM_MIGRATION_TEAM_NAME_STEP = 2
141+
const val TEAM_MIGRATION_CONFIRMATION_STEP = 3
142+
const val TEAM_MIGRATION_DONE_STEP = 4
143+
}
151144
}

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/step1/TeamMigrationTeamPlanStepScreen.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ import com.wire.android.ui.userprofile.teammigration.common.BottomLineButtons
5959
import com.wire.android.util.CustomTabsHelper
6060
import com.wire.android.util.ui.PreviewMultipleThemes
6161

62-
const val TEAM_MIGRATION_TEAM_PLAN_STEP = 1
63-
6462
@PersonalToTeamMigrationNavGraph(start = true)
6563
@WireDestination(
6664
style = SlideNavigationAnimation::class
@@ -77,8 +75,7 @@ fun TeamMigrationTeamPlanStepScreen(
7775
)
7876

7977
LaunchedEffect(Unit) {
80-
teamMigrationViewModel.sendPersonalTeamCreationFlowStartedEvent(TEAM_MIGRATION_TEAM_PLAN_STEP)
81-
teamMigrationViewModel.setCurrentStep(TEAM_MIGRATION_TEAM_PLAN_STEP)
78+
teamMigrationViewModel.setCurrentStep(TeamMigrationViewModel.TEAM_MIGRATION_TEAM_PLAN_STEP)
8279
}
8380
}
8481

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/step2/TeamMigrationTeamNameStepScreen.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ import com.wire.android.ui.userprofile.teammigration.TeamMigrationViewModel
4949
import com.wire.android.ui.userprofile.teammigration.common.BottomLineButtons
5050
import com.wire.android.util.ui.PreviewMultipleThemes
5151

52-
const val TEAM_MIGRATION_TEAM_NAME_STEP = 2
53-
5452
@PersonalToTeamMigrationNavGraph
5553
@WireDestination(
5654
style = SlideNavigationAnimation::class
@@ -70,8 +68,7 @@ fun TeamMigrationTeamNameStepScreen(
7068
teamNameTextFieldState = teamMigrationViewModel.teamMigrationState.teamNameTextState
7169
)
7270
LaunchedEffect(Unit) {
73-
teamMigrationViewModel.sendPersonalTeamCreationFlowStartedEvent(TEAM_MIGRATION_TEAM_NAME_STEP)
74-
teamMigrationViewModel.setCurrentStep(TEAM_MIGRATION_TEAM_NAME_STEP)
71+
teamMigrationViewModel.setCurrentStep(TeamMigrationViewModel.TEAM_MIGRATION_TEAM_NAME_STEP)
7572
}
7673
}
7774

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/step3/TeamMigrationConfirmationStepScreen.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ import com.wire.android.util.CustomTabsHelper
6464
import com.wire.android.util.ui.PreviewMultipleThemes
6565
import com.wire.kalium.logic.feature.user.migration.MigrateFromPersonalToTeamFailure
6666

67-
const val TEAM_MIGRATION_CONFIRMATION_STEP = 3
68-
6967
@PersonalToTeamMigrationNavGraph
7068
@WireDestination(
7169
style = SlideNavigationAnimation::class
@@ -109,8 +107,7 @@ fun TeamMigrationConfirmationStepScreen(
109107
)
110108

111109
LaunchedEffect(Unit) {
112-
teamMigrationViewModel.sendPersonalTeamCreationFlowStartedEvent(TEAM_MIGRATION_CONFIRMATION_STEP)
113-
teamMigrationViewModel.setCurrentStep(TEAM_MIGRATION_CONFIRMATION_STEP)
110+
teamMigrationViewModel.setCurrentStep(TeamMigrationViewModel.TEAM_MIGRATION_CONFIRMATION_STEP)
114111
}
115112
}
116113

app/src/main/kotlin/com/wire/android/ui/userprofile/teammigration/step4/TeamMigrationDoneStepScreen.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ import com.wire.android.ui.userprofile.teammigration.common.BulletList
5252
import com.wire.android.util.CustomTabsHelper
5353
import com.wire.android.util.ui.PreviewMultipleThemes
5454

55-
const val TEAM_MIGRATION_DONE_STEP = 4
56-
5755
@PersonalToTeamMigrationNavGraph
5856
@WireDestination(
5957
style = SlideNavigationAnimation::class
@@ -67,9 +65,6 @@ fun TeamMigrationDoneStepScreen(
6765

6866
TeamMigrationDoneStepContent(
6967
onBackToWireClicked = {
70-
teamMigrationViewModel.sendPersonalTeamCreationFlowCompletedEvent(
71-
backToWireButtonClicked = true
72-
)
7368
navigator.navigate(
7469
NavigationCommand(
7570
HomeScreenDestination,
@@ -79,18 +74,14 @@ fun TeamMigrationDoneStepScreen(
7974
},
8075
onOpenTeamManagementClicked = {
8176
val teamManagementUrl = teamMigrationViewModel.teamMigrationState.teamUrl
82-
83-
teamMigrationViewModel.sendPersonalTeamCreationFlowCompletedEvent(
84-
modalOpenTeamManagementButtonClicked = true
85-
)
8677
CustomTabsHelper.launchUrl(context, teamManagementUrl)
8778
},
8879
username = teamMigrationViewModel.teamMigrationState.username,
8980
teamName = teamMigrationViewModel.teamMigrationState.teamNameTextState.text.toString()
9081
)
9182

9283
LaunchedEffect(Unit) {
93-
teamMigrationViewModel.setCurrentStep(TEAM_MIGRATION_DONE_STEP)
84+
teamMigrationViewModel.setCurrentStep(TeamMigrationViewModel.TEAM_MIGRATION_DONE_STEP)
9485
}
9586

9687
BackHandler { }

0 commit comments

Comments
 (0)