Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-17 13:51:47 +03:00
parent 0e85eb1d78
commit 929dae92c3
4 changed files with 26 additions and 15 deletions

View file

@ -86,6 +86,13 @@ fun UserWallet.requireHotWallet(): UserWallet.Hot {
?: error("This user wallet is not a hot wallet")
}
fun UserWallet.isImported(): Boolean {
return when (this) {
is UserWallet.Cold -> isImported
is UserWallet.Hot -> true
}
}
fun UserWallet.copy(name: String = this.name, walletId: UserWalletId = this.walletId): UserWallet = when (this) {
is UserWallet.Cold -> this.copy(name = name, walletId = walletId)
is UserWallet.Hot -> this.copy(name = name, walletId = walletId)

View file

@ -16,6 +16,7 @@ import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
import com.tangem.domain.common.wallets.UserWalletsListRepository
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.models.wallet.isImported
import com.tangem.domain.models.wallet.isLocked
import com.tangem.domain.models.wallet.isMultiCurrency
import com.tangem.domain.nft.ObserveAndClearNFTCacheIfNeedUseCase
@ -116,12 +117,6 @@ internal class WalletModel @Inject constructor(
private var expressTxStatusTaskScheduler = SingleTaskScheduler<Unit>()
init {
modelScope.launch {
val result = getAppThemeModeUseCase().firstOrNull()
val theme = result?.getOrElse { AppThemeMode.FOLLOW_SYSTEM } ?: AppThemeMode.FOLLOW_SYSTEM
analyticsEventsHandler.send(WalletScreenAnalyticsEvent.MainScreen.ScreenOpened(theme.value))
}
screenLifecycleProvider.isBackgroundState
.onEach { isBackground ->
if (isBackground.not()) {
@ -278,8 +273,8 @@ internal class WalletModel @Inject constructor(
// It's okay here because we need to be able to observe the selected wallet changes
@Suppress("DEPRECATION")
private fun subscribeOnSelectedWalletFlow() {
getSelectedWalletUseCase().onRight {
it
getSelectedWalletUseCase().onRight { walletFlow ->
walletFlow
.conflate()
.distinctUntilChanged()
.onEach { selectedWallet ->
@ -289,6 +284,8 @@ internal class WalletModel @Inject constructor(
subscribeOnExpressTransactionsUpdates(selectedWallet)
observeAndClearNFTCacheIfNeedUseCase(selectedWallet)
sendMainScreenOpenedAnalytics(selectedWallet.isImported())
}
.flowOn(dispatchers.main)
.launchIn(modelScope)
@ -698,6 +695,17 @@ internal class WalletModel @Inject constructor(
}
}
private suspend fun sendMainScreenOpenedAnalytics(isImported: Boolean) {
val result = getAppThemeModeUseCase().firstOrNull()
val theme = result?.getOrElse { AppThemeMode.FOLLOW_SYSTEM } ?: AppThemeMode.FOLLOW_SYSTEM
analyticsEventsHandler.send(
WalletScreenAnalyticsEvent.MainScreen.ScreenOpened(
theme = theme.value,
isImported = isImported,
),
)
}
inner class AskBiometryModelCallbacks : AskBiometryComponent.ModelCallbacks {
override fun onAllowed() {
analyticsEventsHandler.send(MainScreenAnalyticsEvent.EnableBiometrics(AnalyticsParam.OnOffState.On))

View file

@ -53,10 +53,12 @@ sealed class WalletScreenAnalyticsEvent {
class ScreenOpened(
val theme: String,
val isImported: Boolean,
) : MainScreen(
event = "Screen opened",
params = mapOf(
"App Theme" to theme,
"Wallet Type" to if (isImported) "Seed Phrase" else "Seedless",
),
)

View file

@ -3,6 +3,7 @@ package com.tangem.feature.wallet.presentation.wallet.analytics.utils
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.isImported
import com.tangem.domain.models.wallet.isLocked
import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent
import com.tangem.feature.wallet.presentation.wallet.utils.ScreenLifecycleProvider
@ -32,11 +33,4 @@ internal class SelectedWalletAnalyticsSender @Inject constructor(
else -> WalletScreenAnalyticsEvent.MainScreen.WalletSelected(userWallet.isImported())
}
private fun UserWallet.isImported(): Boolean {
return when (this) {
is UserWallet.Cold -> isImported
is UserWallet.Hot -> true
}
}
}