diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt index 5a4cafa1bb..da59bdc238 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.tangem.blockchain.blockchains.hedera.HederaTokenAddressConverter import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.derivation.DerivationStyle @@ -77,6 +78,7 @@ internal class AddCustomTokenViewModel @Inject constructor( private val actionsHandler = ActionsHandler(featureRouter) private val testActionsHandler = TestActionsHandler() private val formStateBuilder = FormStateBuilder() + private val hederaAddressConverter = HederaTokenAddressConverter() private var currentCryptoCurrencies: List = emptyList() @@ -365,7 +367,8 @@ internal class AddCustomTokenViewModel @Inject constructor( private fun updateForm(address: String, selectedNetwork: Blockchain) { viewModelScope.launch(dispatchers.main) { runCatching(dispatchers.io) { - featureInteractor.findToken(address = address, blockchain = selectedNetwork) + val tokenAddress = convertTokenAddress(selectedNetwork, address) + featureInteractor.findToken(address = tokenAddress, blockchain = selectedNetwork) } .onSuccess { token -> foundToken = token @@ -849,8 +852,10 @@ internal class AddCustomTokenViewModel @Inject constructor( val currency = when (getCustomTokenType()) { CustomTokenType.TOKEN -> { - val contractAddress = foundToken?.network?.contractAddress - ?: uiState.form.contractAddressInputField.value + val contractAddress = convertTokenAddress( + blockchain = blockchain, + address = foundToken?.network?.contractAddress ?: uiState.form.contractAddressInputField.value, + ) CustomCurrency.CustomToken( token = Token( name = uiState.form.tokenNameInputField.value, @@ -888,6 +893,13 @@ internal class AddCustomTokenViewModel @Inject constructor( } } + private fun convertTokenAddress(blockchain: Blockchain, address: String): String { + return when (blockchain) { + Blockchain.Hedera, Blockchain.HederaTestnet -> hederaAddressConverter.convertToTokenId(address) + else -> address + } + } + private inner class TestActionsHandler { fun onClearAddressButtonClick() { diff --git a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/AssociateAssetUseCase.kt b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/AssociateAssetUseCase.kt index 3187c90352..72ad169dba 100644 --- a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/AssociateAssetUseCase.kt +++ b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/AssociateAssetUseCase.kt @@ -40,7 +40,7 @@ class AssociateAssetUseCase( catch( block = { when (val result = walletManagersFacade.associateAsset(userWalletId, currency, signer)) { - is SimpleResult.Failure -> raise(AssociateAssetError.DataError(result.error.message)) + is SimpleResult.Failure -> raise(AssociateAssetError.DataError(result.error.customMessage)) SimpleResult.Success -> Unit } }, 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 be70bbdfe1..d4e58af373 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 @@ -13,6 +13,7 @@ import com.tangem.core.ui.components.bottomsheets.tokenreceive.mapToAddressModel import com.tangem.core.ui.components.transactions.state.TxHistoryState import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.extensions.wrappedList import com.tangem.core.ui.haptic.HapticManager import com.tangem.datasource.local.swaptx.SwapTransactionStatusStore @@ -753,7 +754,12 @@ internal class TokenDetailsViewModel @Inject constructor( ), ) } - is AssociateAssetError.DataError -> Timber.e(e.message) + is AssociateAssetError.DataError -> { + internalUiState.value = stateFactory.getStateWithErrorDialog( + stringReference(e.message.orEmpty()), + ) + Timber.e(e.message) + } } }, ifRight = { internalUiState.value = stateFactory.getStateWithRemovedHederaAssociateNotification() }, diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index a9d0305f00..16b3bb63a3 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,7 +87,7 @@ markdown = "0.7.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.12-677" +tangemBlockchainSdk = "release-app_5.12-678" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.12-364" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^