Updated on 2026-08-14

This commit is contained in:
Tangem 2022-03-25 14:02:16 +03:00
parent b815a9712e
commit b1b80cd134
4 changed files with 60 additions and 12 deletions

View file

@ -5,7 +5,6 @@ import android.view.View
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.text.intl.Locale
import androidx.fragment.app.Fragment
import com.google.accompanist.appcompattheme.AppCompatTheme
import com.tangem.tap.features.home.compose.StoriesScreen
@ -36,17 +35,18 @@ class HomeFragment : Fragment(R.layout.fragment_home), StoreSubscriber<HomeState
StoriesScreen(
homeState,
onScanButtonClick = { store.dispatch(HomeAction.ReadCard) },
onShopButtonClick = { store.dispatch(HomeAction.GoToShop(getLocale())) }
onShopButtonClick = { store.dispatch(HomeAction.GoToShop(getRegionProvider())) }
)
}
}
}
private fun getLocale(): String {
// val tm = requireContext().getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
// val countryCodeValue = tm.networkCountryIso
return Locale.current.language
}
private fun getRegionProvider(): RegionProvider = RegionService(
listOf(
MobileOperatorRegionProvider(requireContext()),
LocaleRegionProvider()
)
)
override fun onStart() {
super.onStart()

View file

@ -0,0 +1,48 @@
package com.tangem.tap.features.home
import android.content.Context
import android.telephony.TelephonyManager
import android.telephony.TelephonyManager.PHONE_TYPE_CDMA
import androidx.compose.ui.text.intl.Locale
import java.lang.ref.WeakReference
/**
[REDACTED_AUTHOR]
*/
interface RegionProvider {
fun getRegion(): String?
}
class RegionService(
private val providers: List<RegionProvider>
) : RegionProvider {
override fun getRegion(): String? {
for (provider in providers) {
val region = provider.getRegion()
if (region != null) return region
}
return null
}
}
class MobileOperatorRegionProvider(context: Context) : RegionProvider {
private val wContext: WeakReference<Context> = WeakReference(context)
override fun getRegion(): String? {
val tm = wContext.get()?.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager ?: return null
val region = when (tm.phoneType) {
PHONE_TYPE_CDMA -> {
// Result may be unreliable
tm.networkCountryIso
}
else -> tm.networkCountryIso
}
return region.ifEmpty { return null }
}
}
class LocaleRegionProvider : RegionProvider {
override fun getRegion(): String? = Locale.current.region
}

View file

@ -1,12 +1,13 @@
package com.tangem.tap.features.home.redux
import com.tangem.tap.common.entities.IndeterminateProgressButton
import com.tangem.tap.features.home.RegionProvider
import org.rekotlin.Action
sealed class HomeAction : Action {
// from ui
object ReadCard : HomeAction()
data class GoToShop(val region: String) : HomeAction()
data class GoToShop(val regionProvider: RegionProvider) : HomeAction()
// internal
data class ShouldScanCardOnResume(val shouldScanCard: Boolean) : HomeAction()

View file

@ -52,10 +52,9 @@ private val homeMiddleware: Middleware<AppState> = { dispatch, state ->
}
is HomeAction.ReadCard -> handleReadCard()
is HomeAction.GoToShop -> {
if (action.region == "ru") {
store.dispatchOpenUrl(BUY_WALLET_URL)
} else {
store.dispatch(NavigationAction.NavigateTo(AppScreen.Shop))
when (action.regionProvider.getRegion()?.toLowerCase()) {
"ru" -> store.dispatchOpenUrl(BUY_WALLET_URL)
else -> store.dispatch(NavigationAction.NavigateTo(AppScreen.Shop))
}
store.state.globalState.analyticsHandlers?.triggerEvent(
event = AnalyticsEvent.GET_CARD,