Updated on 2026-08-14

This commit is contained in:
Tangem 2023-10-05 11:09:59 +03:00
parent 8c3eb4b604
commit ddd9ce1c7f
2 changed files with 36 additions and 29 deletions

View file

@ -33,7 +33,6 @@ import androidx.compose.ui.unit.dp
import androidx.paging.PagingData
import androidx.paging.compose.*
import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
import com.tangem.tap.features.tokens.impl.presentation.states.TokenItemState
import com.tangem.tap.features.tokens.impl.presentation.states.TokensListStateHolder
@ -147,7 +146,7 @@ private fun DifferentAddressesWarning() {
modifier = Modifier
.padding(TangemTheme.dimens.spacing16)
.background(
color = TangemColorPalette.Light1,
color = TangemTheme.colors.button.disabled,
shape = RoundedCornerShape(TangemTheme.dimens.radius10),
),
contentAlignment = Alignment.Center,
@ -159,7 +158,7 @@ private fun DifferentAddressesWarning() {
horizontal = TangemTheme.dimens.spacing16,
vertical = TangemTheme.dimens.spacing8,
),
color = TangemColorPalette.Dark1,
color = TangemTheme.colors.text.tertiary,
textAlign = TextAlign.Start,
style = TangemTheme.typography.body2.copy(
letterSpacing = TextUnit(value = 0.5f, type = TextUnitType.Sp),

View file

@ -35,7 +35,6 @@ import com.tangem.tap.features.tokens.impl.presentation.states.NetworkItemState
import com.tangem.tap.features.tokens.impl.presentation.states.TokenItemState
import com.tangem.tap.features.tokens.impl.presentation.states.TokensListStateHolder
import com.tangem.tap.features.tokens.impl.presentation.states.TokensListToolbarState
import com.tangem.tap.proxy.AppStateHolder
import com.tangem.tap.store
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
import com.tangem.utils.coroutines.Debouncer
@ -57,7 +56,7 @@ import com.tangem.blockchain.common.Token as BlockchainToken
* @property interactor feature interactor
* @property router feature router
* @property dispatchers coroutine dispatchers provider
* @property reduxStateHolder redux state holder
* @property getSelectedWalletUseCase use case that returns selected wallet
* @param analyticsEventHandler analytics event handler
*
[REDACTED_AUTHOR]
@ -68,10 +67,9 @@ internal class TokensListViewModel @Inject constructor(
private val interactor: TokensListInteractor,
private val router: TokensListRouter,
private val dispatchers: AppCoroutineDispatcherProvider,
private val reduxStateHolder: AppStateHolder,
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
analyticsEventHandler: AnalyticsEventHandler,
getCurrenciesUseCase: GetCryptoCurrenciesUseCase,
getSelectedWalletUseCase: GetSelectedWalletUseCase,
walletFeatureToggles: WalletFeatureToggles,
) : ViewModel(), DefaultLifecycleObserver {
@ -150,7 +148,10 @@ internal class TokensListViewModel @Inject constructor(
}
private fun isDifferentAddressesBlockVisible(): Boolean {
return reduxStateHolder.scanResponse?.card?.useOldStyleDerivation == true
return getSelectedWalletUseCase().fold(
ifLeft = { false },
ifRight = { it.scanResponse.card.useOldStyleDerivation },
)
}
private fun getInitialTokensList(searchText: String = ""): Flow<PagingData<TokenItemState>> {
@ -406,32 +407,39 @@ internal class TokensListViewModel @Inject constructor(
}
private fun isUnsupportedToken(blockchain: Blockchain): SupportTokensState? {
val scanResponse = reduxStateHolder.scanResponse
val cardTypesResolver = scanResponse?.cardTypesResolver ?: return null
val supportedTokens = scanResponse.card.supportedTokens(cardTypesResolver)
return getSelectedWalletUseCase().fold(
ifLeft = { null },
ifRight = {
val cardTypesResolver = it.scanResponse.cardTypesResolver
val supportedTokens = it.scanResponse.card.supportedTokens(cardTypesResolver)
// refactor this later by moving all this logic in card config
if (blockchain == Blockchain.Solana && !supportedTokens.contains(Blockchain.Solana)) {
return SupportTokensState.SolanaNetworkUnsupported
}
val canHandleToken = scanResponse.card.canHandleToken(
supportedTokens = supportedTokens,
blockchain = blockchain,
cardTypesResolver = cardTypesResolver,
// refactor this later by moving all this logic in card config
if (blockchain == Blockchain.Solana && !supportedTokens.contains(Blockchain.Solana)) {
return SupportTokensState.SolanaNetworkUnsupported
}
val canHandleToken = it.scanResponse.card.canHandleToken(
supportedTokens = supportedTokens,
blockchain = blockchain,
cardTypesResolver = cardTypesResolver,
)
if (!canHandleToken) {
return SupportTokensState.UnsupportedCurve
}
return SupportTokensState.SupportedToken
},
)
if (!canHandleToken) {
return SupportTokensState.UnsupportedCurve
}
return SupportTokensState.SupportedToken
}
private fun isUnsupportedBlockchain(blockchain: Blockchain): Boolean {
val scanResponse = reduxStateHolder.scanResponse
val canHandleToken = scanResponse?.card?.canHandleBlockchain(
blockchain = blockchain,
cardTypesResolver = scanResponse.cardTypesResolver,
) ?: false
return !canHandleToken
return getSelectedWalletUseCase().fold(
ifLeft = { false },
ifRight = {
!it.scanResponse.card.canHandleBlockchain(
blockchain = blockchain,
cardTypesResolver = it.scanResponse.cardTypesResolver,
)
},
)
}
private companion object {