From c50c2a668b9a4d4d69ac54e768e55d0157bde988 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Mar 2023 18:50:00 +0300 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../tangem/tap/common/analytics/events/AnalyticsParam.kt | 8 ++++++++ .../java/com/tangem/tap/common/analytics/events/Basic.kt | 7 ++++++- .../tap/domain/walletconnect/WalletConnectSdkHelper.kt | 3 +++ .../features/send/redux/middlewares/SendMiddleware.kt | 3 +++ .../java/com/tangem/tap/proxy/TransactionManagerImpl.kt | 9 ++++++++- app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt | 5 +++-- 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt index cebc4c405e..ce8e64b0f6 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt @@ -70,7 +70,15 @@ sealed class AnalyticsParam { object MyWallets : ScannedFrom("My Wallets") } + sealed class TxSentFrom(val value: String) { + object Send : TxSentFrom("Send") + object Swap : TxSentFrom("Swap") + object WalletConnect : TxSentFrom("WalletConnect") + object Sell : TxSentFrom("Sell") + } + companion object Key { + const val Source = "Source" const val Batch = "Batch" const val ProductType = "Product Type" const val Firmware = "Firmware" diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt index 465cfe98bf..76b00ef40f 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt @@ -16,7 +16,7 @@ sealed class Basic( ) : Basic( event = "Card Was Scanned", params = mapOf( - "Source" to source.value, + AnalyticsParam.Source to source.value, ), ) @@ -38,6 +38,11 @@ sealed class Basic( params = mapOf(AnalyticsParam.Currency to currency.value), ) + class TransactionSent(sentFrom: AnalyticsParam.TxSentFrom) : Basic( + event = "Transaction sent", + params = mapOf(AnalyticsParam.Source to sentFrom.value), + ) + class ScanError(error: Throwable) : Basic( event = "Scan", error = error, diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index 316d44de9c..9dac430e4c 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -25,6 +25,8 @@ import com.tangem.common.extensions.toHexString import com.tangem.core.analytics.Analytics import com.tangem.crypto.CryptoUtils import com.tangem.operations.sign.SignHashCommand +import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.tap.common.analytics.events.Basic import com.tangem.tap.common.analytics.events.WalletConnect import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.extensions.toFormattedString @@ -144,6 +146,7 @@ class WalletConnectSdkHelper { ) return when (result) { SimpleResult.Success -> { + Analytics.send(Basic.TransactionSent(AnalyticsParam.TxSentFrom.WalletConnect)) HEX_PREFIX + data.walletManager.wallet.recentTransactions.last().hash } is SimpleResult.Failure -> { diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index d86397139b..00d9ef32c1 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -20,6 +20,7 @@ import com.tangem.domain.common.TapWorkarounds.isStart2Coin import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.DELAY_SDK_DIALOG_CLOSE import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.tap.common.analytics.events.Basic import com.tangem.tap.common.analytics.events.Token import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchErrorNotification @@ -234,8 +235,10 @@ private fun sendTransaction( dispatch(SendAction.SendSuccess) if (externalTransactionData != null) { + Analytics.send(Basic.TransactionSent(AnalyticsParam.TxSentFrom.Sell)) dispatch(WalletAction.TradeCryptoAction.FinishSelling(externalTransactionData.transactionId)) } else { + Analytics.send(Basic.TransactionSent(AnalyticsParam.TxSentFrom.Send)) dispatch(NavigationAction.PopBackTo()) } scope.launch(Dispatchers.IO) { diff --git a/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt b/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt index 30a360ad10..49da15b6c1 100644 --- a/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt @@ -17,12 +17,15 @@ import com.tangem.blockchain.extensions.SimpleResult import com.tangem.blockchain.extensions.isNetworkError import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.hexToBytes +import com.tangem.core.analytics.api.AnalyticsHandler import com.tangem.domain.common.extensions.fromNetworkId import com.tangem.lib.crypto.TransactionManager import com.tangem.lib.crypto.models.Currency import com.tangem.lib.crypto.models.ProxyAmount import com.tangem.lib.crypto.models.ProxyNetworkInfo import com.tangem.lib.crypto.models.transactions.SendTxResult +import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.tap.common.analytics.events.Basic import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.TangemSigner import com.tangem.tap.domain.tokens.models.BlockchainNetwork @@ -31,6 +34,7 @@ import java.math.BigDecimal class TransactionManagerImpl( private val appStateHolder: AppStateHolder, + private val analytics: AnalyticsHandler, ) : TransactionManager { override suspend fun sendApproveTransaction( @@ -165,7 +169,10 @@ class TransactionManagerImpl( private fun handleSendResult(result: SimpleResult): SendTxResult { when (result) { - is SimpleResult.Success -> return SendTxResult.Success + is SimpleResult.Success -> { + analytics.send(Basic.TransactionSent(AnalyticsParam.TxSentFrom.Swap)) + return SendTxResult.Success + } is SimpleResult.Failure -> { if (result.isNetworkError()) return SendTxResult.NetworkError(result.error) val error = result.error as? BlockchainSdkError ?: return SendTxResult.UnknownError() diff --git a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt index a1fa2cd32a..8cf83557a8 100644 --- a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt +++ b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt @@ -1,5 +1,6 @@ package com.tangem.tap.proxy.di +import com.tangem.core.analytics.api.AnalyticsHandler import com.tangem.lib.crypto.DerivationManager import com.tangem.lib.crypto.TransactionManager import com.tangem.lib.crypto.UserWalletManager @@ -33,8 +34,8 @@ class ProxyModule { @Provides @Singleton - fun provideTransactionManager(appStateHolder: AppStateHolder): TransactionManager { - return TransactionManagerImpl(appStateHolder) + fun provideTransactionManager(appStateHolder: AppStateHolder, analytics: AnalyticsHandler): TransactionManager { + return TransactionManagerImpl(appStateHolder, analytics) } @Provides From b7510a7aa45e4d9ef1af6b970ed097ccd63d1beb Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Mar 2023 10:34:04 +0300 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../com/tangem/tap/common/IntentHandler.kt | 18 ++++++++++++++++++ .../tap/common/analytics/events/Token.kt | 6 ++++++ .../walletconnect/WalletConnectSdkHelper.kt | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/IntentHandler.kt b/app/src/main/java/com/tangem/tap/common/IntentHandler.kt index f1cd3b1027..12451bdd67 100644 --- a/app/src/main/java/com/tangem/tap/common/IntentHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/IntentHandler.kt @@ -1,15 +1,20 @@ package com.tangem.tap.common import android.content.Intent +import android.net.Uri import android.nfc.NfcAdapter import android.nfc.Tag import android.os.Build +import com.tangem.core.analytics.Analytics +import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.tap.common.analytics.events.Token import com.tangem.tap.common.extensions.removePrefixOrNull import com.tangem.tap.domain.walletconnect.WalletConnectManager import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.welcome.redux.WelcomeAction +import com.tangem.tap.network.exchangeServices.ExchangeUrlBuilder import com.tangem.tap.scope import com.tangem.tap.store import kotlinx.coroutines.delay @@ -27,6 +32,7 @@ class IntentHandler { fun handleIntent(intent: Intent?, hasSavedUserWallets: Boolean) { handleBackgroundScan(intent, hasSavedUserWallets) handleWalletConnectLink(intent) + handleBuyCurrencyCallback(intent) handleSellCurrencyCallback(intent) } @@ -72,6 +78,18 @@ class IntentHandler { return true } + private fun handleBuyCurrencyCallback(intent: Intent?) { + val data = intent?.data ?: return + + val successUri = Uri.parse(ExchangeUrlBuilder.SUCCESS_URL) + if (data.host == successUri.host && data.authority == successUri.authority) { + val currency = store.state.walletState.selectedCurrency ?: return + + val currencyType = AnalyticsParam.CurrencyType.Currency(currency) + Analytics.send(Token.Bought(currencyType)) + } + } + fun handleSellCurrencyCallback(intent: Intent?) { try { val transactionID = diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/Token.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/Token.kt index 0ad3ca514e..63dd109942 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/Token.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/Token.kt @@ -46,6 +46,12 @@ sealed class Token( params = mapOf("Token" to type.value), ) + class Bought(type: CurrencyType) : Token( + category = "Token", + event = "Token bought", + params = mapOf("Token" to type.value), + ) + sealed class Receive( event: String, params: Map = mapOf(), diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index 9dac430e4c..b963a290d4 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -146,7 +146,8 @@ class WalletConnectSdkHelper { ) return when (result) { SimpleResult.Success -> { - Analytics.send(Basic.TransactionSent(AnalyticsParam.TxSentFrom.WalletConnect)) + val sentFrom = AnalyticsParam.TxSentFrom.WalletConnect + Analytics.send(Basic.TransactionSent(sentFrom)) HEX_PREFIX + data.walletManager.wallet.recentTransactions.last().hash } is SimpleResult.Failure -> {