Skip to content

Commit 8ff9cfd

Browse files
committed
chore(analytics): add buttonTapped overload for action; reclassify buttons into own interface
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 2cb19cd commit 8ff9cfd

9 files changed

Lines changed: 44 additions & 29 deletions

File tree

apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/accesskey/LoginAccessKeyViewModel.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.flipcash.app.login.accesskey
22

33
import com.flipcash.app.accesskey.BaseAccessKeyViewModel
44
import com.flipcash.app.analytics.Action
5+
import com.flipcash.app.analytics.Button
56
import com.flipcash.app.analytics.FlipcashAnalyticsService
67
import com.flipcash.app.auth.AuthManager
78
import com.flipcash.app.core.storage.MediaScanner
@@ -26,7 +27,7 @@ class LoginAccessKeyViewModel @Inject constructor(
2627
private val analytics: FlipcashAnalyticsService,
2728
): BaseAccessKeyViewModel(resources, mnemonicManager, mediaScanner, userManager, qrCodeGenerator) {
2829

29-
suspend fun saveImage(): Result<Boolean> = trackButton(Action.SaveAccessKey)
30+
suspend fun saveImage(): Result<Boolean> = trackButton(Button.SaveAccessKey)
3031
.fold(
3132
onSuccess = { saveBitmapToFile() },
3233
onFailure = { Result.failure(it) }
@@ -40,7 +41,7 @@ class LoginAccessKeyViewModel @Inject constructor(
4041
it
4142
}
4243

43-
suspend fun onWroteDownInstead(): Result<Boolean> = trackButton(Action.WroteAccessKey)
44+
suspend fun onWroteDownInstead(): Result<Boolean> = trackButton(Button.WroteAccessKey)
4445
.map {
4546
uiFlow.update { it.copy(skipState = LoadingSuccessState(loading = true)) }
4647
}
@@ -59,8 +60,8 @@ class LoginAccessKeyViewModel @Inject constructor(
5960
it
6061
}
6162

62-
private fun trackButton(action: Action): Result<Unit> {
63-
analytics.action(action)
63+
private fun trackButton(button: Button): Result<Unit> {
64+
analytics.buttonTapped(button)
6465
return Result.success(Unit)
6566
}
6667
}

apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/router/LoginViewModel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.flipcash.app.login.router
22

33
import androidx.lifecycle.viewModelScope
44
import com.flipcash.app.analytics.Action
5+
import com.flipcash.app.analytics.Button
56
import com.flipcash.app.analytics.FlipcashAnalyticsService
67
import com.flipcash.app.auth.AuthManager
78
import com.flipcash.features.login.R
@@ -63,7 +64,7 @@ class LoginViewModel @Inject constructor(
6364

6465
eventFlow
6566
.filterIsInstance<Event.CreateAccount>()
66-
.onEach { analytics.action(Action.CreateAccount) }
67+
.onEach { analytics.buttonTapped(Button.CreateAccount) }
6768
.map {
6869
authManager.createAccount()
6970
.onFailure {

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/TokenInfoScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import cafe.adriel.voyager.core.screen.uniqueScreenKey
1818
import cafe.adriel.voyager.hilt.getViewModel
1919
import com.flipcash.app.analytics.Action
2020
import com.flipcash.app.analytics.AnalyticsEvent
21+
import com.flipcash.app.analytics.Button
2122
import com.flipcash.app.analytics.FlipcashAnalyticsService
2223
import com.flipcash.app.analytics.rememberAnalytics
2324
import com.flipcash.app.core.ui.TokenIconWithName
@@ -91,7 +92,7 @@ class TokenInfoScreen(
9192
state.token.dataOrNull?.let {
9293
if (!state.isCashReserve) {
9394
AppBarDefaults.Share {
94-
analytics.action(Action.TokenShare)
95+
analytics.buttonTapped(Button.TokenShare)
9596
viewModel.dispatchEvent(TokenInfoViewModel.Event.Share)
9697
}
9798
}

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/TokenInfoScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.ui.res.stringResource
3030
import androidx.compose.ui.unit.dp
3131
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3232
import com.flipcash.app.analytics.Action
33+
import com.flipcash.app.analytics.Button
3334
import com.flipcash.app.analytics.FlipcashAnalyticsService
3435
import com.flipcash.app.analytics.rememberAnalytics
3536
import com.flipcash.app.core.AppRoute
@@ -295,7 +296,7 @@ private fun BottomBarButtons(
295296
buttonState = ButtonState.Filled20,
296297
text = stringResource(R.string.action_sell),
297298
) {
298-
analytics.action(Action.TokenSell)
299+
analytics.buttonTapped(Button.TokenSell)
299300
dispatch(
300301
TokenInfoViewModel.Event.OpenScreen(
301302
AppRoute.Token.SwapTransact(

apps/flipcash/shared/analytics/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
id(Plugins.kotlin_ksp)
77
id(Plugins.hilt)
88
id(Plugins.kotlin_parcelize)
9+
id(Plugins.jetbrains_compose_compiler)
910
}
1011

1112
android {
@@ -18,6 +19,7 @@ android {
1819

1920
buildFeatures {
2021
buildConfig = true
22+
compose = true
2123
}
2224
}
2325

apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/Actions.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,50 @@ package com.flipcash.app.analytics
22

33
import com.getcode.libs.analytics.AppAction
44

5-
sealed class Action : AppAction {
6-
data object CreateAccount : Action() {
5+
sealed interface Action : AppAction {
6+
data object CompletedOnboarding : Action {
7+
override val value: String = "Complete Onboarding"
8+
}
9+
}
10+
11+
sealed interface Button: AppAction {
12+
data object CreateAccount : Button {
713
override val value: String = "Button: Create Account"
814
}
915

10-
data object SaveAccessKey : Action() {
16+
data object SaveAccessKey : Button {
1117
override val value: String = "Button: Save Access Key"
1218
}
1319

14-
data object WroteAccessKey : Action() {
20+
data object WroteAccessKey : Button {
1521
override val value: String = "Button: Wrote Access Key"
1622
}
1723

18-
data object AllowCamera : Action() {
24+
data object AllowCamera : Button {
1925
override val value: String = "Button: Allow Camera"
2026
}
2127

22-
data object AllowPush : Action() {
28+
data object AllowPush : Button {
2329
override val value: String = "Button: Allow Push"
2430
}
2531

26-
data object SkipPush : Action() {
32+
data object SkipPush : Button {
2733
override val value: String = "Button: Skip Push"
2834
}
2935

30-
data object CompletedOnboarding : Action() {
31-
override val value: String = "Complete Onboarding"
32-
}
33-
34-
data object TokenBuyWithReserves : Action() {
36+
data object TokenBuyWithReserves : Button {
3537
override val value: String = "Button: Buy With Reserves"
3638
}
3739

38-
data object TokenBuyWithPhantom : Action() {
40+
data object TokenBuyWithPhantom : Button {
3941
override val value: String = "Button: Buy With Phantom"
4042
}
4143

42-
data object TokenSell : Action() {
44+
data object TokenSell : Button {
4345
override val value: String = "Button: Sell"
4446
}
4547

46-
data object TokenShare : Action() {
48+
data object TokenShare : Button {
4749
override val value: String = "Button: Share Token Info"
4850
}
4951
}

apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/Analytics.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ interface FlipcashAnalyticsService : AnalyticsService {
7777
mint: Mint,
7878
error: Throwable? = null
7979
)
80+
81+
fun buttonTapped(button: Button) {
82+
action(button)
83+
}
8084
}
8185

8286
class StubFlipcashAnalytics : FlipcashAnalyticsService {

apps/flipcash/shared/permissions/src/main/kotlin/com/flipcash/app/permissions/internal/PermissionScreenContent.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import androidx.compose.ui.text.style.TextAlign
2727
import androidx.compose.ui.tooling.preview.Preview
2828
import cafe.adriel.voyager.core.registry.ScreenRegistry
2929
import com.flipcash.app.analytics.Action
30+
import com.flipcash.app.analytics.Button
31+
import com.flipcash.app.analytics.rememberAnalytics
3032
import com.flipcash.app.core.AppRoute
3133
import com.flipcash.app.theme.FlipcashPreview
3234
import com.flipcash.shared.permissions.R
@@ -81,14 +83,14 @@ internal fun PermissionScreenContent(
8183

8284
@Composable
8385
internal fun CameraPermissionScreenContent(onGranted: () -> Unit, onNotGranted: () -> Unit) {
84-
val analytics = LocalAnalytics.current
86+
val analytics = rememberAnalytics()
8587
var isResultHandled by remember { mutableStateOf(false) }
8688
val onNotificationResult: (Boolean) -> Unit = { isGranted ->
8789
if (!isResultHandled) {
8890
isResultHandled = true
8991

9092
if (isGranted) {
91-
analytics.action(Action.AllowCamera)
93+
analytics.buttonTapped(Button.AllowCamera)
9294
onGranted()
9395
} else {
9496
onNotGranted()
@@ -158,13 +160,13 @@ internal fun CameraPermissionScreenContent(onGranted: () -> Unit, onNotGranted:
158160

159161
@Composable
160162
internal fun NotificationScreenContent(onGranted: () -> Unit) {
161-
val analytics = LocalAnalytics.current
163+
val analytics = rememberAnalytics()
162164
val onNotificationResult: (Boolean) -> Unit = { isGranted ->
163165
if (isGranted) {
164-
analytics.action(Action.AllowPush)
166+
analytics.action(Button.AllowPush)
165167
onGranted()
166168
} else {
167-
analytics.action(Action.SkipPush)
169+
analytics.action(Button.SkipPush)
168170
}
169171
}
170172
val notificationPermissionCheck = notificationPermissionCheck(onResult = {

apps/flipcash/shared/tokens/src/main/kotlin/com/flipcash/app/tokens/ui/TokenInfoViewModel.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.compose.ui.unit.dp
1717
import androidx.compose.ui.unit.sp
1818
import androidx.lifecycle.viewModelScope
1919
import com.flipcash.app.analytics.Action
20+
import com.flipcash.app.analytics.Button
2021
import com.flipcash.app.analytics.FlipcashAnalyticsService
2122
import com.flipcash.app.core.AppRoute
2223
import com.flipcash.app.core.data.Loadable
@@ -312,7 +313,7 @@ class TokenInfoViewModel @Inject constructor(
312313
stateFlow.value.reservesBalance.formatted()
313314
),
314315
onClick = {
315-
analytics.action(Action.TokenBuyWithReserves)
316+
analytics.buttonTapped(Button.TokenBuyWithReserves)
316317
dispatchEvent(
317318
Event.OpenScreen(
318319
AppRoute.Token.SwapTransact(
@@ -368,7 +369,7 @@ class TokenInfoViewModel @Inject constructor(
368369
OnRampFlowTracker.start(
369370
AppRoute.Token.Info(stateFlow.value.token.dataOrNull!!.address)
370371
)
371-
analytics.action(Action.TokenBuyWithPhantom)
372+
analytics.buttonTapped(Button.TokenBuyWithPhantom)
372373
dispatchEvent(Event.ConnectPhantomWallet)
373374
}
374375
)

0 commit comments

Comments
 (0)