From de890421cbd42451a510f6a9fe2a299071f79ce7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Aug 2023 08:14:56 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/proxy/di/ProxyModule.kt | 6 ++-- .../common/locale/DefaultLocaleProvider.kt | 28 +++++++++++++++++++ .../data/common/locale/LocaleProvider.kt | 13 +++++++++ .../common/locale/di/LocaleProviderModule.kt | 20 +++++++++++++ features/learn2earn/impl/build.gradle.kts | 1 + .../domain/DefaultLearn2earnInteractor.kt | 7 +++-- .../learn2earn/domain/WebViewUriBuilder.kt | 23 ++++----------- .../api/Learn2earnDependencyProvider.kt | 5 ++-- .../domain/di/Learn2earnDomainModule.kt | 5 +++- features/onboarding/build.gradle.kts | 1 + .../wallet2/viewmodel/SeedPhraseViewModel.kt | 15 +++++++--- tangem-android-tools | 2 +- 12 files changed, 94 insertions(+), 32 deletions(-) create mode 100644 data/common/src/main/kotlin/com/tangem/data/common/locale/DefaultLocaleProvider.kt create mode 100644 data/common/src/main/kotlin/com/tangem/data/common/locale/LocaleProvider.kt create mode 100644 data/common/src/main/kotlin/com/tangem/data/common/locale/di/LocaleProviderModule.kt diff --git a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt index fcd78bd469..19474ce5cc 100644 --- a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt +++ b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt @@ -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 = Provider { appStateHolder.mainStore?.state?.globalState?.configManager?.config?.tangemComAuthorization } } diff --git a/data/common/src/main/kotlin/com/tangem/data/common/locale/DefaultLocaleProvider.kt b/data/common/src/main/kotlin/com/tangem/data/common/locale/DefaultLocaleProvider.kt new file mode 100644 index 0000000000..55cdf424ec --- /dev/null +++ b/data/common/src/main/kotlin/com/tangem/data/common/locale/DefaultLocaleProvider.kt @@ -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" + } +} \ No newline at end of file diff --git a/data/common/src/main/kotlin/com/tangem/data/common/locale/LocaleProvider.kt b/data/common/src/main/kotlin/com/tangem/data/common/locale/LocaleProvider.kt new file mode 100644 index 0000000000..5f52c75915 --- /dev/null +++ b/data/common/src/main/kotlin/com/tangem/data/common/locale/LocaleProvider.kt @@ -0,0 +1,13 @@ +package com.tangem.data.common.locale + +import java.util.Locale + +/** +[REDACTED_AUTHOR] + */ +interface LocaleProvider { + + fun getLocale(): Locale + + fun getWebUriLocaleLanguage(): String +} \ No newline at end of file diff --git a/data/common/src/main/kotlin/com/tangem/data/common/locale/di/LocaleProviderModule.kt b/data/common/src/main/kotlin/com/tangem/data/common/locale/di/LocaleProviderModule.kt new file mode 100644 index 0000000000..656c6ed529 --- /dev/null +++ b/data/common/src/main/kotlin/com/tangem/data/common/locale/di/LocaleProviderModule.kt @@ -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() + } +} \ No newline at end of file diff --git a/features/learn2earn/impl/build.gradle.kts b/features/learn2earn/impl/build.gradle.kts index d85bd7dfba..b9fb7f48a6 100644 --- a/features/learn2earn/impl/build.gradle.kts +++ b/features/learn2earn/impl/build.gradle.kts @@ -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")) diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt index e7988b5050..59aa4de658 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/DefaultLearn2earnInteractor.kt @@ -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 }, ) } diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt index ac763f5a52..22b06daeb9 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriBuilder.kt @@ -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, + private val localeProvider: LocaleProvider, + private val promoCodeProvider: Provider, ) { 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" } } \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt index 60a23a88fb..946d065952 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/Learn2earnDependencyProvider.kt @@ -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 - fun getLocaleProvider(): () -> String - - fun getWebViewAuthCredentialsProvider(): () -> String? + fun getWebViewAuthCredentialsProvider(): Provider } \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt index ae96ed3668..559deecff7 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/di/Learn2earnDomainModule.kt @@ -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, diff --git a/features/onboarding/build.gradle.kts b/features/onboarding/build.gradle.kts index cdd735f59c..8318108615 100644 --- a/features/onboarding/build.gradle.kts +++ b/features/onboarding/build.gradle.kts @@ -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) diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseViewModel.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseViewModel.kt index 69a68a2b7b..204ae54069 100644 --- a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseViewModel.kt +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseViewModel.kt @@ -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): ImmutableList { + private fun generateMnemonicGridList(mnemonicComponents: List): ImmutableList { 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 diff --git a/tangem-android-tools b/tangem-android-tools index 03186c35c1..0e4934995b 160000 --- a/tangem-android-tools +++ b/tangem-android-tools @@ -1 +1 @@ -Subproject commit 03186c35c13d8693d9a4c7dcb6e760fa58984e67 +Subproject commit 0e4934995b8e7c69862ef80362e86bd166bd1288