From 50c3fe85b66f1d753543b2fc9f599488ccc46b04 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Jul 2022 15:10:06 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tap/common/redux/global/GlobalAction.kt | 4 +++ .../common/redux/global/GlobalMidlleware.kt | 29 ++++++++++++++++++- .../tap/common/redux/global/GlobalReducer.kt | 4 ++- .../tap/common/redux/global/GlobalState.kt | 2 +- .../tap/features/home/RegionProvider.kt | 6 ++-- .../tap/features/home/redux/HomeMiddleware.kt | 8 +++-- .../middlewares/TradeCryptoMiddleware.kt | 3 +- .../network/api/tangemTech/Responses.kt | 6 +++- .../network/api/tangemTech/TangemTechApi.kt | 2 ++ .../api/tangemTech/TangemTechService.kt | 4 +++ 11 files changed, 59 insertions(+), 11 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 59ee0bff06..f50133547b 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 59ee0bff06ee54f3202421c28f7fb6e3d421dad8 +Subproject commit f50133547b5e19fb7ad32e64370573d60f6791fd diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index 540209a39c..a82d5ba94b 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -85,4 +85,8 @@ sealed class GlobalAction : Action { object Update : GlobalAction() } + + object FetchUserCountry : GlobalAction() { + data class Success(val countryCode: String) : GlobalAction() + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt index ea77ce5ed9..7f61d63022 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt @@ -4,13 +4,14 @@ import com.tangem.common.CompletionResult import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.extensions.ifNotNull +import com.tangem.common.services.Result import com.tangem.domain.common.extensions.withMainContext -import com.tangem.tap.* import com.tangem.tap.common.extensions.dispatchDebugErrorNotification import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.AppState +import com.tangem.tap.currenciesRepository import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.send.redux.SendAction import com.tangem.tap.features.wallet.redux.WalletAction @@ -18,6 +19,11 @@ import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.mercuryo.MercuryoApi import com.tangem.tap.network.exchangeServices.mercuryo.MercuryoService import com.tangem.tap.network.exchangeServices.moonpay.MoonPayService +import com.tangem.tap.preferencesStorage +import com.tangem.tap.scope +import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager +import java.util.Locale import kotlinx.coroutines.launch import org.rekotlin.Action import org.rekotlin.DispatchFunction @@ -134,5 +140,26 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di } } } + is GlobalAction.FetchUserCountry -> { + scope.launch { + val techService = store.state.domainNetworks.tangemTechService + when (val result = techService.userCountry()) { + is Result.Success -> { + store.dispatch( + GlobalAction.FetchUserCountry.Success( + countryCode = result.data.code.lowercase() + ) + ) + } + is Result.Failure -> { + store.dispatch( + GlobalAction.FetchUserCountry.Success( + countryCode = Locale.getDefault().country.lowercase() + ) + ) + } + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt index 681d1f758a..449d47ae10 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt @@ -75,7 +75,9 @@ fun globalReducer(action: Action, state: AppState): GlobalState { } is GlobalAction.SetIfCardVerifiedOnline -> globalState.copy(cardVerifiedOnline = action.verified) - + is GlobalAction.FetchUserCountry.Success -> globalState.copy( + userCountryCode = action.countryCode + ) else -> globalState } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index 54142bb9af..8588256411 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -28,7 +28,7 @@ data class GlobalState( val exchangeManager: CurrencyExchangeManager? = null, val resources: AndroidResources = AndroidResources(), val analyticsHandlers: AnalyticsHandler? = null, - val userCountry: String? = null, + val userCountryCode: String? = null, ) : StateType diff --git a/app/src/main/java/com/tangem/tap/features/home/RegionProvider.kt b/app/src/main/java/com/tangem/tap/features/home/RegionProvider.kt index 17a5076984..22cac042e5 100644 --- a/app/src/main/java/com/tangem/tap/features/home/RegionProvider.kt +++ b/app/src/main/java/com/tangem/tap/features/home/RegionProvider.kt @@ -44,5 +44,7 @@ class TelephonyManagerRegionProvider(context: Context) : RegionProvider { } class LocaleRegionProvider : RegionProvider { - override fun getRegion(): String? = Locale.current.region -} \ No newline at end of file + override fun getRegion(): String = Locale.current.region +} + +const val RUSSIA_COUNTRY_CODE = "ru" \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt index 8a3878556d..0edb0a435b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt @@ -15,6 +15,7 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.FragmentShareTransition import com.tangem.tap.common.redux.navigation.NavigationAction +import com.tangem.tap.features.home.RUSSIA_COUNTRY_CODE import com.tangem.tap.features.home.redux.HomeMiddleware.Companion.BUY_WALLET_URL import com.tangem.tap.features.onboarding.OnboardingHelper import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction @@ -35,7 +36,7 @@ class HomeMiddleware { } } -private val homeMiddleware: Middleware = { dispatch, state -> +private val homeMiddleware: Middleware = { _, _ -> { next -> { action -> when (action) { @@ -43,6 +44,7 @@ private val homeMiddleware: Middleware = { dispatch, state -> store.dispatch(GlobalAction.RestoreAppCurrency) store.dispatch(GlobalAction.ExchangeManager.Init) store.dispatch(HomeAction.SetTermsOfUseState(preferencesStorage.wasDisclaimerAccepted())) + store.dispatch(GlobalAction.FetchUserCountry) } is HomeAction.ShouldScanCardOnResume -> { if (action.shouldScanCard) { @@ -55,8 +57,8 @@ private val homeMiddleware: Middleware = { dispatch, state -> // store.dispatch(NavigationAction.NavigateTo(AppScreen.AddCustomTokens)) } is HomeAction.GoToShop -> { - when (action.regionProvider.getRegion()?.toLowerCase()) { - "ru" -> store.dispatchOpenUrl(BUY_WALLET_URL) + when (action.regionProvider.getRegion()?.lowercase()) { + RUSSIA_COUNTRY_CODE -> store.dispatchOpenUrl(BUY_WALLET_URL) else -> store.dispatch(NavigationAction.NavigateTo(AppScreen.Shop)) } store.state.globalState.analyticsHandlers?.triggerEvent( diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt index 636baf5aaf..ebbaae8538 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt @@ -8,6 +8,7 @@ import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.demo.DemoHelper +import com.tangem.tap.features.home.RUSSIA_COUNTRY_CODE import com.tangem.tap.features.send.redux.PrepareSendScreen import com.tangem.tap.features.send.redux.SendAction import com.tangem.tap.features.wallet.redux.Currency @@ -35,7 +36,7 @@ class TradeCryptoMiddleware { state: () -> AppState?, action: WalletAction.TradeCryptoAction.Buy, ) { - if (action.checkUserLocation && state()?.globalState?.userCountry == "RU") { + if (action.checkUserLocation && state()?.globalState?.userCountryCode == RUSSIA_COUNTRY_CODE) { store.dispatchOnMain( WalletAction.DialogAction.RussianCardholdersWarningDialog ) diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt index c21fb92726..9a4b2cd8b1 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt @@ -43,4 +43,8 @@ data class CurrenciesResponse(val currencies: List) { val unit: String, // $, €, ₽ val type: String, ) : TangemTechResponse -} \ No newline at end of file +} + +data class GeoResponse( + val code: String +) : TangemTechResponse \ No newline at end of file diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechApi.kt b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechApi.kt index 0081f4ee24..80558732dd 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechApi.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechApi.kt @@ -27,4 +27,6 @@ interface TangemTechApi { @GET("currencies") suspend fun currencies(): CurrenciesResponse + @GET("geo") + suspend fun geo(): GeoResponse } \ No newline at end of file diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt index 5790bdac3a..3bf3bd232e 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt @@ -47,6 +47,10 @@ class TangemTechService { } } + suspend fun userCountry(): Result = withContext(Dispatchers.IO) { + performRequest { api.geo() } + } + suspend fun currencies(): Result = withContext(Dispatchers.IO) { performRequest { api.currencies() } }