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 e418215ed7..fd1583d9ef 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 -> { @@ -104,6 +117,8 @@ class UserTokensRepository( companion object { const val MESSAGE = "UserWalletID" + 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..102c872457 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,7 +59,7 @@ 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, name = currencyName, @@ -70,7 +70,7 @@ sealed interface Currency { } companion object { - private const val DERIVATION_PATH_RAW_VALUE = "m/44/0'/0/0" + private const val DERIVATION_PATH_RAW_VALUE = "m/44'/60'/0'/0/0" fun fromBlockchainNetwork( blockchainNetwork: BlockchainNetwork, token: com.tangem.blockchain.common.Token? = null, diff --git a/dependencies.gradle b/dependencies.gradle index b23c84e56f..c50297605c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', tangem_card_sdk : 'develop-163', - tangem_blockchain_sdk: 'develop-121', + tangem_blockchain_sdk: 'develop-127', // 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 0668389fcd..a6c96bb9da 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 @@ -98,6 +98,7 @@ fun Blockchain.toNetworkId(): String { Blockchain.Optimism -> "optimistic-ethereum" Blockchain.OptimismTestnet -> "optimistic-ethereum/test" Blockchain.Dash -> "dash" + Blockchain.SaltPay -> "wxdai" } } @@ -129,6 +130,7 @@ fun Blockchain.toCoinId(): String { Blockchain.Kusama -> "kusama" Blockchain.Optimism, Blockchain.OptimismTestnet -> "ethereum" Blockchain.Dash -> "dash" + Blockchain.SaltPay -> "wxdai" Blockchain.Unknown -> "unknown" } } \ No newline at end of file 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..291062389d 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,13 +51,13 @@ 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 name: String,