Updated on 2026-08-14

This commit is contained in:
Tangem 2023-08-14 08:14:56 +03:00
parent eef1ee2d24
commit de890421cb
12 changed files with 94 additions and 32 deletions

View file

@ -1,6 +1,6 @@
package com.tangem.tap.proxy.di
import androidx.compose.ui.text.intl.Locale
import com.tangem.common.Provider
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.domain.card.repository.CardSdkConfigRepository
import com.tangem.domain.common.CardTypesResolver
@ -74,9 +74,7 @@ class ProxyModule {
}
}
override fun getLocaleProvider(): () -> String = { Locale.current.language }
override fun getWebViewAuthCredentialsProvider(): () -> String? = {
override fun getWebViewAuthCredentialsProvider(): Provider<String?> = Provider {
appStateHolder.mainStore?.state?.globalState?.configManager?.config?.tangemComAuthorization
}
}

View file

@ -0,0 +1,28 @@
package com.tangem.data.common.locale
import java.util.Locale
/**
[REDACTED_AUTHOR]
*/
internal class DefaultLocaleProvider : LocaleProvider {
override fun getLocale(): Locale {
return Locale.getDefault()
}
override fun getWebUriLocaleLanguage(): String {
val language = getLocale().language
return if (LOCALE_LANG_RU.equals(language, true) || LOCALE_LANG_BY.equals(language, true)) {
LOCALE_LANG_RU
} else {
LOCALE_LANG_EN
}
}
companion object {
const val LOCALE_LANG_RU = "ru"
const val LOCALE_LANG_BY = "by"
const val LOCALE_LANG_EN = "en"
}
}

View file

@ -0,0 +1,13 @@
package com.tangem.data.common.locale
import java.util.Locale
/**
[REDACTED_AUTHOR]
*/
interface LocaleProvider {
fun getLocale(): Locale
fun getWebUriLocaleLanguage(): String
}

View file

@ -0,0 +1,20 @@
package com.tangem.data.common.locale.di
import com.tangem.data.common.locale.DefaultLocaleProvider
import com.tangem.data.common.locale.LocaleProvider
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal object LocaleProviderModule {
@Provides
@Singleton
fun provideCacheRegistry(): LocaleProvider {
return DefaultLocaleProvider()
}
}

View file

@ -19,6 +19,7 @@ dependencies {
implementation(project(":core:ui"))
implementation(project(":core:res"))
implementation(project(":data:source:preferences"))
implementation(project(":data:common"))
implementation(project(":libs:auth"))
implementation(project(":libs:crypto"))

View file

@ -1,7 +1,9 @@
package com.tangem.feature.learn2earn.domain
import android.net.Uri
import com.tangem.common.Provider
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.data.common.locale.LocaleProvider
import com.tangem.datasource.api.promotion.models.PromotionInfoResponse
import com.tangem.datasource.demo.DemoModeDatasource
import com.tangem.feature.learn2earn.analytics.AnalyticsParam
@ -35,6 +37,7 @@ internal class DefaultLearn2earnInteractor(
private val repository: Learn2earnRepository,
private val userWalletManager: UserWalletManager,
private val derivationManager: DerivationManager,
private val localeProvider: LocaleProvider,
private val analytics: AnalyticsEventHandler,
private val demoModeDatasource: DemoModeDatasource,
private val dependencyProvider: Learn2earnDependencyProvider,
@ -57,8 +60,8 @@ internal class DefaultLearn2earnInteractor(
private val webViewUriBuilder: WebViewUriBuilder by lazy {
WebViewUriBuilder(
authCredentialsProvider = dependencyProvider.getWebViewAuthCredentialsProvider(),
localeLanguageProvider = dependencyProvider.getLocaleProvider(),
promoCodeProvider = { promoUserData.promoCode },
localeProvider = localeProvider,
promoCodeProvider = Provider { promoUserData.promoCode },
)
}

View file

@ -1,15 +1,17 @@
package com.tangem.feature.learn2earn.domain
import android.net.Uri
import com.tangem.common.Provider
import com.tangem.data.common.locale.LocaleProvider
import com.tangem.feature.learn2earn.impl.BuildConfig
/**
[REDACTED_AUTHOR]
*/
internal class WebViewUriBuilder(
private val authCredentialsProvider: () -> String?,
private val localeLanguageProvider: () -> String,
private val promoCodeProvider: () -> String?,
private val authCredentialsProvider: Provider<String?>,
private val localeProvider: LocaleProvider,
private val promoCodeProvider: Provider<String?>,
) {
fun buildUriForNewUser(learningIsFinished: Boolean): Uri {
@ -46,20 +48,11 @@ internal class WebViewUriBuilder(
} else {
authority(BASE_URL)
}
appendPath(getLocaleLanguage(localeLanguageProvider.invoke()))
appendPath(localeProvider.getWebUriLocaleLanguage())
appendPath(PATH_PROMOTION)
appendQueryParameter(QUERY_FINISHED, learningIsFinished.toString())
}
// TODO: locale: This can be used by another feature. Move it to the appropriate location
private fun getLocaleLanguage(language: String): String {
return if (LOCALE_LANG_RU.equals(language, true) || LOCALE_LANG_BY.equals(language, true)) {
LOCALE_LANG_RU
} else {
LOCALE_LANG_EN
}
}
private companion object {
const val SCHEME = "https"
@ -71,9 +64,5 @@ internal class WebViewUriBuilder(
const val QUERY_FINISHED = "finished"
const val DEV_BASE_URL = "devweb.tangem.com"
const val LOCALE_LANG_RU = "ru"
const val LOCALE_LANG_BY = "by"
const val LOCALE_LANG_EN = "en"
}
}

View file

@ -1,5 +1,6 @@
package com.tangem.feature.learn2earn.domain.api
import com.tangem.common.Provider
import com.tangem.domain.common.CardTypesResolver
import kotlinx.coroutines.flow.Flow
@ -12,7 +13,5 @@ interface Learn2earnDependencyProvider {
fun getCardTypeResolverFlow(): Flow<CardTypesResolver?>
fun getLocaleProvider(): () -> String
fun getWebViewAuthCredentialsProvider(): () -> String?
fun getWebViewAuthCredentialsProvider(): Provider<String?>
}

View file

@ -3,6 +3,7 @@ package com.tangem.feature.learn2earn.domain.di
import android.content.Context
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
import com.tangem.data.common.locale.LocaleProvider
import com.tangem.datasource.demo.DemoModeDatasource
import com.tangem.feature.learn2earn.data.api.Learn2earnRepository
import com.tangem.feature.learn2earn.data.toggles.DefaultLearn2earnFeatureToggleManager
@ -45,8 +46,9 @@ internal class Learn2earnDomainModule {
repository: Learn2earnRepository,
dependencyProvider: Learn2earnDependencyProvider,
userWalletManager: UserWalletManager,
analyticsEventHandler: AnalyticsEventHandler,
derivationManager: DerivationManager,
localeProvider: LocaleProvider,
analyticsEventHandler: AnalyticsEventHandler,
demoModeDatasource: DemoModeDatasource,
dispatchers: AppCoroutineDispatcherProvider,
): Learn2earnInteractor {
@ -55,6 +57,7 @@ internal class Learn2earnDomainModule {
repository = repository,
userWalletManager = userWalletManager,
derivationManager = derivationManager,
localeProvider = localeProvider,
analytics = analyticsEventHandler,
demoModeDatasource = demoModeDatasource,
dependencyProvider = dependencyProvider,

View file

@ -18,6 +18,7 @@ dependencies {
implementation(project(":core:utils"))
implementation(project(":core:ui"))
implementation(project(":core:res"))
implementation(project(":data:common"))
/** Tangem libraries */
implementation(deps.tangem.card.core)

View file

@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.tangem.common.CompletionResult
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.data.common.locale.LocaleProvider
import com.tangem.feature.onboarding.data.model.CreateWalletResponse
import com.tangem.feature.onboarding.domain.SeedPhraseError
import com.tangem.feature.onboarding.domain.SeedPhraseInteractor
@ -35,6 +36,7 @@ import javax.inject.Inject
@HiltViewModel
class SeedPhraseViewModel @Inject constructor(
private val interactor: SeedPhraseInteractor,
private val localeProvider: LocaleProvider,
private val dispatchers: CoroutineDispatcherProvider,
private val analyticsEventHandler: AnalyticsEventHandler,
) : ViewModel() {
@ -303,7 +305,14 @@ class SeedPhraseViewModel @Inject constructor(
private fun buttonReadMoreAboutSeedPhraseClick() {
analyticsEventHandler.send(SeedPhraseEvents.ButtonReadMore)
router.openUri(URI_ABOUT_SEED_PHRASE)
val webUri = Uri.Builder()
.scheme("https")
.authority("tangem.com")
.appendPath(localeProvider.getWebUriLocaleLanguage())
.appendPath("blog/post/seed-phrase-a-risky-solution")
.build()
router.openUri(webUri)
}
private fun buttonGenerateSeedPhraseClick() {
@ -327,7 +336,7 @@ class SeedPhraseViewModel @Inject constructor(
}
}
private suspend fun generateMnemonicGridList(mnemonicComponents: List<String>): ImmutableList<MnemonicGridItem> {
private fun generateMnemonicGridList(mnemonicComponents: List<String>): ImmutableList<MnemonicGridItem> {
val size = mnemonicComponents.size
val splitIndex = if (size.isEven()) size / 2 else size / 2 + 1
val leftColumn = mnemonicComponents.subList(0, splitIndex)
@ -418,8 +427,6 @@ class SeedPhraseViewModel @Inject constructor(
// endregion Utils
companion object {
private val URI_ABOUT_SEED_PHRASE =
Uri.parse("https://tangem.com/ru/blog/post/seed-phrase-a-risky-solution/")
private const val MNEMONIC_DEBOUNCER = "MnemonicDebouncer"
private const val MNEMONIC_DEBOUNCE_DELAY = 700L
private const val DELAY_GENERATE_SEED_PHRASE = 300L

@ -1 +1 @@
Subproject commit 03186c35c13d8693d9a4c7dcb6e760fa58984e67
Subproject commit 0e4934995b8e7c69862ef80362e86bd166bd1288