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 eae80ac060..b15f2a7431 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -134,7 +134,6 @@ class TapWalletManager { } dispatchOnMain(WalletAction.LoadWallet()) - dispatchOnMain(WalletAction.LoadFiatRate()) } private suspend fun loadMultiWalletData(scanResponse: ScanResponse) { @@ -174,6 +173,7 @@ class TapWalletManager { walletManagers = listOf(primaryWalletManager), save = false, ), + WalletAction.LoadFiatRate(), ) } } @@ -202,6 +202,7 @@ class TapWalletManager { ) } checkIfDerivationsAreMissing(blockchainNetworks, scanResponse) + store.dispatch(WalletAction.LoadFiatRate(coinsList = userTokens)) } } @@ -218,7 +219,6 @@ class TapWalletManager { } store.dispatch(WalletAction.LoadWallet()) - store.dispatch(WalletAction.LoadFiatRate()) } } diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt index ad188c6913..c0b7e18155 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt @@ -5,7 +5,6 @@ import com.tangem.common.services.Result import com.tangem.network.api.tangemTech.TangemTechService import com.tangem.network.api.tangemTech.UserTokensResponse import com.tangem.tap.domain.NoDataError -import com.tangem.tap.features.wallet.models.Currency class UserTokensNetworkService(private val tangemTechService: TangemTechService) { suspend fun getUserTokens(userId: String): Result { @@ -22,9 +21,7 @@ class UserTokensNetworkService(private val tangemTechService: TangemTechService) } } - suspend fun saveUserTokens(userId: String, tokens: List): Result { - val tokensResponse = tokens.map { it.toTokenResponse() } - val data = UserTokensResponse(tokens = tokensResponse) - return tangemTechService.putUserTokens(userId, data) + suspend fun saveUserTokens(userId: String, tokens: UserTokensResponse): Result { + return tangemTechService.putUserTokens(userId, tokens) } } diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt index de30f616f6..67eda0ee93 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt @@ -8,6 +8,7 @@ import com.tangem.common.extensions.toHexString import com.tangem.common.services.Result import com.tangem.domain.common.extensions.calculateHmacSha256 import com.tangem.network.api.tangemTech.TangemTechService +import com.tangem.network.api.tangemTech.UserTokensResponse import com.tangem.tap.common.AndroidFileReader import com.tangem.tap.domain.NoDataError import com.tangem.tap.domain.tokens.models.BlockchainNetwork @@ -36,7 +37,7 @@ class UserTokensRepository( return when (val networkResult = networkService.getUserTokens(userId)) { is Result.Success -> { val tokens = networkResult.data.tokens.map { Currency.fromTokenResponse(it) } - storageService.saveUserTokens(card.getUserId(), tokens) + storageService.saveUserTokens(card.getUserId(), tokens.toUserTokensResponse()) tokens } is Result.Failure -> { @@ -46,13 +47,24 @@ class UserTokensRepository( } suspend fun saveUserTokens(card: Card, tokens: List) { - networkService.saveUserTokens(card.getUserId(), tokens) - storageService.saveUserTokens(card.getUserId(), tokens) + val userTokens = tokens.toUserTokensResponse() + networkService.saveUserTokens(card.getUserId(), userTokens) + storageService.saveUserTokens(card.getUserId(), userTokens) } suspend fun removeUserTokens(card: Card) { - networkService.saveUserTokens(card.getUserId(), emptyList()) - storageService.saveUserTokens(card.getUserId(), emptyList()) + val userTokens = emptyList().toUserTokensResponse() + networkService.saveUserTokens(card.getUserId(), userTokens) + storageService.saveUserTokens(card.getUserId(), userTokens) + } + + private fun List.toUserTokensResponse(): UserTokensResponse { + val tokensResponse = this.map { it.toTokenResponse() } + return UserTokensResponse( + tokens = tokensResponse, + group = GROUP_DEFAULT_VALUE, + sort = SORT_DEFAULT_VALUE, + ) } fun loadBlockchainsToDerive(card: Card): List { @@ -77,7 +89,8 @@ class UserTokensRepository( return when (error) { is NoDataError -> { val tokens = storageService.getUserTokens(card) - coroutineScope { launch { networkService.saveUserTokens(userId = userId, tokens = tokens) } } + val userTokens = tokens.toUserTokensResponse() + coroutineScope { launch { networkService.saveUserTokens(userId = userId, tokens = userTokens) } } tokens } else -> { @@ -97,6 +110,8 @@ class UserTokensRepository( } companion object { + const val SORT_DEFAULT_VALUE = "manual" + const val GROUP_DEFAULT_VALUE = "none" fun init(context: Context, tangemTechService: TangemTechService): UserTokensRepository { val fileReader = AndroidFileReader(context) val oldUserTokensRepository = OldUserTokensRepository( diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt index f2011cbebb..869c49034f 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt @@ -34,10 +34,8 @@ class UserTokensStorageService( return blockchainNetworks.flatMap { it.toCurrencies() } } - fun saveUserTokens(userId: String, tokens: List) { - val tokensResponse = tokens.map { it.toTokenResponse() } - val data = UserTokensResponse(tokens = tokensResponse) - val json = userTokensAdapter.toJson(data) + fun saveUserTokens(userId: String, tokens: UserTokensResponse) { + val json = userTokensAdapter.toJson(tokens) fileReader.rewriteFile(json, getFileNameForUserTokens(userId)) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index 96f742ec97..9817b4db49 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -278,7 +278,7 @@ class TokensMiddleware { val factory = store.state.globalState.tapWalletManager.walletManagerFactory val derivationStyle = scanResponse.card.derivationStyle - val addActions = currencyList.mapNotNull { currency -> + val addActions = currencyList.mapIndexedNotNull { index, currency -> when (currency) { is Currency.Blockchain -> { val derivationPath = currency.derivationPath?.let { DerivationPath(it) } @@ -293,12 +293,12 @@ class TokensMiddleware { scanResponse = scanResponse, blockchain = currency.blockchain, derivationParams = derivationParams, - ) ?: return@mapNotNull null + ) ?: return@mapIndexedNotNull null val blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager) WalletAction.MultiWallet.AddBlockchain( blockchain = blockchainNetwork, walletManager = walletManager, - save = true, + save = index == currencyList.lastIndex, ) } is Currency.Token -> { @@ -309,7 +309,7 @@ class TokensMiddleware { WalletAction.MultiWallet.AddToken( token = currency.token, blockchain = blockchainNetwork, - save = true, + save = index == currencyList.lastIndex, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt index 1500a10a1e..7597156ab9 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -59,9 +59,9 @@ sealed interface Currency { fun isToken(): Boolean = this is Token fun toTokenResponse(): TokenResponse { return TokenResponse( - id = coinId ?: "", + id = coinId, networkId = blockchain.toNetworkId(), - derivationPath = derivationPath ?: DERIVATION_PATH_RAW_VALUE, + derivationPath = derivationPath, name = currencyName, symbol = currencySymbol, decimals = decimals, @@ -70,7 +70,6 @@ sealed interface Currency { } companion object { - private const val DERIVATION_PATH_RAW_VALUE = "m/44/0'/0/0" fun fromBlockchainNetwork( blockchainNetwork: BlockchainNetwork, token: com.tangem.blockchain.common.Token? = null, @@ -112,11 +111,6 @@ sealed interface Currency { } fun fromTokenResponse(tokenResponse: TokenResponse): Currency { - val derivationPath = if (tokenResponse.derivationPath == DERIVATION_PATH_RAW_VALUE) { - null - } else { - tokenResponse.derivationPath - } return when { tokenResponse.contractAddress != null -> Token( com.tangem.blockchain.common.Token( @@ -127,11 +121,11 @@ sealed interface Currency { id = tokenResponse.id, ), blockchain = com.tangem.blockchain.common.Blockchain.fromNetworkId(tokenResponse.networkId)!!, - derivationPath = derivationPath, + derivationPath = tokenResponse.derivationPath, ) else -> Blockchain( blockchain = com.tangem.blockchain.common.Blockchain.fromNetworkId(tokenResponse.networkId)!!, - derivationPath = derivationPath, + derivationPath = tokenResponse.derivationPath, ) } } diff --git a/dependencies.gradle b/dependencies.gradle index 4ac18f3aff..dd0bad7178 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -3,7 +3,7 @@ ext.versions = [ build_gradle : '7.1.3', // tangem_card_sdk : 'develop-164', tangem_card_sdk : '0.0.1', - // tangem_blockchain_sdk: 'develop-122', + // tangem_blockchain_sdk: 'develop-128', tangem_blockchain_sdk: '0.0.1', ] diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 61d47d0034..acd5d5c677 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -44,7 +44,8 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "polkadot" -> Blockchain.Polkadot "polkadot/test" -> Blockchain.PolkadotTestnet "kusama" -> Blockchain.Kusama - "optimistic-ethereum" -> Blockchain.Optimism + // "optimistic-ethereum" -> Blockchain.Optimism + "optimistic-ethereum" -> null //TODO: Optimism is disabled until next release "optimistic-ethereum/test" -> Blockchain.OptimismTestnet "dash" -> Blockchain.Dash "wxdai" -> Blockchain.SaltPay @@ -57,7 +58,7 @@ fun Blockchain.toNetworkId(): String { return when (this) { Blockchain.Unknown -> "unknown" Blockchain.Arbitrum -> "arbitrum-one" - Blockchain.ArbitrumTestnet -> "arbitrum/test" + Blockchain.ArbitrumTestnet -> "arbitrum-one/test" Blockchain.Avalanche -> "avalanche" Blockchain.AvalancheTestnet -> "avalanche/test" Blockchain.Binance -> "binancecoin" diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt index 4afd9ed2ef..4f88fca3b7 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt @@ -51,15 +51,15 @@ data class GeoResponse( data class UserTokensResponse( val version: Int = 0, - val group: String = "", - val sort: String = "", + val group: String? = null, + val sort: String? = null, val tokens: List = emptyList(), ) : TangemTechResponse data class TokenResponse( - val id: String, + val id: String? = null, val networkId: String, - val derivationPath: String, + val derivationPath: String? = null, val name: String, val symbol: String, val decimals: Int,