diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 86d9bd2c2c..1579ca569f 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -106,7 +106,7 @@ class DialogManager : StoreSubscriber { context.getString(R.string.wallet_connect_scanner_error_unsupported_network) } else { context.getString(R.string.wallet_connect_error_unsupported_blockchains) + - state.dialog.networks + state.dialog.networks.joinToString() } SimpleAlertDialog.create( titleRes = R.string.wallet_connect_title, diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt index 6a584a0548..3b69331ae2 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/app/TangemWcBlockchainHelper.kt @@ -1,23 +1,28 @@ package com.tangem.tap.domain.walletconnect2.app -import com.tangem.blockchain.common.* -import com.tangem.domain.common.extensions.* -import com.tangem.tap.domain.walletconnect2.domain.* +import com.tangem.blockchain.common.Blockchain +import com.tangem.domain.common.extensions.fromNetworkId +import com.tangem.domain.common.extensions.toNetworkId +import com.tangem.tap.domain.walletconnect2.domain.WcBlockchainHelper class TangemWcBlockchainHelper : WcBlockchainHelper { override fun chainIdToNetworkIdOrNull(chainId: String): String? { - val parsed = chainId.split(CHAIN_SEPARATOR) - if (parsed.size != 2) return null - when { - parsed.first() == EVM_NAMESPACE -> { - val chainIdInt = parsed[1].toIntOrNull() ?: return null - return Blockchain.fromChainId(chainIdInt)?.toNetworkId() + val parsedId = chainId.parseId() ?: return null + val blockchain = parsedId.chainIdToBlockchain() + + return blockchain?.toNetworkId() + } + + override fun chainIdToMissingNetworkNameOrNull(chainId: String): String? { + val parsedId = chainId.parseId() ?: return null + val blockchain = parsedId.chainIdToBlockchain() + + return blockchain?.fullName + ?: if (parsedId.first == EVM_NAMESPACE) { + chainId + } else { + parsedId.first.replaceFirstChar(Char::titlecase) } - else -> { - val blockchain = Blockchain.fromNetworkId(parsed.first()) - return if (supportedNonEvmBlockchains.contains(blockchain)) blockchain?.toNetworkId() else null - } - } } override fun networkIdToChainIdOrNull(networkId: String): String? { @@ -57,6 +62,26 @@ private fun Blockchain.getCaip2Namespace(): String? { } } +private fun String.parseId(): Pair? { + val parsed = this.split(CHAIN_SEPARATOR) + if (parsed.size != 2) return null + + return parsed[0] to parsed[1] +} + +private fun Pair.chainIdToBlockchain(): Blockchain? { + return when (first) { + EVM_NAMESPACE -> { + second.toIntOrNull() + ?.let(Blockchain::fromChainId) + } + else -> { + Blockchain.fromNetworkId(networkId = first) + .takeIf(supportedNonEvmBlockchains::contains) + } + } +} + private val supportedNonEvmBlockchains = emptySet() // TODO: add supported networks private const val EVM_NAMESPACE = "eip155" diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt index d95640dc2b..c3af721e25 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt @@ -75,9 +75,11 @@ class WalletConnectInteractor( is WalletConnectEvents.SessionApprovalError -> { val error = when (wcEvent.error) { is WalletConnectError.ApprovalErrorMissingNetworks -> { - val missingNetworks = wcEvent.error.missingChains - .map { blockchainHelper.chainIdToNetworkIdOrNull(it) } - WalletConnectError.ApprovalErrorAddNetwork(missingNetworks.filterNotNull()) + val missingNetworks = wcEvent.error.missingChains.mapNotNull { + blockchainHelper.chainIdToMissingNetworkNameOrNull(it) + } + + WalletConnectError.ApprovalErrorAddNetwork(missingNetworks) } else -> wcEvent.error } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt index 06f0843223..489d086af0 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcBlockchainHelper.kt @@ -3,6 +3,8 @@ package com.tangem.tap.domain.walletconnect2.domain interface WcBlockchainHelper { fun chainIdToNetworkIdOrNull(chainId: String): String? + fun chainIdToMissingNetworkNameOrNull(chainId: String): String? + fun networkIdToChainIdOrNull(networkId: String): String? fun getNamespaceFromFullChainIdOrNull(chainId: String): String? diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 4ed140a246..3b96ded384 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -8,7 +8,6 @@ import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.domain.common.BlockchainNetwork import com.tangem.domain.common.DerivationStyleProvider -import com.tangem.domain.common.extensions.fromNetworkId import com.tangem.domain.common.extensions.toNetworkId import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.common.util.cardTypesResolver @@ -324,10 +323,9 @@ class WalletConnectMiddleware { is WalletConnectAction.SessionRejected -> { when (action.error) { is WalletConnectError.ApprovalErrorAddNetwork -> { - val blockchains = action.error.networks.mapNotNull { Blockchain.fromNetworkId(it)?.fullName } store.dispatchOnMain( GlobalAction.ShowDialog( - WalletConnectDialog.AddNetwork(blockchains.toString()), + WalletConnectDialog.UnsupportedNetwork(action.error.networks), ), ) } diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UnlockWalletsUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UnlockWalletsUseCase.kt index b73f7d1e43..5ae878661a 100644 --- a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UnlockWalletsUseCase.kt +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UnlockWalletsUseCase.kt @@ -24,7 +24,7 @@ class UnlockWalletsUseCase(private val walletsStateHolder: WalletsStateHolder) { value = walletsStateHolder.userWalletsListManager?.asLockable(), raise = { UnlockWalletsError.DataError( - cause = IllegalStateException("The lockable user wallets list manager could not be found") + cause = IllegalStateException("The lockable user wallets list manager could not be found"), ) }, )