Updated on 2026-08-14
This commit is contained in:
parent
eef1ee2d24
commit
de890421cb
12 changed files with 94 additions and 32 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.tangem.data.common.locale
|
||||
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface LocaleProvider {
|
||||
|
||||
fun getLocale(): Locale
|
||||
|
||||
fun getWebUriLocaleLanguage(): String
|
||||
}
|
||||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
@ -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"))
|
||||
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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?>
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue