From a17f1290ed4e0fa631c0f2e72dba879dcbeb40da Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 18 Jan 2024 16:31:08 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../converters/ParamCardCurrencyConverter.kt | 9 +-- .../common/analytics/events/AnalyticsParam.kt | 62 ------------------ .../common/redux/global/GlobalMiddleware.kt | 2 +- .../com/tangem/tap/domain/TangemSdkManager.kt | 2 +- .../com/tangem/tap/domain/TapWalletManager.kt | 2 +- .../walletconnect/WalletConnectSdkHelper.kt | 8 +-- .../details/redux/DetailsMiddleware.kt | 5 +- .../tap/features/home/redux/HomeAction.kt | 4 +- .../tap/features/home/redux/HomeMiddleware.kt | 2 +- .../features/onboarding/OnboardingHelper.kt | 4 +- .../send/redux/middlewares/SendMiddleware.kt | 13 ++-- .../features/send/redux/states/FeeState.kt | 2 +- .../tap/features/signin/redux/SignInAction.kt | 2 +- .../tap/features/signin/redux/SignInState.kt | 2 +- .../welcome/redux/WelcomeMiddleware.kt | 4 +- .../tap/proxy/TransactionManagerImpl.kt | 32 +-------- .../tangem/core/analytics/models}/Basic.kt | 46 ++++++------- .../feature/swap/viewmodels/SwapViewModel.kt | 65 ++++++++++++++----- 18 files changed, 102 insertions(+), 164 deletions(-) rename {app/src/main/java/com/tangem/tap/common/analytics/events => core/analytics/models/src/main/java/com/tangem/core/analytics/models}/Basic.kt (57%) diff --git a/app/src/main/java/com/tangem/tap/common/analytics/converters/ParamCardCurrencyConverter.kt b/app/src/main/java/com/tangem/tap/common/analytics/converters/ParamCardCurrencyConverter.kt index 77196147cd..303dcf3b25 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/converters/ParamCardCurrencyConverter.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/converters/ParamCardCurrencyConverter.kt @@ -4,14 +4,15 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.domain.common.CardTypesResolver import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.utils.converter.Converter +import com.tangem.core.analytics.models.AnalyticsParam as CoreAnalyticsParam /** [REDACTED_AUTHOR] */ -class ParamCardCurrencyConverter : Converter { +class ParamCardCurrencyConverter : Converter { - override fun convert(value: CardTypesResolver): AnalyticsParam.CardCurrency? { - if (value.isMultiwalletAllowed()) return AnalyticsParam.CardCurrency.MultiCurrency + override fun convert(value: CardTypesResolver): CoreAnalyticsParam.WalletType? { + if (value.isMultiwalletAllowed()) return CoreAnalyticsParam.WalletType.MultiCurrency val type = when { value.isTangemNote() -> AnalyticsParam.CurrencyType.Blockchain(value.getBlockchain()) @@ -21,6 +22,6 @@ class ParamCardCurrencyConverter : Converter null } ?: return null - return AnalyticsParam.CardCurrency.SingleCurrency(type) + return CoreAnalyticsParam.WalletType.SingleCurrency(type.value) } } \ No newline at end of file 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 5437f0094c..489effa20d 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 @@ -12,12 +12,6 @@ sealed class AnalyticsParam { class Amount(amount: com.tangem.blockchain.common.Amount) : CurrencyType(amount.currencySymbol) } - // MultiCurrency or CurrencyType - sealed class CardCurrency(val value: String) { - object MultiCurrency : CardCurrency(value = "Multicurrency") - class SingleCurrency(type: CurrencyType) : CardCurrency(type.value) - } - sealed class CardBalanceState(val value: String) { object Empty : CardBalanceState("Empty") object Full : CardBalanceState("Full") @@ -78,62 +72,6 @@ sealed class AnalyticsParam { object BlockchainSdk : Error("Blockchain Sdk Error") } - sealed class ScannedFrom(val value: String) { - object Introduction : ScannedFrom("Introduction") - object Main : ScannedFrom("Main") - object SignIn : ScannedFrom("Sign In") - object MyWallets : ScannedFrom("My Wallets") - } - - sealed class TxSentFrom(val value: String) { - data class Send( - override val blockchain: String, - override val token: String, - override val feeType: FeeType, - ) : TxSentFrom("Send"), TxData - - data class Swap( - override val blockchain: String, - override val token: String, - override val feeType: FeeType, - ) : TxSentFrom("Swap"), TxData - - data class Approve( - override val blockchain: String, - override val token: String, - override val feeType: FeeType, - val permissionType: String, - ) : TxSentFrom("Approve"), TxData - - object WalletConnect : TxSentFrom("WalletConnect") - object Sell : TxSentFrom("Sell") - } - - sealed interface TxData { - val blockchain: String - val token: String - val feeType: FeeType - } - - sealed class FeeType(val value: String) { - object Fixed : FeeType("Fixed") - object Min : FeeType("Min") - object Normal : FeeType("Normal") - object Max : FeeType("Max") - - companion object { - fun fromString(feeType: String): FeeType { - return when (feeType) { - Min.value -> Min - Normal.value -> Normal - Max.value -> Max - Fixed.value -> Fixed - else -> Fixed - } - } - } - } - sealed class WalletCreationType(val value: String) { object PrivateKey : WalletCreationType(value = "Private Key") object NewSeed : WalletCreationType(value = "New Seed") diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMiddleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMiddleware.kt index bd43cec216..841c3ff5a4 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMiddleware.kt @@ -10,7 +10,7 @@ import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.common.LogConfig import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.extensions.dispatchDebugErrorNotification import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchOnMain diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt index cf287be727..33ea89804c 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt @@ -25,7 +25,7 @@ import com.tangem.operations.derivation.DerivationTaskResponse import com.tangem.operations.derivation.DeriveMultipleWalletPublicKeysTask import com.tangem.operations.pins.SetUserCodeCommand import com.tangem.operations.usersetttings.SetUserCodeRecoveryAllowedTask -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.derivationsFinder import com.tangem.tap.domain.tasks.product.CreateProductWalletTask import com.tangem.tap.domain.tasks.product.CreateProductWalletTaskResponse diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 6318028eed..8d9ba42e6a 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -11,7 +11,7 @@ import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.wallets.models.UserWallet import com.tangem.operations.attestation.Attestation -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.extensions.setContext import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction 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 2db93bfead..cbc281470e 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 @@ -16,11 +16,10 @@ import com.tangem.common.extensions.hexToBytes import com.tangem.common.extensions.toDecompressedPublicKey import com.tangem.common.extensions.toHexString import com.tangem.core.analytics.Analytics +import com.tangem.core.analytics.models.Basic +import com.tangem.core.analytics.models.Basic.TransactionSent.MemoType import com.tangem.domain.common.extensions.fromNetworkId 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.Basic.TransactionSent.MemoType import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.domain.walletconnect.BnbHelper.toWCBinanceTradeOrder @@ -43,6 +42,7 @@ import com.tangem.tap.tangemSdkManager import com.tangem.tap.userWalletsListManager import timber.log.Timber import java.math.BigDecimal +import com.tangem.core.analytics.models.AnalyticsParam as CoreAnalyticsParam class WalletConnectSdkHelper { @@ -178,7 +178,7 @@ class WalletConnectSdkHelper { ) return when (result) { SimpleResult.Success -> { - val sentFrom = AnalyticsParam.TxSentFrom.WalletConnect + val sentFrom = CoreAnalyticsParam.TxSentFrom.WalletConnect Analytics.send(Basic.TransactionSent(sentFrom = sentFrom, memoType = MemoType.Null)) val hash = data.walletManager.wallet.recentTransactions.last().hash if (hash?.startsWith(HEX_PREFIX) == true) { diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 5227e7c22f..dc57a6bb45 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -22,7 +22,8 @@ import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.legacy.isLockedSync import com.tangem.tap.* import com.tangem.tap.common.analytics.events.AnalyticsParam -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.AnalyticsParam as CoreAnalyticsParam +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.analytics.events.Settings import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchOnMain @@ -517,7 +518,7 @@ class DetailsMiddleware { ) store.state.daggerGraphState.get(DaggerGraphState::scanCardProcessor).scan( - analyticsEvent = Basic.CardWasScanned(AnalyticsParam.ScannedFrom.MyWallets), + analyticsEvent = Basic.CardWasScanned(CoreAnalyticsParam.ScannedFrom.MyWallets), onWalletNotCreated = { // No need to rollback policy, continue with the policy set before the card scan store.dispatchWithMain(DetailsAction.ScanAndSaveUserWallet.Success) diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt index 4b83396c14..e87ba1ee99 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeAction.kt @@ -1,8 +1,8 @@ package com.tangem.tap.features.home.redux import com.tangem.core.analytics.models.AnalyticsEvent -import com.tangem.tap.common.analytics.events.AnalyticsParam -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.AnalyticsParam +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.entities.IndeterminateProgressButton import kotlinx.coroutines.CoroutineScope import org.rekotlin.Action diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt index b5921178cc..d1210fe911 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt @@ -10,7 +10,7 @@ import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.userwallets.UserWalletBuilder -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.analytics.events.IntroductionProcess import com.tangem.tap.common.analytics.events.Shop import com.tangem.tap.common.entities.IndeterminateProgressButton diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt index 4a0164cbb1..015bf0d5d6 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt @@ -14,7 +14,7 @@ import com.tangem.domain.userwallets.UserWalletBuilder import com.tangem.domain.userwallets.UserWalletIdBuilder import com.tangem.tap.* import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.common.extensions.removeContext @@ -125,7 +125,7 @@ object OnboardingHelper { val currency = ParamCardCurrencyConverter().convert(scanResponse.cardTypesResolver) if (userWalletId != null && currency != null) { - Analytics.send(Basic.ToppedUp(userWalletId, currency)) + Analytics.send(Basic.ToppedUp(userWalletId.stringValue, currency)) } } 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 2988ed383b..9fba907beb 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 @@ -12,15 +12,14 @@ import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.core.TangemSdkError import com.tangem.core.analytics.Analytics +import com.tangem.core.analytics.models.AnalyticsParam +import com.tangem.core.analytics.models.Basic import com.tangem.core.navigation.NavigationAction import com.tangem.domain.common.TapWorkarounds.isStart2Coin import com.tangem.domain.common.extensions.minimalAmount import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.tokens.legacy.TradeCryptoAction -import com.tangem.tap.common.analytics.events.AnalyticsParam -import com.tangem.tap.common.analytics.events.Basic -import com.tangem.tap.common.analytics.events.Basic.TransactionSent.MemoType import com.tangem.tap.common.analytics.events.Token import com.tangem.tap.common.analytics.events.Token.Send.SelectedCurrency.CurrencyType import com.tangem.tap.common.extensions.dispatchDialogShow @@ -340,11 +339,11 @@ private fun sendTransaction( } } -private fun getMemoType(transactionExtras: TransactionExtrasState): MemoType { +private fun getMemoType(transactionExtras: TransactionExtrasState): Basic.TransactionSent.MemoType { return when { - transactionExtras.isEmpty() -> MemoType.Empty - transactionExtras.isNull() -> MemoType.Null - else -> MemoType.Full + transactionExtras.isEmpty() -> Basic.TransactionSent.MemoType.Empty + transactionExtras.isNull() -> Basic.TransactionSent.MemoType.Null + else -> Basic.TransactionSent.MemoType.Full } } diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/states/FeeState.kt b/app/src/main/java/com/tangem/tap/features/send/redux/states/FeeState.kt index 844b7956ab..27ae5f8a33 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/states/FeeState.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/states/FeeState.kt @@ -2,7 +2,7 @@ package com.tangem.tap.features.send.redux.states import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.common.transaction.TransactionFee -import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.tap.common.entities.ProgressState import java.math.BigDecimal diff --git a/app/src/main/java/com/tangem/tap/features/signin/redux/SignInAction.kt b/app/src/main/java/com/tangem/tap/features/signin/redux/SignInAction.kt index efbcafb9df..7978ed3f13 100644 --- a/app/src/main/java/com/tangem/tap/features/signin/redux/SignInAction.kt +++ b/app/src/main/java/com/tangem/tap/features/signin/redux/SignInAction.kt @@ -1,6 +1,6 @@ package com.tangem.tap.features.signin.redux -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import org.rekotlin.Action /** diff --git a/app/src/main/java/com/tangem/tap/features/signin/redux/SignInState.kt b/app/src/main/java/com/tangem/tap/features/signin/redux/SignInState.kt index 95b132aab7..27858a8ad7 100644 --- a/app/src/main/java/com/tangem/tap/features/signin/redux/SignInState.kt +++ b/app/src/main/java/com/tangem/tap/features/signin/redux/SignInState.kt @@ -1,6 +1,6 @@ package com.tangem.tap.features.signin.redux -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic /** [REDACTED_AUTHOR] diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index 9ac98c675e..555f73988c 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -7,6 +7,7 @@ import com.tangem.common.doOnResult import com.tangem.common.doOnSuccess import com.tangem.common.flatMap import com.tangem.core.analytics.Analytics +import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.domain.common.util.cardTypesResolver @@ -15,8 +16,7 @@ import com.tangem.domain.userwallets.UserWalletBuilder import com.tangem.domain.wallets.legacy.unlockIfLockable import com.tangem.tap.* import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter -import com.tangem.tap.common.analytics.events.AnalyticsParam -import com.tangem.tap.common.analytics.events.Basic +import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.extensions.onUserWalletSelected 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 a7899eace5..ec450b5f39 100644 --- a/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/TransactionManagerImpl.kt @@ -27,9 +27,6 @@ import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.lib.crypto.TransactionManager import com.tangem.lib.crypto.models.* 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.analytics.events.Basic.TransactionSent.MemoType import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.TangemSigner import com.tangem.tap.userWalletsListManager @@ -63,12 +60,6 @@ class TransactionManagerImpl( gasLimit = txData.gasLimit, destinationAddress = txData.destinationAddress, dataToSign = txData.dataToSign, - successEvent = AnalyticsParam.TxSentFrom.Approve( - blockchain = blockchain.fullName, - token = analyticsData.tokenSymbol, - feeType = AnalyticsParam.FeeType.fromString(analyticsData.feeType), - permissionType = analyticsData.permissionType ?: "", - ), ) } @@ -86,19 +77,6 @@ class TransactionManagerImpl( } else { createAmount(txData.amountToSend, txData.currencyToSend, blockchain) } - val successEvent = if (isSwap) { - AnalyticsParam.TxSentFrom.Swap( - blockchain = blockchain.fullName, - token = analyticsData.tokenSymbol, - feeType = AnalyticsParam.FeeType.fromString(analyticsData.feeType), - ) - } else { - AnalyticsParam.TxSentFrom.Send( - blockchain = blockchain.fullName, - token = analyticsData.tokenSymbol, - feeType = AnalyticsParam.FeeType.fromString(analyticsData.feeType), - ) - } return sendTransactionInternal( walletManager = walletManager, amount = amount, @@ -107,7 +85,6 @@ class TransactionManagerImpl( gasLimit = txData.gasLimit, destinationAddress = txData.destinationAddress, dataToSign = txData.dataToSign, - successEvent = successEvent, ) } @@ -120,7 +97,6 @@ class TransactionManagerImpl( gasLimit: Int, destinationAddress: String, dataToSign: String, - successEvent: AnalyticsParam.TxSentFrom, ): SendTxResult { val txData = walletManager.createTransaction( amount = amount, @@ -136,10 +112,7 @@ class TransactionManagerImpl( FirebaseCrashlytics.getInstance().recordException(ex) return SendTxResult.UnknownError(ex) } - return handleSendResult( - result = sendResult, - successEvent = successEvent, - ) + return handleSendResult(result = sendResult) } override fun getExplorerTransactionLink(networkId: String, txAddress: String): String { @@ -381,10 +354,9 @@ class TransactionManagerImpl( } } - private fun handleSendResult(result: SimpleResult, successEvent: AnalyticsParam.TxSentFrom): SendTxResult { + private fun handleSendResult(result: SimpleResult): SendTxResult { when (result) { is SimpleResult.Success -> { - analytics.send(Basic.TransactionSent(sentFrom = successEvent, memoType = MemoType.Null)) return SendTxResult.Success } is SimpleResult.Failure -> { diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/Basic.kt similarity index 57% rename from app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt rename to core/analytics/models/src/main/java/com/tangem/core/analytics/models/Basic.kt index 2b5f0f784e..9e1da068ec 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt +++ b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/Basic.kt @@ -1,12 +1,5 @@ -package com.tangem.tap.common.analytics.events +package com.tangem.core.analytics.models -import com.tangem.core.analytics.models.AnalyticsEvent -import com.tangem.core.analytics.models.OneTimeAnalyticsEvent -import com.tangem.domain.wallets.models.UserWalletId - -/** -[REDACTED_AUTHOR] - */ sealed class Basic( event: String, params: Map = mapOf(), @@ -23,7 +16,7 @@ sealed class Basic( ) class SignedIn( - currency: AnalyticsParam.CardCurrency, + currency: AnalyticsParam.WalletType, batch: String, signInType: SignInType, walletsCount: String, @@ -45,31 +38,32 @@ sealed class Basic( } } - class ToppedUp(userWalletId: UserWalletId, currency: AnalyticsParam.CardCurrency) : + class ToppedUp(userWalletId: String, currency: AnalyticsParam.WalletType) : Basic( event = "Topped up", params = mapOf(AnalyticsParam.CURRENCY to currency.value), ), OneTimeAnalyticsEvent { - override val oneTimeEventId: String = id + userWalletId.stringValue + override val oneTimeEventId: String = id + userWalletId } - class TransactionSent(sentFrom: AnalyticsParam.TxSentFrom, memoType: MemoType) : Basic( - event = "Transaction sent", - params = buildMap { - this[AnalyticsParam.SOURCE] = sentFrom.value - if (sentFrom is AnalyticsParam.TxData) { - this[AnalyticsParam.BLOCKCHAIN] = sentFrom.blockchain - this[AnalyticsParam.TOKEN] = sentFrom.token - this[AnalyticsParam.FEE_TYPE] = sentFrom.feeType.value - } - if (sentFrom is AnalyticsParam.TxSentFrom.Approve) { - this[AnalyticsParam.PERMISSION_TYPE] = sentFrom.permissionType - } - this["Memo"] = memoType.name - }, - ) { + class TransactionSent(sentFrom: AnalyticsParam.TxSentFrom, memoType: MemoType) : + Basic( + event = "Transaction sent", + params = buildMap { + this[AnalyticsParam.SOURCE] = sentFrom.value + if (sentFrom is AnalyticsParam.TxData) { + this[AnalyticsParam.BLOCKCHAIN] = sentFrom.blockchain + this[AnalyticsParam.TOKEN] = sentFrom.token + this[AnalyticsParam.FEE_TYPE] = sentFrom.feeType.value + } + if (sentFrom is AnalyticsParam.TxSentFrom.Approve) { + this[AnalyticsParam.PERMISSION_TYPE] = sentFrom.permissionType + } + this["Memo"] = memoType.name + }, + ) { enum class MemoType { Empty, Full, Null } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index bd87b11ba4..54e7a40802 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -6,6 +6,8 @@ import androidx.compose.runtime.setValue import androidx.lifecycle.* import arrow.core.getOrElse import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.core.analytics.models.AnalyticsParam +import com.tangem.core.analytics.models.Basic import com.tangem.core.ui.utils.InputNumberFormatter import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency @@ -21,9 +23,7 @@ import com.tangem.feature.swap.domain.BlockchainInteractor import com.tangem.feature.swap.domain.SwapInteractor import com.tangem.feature.swap.domain.models.DataError import com.tangem.feature.swap.domain.models.ExpressException -import com.tangem.feature.swap.domain.models.domain.PermissionOptions -import com.tangem.feature.swap.domain.models.domain.SwapDataModel -import com.tangem.feature.swap.domain.models.domain.SwapProvider +import com.tangem.feature.swap.domain.models.domain.* import com.tangem.feature.swap.domain.models.formatToUIRepresentation import com.tangem.feature.swap.domain.models.ui.* import com.tangem.feature.swap.models.* @@ -458,6 +458,7 @@ internal class SwapViewModel @Inject constructor( return } val fromCurrency = requireNotNull(dataState.fromCryptoCurrency) + val fee = requireNotNull(dataState.selectedFee) viewModelScope.launch(dispatchers.main) { runCatching(dispatchers.io) { swapInteractor.onSwap( @@ -467,11 +468,12 @@ internal class SwapViewModel @Inject constructor( currencyToGet = requireNotNull(dataState.toCryptoCurrency), amountToSwap = requireNotNull(dataState.amount), includeFeeInAmount = lastLoadedQuotesState.preparedSwapConfigState.includeFeeInAmount, - fee = requireNotNull(dataState.selectedFee), + fee = fee, ) }.onSuccess { when (it) { is TxState.TxSent -> { + sendSuccessSwapEvent(fromCurrency.currency, fee.feeType) val url = blockchainInteractor.getExplorerTransactionLink( networkId = fromCurrency.currency.network.backendId, txHash = it.txHash, @@ -540,16 +542,19 @@ internal class SwapViewModel @Inject constructor( private fun givePermissionsToSwap() { viewModelScope.launch(dispatchers.main) { + val fromToken = requireNotNull(dataState.fromCryptoCurrency?.currency) { + "dataState.fromCurrency might not be null" + } + val feeForPermission = when (val fee = dataState.approveDataModel?.fee) { + TxFeeState.Empty -> error("Fee should not be Empty") + is TxFeeState.MultipleFeeState -> fee.priorityFee + is TxFeeState.SingleFeeState -> fee.fee + null -> error("Fee should not be null") + } + val approveType = requireNotNull(dataState.approveType) { + "uiState.permissionState should not be null" + }.toDomainApproveType() runCatching(dispatchers.io) { - val feeForPermission = when (val fee = dataState.approveDataModel?.fee) { - TxFeeState.Empty -> error("Fee should not be Empty") - is TxFeeState.MultipleFeeState -> fee.priorityFee - is TxFeeState.SingleFeeState -> fee.fee - null -> error("Fee should not be null") - } - val fromToken = requireNotNull(dataState.fromCryptoCurrency?.currency) { - "dataState.fromCurrency might not be null" - } swapInteractor.givePermissionToSwap( networkId = fromToken.network.backendId, permissionOptions = PermissionOptions( @@ -559,9 +564,7 @@ internal class SwapViewModel @Inject constructor( forTokenContractAddress = (dataState.fromCryptoCurrency?.currency as? CryptoCurrency.Token) ?.contractAddress ?: "", fromToken = fromToken, - approveType = requireNotNull(dataState.approveType) { - "uiState.permissionState should not be null" - }.toDomainApproveType(), + approveType = approveType, txFee = feeForPermission, spenderAddress = requireNotNull(dataState.approveDataModel?.spenderAddress) { "dataState.approveDataModel.spenderAddress shouldn't be null" @@ -571,6 +574,7 @@ internal class SwapViewModel @Inject constructor( }.onSuccess { when (it) { is TxState.TxSent -> { + sendApproveSuccessEvent(fromToken, feeForPermission.feeType, approveType) updateWalletBalance() uiState = stateBuilder.loadingPermissionState(uiState) uiState = stateBuilder.dismissBottomSheet(uiState) @@ -875,6 +879,35 @@ internal class SwapViewModel @Inject constructor( ) } + private fun sendSuccessSwapEvent(fromToken: CryptoCurrency, feeType: FeeType) { + val event = AnalyticsParam.TxSentFrom.Swap( + blockchain = fromToken.network.name, + token = fromToken.symbol, + feeType = AnalyticsParam.FeeType.fromString(feeType.getNameForAnalytics()), + ) + analyticsEventHandler.send( + Basic.TransactionSent( + sentFrom = event, + memoType = Basic.TransactionSent.MemoType.Null, + ), + ) + } + + private fun sendApproveSuccessEvent(fromToken: CryptoCurrency, feeType: FeeType, approveType: SwapApproveType) { + val event = AnalyticsParam.TxSentFrom.Approve( + blockchain = fromToken.network.name, + token = fromToken.symbol, + feeType = AnalyticsParam.FeeType.fromString(feeType.getNameForAnalytics()), + permissionType = approveType.getNameForAnalytics(), + ) + analyticsEventHandler.send( + Basic.TransactionSent( + sentFrom = event, + memoType = Basic.TransactionSent.MemoType.Null, + ), + ) + } + private fun findAndSelectProvider(providerId: String): SwapProvider? { val selectedProvider = dataState.lastLoadedSwapStates.keys.firstOrNull { it.providerId == providerId } if (selectedProvider != null) {