Skip to content

Commit 49d0967

Browse files
committed
chore: add onramp analytics
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 21310c1 commit 49d0967

File tree

13 files changed

+227
-8
lines changed

13 files changed

+227
-8
lines changed

apps/flipcash/features/balance/src/main/kotlin/com/flipcash/app/balance/internal/BalanceViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import com.flipcash.app.onramp.ConfirmationEvent
1515
import com.flipcash.app.onramp.OnRampAmount
1616
import com.flipcash.app.onramp.OnRampAmountController
1717
import com.flipcash.features.balance.R
18+
import com.flipcash.services.analytics.AnalyticsEvent
19+
import com.flipcash.services.analytics.FlipcashAnalyticsService
1820
import com.flipcash.services.internal.model.thirdparty.OnRampProvider
1921
import com.flipcash.services.internal.model.thirdparty.OnRampType
2022
import com.flipcash.services.user.AuthState
@@ -52,6 +54,7 @@ internal class BalanceViewModel @Inject constructor(
5254
resources: ResourceHelper,
5355
private val exchange: Exchange,
5456
onrampController: OnRampAmountController,
57+
analytics: FlipcashAnalyticsService,
5558
) : BaseViewModel2<BalanceViewModel.State, BalanceViewModel.Event>(
5659
initialState = State(),
5760
updateStateForEvent = updateStateForEvent
@@ -176,6 +179,7 @@ internal class BalanceViewModel @Inject constructor(
176179
eventFlow
177180
.filterIsInstance<Event.OnAddCashClicked>()
178181
.onEach {
182+
analytics.openOnramp(AnalyticsEvent.OnRampOpenEvent.Balance)
179183
val provider = stateFlow.value.preferredOnRampProvider
180184
if (provider is OnRampProvider.Coinbase && provider.type == OnRampType.Virtual) {
181185
// has coinbase provider supporting google pay - pop selection for quick add

apps/flipcash/features/cash/src/main/kotlin/com/flipcash/app/cash/internal/CashScreenViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.flipcash.app.onramp.ConfirmationEvent
88
import com.flipcash.app.onramp.OnRampAmount
99
import com.flipcash.app.onramp.OnRampAmountController
1010
import com.flipcash.features.cash.R
11+
import com.flipcash.services.analytics.AnalyticsEvent
12+
import com.flipcash.services.analytics.FlipcashAnalyticsService
1113
import com.flipcash.services.internal.model.thirdparty.OnRampProvider
1214
import com.flipcash.services.internal.model.thirdparty.OnRampType
1315
import com.getcode.manager.BottomBarAction
@@ -50,6 +52,7 @@ internal class CashScreenViewModel @Inject constructor(
5052
balanceController: BalanceController,
5153
transactionController: TransactionController,
5254
onrampController: OnRampAmountController,
55+
analytics: FlipcashAnalyticsService,
5356
) : BaseViewModel2<CashScreenViewModel.State, CashScreenViewModel.Event>(
5457
initialState = State(),
5558
updateStateForEvent = updateStateForEvent
@@ -302,6 +305,7 @@ internal class CashScreenViewModel @Inject constructor(
302305
.filterIsInstance<Event.AddCashToWallet>()
303306
.map { it.amount }
304307
.onEach { amount ->
308+
analytics.openOnramp(AnalyticsEvent.OnRampOpenEvent.Give)
305309
val provider = stateFlow.value.preferredOnRampProvider
306310
if (provider is OnRampProvider.Coinbase && provider.type == OnRampType.Virtual) {
307311
// has coinbase provider supporting google pay - pop selection for quick add

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/VerificationFlowScreen.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ import com.flipcash.app.navigation.FlowNavigator
2424
import com.flipcash.app.navigation.LocalFlowNavigator
2525
import com.flipcash.app.navigation.NavigationFlowStep
2626
import com.flipcash.features.contact.verification.R
27+
import com.flipcash.services.analytics.AnalyticsEvent
28+
import com.flipcash.services.analytics.FlipcashAnalyticsService
29+
import com.getcode.libs.analytics.LocalAnalytics
2730
import com.getcode.manager.BottomBarAction
2831
import com.getcode.manager.BottomBarManager
2932
import com.getcode.navigation.core.CodeNavigator

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/email/EmailMagicLinkScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import androidx.compose.ui.Alignment
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.platform.LocalContext
1212
import androidx.compose.ui.res.stringResource
13+
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
14+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffectOnce
1315
import cafe.adriel.voyager.core.screen.Screen
1416
import cafe.adriel.voyager.core.screen.ScreenKey
1517
import cafe.adriel.voyager.core.screen.uniqueScreenKey
@@ -21,6 +23,9 @@ import com.flipcash.app.core.android.IntentUtils
2123
import com.flipcash.app.navigation.FlowNavigator
2224
import com.flipcash.app.navigation.LocalFlowNavigator
2325
import com.flipcash.features.contact.verification.R
26+
import com.flipcash.services.analytics.AnalyticsEvent
27+
import com.flipcash.services.analytics.FlipcashAnalyticsService
28+
import com.getcode.libs.analytics.LocalAnalytics
2429
import com.getcode.navigation.extensions.getStackScopedViewModel
2530
import com.getcode.navigation.screens.NamedScreen
2631
import com.getcode.ui.components.AppBarWithTitle
@@ -42,6 +47,7 @@ class EmailMagicLinkScreen(
4247
override val name: String
4348
@Composable get() = stringResource(R.string.title_verifyEmailAddress)
4449

50+
@OptIn(ExperimentalVoyagerApi::class)
4551
@Composable
4652
override fun Content() {
4753
val flowNavigator = LocalFlowNavigator.current as FlowNavigator<VerificationFlowStep>
@@ -52,6 +58,11 @@ class EmailMagicLinkScreen(
5258
flowNavigator.exit(false)
5359
}
5460

61+
val analytics = LocalAnalytics.current as FlipcashAnalyticsService
62+
LifecycleEffectOnce {
63+
analytics.onrampVerification(AnalyticsEvent.OnRampVerificationEvent.ConfirmEmail)
64+
}
65+
5566
Column(
5667
modifier = Modifier.fillMaxSize(),
5768
horizontalAlignment = Alignment.CenterHorizontally,

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/email/EmailVerificationScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import androidx.compose.runtime.LaunchedEffect
99
import androidx.compose.ui.Alignment
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.res.stringResource
12+
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
13+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffectOnce
1214
import cafe.adriel.voyager.core.screen.Screen
1315
import cafe.adriel.voyager.core.screen.ScreenKey
1416
import cafe.adriel.voyager.core.screen.uniqueScreenKey
@@ -18,6 +20,9 @@ import com.flipcash.app.contact.verification.EmailVerificationFlow
1820
import com.flipcash.app.contact.verification.internal.email.EmailEntryScreen
1921
import com.flipcash.app.contact.verification.internal.email.EmailVerificationViewModel
2022
import com.flipcash.features.contact.verification.R
23+
import com.flipcash.services.analytics.AnalyticsEvent
24+
import com.flipcash.services.analytics.FlipcashAnalyticsService
25+
import com.getcode.libs.analytics.LocalAnalytics
2126
import com.getcode.navigation.core.LocalCodeNavigator
2227
import com.getcode.navigation.extensions.getStackScopedViewModel
2328
import com.getcode.navigation.screens.NamedScreen
@@ -38,6 +43,7 @@ class EmailVerificationScreen : Screen, NamedScreen, Parcelable {
3843
override val name: String
3944
@Composable get() = stringResource(R.string.title_verifyEmailAddress)
4045

46+
@OptIn(ExperimentalVoyagerApi::class)
4147
@Composable
4248
override fun Content() {
4349
val codeNavigator = LocalCodeNavigator.current
@@ -62,6 +68,11 @@ class EmailVerificationScreen : Screen, NamedScreen, Parcelable {
6268
EmailEntryScreen(viewModel)
6369
}
6470

71+
val analytics = LocalAnalytics.current as FlipcashAnalyticsService
72+
LifecycleEffectOnce {
73+
analytics.onrampVerification(AnalyticsEvent.OnRampVerificationEvent.EnterEmail)
74+
}
75+
6576
BackHandler {
6677
keyboard.hideIfVisible {
6778
codeNavigator.pop()

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/internal/VerificationFlowIntroScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import androidx.compose.ui.res.painterResource
2323
import androidx.compose.ui.res.stringResource
2424
import androidx.compose.ui.text.style.TextAlign
2525
import androidx.compose.ui.tooling.preview.Preview
26+
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
27+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffectOnce
2628
import cafe.adriel.voyager.core.screen.Screen
2729
import cafe.adriel.voyager.core.screen.ScreenKey
2830
import cafe.adriel.voyager.core.screen.uniqueScreenKey
@@ -31,6 +33,9 @@ import com.flipcash.app.navigation.FlowNavigator
3133
import com.flipcash.app.navigation.LocalFlowNavigator
3234
import com.flipcash.app.theme.FlipcashDesignSystem
3335
import com.flipcash.features.contact.verification.R
36+
import com.flipcash.services.analytics.AnalyticsEvent
37+
import com.flipcash.services.analytics.FlipcashAnalyticsService
38+
import com.getcode.libs.analytics.LocalAnalytics
3439
import com.getcode.navigation.core.LocalCodeNavigator
3540
import com.getcode.theme.CodeTheme
3641
import com.getcode.ui.theme.ButtonState
@@ -48,6 +53,7 @@ class VerificationFlowIntroScreen(
4853
@IgnoredOnParcel
4954
override val key: ScreenKey = uniqueScreenKey
5055

56+
@OptIn(ExperimentalVoyagerApi::class)
5157
@Composable
5258
override fun Content() {
5359
val codeNavigator = LocalCodeNavigator.current
@@ -59,6 +65,11 @@ class VerificationFlowIntroScreen(
5965
onClick = { flowNavigator.continueFlowFrom(VerificationFlowStep.Intro) },
6066
)
6167

68+
val analytics = LocalAnalytics.current as FlipcashAnalyticsService
69+
LifecycleEffectOnce {
70+
analytics.onrampVerification(AnalyticsEvent.OnRampVerificationEvent.ShowInfo)
71+
}
72+
6273
BackHandler {
6374
keyboard.hideIfVisible {
6475
codeNavigator.pop()

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/phone/PhoneCodeScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import androidx.compose.runtime.LaunchedEffect
99
import androidx.compose.ui.Alignment
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.res.stringResource
12+
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
13+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffectOnce
1214
import cafe.adriel.voyager.core.screen.Screen
1315
import cafe.adriel.voyager.core.screen.ScreenKey
1416
import cafe.adriel.voyager.core.screen.uniqueScreenKey
@@ -19,6 +21,9 @@ import com.flipcash.app.contact.verification.internal.phone.PhoneVerificationVie
1921
import com.flipcash.app.navigation.FlowNavigator
2022
import com.flipcash.app.navigation.LocalFlowNavigator
2123
import com.flipcash.features.contact.verification.R
24+
import com.flipcash.services.analytics.AnalyticsEvent
25+
import com.flipcash.services.analytics.FlipcashAnalyticsService
26+
import com.getcode.libs.analytics.LocalAnalytics
2227
import com.getcode.navigation.extensions.getStackScopedViewModel
2328
import com.getcode.navigation.screens.NamedScreen
2429
import com.getcode.ui.components.AppBarWithTitle
@@ -37,6 +42,7 @@ class PhoneCodeScreen: Screen, NamedScreen, Parcelable {
3742
override val name: String
3843
@Composable get() = stringResource(R.string.title_enterTheCode)
3944

45+
@OptIn(ExperimentalVoyagerApi::class)
4046
@Composable
4147
override fun Content() {
4248
val flowNavigator = LocalFlowNavigator.current as FlowNavigator<VerificationFlowStep>
@@ -57,6 +63,11 @@ class PhoneCodeScreen: Screen, NamedScreen, Parcelable {
5763
PhoneCodeScreen(viewModel)
5864
}
5965

66+
val analytics = LocalAnalytics.current as FlipcashAnalyticsService
67+
LifecycleEffectOnce {
68+
analytics.onrampVerification(AnalyticsEvent.OnRampVerificationEvent.ConfirmPhone)
69+
}
70+
6071
LaunchedEffect(viewModel) {
6172
viewModel.eventFlow
6273
.filterIsInstance<PhoneVerificationViewModel.Event.OnMaxAttemptsReached>()

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/phone/PhoneVerificationScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import androidx.compose.runtime.LaunchedEffect
99
import androidx.compose.ui.Alignment
1010
import androidx.compose.ui.Modifier
1111
import androidx.compose.ui.res.stringResource
12+
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
13+
import cafe.adriel.voyager.core.lifecycle.LifecycleEffectOnce
1214
import cafe.adriel.voyager.core.screen.Screen
1315
import cafe.adriel.voyager.core.screen.ScreenKey
1416
import cafe.adriel.voyager.core.screen.uniqueScreenKey
@@ -18,6 +20,9 @@ import com.flipcash.app.contact.verification.PhoneVerificationFlow
1820
import com.flipcash.app.contact.verification.internal.phone.PhoneEntryScreen
1921
import com.flipcash.app.contact.verification.internal.phone.PhoneVerificationViewModel
2022
import com.flipcash.features.contact.verification.R
23+
import com.flipcash.services.analytics.AnalyticsEvent
24+
import com.flipcash.services.analytics.FlipcashAnalyticsService
25+
import com.getcode.libs.analytics.LocalAnalytics
2126
import com.getcode.navigation.core.LocalCodeNavigator
2227
import com.getcode.navigation.extensions.getStackScopedViewModel
2328
import com.getcode.navigation.screens.NamedScreen
@@ -38,6 +43,7 @@ class PhoneVerificationScreen : Screen, NamedScreen, Parcelable {
3843
override val name: String
3944
@Composable get() = stringResource(R.string.title_verifyPhoneNumber)
4045

46+
@OptIn(ExperimentalVoyagerApi::class)
4147
@Composable
4248
override fun Content() {
4349
val codeNavigator = LocalCodeNavigator.current
@@ -63,6 +69,11 @@ class PhoneVerificationScreen : Screen, NamedScreen, Parcelable {
6369
PhoneEntryScreen(viewModel)
6470
}
6571

72+
val analytics = LocalAnalytics.current as FlipcashAnalyticsService
73+
LifecycleEffectOnce {
74+
analytics.onrampVerification(AnalyticsEvent.OnRampVerificationEvent.EnterPhone)
75+
}
76+
6677
BackHandler {
6778
keyboard.hideIfVisible {
6879
codeNavigator.pop()

apps/flipcash/features/menu/src/main/kotlin/com/flipcash/app/menu/internal/MenuScreenViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import com.flipcash.app.onramp.ConfirmationEvent
1313
import com.flipcash.app.onramp.OnRampAmount
1414
import com.flipcash.app.onramp.OnRampAmountController
1515
import com.flipcash.features.menu.R
16+
import com.flipcash.services.analytics.AnalyticsEvent
17+
import com.flipcash.services.analytics.FlipcashAnalyticsService
1618
import com.flipcash.services.internal.model.thirdparty.OnRampProvider
1719
import com.flipcash.services.internal.model.thirdparty.OnRampType
1820
import com.flipcash.services.user.AuthState
@@ -54,6 +56,7 @@ internal class MenuScreenViewModel @Inject constructor(
5456
mnemonicManager: MnemonicManager,
5557
featureFlags: FeatureFlagController,
5658
onrampController: OnRampAmountController,
59+
analytics: FlipcashAnalyticsService,
5760
) :
5861
BaseViewModel2<MenuScreenViewModel.State, MenuScreenViewModel.Event>(
5962
initialState = State(),
@@ -126,6 +129,7 @@ internal class MenuScreenViewModel @Inject constructor(
126129
eventFlow
127130
.filterIsInstance<Event.OnAddCashClicked>()
128131
.onEach {
132+
analytics.openOnramp(AnalyticsEvent.OnRampOpenEvent.Settings)
129133
val provider = stateFlow.value.preferredOnRampProvider
130134
if (provider is OnRampProvider.Coinbase && provider.type == OnRampType.Virtual) {
131135
// has coinbase provider supporting google pay - pop selection for quick add

apps/flipcash/shared/onramp/common/src/main/kotlin/com/flipcash/app/onramp/OnRampAmountSelectionModal.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ import androidx.compose.ui.text.style.TextAlign
2727
import androidx.compose.ui.tooling.preview.Preview
2828
import com.flipcash.app.onramp.internal.InternalOnRampAmountController
2929
import com.flipcash.app.theme.FlipcashDesignSystem
30+
import com.flipcash.services.analytics.StubFlipcashAnalytics
3031
import com.flipcash.services.internal.model.thirdparty.OnRampProvider
31-
import com.flipcash.services.internal.model.thirdparty.OnRampType
32+
import com.flipcash.shared.onramp.common.R
3233
import com.getcode.opencode.model.financial.Fiat
3334
import com.getcode.opencode.model.financial.toFiat
3435
import com.getcode.theme.CodeTheme
3536
import com.getcode.theme.extraSmall
3637
import com.getcode.ui.components.AppBarWithTitle
38+
import com.getcode.ui.components.Modal
3739
import com.getcode.ui.theme.ButtonState
3840
import com.getcode.ui.theme.CodeButton
39-
import com.flipcash.shared.onramp.common.R
40-
import com.getcode.ui.components.Modal
4141

4242

4343
private val amounts = listOf(
@@ -184,7 +184,7 @@ private fun ClickableCell(
184184
@Composable
185185
@Preview
186186
private fun OnRampAmountSelectionModal_Preview() {
187-
val controller = InternalOnRampAmountController().apply {
187+
val controller = InternalOnRampAmountController(StubFlipcashAnalytics()).apply {
188188
requestAmountSelection(OnRampProvider.Phantom)
189189
selectAmount(OnRampAmount.Predefined(amounts.first()))
190190
}

0 commit comments

Comments
 (0)