From d5778aa6f930edb40f7022c230cc095082449fc9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 29 Nov 2023 12:17:56 +0400 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../impl/presentation/models/AddCustomTokenViewsModels.kt | 6 +++--- .../impl/presentation/ui/AddCustomTokenPreviewData.kt | 2 +- .../presentation/viewmodels/AddCustomTokenViewModel.kt | 8 ++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/models/AddCustomTokenViewsModels.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/models/AddCustomTokenViewsModels.kt index 71c369bcad..965525c83e 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/models/AddCustomTokenViewsModels.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/models/AddCustomTokenViewsModels.kt @@ -300,9 +300,9 @@ internal sealed class AddCustomTokenWarning(val description: TextReference) { description = TextReference.Res(R.string.custom_token_validation_error_already_added), ) - /** Unsupported Solana token warning */ - object UnsupportedSolanaToken : AddCustomTokenWarning( - description = TextReference.Res(R.string.alert_manage_tokens_unsupported_message), + /** Unsupported token warning */ + data class UnsupportedToken(val networkName: String) : AddCustomTokenWarning( + description = TextReference.Res(R.string.alert_manage_tokens_unsupported_message, networkName), ) object WrongDerivationPath : AddCustomTokenWarning( diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenPreviewData.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenPreviewData.kt index ba881741b0..b5274e6d12 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenPreviewData.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/ui/AddCustomTokenPreviewData.kt @@ -18,7 +18,7 @@ internal object AddCustomTokenPreviewData { return setOf( AddCustomTokenWarning.PotentialScamToken, AddCustomTokenWarning.TokenAlreadyAdded, - AddCustomTokenWarning.UnsupportedSolanaToken, + AddCustomTokenWarning.UnsupportedToken(networkName = "Solana"), ) } 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 b1f939c0f6..484026d744 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 @@ -486,8 +486,12 @@ internal class AddCustomTokenViewModel @Inject constructor( } return buildSet { - if (!isSupportedToken && !isContractAddressFieldEmpty) add(AddCustomTokenWarning.UnsupportedSolanaToken) - if (isCustomTokenAlreadyAdded()) add(AddCustomTokenWarning.TokenAlreadyAdded) + if (!isSupportedToken && !isContractAddressFieldEmpty) { + add(AddCustomTokenWarning.UnsupportedToken(networkSelectorValue.fullName)) + } + if (isCustomTokenAlreadyAdded()) { + add(AddCustomTokenWarning.TokenAlreadyAdded) + } if (foundToken == null && isAnyTokenFieldsFilled() || foundToken?.isActive == false) { add(AddCustomTokenWarning.PotentialScamToken) } From 2705949e1a52cbe3445d9ee474e5fd93ace71b43 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 29 Nov 2023 12:29:40 +0400 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../presentation/models/SupportTokensState.kt | 2 +- .../router/DefaultTokensListRouter.kt | 3 ++- .../presentation/router/TokensListRouter.kt | 4 ++-- .../viewmodels/TokensListViewModel.kt | 23 ++++++++++++++----- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/models/SupportTokensState.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/models/SupportTokensState.kt index e815d5d1e7..0917dcb2f9 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/models/SupportTokensState.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/models/SupportTokensState.kt @@ -5,7 +5,7 @@ package com.tangem.tap.features.tokens.impl.presentation.models */ sealed class SupportTokensState { - object SolanaNetworkUnsupported : SupportTokensState() + object NetworkTokensUnsupported : SupportTokensState() object UnsupportedCurve : SupportTokensState() object SupportedToken : SupportTokensState() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/DefaultTokensListRouter.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/DefaultTokensListRouter.kt index 68b277ea7e..8c763c93d6 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/DefaultTokensListRouter.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/DefaultTokensListRouter.kt @@ -51,11 +51,12 @@ internal class DefaultTokensListRouter : TokensListRouter { store.dispatchDialogShow(alert) } - override fun openSolanaTokensNotSupportAlert() { + override fun openNetworkTokensNotSupportAlert(networkName: String) { store.dispatchDialogShow( AppDialog.SimpleOkDialogRes( headerId = R.string.common_warning, messageId = R.string.alert_manage_tokens_unsupported_message, + args = listOf(networkName), ), ) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/TokensListRouter.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/TokensListRouter.kt index ee87445d1d..8347f59a2e 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/TokensListRouter.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/router/TokensListRouter.kt @@ -37,7 +37,7 @@ internal interface TokensListRouter { fun openUnsupportedNetworkAlert(blockchain: Blockchain) /** - * Open alert with Solana tokens error + * Open alert with unsupported networks tokens error */ - fun openSolanaTokensNotSupportAlert() + fun openNetworkTokensNotSupportAlert(networkName: String) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt index a03a0aef85..f2046c81df 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt @@ -4,7 +4,10 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import androidx.lifecycle.* +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import androidx.paging.* import com.tangem.blockchain.common.Blockchain import com.tangem.core.analytics.api.AnalyticsEventHandler @@ -37,7 +40,9 @@ import com.tangem.utils.coroutines.Debouncer import com.tangem.wallet.R import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.plus import timber.log.Timber @@ -406,14 +411,20 @@ internal class TokensListViewModel @Inject constructor( } } else { when (isUnsupportedToken(token.blockchain)) { - SupportTokensState.SolanaNetworkUnsupported -> router.openSolanaTokensNotSupportAlert() + SupportTokensState.NetworkTokensUnsupported -> { + router.openNetworkTokensNotSupportAlert(token.blockchain.fullName) + } SupportTokensState.SupportedToken -> { analyticsSender.sendWhenTokenAdded(token.token) changedTokensList.add(token) toggledNetwork.changeToggleState() } - SupportTokensState.UnsupportedCurve -> router.openUnsupportedNetworkAlert(token.blockchain) - null -> Timber.e("Something went wrong in isUnsupportedToken (no scanResponse found)") + SupportTokensState.UnsupportedCurve -> { + router.openUnsupportedNetworkAlert(token.blockchain) + } + null -> { + Timber.e("Something went wrong in isUnsupportedToken (no scanResponse found)") + } } } } @@ -428,7 +439,7 @@ internal class TokensListViewModel @Inject constructor( // refactor this later by moving all this logic in card config if (blockchain == Blockchain.Solana && !supportedTokens.contains(Blockchain.Solana)) { - return SupportTokensState.SolanaNetworkUnsupported + return SupportTokensState.NetworkTokensUnsupported } val canHandleToken = it.scanResponse.card.canHandleToken( supportedTokens = supportedTokens,