From 19bdc77d9fab6550ce6f5de6fa0f37d050a36be3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 18 Jan 2026 17:39:48 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../send/v2/api/entity/FeeSelectorUM.kt | 5 ++++- .../v2/feeselector/model/FeeSelectorLogic.kt | 5 +++++ .../feeselector/ui/FeeSelectorBlockContent.kt | 4 ++++ .../tangem/feature/swap/model/SwapModel.kt | 22 +++++++++++++++++-- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/entity/FeeSelectorUM.kt b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/entity/FeeSelectorUM.kt index 9d92d11e1c..f903e9ca35 100644 --- a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/entity/FeeSelectorUM.kt +++ b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/entity/FeeSelectorUM.kt @@ -27,7 +27,10 @@ sealed class FeeSelectorUM { override val isPrimaryButtonEnabled = false } - data class Error(val error: GetFeeError) : FeeSelectorUM() { + data class Error( + val error: GetFeeError, + val isHidden: Boolean = false, + ) : FeeSelectorUM() { override val isPrimaryButtonEnabled = false } 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 100d288151..87fcceafc2 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 @@ -75,9 +75,14 @@ internal class FeeSelectorLogic @AssistedInject constructor( } private fun loadFee() { + if (uiState.value is FeeSelectorUM.Error) { + return + } + if (uiState.value !is FeeSelectorUM.Content) { uiState.update(FeeSelectorLoadingTransformer) } + modelScope.launch { callLoadFee() .fold( diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/ui/FeeSelectorBlockContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/ui/FeeSelectorBlockContent.kt index 2024fbf748..c635854c69 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/ui/FeeSelectorBlockContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/feeselector/ui/FeeSelectorBlockContent.kt @@ -61,6 +61,10 @@ internal fun FeeSelectorBlockContent( onReadMoreClick: () -> Unit, modifier: Modifier = Modifier, ) { + if (state is FeeSelectorUM.Error && state.isHidden) { + return + } + Row( modifier = modifier .background(TangemTheme.colors.background.action) 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 adc9b652e3..338aa29be8 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 @@ -651,13 +651,13 @@ internal class SwapModel @Inject constructor( modelScope.launch { feeSelectorReloadTrigger.triggerUpdate() } } } else { - feeSelectorRepository.state.value = FeeSelectorUM.Error(GetFeeError.UnknownError) + feeSelectorRepository.state.value = FeeSelectorUM.Error(GetFeeError.UnknownError, isHidden = true) Timber.e("Accidentally empty quotes list") } }, onError = { error -> Timber.e("Error when loading quotes: $error") - feeSelectorRepository.state.value = FeeSelectorUM.Error(GetFeeError.UnknownError) + feeSelectorRepository.state.value = FeeSelectorUM.Error(GetFeeError.UnknownError, isHidden = true) uiState = stateBuilder.addNotification(uiState, null) { startLoadingQuotesFromLastState() } }, ) @@ -2016,6 +2016,10 @@ internal class SwapModel @Inject constructor( return Either.Left(GetFeeError.UnknownError) } + if (isPermissionNotificationShown()) { + return Either.Left(GetFeeError.UnknownError) + } + return swapInteractor.loadFeeForSwapTransaction( fromToken = fromToken, fromAccount = dataState.fromAccount, @@ -2029,6 +2033,11 @@ internal class SwapModel @Inject constructor( } override fun onResult(newState: FeeSelectorUM) { + if (isPermissionNotificationShown()) { + state.value = FeeSelectorUM.Error(GetFeeError.UnknownError, isHidden = true) + return + } + state.value = newState // If fee currency is same as from currency, we need to reload quotes to update fee info @@ -2050,6 +2059,11 @@ internal class SwapModel @Inject constructor( } } + private fun isPermissionNotificationShown(): Boolean { + val permissionState = dataState.getCurrentLoadedSwapState()?.permissionState + return permissionState != null && permissionState !is PermissionDataState.Empty + } + override suspend fun loadFee(): Either { val sendCardData = uiState.sendCardData as? SwapCardState.SwapCardData ?: return Either.Left(GetFeeError.UnknownError) @@ -2063,6 +2077,10 @@ internal class SwapModel @Inject constructor( return Either.Left(GetFeeError.UnknownError) } + if (isPermissionNotificationShown()) { + return Either.Left(GetFeeError.UnknownError) + } + return swapInteractor.loadFeeForSwapTransaction( fromToken = fromToken, fromAccount = dataState.fromAccount,