From 6d8bb28f02c4014842fbf54c6d533047632153e3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 22 May 2024 15:48:14 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../repository/DefaultNetworksRepository.kt | 15 ++++++++--- .../tokens/model/CryptoCurrencyAddress.kt | 6 +++++ .../tokens/GetNetworkAddressesUseCase.kt | 3 ++- .../tokens/repository/NetworksRepository.kt | 3 ++- .../presentation/domain/AvailableWallet.kt | 2 ++ .../presentation/viewmodel/SendViewModel.kt | 25 ++++++++++++------- 6 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAddress.kt diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt index 57f55c1aab..fe6ab4046f 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultNetworksRepository.kt @@ -13,6 +13,7 @@ import com.tangem.domain.common.extensions.fromNetworkId import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.demo.DemoConfig import com.tangem.domain.tokens.model.CryptoCurrency +import com.tangem.domain.tokens.model.CryptoCurrencyAddress import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.model.NetworkStatus import com.tangem.domain.tokens.repository.NetworksRepository @@ -78,7 +79,10 @@ internal class DefaultNetworksRepository( return blockchain == Blockchain.Aptos } - override suspend fun getNetworkAddresses(userWalletId: UserWalletId, network: Network): List { + override suspend fun getNetworkAddresses( + userWalletId: UserWalletId, + network: Network, + ): List { // Get list of currencies matching [network] val currencies = getCurrencies(userWalletId) .filter { currency -> network.id == currency.network.id } @@ -87,9 +91,12 @@ internal class DefaultNetworksRepository( if (currencies.toList().isEmpty()) return emptyList() return currencies.toList().map { currency -> - walletManagersFacade.getAddresses(userWalletId, currency.network) - .firstOrNull { it.type == AddressType.Default } - ?.value.orEmpty() + CryptoCurrencyAddress( + cryptoCurrency = currency, + address = walletManagersFacade.getAddresses(userWalletId, currency.network) + .firstOrNull { it.type == AddressType.Default } + ?.value.orEmpty(), + ) } } diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAddress.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAddress.kt new file mode 100644 index 0000000000..73b8902323 --- /dev/null +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrencyAddress.kt @@ -0,0 +1,6 @@ +package com.tangem.domain.tokens.model + +data class CryptoCurrencyAddress( + val cryptoCurrency: CryptoCurrency, + val address: String, +) \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetNetworkAddressesUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetNetworkAddressesUseCase.kt index 0fa37a5a07..654c263b3e 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetNetworkAddressesUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetNetworkAddressesUseCase.kt @@ -1,5 +1,6 @@ package com.tangem.domain.tokens +import com.tangem.domain.tokens.model.CryptoCurrencyAddress import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.repository.NetworksRepository import com.tangem.domain.wallets.models.UserWalletId @@ -8,7 +9,7 @@ class GetNetworkAddressesUseCase( internal val networksRepository: NetworksRepository, ) { - suspend fun invokeSync(userWalletId: UserWalletId, network: Network): List { + suspend fun invokeSync(userWalletId: UserWalletId, network: Network): List { return networksRepository.getNetworkAddresses(userWalletId, network) } } \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt index ebece1356e..271cdb4fcf 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/NetworksRepository.kt @@ -1,5 +1,6 @@ package com.tangem.domain.tokens.repository +import com.tangem.domain.tokens.model.CryptoCurrencyAddress import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.model.NetworkStatus import com.tangem.domain.wallets.models.UserWalletId @@ -46,5 +47,5 @@ interface NetworksRepository { fun isNeedToCreateAccountWithoutReserve(network: Network): Boolean - suspend fun getNetworkAddresses(userWalletId: UserWalletId, network: Network): List + suspend fun getNetworkAddresses(userWalletId: UserWalletId, network: Network): List } \ No newline at end of file diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/domain/AvailableWallet.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/domain/AvailableWallet.kt index 8a7d5e7f3a..b6959e4a35 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/domain/AvailableWallet.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/domain/AvailableWallet.kt @@ -1,6 +1,7 @@ package com.tangem.features.send.impl.presentation.domain import androidx.compose.runtime.Immutable +import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.wallets.models.UserWalletId /** @@ -15,4 +16,5 @@ data class AvailableWallet( val name: String, val userWalletId: UserWalletId, val address: String, + val cryptoCurrency: CryptoCurrency, ) \ No newline at end of file diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt index df163fdfff..c14b26757a 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt @@ -418,8 +418,11 @@ internal class SendViewModel @Inject constructor( } } - private suspend fun List.toAvailableWallets(): List = - filterNot { it.walletId == userWalletId || it.isLocked } + private suspend fun List.toAvailableWallets(): List { + val currentAddress: String = kotlin.runCatching { + cryptoCurrencyStatus.value.networkAddress?.defaultAddress?.value + }.getOrNull().orEmpty() + return filterNot { it.isLocked } .mapNotNull { wallet -> val addresses = if (!wallet.isMultiCurrency) { getCryptoCurrencyUseCase(wallet.walletId).getOrNull()?.let { @@ -432,14 +435,18 @@ internal class SendViewModel @Inject constructor( } else { getNetworkAddressesUseCase.invokeSync(wallet.walletId, cryptoCurrency.network) } - addresses?.map { address -> - AvailableWallet( - name = wallet.name, - address = address, - userWalletId = wallet.walletId, - ) - }?.fastDistinctBy { it.address } + addresses + ?.filter { it.address != currentAddress } + ?.map { (cryptoCurrency, address) -> + AvailableWallet( + name = wallet.name, + address = address, + cryptoCurrency = cryptoCurrency, + userWalletId = wallet.walletId, + ) + }?.fastDistinctBy { it.address } }.flatten() + } private suspend fun getTxHistory() { val txHistoryList = getFixedTxHistoryItemsUseCase.getSync(