From 3d9b107be6f66436c91ff1d909fead95b9334d6a Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 3 Feb 2026 18:11:14 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/features/send/v2/api/params/FeeSelectorParams.kt | 3 +++ .../send/v2/feeselector/DefaultFeeSelectorBlockComponent.kt | 1 + .../send/v2/feeselector/model/FeeSelectorBlockModel.kt | 2 ++ .../features/send/v2/feeselector/model/FeeSelectorLogic.kt | 6 ++++++ .../features/send/v2/feeselector/model/FeeSelectorModel.kt | 1 + .../main/java/com/tangem/feature/swap/model/SwapModel.kt | 4 ++++ 6 files changed, 17 insertions(+) diff --git a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/params/FeeSelectorParams.kt b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/params/FeeSelectorParams.kt index 77877cf76e..75cd869eb6 100644 --- a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/params/FeeSelectorParams.kt +++ b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/params/FeeSelectorParams.kt @@ -23,6 +23,7 @@ sealed class FeeSelectorParams { abstract val feeDisplaySource: FeeDisplaySource abstract val analyticsCategoryName: String abstract val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource + abstract val shouldShowOnlySpeedOption: Boolean data class FeeSelectorBlockParams( override val state: FeeSelectorUM, @@ -37,6 +38,7 @@ sealed class FeeSelectorParams { override val feeDisplaySource: FeeDisplaySource, override val analyticsCategoryName: String, override val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource, + override val shouldShowOnlySpeedOption: Boolean = false, val bottomSheetShown: (Boolean) -> Unit = {}, ) : FeeSelectorParams() @@ -53,6 +55,7 @@ sealed class FeeSelectorParams { override val feeDisplaySource: FeeDisplaySource, override val analyticsCategoryName: String, override val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource, + override val shouldShowOnlySpeedOption: Boolean = false, val callback: FeeSelectorModelCallback, ) : FeeSelectorParams() diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/DefaultFeeSelectorBlockComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/DefaultFeeSelectorBlockComponent.kt index baf95a222c..ca35f59a98 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/DefaultFeeSelectorBlockComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/DefaultFeeSelectorBlockComponent.kt @@ -56,6 +56,7 @@ internal class DefaultFeeSelectorBlockComponent @AssistedInject constructor( analyticsCategoryName = params.analyticsCategoryName, analyticsSendSource = params.analyticsSendSource, userWalletId = params.userWalletId, + shouldShowOnlySpeedOption = model.shouldShowOnlySpeedOption, ), onDismiss = { model.feeSelectorBottomSheet.dismiss() diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorBlockModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorBlockModel.kt index a4890d88c5..05abb78df9 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorBlockModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorBlockModel.kt @@ -38,6 +38,8 @@ internal class FeeSelectorBlockModel @Inject constructor( modelScope = modelScope, ) + val shouldShowOnlySpeedOption: Boolean + get() = feeSelectorLogic.shouldShowOnlySpeedOption.value val feeSelectorBottomSheet = SlotNavigation() val uiState: StateFlow field = feeSelectorLogic.uiState diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorLogic.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorLogic.kt index b9f62b2008..b39a4b4717 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorLogic.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorLogic.kt @@ -37,6 +37,7 @@ import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -68,6 +69,9 @@ internal class FeeSelectorLogic @AssistedInject constructor( isGaslessFeeSupportedForNetwork(params.feeCryptoCurrencyStatus.currency.network) && params.cryptoCurrencyStatus.currency is CryptoCurrency.Token + val shouldShowOnlySpeedOption: StateFlow + field = MutableStateFlow(params.shouldShowOnlySpeedOption) + init { initAppCurrency() subscribeOnFeeReloadTriggerUpdates() @@ -253,12 +257,14 @@ internal class FeeSelectorLogic @AssistedInject constructor( is GetFeeError.GaslessError.NotEnoughFunds -> error.left() is GetFeeError.GaslessError -> { // Something wrong with gasless fee, fallback to basic fee + shouldShowOnlySpeedOption.value = true params.onLoadFee().map { LoadedFeeResult.Basic(it) } } else -> error.left() } }, ifRight = { fee -> + shouldShowOnlySpeedOption.value = false populateExtendedFee(fee) }, ) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorModel.kt index 52d5766642..91861c714a 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/model/FeeSelectorModel.kt @@ -130,6 +130,7 @@ internal class FeeSelectorModel @Inject constructor( fun getInitialRoute(): FeeSelectorRoute { return when { + params.shouldShowOnlySpeedOption -> FeeSelectorRoute.ChooseSpeed feeSelectorLogic.isGaslessEnabled -> FeeSelectorRoute.NetworkFee else -> FeeSelectorRoute.ChooseSpeed } diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index fd342433db..496279474f 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -2161,6 +2161,10 @@ internal class SwapModel @Inject constructor( val toToken = dataState.toCryptoCurrency ?: return Either.Left(GetFeeError.UnknownError) val selectedProvider = dataStateStateFlow.first { it.selectedProvider != null }.selectedProvider!! + if (selectedProvider.type != ExchangeProviderType.CEX) { + return Either.Left(GetFeeError.GaslessError.NetworkIsNotSupported) + } + if (dataState.lastLoadedSwapStates[selectedProvider] !is SwapState.QuotesLoadedState) { return Either.Left(GetFeeError.UnknownError) }