Skip to content

Commit 00ac1e5

Browse files
committed
chore: add metrics around connect account for tips flow
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent d8c0a9d commit 00ac1e5

5 files changed

Lines changed: 46 additions & 7 deletions

File tree

api/src/main/java/com/getcode/analytics/AnalyticsManager.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ import timber.log.Timber
1717
import javax.inject.Inject
1818
import javax.inject.Singleton
1919

20-
enum class Action(val value: String) {
21-
CreateAccount("Action: Create Account"),
22-
EnterPhone("Action: Enter Phone"),
23-
VerifyPhone("Action: Verify Phone"),
24-
ConfirmAccessKey("Action: Confirm Access Key"),
25-
CompletedOnboarding("Action: Completed Onboarding"),
20+
sealed class Action(private val _value: String) {
21+
data object CreateAccount : Action("Create Account")
22+
data object EnterPhone : Action("Enter Phone")
23+
data object VerifyPhone : Action("Verify Phone")
24+
data object ConfirmAccessKey : Action("Confirm Access Key")
25+
data object CompletedOnboarding : Action("Completed Onboarding")
26+
data object OpenConnectAccount: Action("Open Connect X Screen")
27+
data object MessageCodeOnX: Action("Message Code on X")
28+
29+
val value: String
30+
get() = "Action: $_value"
2631
}
2732

2833
enum class ActionSource(val value: String) {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.getcode.analytics
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.platform.LocalLifecycleOwner
5+
import androidx.lifecycle.LifecycleOwner
6+
import cafe.adriel.voyager.core.screen.Screen
7+
import com.getcode.navigation.core.LocalCodeNavigator
8+
9+
@Composable
10+
fun Screen.AnalyticsScreenWatcher(
11+
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
12+
action: Action,
13+
) {
14+
val navigator = LocalCodeNavigator.current
15+
val lastItem = navigator.lastItem
16+
if (lastItem?.key == key) {
17+
AnalyticsWatcher(
18+
lifecycleOwner = lifecycleOwner,
19+
onEvent = { analytics, _ -> analytics.action(action) }
20+
)
21+
}
22+
}

app/src/main/java/com/getcode/analytics/AnalyticsWatcher.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import androidx.compose.runtime.Composable
55
import androidx.compose.runtime.getValue
66
import androidx.compose.runtime.rememberUpdatedState
77
import androidx.compose.ui.platform.LocalContext
8+
import androidx.compose.ui.platform.LocalLifecycleOwner
89
import androidx.lifecycle.Lifecycle
910
import androidx.lifecycle.LifecycleOwner
1011
import com.getcode.LocalAnalytics
1112
import com.getcode.ui.utils.RepeatOnLifecycle
1213

1314
@Composable
1415
fun AnalyticsWatcher(
15-
lifecycleOwner: LifecycleOwner,
16+
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
1617
onEvent: (AnalyticsService, Context) -> Unit,
1718
onDispose: (AnalyticsService, Context) -> Unit = { _, _ -> },
1819
) {

app/src/main/java/com/getcode/navigation/screens/ModalScreens.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import cafe.adriel.voyager.hilt.getViewModel
1313
import cafe.adriel.voyager.navigator.currentOrThrow
1414
import com.getcode.LocalSession
1515
import com.getcode.R
16+
import com.getcode.analytics.Action
17+
import com.getcode.analytics.AnalyticsManager
18+
import com.getcode.analytics.AnalyticsScreenWatcher
1619
import com.getcode.navigation.core.LocalCodeNavigator
1720
import com.getcode.theme.CodeTheme
1821
import com.getcode.ui.components.SheetTitleDefaults
@@ -496,6 +499,10 @@ data class ConnectAccount(
496499
LaunchedEffect(viewModel, reason) {
497500
viewModel.dispatchEvent(TipConnectViewModel.Event.OnReasonChanged(reason))
498501
}
502+
503+
if (reason == IdentityConnectionReason.TipCard) {
504+
AnalyticsScreenWatcher(action = Action.OpenConnectAccount)
505+
}
499506
}
500507
}
501508

app/src/main/java/com/getcode/view/main/tip/TipConnectViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.getcode.view.main.tip
33
import android.content.Intent
44
import androidx.lifecycle.viewModelScope
55
import com.getcode.R
6+
import com.getcode.analytics.Action
7+
import com.getcode.analytics.AnalyticsService
68
import com.getcode.network.TipController
79
import com.getcode.util.IntentUtils
810
import com.getcode.util.resources.ResourceHelper
@@ -19,6 +21,7 @@ import javax.inject.Inject
1921
class TipConnectViewModel @Inject constructor(
2022
resources: ResourceHelper,
2123
tipController: TipController,
24+
analytics: AnalyticsService,
2225
) : BaseViewModel2<TipConnectViewModel.State, TipConnectViewModel.Event>(
2326
initialState = State(null, ""),
2427
updateStateForEvent = updateStateForEvent
@@ -68,6 +71,7 @@ class TipConnectViewModel @Inject constructor(
6871
.map { stateFlow.value.xMessage }
6972
.map { IntentUtils.tweet(it) }
7073
.onEach {
74+
analytics.action(Action.MessageCodeOnX)
7175
dispatchEvent(Event.OpenX(it))
7276
tipController.startVerification()
7377
}.launchIn(viewModelScope)

0 commit comments

Comments
 (0)