From 929dae92c388cb1c472fc981894fe5152806413c Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 17 Dec 2025 13:51:47 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/domain/models/wallet/UserWallet.kt | 7 ++++++ .../wallet/child/wallet/model/WalletModel.kt | 24 ++++++++++++------- .../analytics/WalletScreenAnalyticsEvent.kt | 2 ++ .../utils/SelectedWalletAnalyticsSender.kt | 8 +------ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/wallet/UserWallet.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/wallet/UserWallet.kt index 30b9500769..8f2b0572ff 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/wallet/UserWallet.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/wallet/UserWallet.kt @@ -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) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt index 4f4b296a7d..43aac5ae23 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt @@ -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() 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)) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/WalletScreenAnalyticsEvent.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/WalletScreenAnalyticsEvent.kt index 36cca3a129..3ecfa644f8 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/WalletScreenAnalyticsEvent.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/WalletScreenAnalyticsEvent.kt @@ -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", ), ) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/SelectedWalletAnalyticsSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/SelectedWalletAnalyticsSender.kt index 90e94e979a..ccb889e197 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/SelectedWalletAnalyticsSender.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/SelectedWalletAnalyticsSender.kt @@ -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 - } - } } \ No newline at end of file