Updated on 2026-08-14

This commit is contained in:
Tangem 2023-03-06 18:03:59 +03:00
commit 0ac390ef93
8 changed files with 56 additions and 4 deletions

View file

@ -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 =

View file

@ -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"

View file

@ -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,

View file

@ -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<String, String> = mapOf(),

View file

@ -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,8 @@ class WalletConnectSdkHelper {
)
return when (result) {
SimpleResult.Success -> {
val sentFrom = AnalyticsParam.TxSentFrom.WalletConnect
Analytics.send(Basic.TransactionSent(sentFrom))
HEX_PREFIX + data.walletManager.wallet.recentTransactions.last().hash
}
is SimpleResult.Failure -> {

View file

@ -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) {

View file

@ -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()

View file

@ -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