From 2c7eedd2263ddb86981459140e15ec8faba00d47 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 9 Mar 2024 21:15:12 +0000 Subject: [PATCH] Updated on 2026-08-14 --- .../core/analytics/models/AnalyticsParam.kt | 6 +++ .../analytics/WalletScreenAnalyticsEvent.kt | 8 ++++ .../utils/TokenListAnalyticsSender.kt | 48 +++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/core/analytics/models/src/main/java/com/tangem/core/analytics/models/AnalyticsParam.kt b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/AnalyticsParam.kt index a684154112..434d51d967 100644 --- a/core/analytics/models/src/main/java/com/tangem/core/analytics/models/AnalyticsParam.kt +++ b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/AnalyticsParam.kt @@ -11,6 +11,11 @@ sealed class AnalyticsParam { companion object } + sealed class TokenBalanceState(val value: String) { + data object Empty : TokenBalanceState("Empty") + data object Full : TokenBalanceState("Full") + } + sealed class RateApp(val value: String) { object Liked : RateApp("Liked") object Disliked : RateApp("Disliked") @@ -124,6 +129,7 @@ sealed class AnalyticsParam { const val TOKEN = "Token" const val SOURCE = "Source" const val BALANCE = "Balance" + const val STATE = "State" const val BATCH = "Batch" const val TYPE = "Type" const val FEE_TYPE = "Fee Type" 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 2717ca2dfa..088622ed27 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 @@ -38,6 +38,14 @@ sealed class WalletScreenAnalyticsEvent { AnalyticsParam.BALANCE to balance.value, ), ) + + class TokenBalance(balance: AnalyticsParam.TokenBalanceState, token: String) : Basic( + event = "Token Balance", + params = mapOf( + AnalyticsParam.STATE to balance.value, + AnalyticsParam.TOKEN to token, + ), + ) } sealed class MainScreen( diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/TokenListAnalyticsSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/TokenListAnalyticsSender.kt index 563ab70f1e..901116d2d9 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/TokenListAnalyticsSender.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/TokenListAnalyticsSender.kt @@ -1,10 +1,13 @@ package com.tangem.feature.wallet.presentation.wallet.analytics.utils import arrow.core.getOrElse +import com.tangem.blockchain.common.Blockchain +import com.tangem.common.extensions.isZero import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.domain.analytics.CheckIsWalletToppedUpUseCase import com.tangem.domain.analytics.model.WalletBalanceState +import com.tangem.domain.common.extensions.fromNetworkId import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.tokens.model.NetworkGroup import com.tangem.domain.tokens.model.TokenList @@ -24,6 +27,8 @@ internal class TokenListAnalyticsSender @Inject constructor( private val screenLifecycleProvider: ScreenLifecycleProvider, ) { + private val balanceWasSentMap = mutableMapOf() + suspend fun send(displayedUiState: WalletState?, userWallet: UserWallet, tokenList: TokenList) { if (screenLifecycleProvider.isBackground) return if (displayedUiState == null || displayedUiState.pullToRefreshConfig.isRefreshing) return @@ -34,6 +39,7 @@ internal class TokenListAnalyticsSender @Inject constructor( sendBalanceLoadedEventIfNeeded(tokenList.totalFiatBalance, currenciesStatuses) sendToppedUpEventIfNeeded(userWallet, tokenList.totalFiatBalance, currenciesStatuses) sendUnreachableNetworksEventIfNeeded(currenciesStatuses) + sendTokenBalancesIfNeeded(currenciesStatuses) } private fun getCurrenciesStatuses(tokenList: TokenList): List = when (tokenList) { @@ -72,6 +78,48 @@ internal class TokenListAnalyticsSender @Inject constructor( } } + private fun sendTokenBalancesIfNeeded(currenciesStatuses: List) { + currenciesStatuses.forEach { + val status = it.value + if (status is CryptoCurrencyStatus.Loaded) { + sendTokenBalancesForSpecificBlockchains(it, status) + } + } + } + + // TODO hotfix/5.7.4 send event for log if tokens from polkadot ecosystem have balance + private fun sendTokenBalancesForSpecificBlockchains( + currencyStatus: CryptoCurrencyStatus, + balanceStatus: CryptoCurrencyStatus.Loaded, + ) { + // for now send only for Polkadot ecosystem blockchains + // later dependency on Blockchain will be removed and use token name + when (val blockchain = Blockchain.fromNetworkId(currencyStatus.currency.network.backendId)) { + Blockchain.Polkadot, + Blockchain.AlephZero, + Blockchain.Kusama, + -> { + if (balanceWasSentMap[blockchain.currency] != true) { + val tokenBalance = if (balanceStatus.amount.isZero()) { + AnalyticsParam.TokenBalanceState.Empty + } else { + AnalyticsParam.TokenBalanceState.Full + } + analyticsEventHandler.send( + Basic.TokenBalance( + balance = tokenBalance, + token = blockchain.currency, + ), + ) + balanceWasSentMap[blockchain.currency] = true + } + } + else -> { + /* no-op */ + } + } + } + private fun getCardBalanceState(fiatBalance: TokenList.FiatBalance.Loaded): AnalyticsParam.CardBalanceState { return if (fiatBalance.amount > BigDecimal.ZERO) { AnalyticsParam.CardBalanceState.Full