diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt index b9a666cb86..cf04d7b7e8 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt @@ -26,6 +26,7 @@ internal class OnrampAmountStateFactory( private val analyticsEventHandler: AnalyticsEventHandler, private val onrampIntents: OnrampIntents, private val cryptoCurrency: CryptoCurrency, + private val needApplyFCARestrictions: Provider, ) { private val onrampAmountFieldChangeConverter = OnrampAmountFieldChangeConverter( @@ -122,7 +123,10 @@ internal class OnrampAmountStateFactory( .filterNot { it == bestProvider } .any { it is OnrampQuote.Data } - val isBestProvider = selectedQuote == bestProvider && isMultipleQuotes && isOtherQuotesHasData + val isBestProvider = selectedQuote == bestProvider && + isMultipleQuotes && + isOtherQuotesHasData && + !needApplyFCARestrictions() return currentState.copy( providerBlockState = selectedQuote.toProviderBlockState(isBestProvider), @@ -154,7 +158,7 @@ internal class OnrampAmountStateFactory( paymentMethod = providerResult.paymentMethod, providerId = providerResult.provider.id, providerName = providerResult.provider.info.name, - isBestRate = isBestRate, + isBestRate = isBestRate && !needApplyFCARestrictions(), onClick = onrampIntents::openProviders, termsOfUseLink = providerResult.provider.info.termsOfUseLink, privacyPolicyLink = providerResult.provider.info.privacyPolicyLink, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt index 09feb75a0d..5ea7c807a7 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt @@ -20,6 +20,9 @@ import com.tangem.domain.onramp.model.OnrampAvailability import com.tangem.domain.onramp.model.OnrampProviderWithQuote import com.tangem.domain.onramp.model.OnrampQuote import com.tangem.domain.onramp.model.error.OnrampError +import com.tangem.domain.settings.usercountry.GetUserCountryUseCase +import com.tangem.domain.settings.usercountry.models.UserCountry +import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.features.onramp.main.OnrampMainComponent import com.tangem.features.onramp.main.entity.* @@ -35,6 +38,7 @@ import com.tangem.utils.isNullOrZero import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber +import java.util.Locale import javax.inject.Inject @Suppress("LongParameterList", "LargeClass") @@ -53,6 +57,7 @@ internal class OnrampMainComponentModel @Inject constructor( private val messageSender: UiMessageSender, private val urlOpener: UrlOpener, getWalletsUseCase: GetWalletsUseCase, + getUserCountryUseCase: GetUserCountryUseCase, paramsContainer: ParamsContainer, ) : Model(), OnrampIntents { @@ -70,6 +75,7 @@ internal class OnrampMainComponentModel @Inject constructor( analyticsEventHandler = analyticsEventHandler, onrampIntents = this, cryptoCurrency = params.cryptoCurrency, + needApplyFCARestrictions = Provider { userCountry.needApplyFCARestrictions() }, ) private val _state: MutableStateFlow = MutableStateFlow( value = stateFactory.getInitialState( @@ -82,8 +88,12 @@ internal class OnrampMainComponentModel @Inject constructor( val bottomSheetNavigation: SlotNavigation = SlotNavigation() private val lastUpdateState = mutableStateOf(null) + private var userCountry: UserCountry? = null init { + userCountry = getUserCountryUseCase.invokeSync().getOrNull() + ?: UserCountry.Other(Locale.getDefault().country) + sendScreenOpenAnalytics() checkResidenceCountry() subscribeToAmountChanges() @@ -387,7 +397,8 @@ internal class OnrampMainComponentModel @Inject constructor( providerName = errorState.provider.info.name, paymentMethod = errorState.paymentMethod.name, ) - else -> { /* no-op */ } + else -> { /* no-op */ + } } } } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt index 6a367639cb..0cc48e4657 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt @@ -52,7 +52,7 @@ internal class SelectProviderModel @Inject constructor( private val getOnrampSelectedPaymentMethodUseCase: GetOnrampSelectedPaymentMethodUseCase, private val getOnrampProviderWithQuoteUseCase: GetOnrampProviderWithQuoteUseCase, private val saveSelectedPaymentMethod: OnrampSaveSelectedPaymentMethod, - private val getUserCountryUseCase: GetUserCountryUseCase, + getUserCountryUseCase: GetUserCountryUseCase, paramsContainer: ParamsContainer, ) : Model() {