From b082a86c3576692ebb3d09131098f744b8e8e207 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 25 Jan 2024 21:02:22 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../DefaultWalletManagersFacade.kt | 2 ++ ...TransactionDataToTxHistoryItemConverter.kt | 27 +++++++++++++++---- .../utils/UpdateWalletManagerResultFactory.kt | 20 +++++++++----- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt index 45f2441c60..213a569e11 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt @@ -552,6 +552,7 @@ class DefaultWalletManagersFacade( blockchain = blockchain, derivationPath = derivationPath, ) + val feePaidCurrency = blockchain.feePaidCurrency() if (walletManager == null) { Timber.e("Unable to get a wallet manager for blockchain: $blockchain") @@ -560,6 +561,7 @@ class DefaultWalletManagersFacade( val transactionDataConverter = TransactionDataToTxHistoryItemConverter( walletAddresses = SdkAddressToAddressConverter.convertList(walletManager.wallet.addresses).toSet(), + feePaidCurrency = feePaidCurrency, ) return walletManager.wallet.recentTransactions.mapNotNull(transactionDataConverter::convert) diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt index d686b942ec..381b9cadd3 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt @@ -1,8 +1,6 @@ package com.tangem.domain.walletmanager.utils -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.TransactionData -import com.tangem.blockchain.common.TransactionStatus +import com.tangem.blockchain.common.* import com.tangem.domain.txhistory.models.TxHistoryItem import com.tangem.domain.walletmanager.model.Address import com.tangem.utils.converter.Converter @@ -18,6 +16,7 @@ import java.math.BigDecimal */ internal class TransactionDataToTxHistoryItemConverter( private val walletAddresses: Set
, + private val feePaidCurrency: FeePaidCurrency, ) : Converter { override fun convert(value: TransactionData): TxHistoryItem? { @@ -48,12 +47,30 @@ internal class TransactionDataToTxHistoryItemConverter( private fun getTransactionAmountValue(amount: Amount, feeAmount: Amount?): BigDecimal? { val feeValue = feeAmount?.value ?: BigDecimal.ZERO - val value = amount.value?.plus(feeValue) + val value = amount.value if (value == null) { Timber.w("Transaction amount must not be null: ${amount.currencySymbol}") } - return value + return when (feePaidCurrency) { + FeePaidCurrency.SameCurrency -> value?.plus(feeValue) + FeePaidCurrency.Coin -> { + if (amount.type is AmountType.Coin) value?.plus(feeValue) else value + } + is FeePaidCurrency.Token -> { + val token = (amount.type as? AmountType.Token)?.token ?: return value + if (isSameToken(token, feePaidCurrency.token)) { + value?.plus(feeValue) + } else { + value + } + } + } + } + + private fun isSameToken(amountToken: Token, feeToken: Token): Boolean { + return amountToken.contractAddress.equals(feeToken.contractAddress, ignoreCase = true) && + amountToken.symbol.equals(feeToken.symbol, ignoreCase = true) } } \ No newline at end of file diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt index 64600a36df..dbcc2c7ff5 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt @@ -15,24 +15,28 @@ internal class UpdateWalletManagerResultFactory { fun getResult(walletManager: WalletManager): UpdateWalletManagerResult.Verified { val wallet = walletManager.wallet val addresses = getAvailableAddresses(wallet.addresses) + val feePaidCurrency = wallet.blockchain.feePaidCurrency() + val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency) return UpdateWalletManagerResult.Verified( selectedAddress = wallet.address, addresses = addresses, currenciesAmounts = getTokensAmounts(wallet.amounts.values.toSet()), - currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()), + currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()), ) } fun getDemoResult(walletManager: WalletManager, demoAmount: Amount): UpdateWalletManagerResult.Verified { val wallet = walletManager.wallet val addresses = getAvailableAddresses(wallet.addresses) + val feePaidCurrency = wallet.blockchain.feePaidCurrency() + val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency) return UpdateWalletManagerResult.Verified( selectedAddress = wallet.address, addresses = addresses, currenciesAmounts = getDemoTokensAmounts(demoAmount, walletManager.cardTokens), - currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()), + currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()), ) } @@ -81,14 +85,19 @@ internal class UpdateWalletManagerResultFactory { } private fun getCurrentTransactions( - walletAddresses: Set
, + txHistoryItemConverter: TransactionDataToTxHistoryItemConverter, recentTransactions: Set, ): Set { val unconfirmedTransactions = recentTransactions.filter { it.status == TransactionStatus.Unconfirmed } - return unconfirmedTransactions.mapNotNullTo(hashSetOf()) { createCurrencyTransaction(walletAddresses, it) } + return unconfirmedTransactions.mapNotNullTo(hashSetOf()) { + createCurrencyTransaction( + txHistoryItemConverter = txHistoryItemConverter, + data = it, + ) + } } private fun createCurrencyAmount(amount: Amount): CryptoCurrencyAmount? { @@ -106,10 +115,9 @@ internal class UpdateWalletManagerResultFactory { } private fun createCurrencyTransaction( - walletAddresses: Set
, + txHistoryItemConverter: TransactionDataToTxHistoryItemConverter, data: TransactionData, ): CryptoCurrencyTransaction? { - val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(walletAddresses) return when (val type = data.amount.type) { is AmountType.Coin -> { val txHistoryItem = txHistoryItemConverter.convert(data) ?: return null