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 06fd253ea4..75ebd99c91 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 @@ -135,6 +135,7 @@ class DefaultWalletManagersFacade( userWalletId: UserWalletId, network: Network, addressType: AddressType, + contractAddress: String?, ): String { val blockchain = Blockchain.fromId(network.id.value) @@ -148,8 +149,12 @@ class DefaultWalletManagersFacade( "Unable to get a wallet manager for blockchain: $blockchain" } - val address = walletManager.wallet.addresses.find { it.type == addressType }?.value - return walletManager.wallet.getExploreUrl(address) + val address = walletManager + .wallet + .addresses + .find { it.type == addressType } + ?.value ?: walletManager.wallet.address + return blockchain.getExploreUrl(address, contractAddress) } override suspend fun getTxHistoryState(userWalletId: UserWalletId, network: Network): TxHistoryState { diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt index 8d10b2fa4d..2a17b00133 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt @@ -62,10 +62,16 @@ interface WalletManagersFacade { * @param userWalletId The ID of the user's wallet. * @param network The network. * @param addressType Address type. + * @param contractAddress Contract address if currency is Token. * * @return The network explorer URL, maybe empty if the wallet manager was not found. * */ - suspend fun getExploreUrl(userWalletId: UserWalletId, network: Network, addressType: AddressType): String + suspend fun getExploreUrl( + userWalletId: UserWalletId, + network: Network, + addressType: AddressType, + contractAddress: String?, + ): String /** * Returns transactions count diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetExploreUrlUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetExploreUrlUseCase.kt index cc29827d31..5569940471 100644 --- a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetExploreUrlUseCase.kt +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GetExploreUrlUseCase.kt @@ -1,8 +1,8 @@ package com.tangem.domain.wallets.usecase import arrow.core.raise.catch -import com.tangem.domain.tokens.model.Network import com.tangem.blockchain.common.address.AddressType +import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.models.UserWalletId @@ -12,11 +12,19 @@ class GetExploreUrlUseCase(private val walletsManagersFacade: WalletManagersFaca // FIXME: Handle error suspend operator fun invoke( userWalletId: UserWalletId, - network: Network, + currency: CryptoCurrency, addressType: AddressType = AddressType.Default, ): String { - return catch({ walletsManagersFacade.getExploreUrl(userWalletId, network, addressType) }) { - "" - } + return catch( + block = { + walletsManagersFacade.getExploreUrl( + userWalletId = userWalletId, + network = currency.network, + addressType = addressType, + contractAddress = (currency as? CryptoCurrency.Token)?.contractAddress, + ) + }, + catch = { "" } + ) } } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt index bdfe161039..b28f7998b7 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.setValue import androidx.lifecycle.* import androidx.paging.cachedIn import arrow.core.getOrElse +import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.address.AddressType import com.tangem.common.Provider import com.tangem.core.analytics.api.AnalyticsEventHandler @@ -397,7 +398,7 @@ internal class TokenDetailsViewModel @Inject constructor( router.openUrl( url = getExploreUrlUseCase( userWalletId = userWalletId, - network = cryptoCurrency.network, + currency = cryptoCurrency, addressType = AddressType.Default, ), ) @@ -429,7 +430,7 @@ internal class TokenDetailsViewModel @Inject constructor( router.openUrl( url = getExploreUrlUseCase( userWalletId = userWalletId, - network = cryptoCurrency.network, + currency = cryptoCurrency, addressType = AddressType.valueOf(addressModel.type.name), ), ) @@ -438,12 +439,18 @@ internal class TokenDetailsViewModel @Inject constructor( } override fun onTransactionClick(txHash: String) { - router.openUrl( - url = getExplorerTransactionUrlUseCase( - txHash = txHash, - networkId = cryptoCurrency.network.id, - ), - ) + val blockchain = Blockchain.fromId(cryptoCurrency.network.id.value) + // TODO: Fix ton tx urls [REDACTED_TASK_KEY] + if (blockchain == Blockchain.TON || blockchain == Blockchain.TONTestnet) { + return + } else { + router.openUrl( + url = getExplorerTransactionUrlUseCase( + txHash = txHash, + networkId = cryptoCurrency.network.id, + ), + ) + } } override fun onRefreshSwipe() { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 845c91eb1e..c16ef38409 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -819,18 +819,18 @@ internal class WalletViewModel @Inject constructor( private fun openExplorer() { val state = uiState as? WalletState.ContentState ?: return - val currencyNetwork = singleWalletCryptoCurrencyStatus?.currency?.network ?: return + val currency = singleWalletCryptoCurrencyStatus?.currency ?: return viewModelScope.launch(dispatchers.main) { val userWalletId = getWallet(state.walletsListConfig.selectedWalletIndex).walletId - val addresses = walletManagersFacade.getAddress(userWalletId = userWalletId, network = currencyNetwork) + val addresses = walletManagersFacade.getAddress(userWalletId = userWalletId, network = currency.network) if (addresses.size == 1) { router.openUrl( url = getExploreUrlUseCase( userWalletId = userWalletId, - network = currencyNetwork, + currency = currency, addressType = AddressType.Default, ), ) @@ -848,7 +848,7 @@ internal class WalletViewModel @Inject constructor( onClick = { onAddressTypeSelected( userWalletId = userWalletId, - currencyNetwork = currencyNetwork, + currency = currency, addressModel = it, ) }, @@ -860,14 +860,14 @@ internal class WalletViewModel @Inject constructor( private fun onAddressTypeSelected( userWalletId: UserWalletId, - currencyNetwork: Network, + currency: CryptoCurrency, addressModel: AddressModel, ) { viewModelScope.launch(dispatchers.main) { router.openUrl( url = getExploreUrlUseCase( userWalletId = userWalletId, - network = currencyNetwork, + currency = currency, addressType = AddressType.valueOf(addressModel.type.name), ), ) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 758d9fa77f..4b09efb3ab 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -81,7 +81,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.0-365" +tangemBlockchainSdk = "release-app_5.0-368" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.0-308" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds