From 23256d93db9a215006f0fa77af2c7d77ddc66937 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Aug 2023 17:36:54 +0500 Subject: [PATCH] Updated on 2026-08-14 --- core/res/src/main/res/values-ru/strings.xml | 1 + core/res/src/main/res/values/strings.xml | 1 + .../ui/components/transactions/Transaction.kt | 24 +++++++++-------- .../transactions/state/TransactionState.kt | 26 ++++++++++--------- .../SdkTransactionHistoryItemConverter.kt | 19 +++++++++----- .../domain/txhistory/models/TxHistoryItem.kt | 12 +++++++-- .../TokenDetailsTxHistoryItemFlowConverter.kt | 15 ++++++++--- .../presentation/common/WalletPreviewData.kt | 4 +-- .../WalletTxHistoryItemFlowConverter.kt | 15 ++++++++--- gradle/dependencies.toml | 2 +- 10 files changed, 77 insertions(+), 42 deletions(-) diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 820055db8d..95a129cac5 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -460,6 +460,7 @@ контракт: %s У вас еще нет транзакций Не удалось загрузить историю транзакций.\nНажмите на кнопку перезагрузки, чтобы обновить информацию. + Несколько адресов История транзакций в настоящее время не поддерживается для этого блокчейна. Но не волнуйтесь, мы работаем над этим! А пока вы можете проверить ее в обозревателе. от: %s на: %s diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 755f6928a3..86e75e5d4d 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -451,6 +451,7 @@ contract: %s You don\'t have any transactions yet Failed to load transaction history.\nClick on reload button to update the information. + Multiple addresses Transaction history is currently not supported for this blockchain. But don\'t worry, we\'re working on it! In the meantime you can check it in the explorer. from: %s to: %s diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt index f31203179d..b3622b4b1b 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt @@ -23,6 +23,8 @@ import com.tangem.core.ui.R import com.tangem.core.ui.components.CircleShimmer import com.tangem.core.ui.components.RectangleShimmer import com.tangem.core.ui.components.transactions.state.TransactionState +import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme import java.util.UUID @@ -237,7 +239,7 @@ private fun Subtitle(state: TransactionState, modifier: Modifier = Modifier) { is TransactionState.Send, -> stringResource( id = R.string.transaction_history_transaction_to_address, - state.address, + state.address.resolveReference(), ) is TransactionState.Receiving, is TransactionState.Receive, @@ -245,13 +247,13 @@ private fun Subtitle(state: TransactionState, modifier: Modifier = Modifier) { is TransactionState.Approved, -> stringResource( id = R.string.transaction_history_transaction_from_address, - state.address, + state.address.resolveReference(), ) is TransactionState.Swapping, is TransactionState.Swapped, -> stringResource( id = R.string.transaction_history_contract_address, - state.address, + state.address.resolveReference(), ) }, modifier = modifier, @@ -357,49 +359,49 @@ private class TransactionItemStateProvider : CollectionPreviewParameterProvider< collection = listOf( TransactionState.Sending( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "-0.500913 BTC", timestamp = "8:41", ), TransactionState.Receiving( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), TransactionState.Approving( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), TransactionState.Swapping( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), TransactionState.Send( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "-0.500913 BTC", timestamp = "8:41", ), TransactionState.Receive( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), TransactionState.Approved( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), TransactionState.Swapped( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "+0.500913 BTC", timestamp = "8:41", ), diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt index 05e969d505..8178e83e61 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt @@ -1,5 +1,7 @@ package com.tangem.core.ui.components.transactions.state +import com.tangem.core.ui.extensions.TextReference + /** * Transaction component state * @@ -20,14 +22,14 @@ sealed interface TransactionState { */ sealed class Content( override val txHash: String, - open val address: String, + open val address: TextReference, open val amount: String, open val timestamp: String, ) : TransactionState { fun copySealed( txHash: String = this.txHash, - address: String = this.address, + address: TextReference = this.address, amount: String = this.amount, timestamp: String = this.timestamp, ): Content { @@ -54,7 +56,7 @@ sealed interface TransactionState { */ sealed class ProcessedTransactionContent( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : Content(txHash, address, amount, timestamp) @@ -69,7 +71,7 @@ sealed interface TransactionState { */ sealed class CompletedTransactionContent( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : Content(txHash, address, amount, timestamp) @@ -84,7 +86,7 @@ sealed interface TransactionState { */ data class Sending( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : ProcessedTransactionContent(txHash, address, amount, timestamp) @@ -99,7 +101,7 @@ sealed interface TransactionState { */ data class Receiving( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : ProcessedTransactionContent(txHash, address, amount, timestamp) @@ -114,7 +116,7 @@ sealed interface TransactionState { */ data class Approving( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : ProcessedTransactionContent(txHash, address, amount, timestamp) @@ -129,7 +131,7 @@ sealed interface TransactionState { */ data class Swapping( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : ProcessedTransactionContent(txHash, address, amount, timestamp) @@ -144,7 +146,7 @@ sealed interface TransactionState { */ data class Send( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : CompletedTransactionContent(txHash, address, amount, timestamp) @@ -159,7 +161,7 @@ sealed interface TransactionState { */ data class Receive( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : CompletedTransactionContent(txHash, address, amount, timestamp) @@ -174,7 +176,7 @@ sealed interface TransactionState { */ data class Approved( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : CompletedTransactionContent(txHash, address, amount, timestamp) @@ -189,7 +191,7 @@ sealed interface TransactionState { */ data class Swapped( override val txHash: String, - override val address: String, + override val address: TextReference, override val amount: String, override val timestamp: String, ) : CompletedTransactionContent(txHash, address, amount, timestamp) diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt index 8df6e63c54..df57ff2349 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt @@ -11,12 +11,7 @@ internal class SdkTransactionHistoryItemConverter : Converter - TxHistoryItem.TransactionDirection.Incoming(direction.from) - is SdkTransactionHistoryItem.TransactionDirection.Outgoing -> - TxHistoryItem.TransactionDirection.Outgoing(direction.to) - }, + direction = value.direction.toDomain(), status = when (value.status) { TransactionStatus.Confirmed -> TxHistoryItem.TxStatus.Confirmed TransactionStatus.Unconfirmed -> TxHistoryItem.TxStatus.Unconfirmed @@ -26,4 +21,16 @@ internal class SdkTransactionHistoryItemConverter : Converter + TxHistoryItem.TransactionDirection.Incoming(address.toDomain()) + is TransactionHistoryItem.TransactionDirection.Outgoing -> + TxHistoryItem.TransactionDirection.Outgoing(address.toDomain()) + } + + private fun TransactionHistoryItem.Address.toDomain(): TxHistoryItem.Address = when (this) { + TransactionHistoryItem.Address.Multiple -> TxHistoryItem.Address.Multiple + is TransactionHistoryItem.Address.Single -> TxHistoryItem.Address.Single(rawAddress = rawAddress) + } } \ No newline at end of file diff --git a/domain/txhistory/models/src/main/kotlin/com/tangem/domain/txhistory/models/TxHistoryItem.kt b/domain/txhistory/models/src/main/kotlin/com/tangem/domain/txhistory/models/TxHistoryItem.kt index 447a9395ff..c17f0dccb6 100644 --- a/domain/txhistory/models/src/main/kotlin/com/tangem/domain/txhistory/models/TxHistoryItem.kt +++ b/domain/txhistory/models/src/main/kotlin/com/tangem/domain/txhistory/models/TxHistoryItem.kt @@ -11,8 +11,11 @@ data class TxHistoryItem( val amount: BigDecimal, ) { sealed interface TransactionDirection { - data class Incoming(val from: String) : TransactionDirection - data class Outgoing(val to: String) : TransactionDirection + + val address: Address + + data class Incoming(override val address: Address) : TransactionDirection + data class Outgoing(override val address: Address) : TransactionDirection } sealed interface TransactionType { @@ -20,4 +23,9 @@ data class TxHistoryItem( } enum class TxStatus { Confirmed, Unconfirmed } + + sealed class Address { + data class Single(val rawAddress: String) : Address() + object Multiple : Address() + } } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt index eafd6c9a31..a8f2d95f25 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt @@ -7,8 +7,10 @@ import com.tangem.core.ui.components.transactions.intents.TxHistoryClickIntents import com.tangem.core.ui.components.transactions.state.TransactionState import com.tangem.core.ui.components.transactions.state.TxHistoryState import com.tangem.core.ui.components.transactions.state.TxHistoryState.TxHistoryItemState +import com.tangem.core.ui.extensions.TextReference import com.tangem.domain.txhistory.models.TxHistoryItem import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsState +import com.tangem.features.tokendetails.impl.R import com.tangem.utils.converter.Converter import com.tangem.utils.extensions.isToday import com.tangem.utils.extensions.isYesterday @@ -100,13 +102,13 @@ internal class TokenDetailsTxHistoryItemFlowConverter( return when (item.status) { TxHistoryItem.TxStatus.Confirmed -> TransactionState.Receive( txHash = item.txHash, - address = direction.from.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(), timestamp = item.getRawTimestamp(), ) TxHistoryItem.TxStatus.Unconfirmed -> TransactionState.Receiving( txHash = item.txHash, - address = direction.from.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(), timestamp = item.getRawTimestamp(), ) @@ -120,13 +122,13 @@ internal class TokenDetailsTxHistoryItemFlowConverter( return when (item.status) { TxHistoryItem.TxStatus.Confirmed -> TransactionState.Send( txHash = item.txHash, - address = direction.to.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(), timestamp = item.getRawTimestamp(), ) TxHistoryItem.TxStatus.Unconfirmed -> TransactionState.Sending( txHash = item.txHash, - address = direction.to.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(), timestamp = item.getRawTimestamp(), ) @@ -220,4 +222,9 @@ internal class TokenDetailsTxHistoryItemFlowConverter( DateTime(this.toLong(), DateTimeZone.getDefault()), ) } + + private fun TxHistoryItem.TransactionDirection.extractAddress(): TextReference = when (val addr = address) { + TxHistoryItem.Address.Multiple -> TextReference.Res(R.string.transaction_history_multiple_addresses) + is TxHistoryItem.Address.Single -> TextReference.Str(addr.rawAddress.toBriefAddressFormat()) + } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt index bf75186348..1e70c05083 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt @@ -387,7 +387,7 @@ internal object WalletPreviewData { TxHistoryState.TxHistoryItemState.Transaction( TransactionState.Sending( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "-0.500913 BTC", timestamp = "8:41", ), @@ -396,7 +396,7 @@ internal object WalletPreviewData { TxHistoryState.TxHistoryItemState.Transaction( TransactionState.Sending( txHash = UUID.randomUUID().toString(), - address = "33BddS...ga2B", + address = TextReference.Str("33BddS...ga2B"), amount = "-0.500913 BTC", timestamp = "8:41", ), diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt index fae55f6b5b..5e4a05132f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt @@ -7,8 +7,10 @@ import com.tangem.common.Provider import com.tangem.core.ui.components.transactions.state.TransactionState import com.tangem.core.ui.components.transactions.state.TxHistoryState import com.tangem.core.ui.components.transactions.state.TxHistoryState.TxHistoryItemState +import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.utils.BigDecimalFormatter import com.tangem.domain.txhistory.models.TxHistoryItem +import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.presentation.wallet.state.WalletSingleCurrencyState import com.tangem.feature.wallet.presentation.wallet.state.WalletState import com.tangem.feature.wallet.presentation.wallet.viewmodels.WalletClickIntents @@ -115,13 +117,13 @@ internal class WalletTxHistoryItemFlowConverter( return when (item.status) { TxHistoryItem.TxStatus.Confirmed -> TransactionState.Receive( txHash = item.txHash, - address = direction.from.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(blockchain = blockchain), timestamp = item.getRawTimestamp(), ) TxHistoryItem.TxStatus.Unconfirmed -> TransactionState.Receiving( txHash = item.txHash, - address = direction.from.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(blockchain = blockchain), timestamp = item.getRawTimestamp(), ) @@ -136,13 +138,13 @@ internal class WalletTxHistoryItemFlowConverter( return when (item.status) { TxHistoryItem.TxStatus.Confirmed -> TransactionState.Send( txHash = item.txHash, - address = direction.to.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(blockchain = blockchain), timestamp = item.getRawTimestamp(), ) TxHistoryItem.TxStatus.Unconfirmed -> TransactionState.Sending( txHash = item.txHash, - address = direction.to.toBriefAddressFormat(), + address = direction.extractAddress(), amount = item.amount.toCryptoCurrencyFormat(blockchain = blockchain), timestamp = item.getRawTimestamp(), ) @@ -240,4 +242,9 @@ internal class WalletTxHistoryItemFlowConverter( DateTime(this.toLong(), DateTimeZone.getDefault()), ) } + + private fun TxHistoryItem.TransactionDirection.extractAddress(): TextReference = when (val addr = address) { + TxHistoryItem.Address.Multiple -> TextReference.Res(R.string.transaction_history_multiple_addresses) + is TxHistoryItem.Address.Single -> TextReference.Str(addr.rawAddress.toBriefAddressFormat()) + } } \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 04b0bc5086..2ebbd8a165 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -80,7 +80,7 @@ okHttp-prettyLogging = "3.1.0" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-327" +tangemBlockchainSdk = "develop-330" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-289" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds