diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 4a1be08512..a13406537e 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 4a1be08512fe2b45504f2bdaa0e35f5c11e11319 +Subproject commit a13406537ec4b05f930131b151ea6ebb1c0b5ca3 diff --git a/app/src/main/assets/testnet_tokens.json b/app/src/main/assets/testnet_tokens.json index ada88c6bc7..6c19252e4f 100644 --- a/app/src/main/assets/testnet_tokens.json +++ b/app/src/main/assets/testnet_tokens.json @@ -434,6 +434,16 @@ } ] }, + { + "id" : "algorand", + "symbol" : "ALGO", + "name" : "Algorand", + "networks" : [ + { + "networkId" : "algorand/test" + } + ] + }, { "id" : "arbitrum-one", "symbol" : "ETH", diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt index ed2d89b8d2..c09740d22f 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt @@ -145,6 +145,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager { jsonRpc = accessTokens.bitcoin?.jsonRPC, blockBookRest = accessTokens.bitcoin?.blockBookRest, ), + algorand = GetBlockAccessToken(rest = accessTokens.algorand?.rest), ) } } diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt index ec2d4845ad..f0b1403825 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt @@ -66,6 +66,7 @@ data class GetBlockAccessTokens( @Json(name = "litecoin") val litecoin: GetBlockToken?, @Json(name = "dash") val dash: GetBlockToken?, @Json(name = "bitcoin") val bitcoin: GetBlockToken?, + @Json(name = "algorand") val algorand: GetBlockToken?, ) @JsonClass(generateAdapter = true) diff --git a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt index 33e08b6314..1f3cc0f7dc 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt @@ -50,6 +50,7 @@ fun getActiveIconRes(blockchainId: String): Int { "vechain", "vechain/test" -> R.drawable.img_vechain_22 "aptos", "aptos/test" -> R.drawable.img_aptos_22 "shibarium", "shibarium/test" -> R.drawable.img_shibarium_22 + "algorand", "algorand/test" -> R.drawable.img_algorand_22 else -> R.drawable.ic_alert_24 } } @@ -101,6 +102,7 @@ fun getActiveIconResByNetworkId(networkId: String): Int { "vechain", "vechain/test" -> R.drawable.img_vechain_22 "aptos", "aptos/test" -> R.drawable.img_aptos_22 "shibarium", "shibarium/test" -> R.drawable.img_shibarium_22 + "algorand", "algorand/test" -> R.drawable.img_algorand_22 else -> R.drawable.ic_alert_24 } } @@ -149,6 +151,7 @@ fun getActiveIconResByCoinId(coinId: String): Int { "vechain" -> R.drawable.img_vechain_22 "aptos" -> R.drawable.img_aptos_22 "shibarium" -> R.drawable.img_shibarium_22 + "algorand" -> R.drawable.img_algorand_22 else -> R.drawable.ic_alert_24 } } @@ -200,6 +203,7 @@ fun getGreyedOutIconRes(blockchainId: String): Int { "vechain", "vechain/test" -> R.drawable.ic_vechain_22 "aptos", "aptos/test" -> R.drawable.ic_aptos_22 "shibarium", "shibarium/test" -> R.drawable.ic_shibarium_22 + "algorand", "algorand/test" -> R.drawable.ic_algorand_22 else -> R.drawable.ic_alert_24 } } @@ -251,6 +255,7 @@ fun getGreyedOutIconResByNetworkId(networkId: String): Int { "vechain", "vechain/test" -> R.drawable.ic_vechain_22 "aptos", "aptos/test" -> R.drawable.ic_aptos_22 "shibarium", "shibarium/test" -> R.drawable.ic_shibarium_22 + "algorand", "algorand/test" -> R.drawable.ic_algorand_22 else -> R.drawable.ic_alert_24 } } \ No newline at end of file diff --git a/core/ui/src/main/res/drawable/ic_algorand_22.xml b/core/ui/src/main/res/drawable/ic_algorand_22.xml new file mode 100644 index 0000000000..770f3c6096 --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_algorand_22.xml @@ -0,0 +1,10 @@ + + + diff --git a/core/ui/src/main/res/drawable/img_algorand_22.xml b/core/ui/src/main/res/drawable/img_algorand_22.xml new file mode 100644 index 0000000000..3298f10b19 --- /dev/null +++ b/core/ui/src/main/res/drawable/img_algorand_22.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 95ba582d02..2c273db0de 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -80,9 +80,11 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "vechain/test" -> Blockchain.VeChainTestnet "aptos" -> Blockchain.Aptos "aptos/test" -> Blockchain.AptosTestnet + "" -> Blockchain.Playa3ull // FIXME "shibarium" -> Blockchain.Shibarium "shibarium/test" -> Blockchain.ShibariumTestnet - "" -> Blockchain.Playa3ull // FIXME + "algorand" -> Blockchain.Algorand + "algorand/test" -> Blockchain.AlgorandTestnet else -> null } } @@ -164,9 +166,11 @@ fun Blockchain.toNetworkId(): String { Blockchain.VeChainTestnet -> "vechain/test" Blockchain.Aptos -> "aptos" Blockchain.AptosTestnet -> "aptos/test" + Blockchain.Playa3ull -> "" // FIXME Blockchain.Shibarium -> "shibarium" Blockchain.ShibariumTestnet -> "shibarium/test" - Blockchain.Playa3ull -> "" // FIXME + Blockchain.Algorand -> "algorand" + Blockchain.AlgorandTestnet -> "algorand/test" } } @@ -218,10 +222,12 @@ fun Blockchain.toCoinId(): String { Blockchain.VeChain, Blockchain.VeChainTestnet -> "vechain" Blockchain.Aptos -> "aptos" Blockchain.AptosTestnet -> "aptos/test" - Blockchain.Unknown -> "unknown" + Blockchain.Playa3ull -> "" // FIXME Blockchain.Shibarium -> "bone-shibaswap" Blockchain.ShibariumTestnet -> "bone-shibaswap/test" - Blockchain.Playa3ull -> "" // FIXME + Blockchain.Algorand -> "algorand" + Blockchain.AlgorandTestnet -> "algorand/test" + Blockchain.Unknown -> "unknown" } } diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt index a040c7db7d..c5792124c9 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt @@ -276,7 +276,11 @@ class DefaultWalletManagersFacade( resultFactory.getResult(walletManager) } catch (e: BlockchainSdkError.AccountNotFound) { - resultFactory.getNoAccountResult(walletManager = walletManager, customMessage = e.customMessage) + resultFactory.getNoAccountResult( + walletManager = walletManager, + customMessage = e.customMessage, + amountToCreateAccount = e.amountToCreateAccount, + ) } catch (e: Throwable) { Timber.w(e, "Unable to update a wallet manager for: ${walletManager.wallet.blockchain}") @@ -288,7 +292,11 @@ class DefaultWalletManagersFacade( return try { resultFactory.getResult(walletManager) } catch (e: BlockchainSdkError.AccountNotFound) { - resultFactory.getNoAccountResult(walletManager = walletManager, customMessage = e.customMessage) + resultFactory.getNoAccountResult( + walletManager = walletManager, + customMessage = e.customMessage, + amountToCreateAccount = e.amountToCreateAccount, + ) } catch (e: Throwable) { Timber.w(e, "Unable to update a wallet manager for: ${walletManager.wallet.blockchain}") diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt index dbcc2c7ff5..6b88794b4b 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt @@ -40,13 +40,17 @@ internal class UpdateWalletManagerResultFactory { ) } - fun getNoAccountResult(walletManager: WalletManager, customMessage: String): UpdateWalletManagerResult { + fun getNoAccountResult( + walletManager: WalletManager, + customMessage: String, + amountToCreateAccount: BigDecimal?, + ): UpdateWalletManagerResult { val wallet = walletManager.wallet val blockchain = wallet.blockchain val firstWalletToken = wallet.getTokens().firstOrNull() - val amountToCreateAccount = blockchain.amountToCreateAccount(firstWalletToken) + val amount = amountToCreateAccount ?: blockchain.amountToCreateAccount(firstWalletToken) - return if (amountToCreateAccount == null) { + return if (amount == null) { Timber.w("Unable to get required amount to create account for: $blockchain") UpdateWalletManagerResult.Unreachable( selectedAddress = wallet.address, @@ -56,7 +60,7 @@ internal class UpdateWalletManagerResultFactory { UpdateWalletManagerResult.NoAccount( selectedAddress = wallet.address, addresses = getAvailableAddresses(wallet.addresses), - amountToCreateAccount = amountToCreateAccount, + amountToCreateAccount = amount, errorMessage = customMessage, ) } diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 297f61b088..ac9b9b657c 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -85,7 +85,7 @@ web3j = "4.10.1" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-482" +tangemBlockchainSdk = "develop-483" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-324" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^