From 6018cf0b710c8bda72db98bea50faa7f478cd881 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 13 Nov 2025 14:18:21 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../api/tangemTech/models/WalletIdBody.kt | 13 ++++++++++++- .../fetcher/FetchWalletAccountsErrorHandler.kt | 6 ++++++ .../FetchWalletAccountsErrorHandlerTest.kt | 18 +++++++++++++++--- .../data/common/network/NetworkFactory.kt | 7 +++---- .../data/wallets/DefaultWalletsRepository.kt | 5 +++++ .../account/ExpandedAccountsHolder.kt | 7 ++----- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/WalletIdBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/WalletIdBody.kt index b99b869cdf..d8908b2d9f 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/WalletIdBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/WalletIdBody.kt @@ -7,5 +7,16 @@ import com.squareup.moshi.JsonClass data class WalletIdBody( @Json(name = "id") val walletId: String, @Json(name = "name") val name: String, + @Json(name = "type") val walletType: WalletType? = null, @Json(name = "cards") val cards: List? = null, -) \ No newline at end of file +) { + + @JsonClass(generateAdapter = false) + enum class WalletType { + @Json(name = "card") + COLD, + + @Json(name = "mobile") + HOT, + } +} \ No newline at end of file diff --git a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandler.kt b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandler.kt index 7a567ee052..c4b9d76100 100644 --- a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandler.kt +++ b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandler.kt @@ -12,11 +12,13 @@ import com.tangem.datasource.api.common.response.isNetworkError import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.api.tangemTech.models.WalletIdBody +import com.tangem.datasource.api.tangemTech.models.WalletIdBody.WalletType import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse import com.tangem.datasource.api.tangemTech.models.account.WalletAccountDTO import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse import com.tangem.datasource.local.token.UserTokensResponseStore import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext @@ -127,6 +129,10 @@ internal class FetchWalletAccountsErrorHandler @Inject constructor( body = WalletIdBody( walletId = userWalletId.stringValue, name = userWallet.name, + walletType = when (userWallet) { + is UserWallet.Cold -> WalletType.COLD + is UserWallet.Hot -> WalletType.HOT + }, ), ) } diff --git a/data/account/src/test/java/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandlerTest.kt b/data/account/src/test/java/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandlerTest.kt index 5dce1a4bd9..e4495ab395 100644 --- a/data/account/src/test/java/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandlerTest.kt +++ b/data/account/src/test/java/com/tangem/data/account/fetcher/FetchWalletAccountsErrorHandlerTest.kt @@ -113,14 +113,20 @@ class FetchWalletAccountsErrorHandlerTest { ) val walletName = "Wallet" - val userWallet = mockk { + val userWallet = mockk { every { this@mockk.walletId } returns userWalletId every { this@mockk.name } returns walletName } coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet coEvery { - tangemTechApi.createWallet(WalletIdBody(walletId = userWalletId.stringValue, name = walletName)) + tangemTechApi.createWallet( + WalletIdBody( + walletId = userWalletId.stringValue, + name = walletName, + walletType = WalletIdBody.WalletType.COLD, + ), + ) } returns apiResponse coEvery { pushWalletAccounts(userWalletId, listOf(accountDTO)) } returns savedAccountsResponse @@ -136,7 +142,13 @@ class FetchWalletAccountsErrorHandlerTest { // Assert coVerify { userTokensSaver.pushWithRetryer(userWalletId, response = savedAccountsResponse.toUserTokensResponse()) - tangemTechApi.createWallet(WalletIdBody(walletId = userWalletId.stringValue, name = "Wallet")) + tangemTechApi.createWallet( + WalletIdBody( + walletId = userWalletId.stringValue, + name = walletName, + walletType = WalletIdBody.WalletType.COLD, + ), + ) eTagsStore.store(userWalletId, ETagsStore.Key.WalletAccounts, eTagValue) pushWalletAccounts(userWalletId, listOf(accountDTO)) storeWalletAccounts(userWalletId, savedAccountsResponse) diff --git a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt index 804fb0db6d..1e7906cfbb 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt @@ -176,11 +176,10 @@ class NetworkFactory @Inject constructor( Network.DerivationPath.Card(defaultDerivationPath) } } else { - val isMainIndexOrNull = accountIndex == null || accountIndex == DerivationIndex.Main - if (extraDerivationPath != defaultDerivationPath && isMainIndexOrNull) { - Network.DerivationPath.Custom(extraDerivationPath) + if (extraDerivationPath == defaultDerivationPath) { + Network.DerivationPath.Card(defaultDerivationPath) } else { - Network.DerivationPath.Card(extraDerivationPath) + Network.DerivationPath.Custom(extraDerivationPath) } } } diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt index 8c373d273b..5627983536 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt @@ -12,6 +12,7 @@ import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.* import com.tangem.datasource.api.tangemTech.models.SeedPhraseNotificationDTO.Status +import com.tangem.datasource.api.tangemTech.models.WalletIdBody.WalletType import com.tangem.datasource.local.datastore.RuntimeStateStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys @@ -260,6 +261,10 @@ internal class DefaultWalletsRepository( body = WalletIdBody( walletId = userWalletId.stringValue, name = userWallet.name, + walletType = when (userWallet) { + is UserWallet.Cold -> WalletType.COLD + is UserWallet.Hot -> WalletType.HOT + }, ), ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/account/ExpandedAccountsHolder.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/account/ExpandedAccountsHolder.kt index 2ae1796e77..47735160d8 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/account/ExpandedAccountsHolder.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/account/ExpandedAccountsHolder.kt @@ -24,19 +24,16 @@ internal class ExpandedAccountsHolder @Inject constructor( flow = walletAccounts(userWallet), flow2 = isAccountsModeEnabledUseCase.invoke(), transform = { accountList, isAccountsMode -> - if (!isAccountsMode) { - expandedAccounts.update { emptyMap() } - return@combine - } val isSingleAccount = accountList.accounts.size == 1 val defaultExpanded = when { + !isAccountsMode -> setOf() isSingleAccount -> setOf(accountList.mainAccount.accountId) else -> setOf() } expandedAccounts.update { map -> var expandedSet = map[userWallet.walletId] ?: defaultExpanded // force expand for single account - if (isSingleAccount) expandedSet = defaultExpanded + if (isSingleAccount || !isAccountsMode) expandedSet = defaultExpanded map.plus(userWallet.walletId to expandedSet) } },