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 157be09a4a..90c5bc1691 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
@@ -2,6 +2,8 @@ package com.tangem.tap.proxy.di
import androidx.compose.ui.text.intl.Locale
import com.tangem.core.analytics.api.AnalyticsEventHandler
+import com.tangem.domain.common.CardTypesResolver
+import com.tangem.domain.common.util.cardTypesResolver
import com.tangem.feature.learn2earn.domain.api.Learn2earnDependencyProvider
import com.tangem.lib.crypto.DerivationManager
import com.tangem.lib.crypto.TransactionManager
@@ -56,6 +58,10 @@ class ProxyModule {
@Singleton
fun provideLear2earnDependencies(appStateHolder: AppStateHolder): Learn2earnDependencyProvider {
return object : Learn2earnDependencyProvider {
+ override fun getCardTypeResolver(): CardTypesResolver? {
+ return appStateHolder.userWalletsListManager?.selectedUserWalletSync?.scanResponse?.cardTypesResolver
+ }
+
override fun getLocaleProvider(): () -> String = { Locale.current.language }
override fun getWebViewAuthCredentialsProvider(): () -> String? = {
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index ded2d07b72..983a156305 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -163,10 +163,10 @@
Вы обновили данные биометрии, отсканируйте свою карту для входа
Вы успешно прошли все уроки и теперь можете получить 1INCH токены
- - Пройдите 3 урока и получите %d 1INCH токен на свой кошелек
- - Пройдите 3 урока и получите %d 1INCH токена на свой кошелек
- - Пройдите 3 урока и получите %d 1INCH токенов на свой кошелек
- - Пройдите 3 урока и получите %d 1INCH токенов на свой кошелек
+ - Пройдите 3 урока и получите %d 1INCH токен на свой кошелек
+ - Пройдите 3 урока и получите %d 1INCH токена на свой кошелек
+ - Пройдите 3 урока и получите %d 1INCH токенов на свой кошелек
+ - Пройдите 3 урока и получите %d 1INCH токенов на свой кошелек
Управление токенами
Чтобы защитить свои активы, мы советуем вам выполнить эту процедуру
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index cd659ff14e..90489aa58e 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -161,8 +161,8 @@
You have updated biometrics, scan your card to enter
You have completed all of the lessons, and are now eligible to receive your 1INCH tokens
- - Complete three lessons and receive %d 1INCH token to your wallet
- - Complete three lessons and receive %d 1INCH tokens to your wallet
+ - Complete three lessons and receive %d 1INCH token to your wallet
+ - Complete three lessons and receive %d 1INCH tokens to your wallet
Manage tokens
To protect your assets, we advise you to carry out this procedure
diff --git a/features/learn2earn/impl/build.gradle.kts b/features/learn2earn/impl/build.gradle.kts
index 52671d615a..ce9914d94f 100644
--- a/features/learn2earn/impl/build.gradle.kts
+++ b/features/learn2earn/impl/build.gradle.kts
@@ -10,6 +10,7 @@ plugins {
dependencies {
/** Core modules */
implementation(project(":common"))
+ implementation(project(":domain:legacy"))
implementation(project(":core:analytics"))
implementation(project(":core:featuretoggles"))
implementation(project(":core:datasource"))
diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/DefaultLearn2earnRepository.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/DefaultLearn2earnRepository.kt
index c10f0d57bb..0eefb517be 100644
--- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/DefaultLearn2earnRepository.kt
+++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/DefaultLearn2earnRepository.kt
@@ -121,6 +121,7 @@ internal class DefaultLearn2earnRepository(
promoCode = null,
isRegisteredInPromotion = false,
isAlreadyReceivedAward = false,
+ isLearningStageFinished = false,
)
private companion object {
diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/models/PromoUserData.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/models/PromoUserData.kt
index 7edf1bc122..b5553c544e 100644
--- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/models/PromoUserData.kt
+++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/models/PromoUserData.kt
@@ -5,6 +5,7 @@ package com.tangem.feature.learn2earn.data.models
*/
data class PromoUserData(
val promoCode: String?,
+ val isLearningStageFinished: Boolean,
val isRegisteredInPromotion: Boolean,
val isAlreadyReceivedAward: Boolean,
)
\ No newline at end of file
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 6b3f438e02..12f37ee9f8 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
@@ -3,6 +3,8 @@ package com.tangem.feature.learn2earn.domain
import android.net.Uri
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.datasource.api.promotion.models.PromotionInfoResponse
+import com.tangem.feature.learn2earn.analytics.AnalyticsParam
+import com.tangem.feature.learn2earn.analytics.Learn2earnEvents.*
import com.tangem.feature.learn2earn.data.api.Learn2earnRepository
import com.tangem.feature.learn2earn.data.models.PromoUserData
import com.tangem.feature.learn2earn.data.toggles.Learn2earnFeatureToggleManager
@@ -22,8 +24,8 @@ internal class DefaultLearn2earnInteractor(
private val repository: Learn2earnRepository,
private val userWalletManager: UserWalletManager,
private val derivationManager: DerivationManager,
- private val analyticsEventHandler: AnalyticsEventHandler,
- dependencyProvider: Learn2earnDependencyProvider,
+ private val analytics: AnalyticsEventHandler,
+ private val dependencyProvider: Learn2earnDependencyProvider,
) : Learn2earnInteractor {
override var webViewResultHandler: WebViewResultHandler? = null
@@ -171,11 +173,11 @@ internal class DefaultLearn2earnInteractor(
}
override fun buildUriForNewUser(): Uri {
- return webViewUriBuilder.buildUriForNewUser()
+ return webViewUriBuilder.buildUriForNewUser(repository.getUserData().isLearningStageFinished)
}
override fun buildUriForOldUser(): Uri {
- return webViewUriBuilder.buildUriForOldUser()
+ return webViewUriBuilder.buildUriForOldUser(repository.getUserData().isLearningStageFinished)
}
override fun getBasicAuthHeaders(): ArrayList {
@@ -185,11 +187,22 @@ internal class DefaultLearn2earnInteractor(
override fun handleRedirect(uri: Uri): WebViewAction {
val result = webViewUriParser.parse(uri)
when (result) {
- is WebViewResult.PromoCode -> {
+ is WebViewResult.NewUserLearningFinished -> {
+ analytics.send(PromoScreen.SuccessScreenOpened(AnalyticsParam.ClientType.New()))
updateUserData {
it.copy(
promoCode = result.promoCode,
isRegisteredInPromotion = true,
+ isLearningStageFinished = true,
+ )
+ }
+ }
+ is WebViewResult.OldUserLearningFinished -> {
+ analytics.send(PromoScreen.SuccessScreenOpened(AnalyticsParam.ClientType.Old()))
+ updateUserData {
+ it.copy(
+ promoCode = null,
+ isLearningStageFinished = true,
)
}
}
@@ -197,7 +210,7 @@ internal class DefaultLearn2earnInteractor(
updateUserData { it.copy(isRegisteredInPromotion = true) }
}
is WebViewResult.Learn2earnAnalyticsEvent -> {
- analyticsEventHandler.send(result.event)
+ analytics.send(result.event)
}
WebViewResult.Empty -> Unit
}
@@ -222,6 +235,8 @@ internal class DefaultLearn2earnInteractor(
}
override fun isPromotionActiveOnMain(): Boolean {
+ if (dependencyProvider.getCardTypeResolver()?.isTangemWallet() != true) return false
+
val isActiveStatus = promotion.getPromotionInfo().oldCard.status == PromotionInfoResponse.Status.ACTIVE
return isPromotionActive() && isActiveStatus
}
@@ -293,10 +308,12 @@ internal class DefaultLearn2earnInteractor(
private fun WebViewResult.toWebViewAction(): WebViewAction {
return when (this) {
- WebViewResult.Empty -> WebViewAction.PROCEED
+ is WebViewResult.NewUserLearningFinished,
+ WebViewResult.OldUserLearningFinished,
+ is WebViewResult.Learn2earnAnalyticsEvent,
+ -> WebViewAction.NOTHING
WebViewResult.ReadyForAward -> WebViewAction.FINISH_SESSION
- is WebViewResult.Learn2earnAnalyticsEvent -> WebViewAction.NOTHING
- is WebViewResult.PromoCode -> WebViewAction.NOTHING
+ WebViewResult.Empty -> WebViewAction.PROCEED
}
}
}
\ No newline at end of file
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 89ac185bcd..ac763f5a52 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
@@ -12,8 +12,8 @@ internal class WebViewUriBuilder(
private val promoCodeProvider: () -> String?,
) {
- fun buildUriForNewUser(): Uri {
- val builder = makeWebViewUriBuilder()
+ fun buildUriForNewUser(learningIsFinished: Boolean): Uri {
+ val builder = makeWebViewUriBuilder(learningIsFinished)
.appendQueryParameter("type", QUERY_NEW_CARD)
promoCodeProvider.invoke()?.let {
@@ -23,9 +23,9 @@ internal class WebViewUriBuilder(
return builder.build()
}
- fun buildUriForOldUser(): Uri {
- val builder = makeWebViewUriBuilder()
- .appendQueryParameter("type", QUERY_EXISTED_CARD)
+ fun buildUriForOldUser(learningIsFinished: Boolean): Uri {
+ val builder = makeWebViewUriBuilder(learningIsFinished)
+ .appendQueryParameter("type", QUERY_EXISTING_CARD)
return builder.build()
}
@@ -39,7 +39,7 @@ internal class WebViewUriBuilder(
}
}
- private fun makeWebViewUriBuilder(): Uri.Builder = Uri.Builder().apply {
+ private fun makeWebViewUriBuilder(learningIsFinished: Boolean): Uri.Builder = Uri.Builder().apply {
scheme(SCHEME)
if (BuildConfig.DEBUG) {
authority(DEV_BASE_URL)
@@ -48,6 +48,7 @@ internal class WebViewUriBuilder(
}
appendPath(getLocaleLanguage(localeLanguageProvider.invoke()))
appendPath(PATH_PROMOTION)
+ appendQueryParameter(QUERY_FINISHED, learningIsFinished.toString())
}
// TODO: locale: This can be used by another feature. Move it to the appropriate location
@@ -66,7 +67,8 @@ internal class WebViewUriBuilder(
const val PATH_PROMOTION = "promotion"
const val QUERY_NEW_CARD = "new-card"
- const val QUERY_EXISTED_CARD = "existed-card"
+ const val QUERY_EXISTING_CARD = "existing-card"
+ const val QUERY_FINISHED = "finished"
const val DEV_BASE_URL = "devweb.tangem.com"
diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriParser.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriParser.kt
index f8d1d18e22..d169613478 100644
--- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriParser.kt
+++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/WebViewUriParser.kt
@@ -1,7 +1,6 @@
package com.tangem.feature.learn2earn.domain
import android.net.Uri
-import com.tangem.feature.learn2earn.analytics.AnalyticsParam
import com.tangem.feature.learn2earn.analytics.Learn2earnEvents
import com.tangem.feature.learn2earn.analytics.Learn2earnEvents.PromoScreen
import com.tangem.feature.learn2earn.domain.api.WebViewResult
@@ -22,14 +21,17 @@ internal class WebViewUriParser(
WebViewResult.Learn2earnAnalyticsEvent(event)
}
}
- isPromoCodeRedirect(uri) -> {
+ isSuccessNewUserRedirect(uri) -> {
val promoCode = extractPromoCode(uri)
if (promoCode == null) {
WebViewResult.Empty
} else {
- WebViewResult.PromoCode(promoCode)
+ WebViewResult.NewUserLearningFinished(promoCode)
}
}
+ isSuccessOldUserRedirect(uri) -> {
+ WebViewResult.OldUserLearningFinished
+ }
isReadyForAwardRedirect(uri) -> {
WebViewResult.ReadyForAward
}
@@ -40,13 +42,18 @@ internal class WebViewUriParser(
return uri.lastPathSegment == PATH_READY_FOR_AWARD
}
- private fun isPromoCodeRedirect(uri: Uri): Boolean {
- return uri.lastPathSegment == PATH_PROMO_CODE_CREATED &&
+ private fun isSuccessNewUserRedirect(uri: Uri): Boolean {
+ return uri.lastPathSegment == PATH_LEARNING_SUCCESS &&
uri.queryParameterNames.contains(QUERY_PROMO_CODE)
}
+ private fun isSuccessOldUserRedirect(uri: Uri): Boolean {
+ return uri.lastPathSegment == PATH_LEARNING_SUCCESS &&
+ !uri.queryParameterNames.contains(QUERY_PROMO_CODE)
+ }
+
private fun extractPromoCode(uri: Uri): String? {
- return if (isPromoCodeRedirect(uri)) {
+ return if (isSuccessNewUserRedirect(uri)) {
uri.getQueryParameter(QUERY_PROMO_CODE)
} else {
null
@@ -68,16 +75,14 @@ internal class WebViewUriParser(
val analyticsEvent = when (event) {
EVENT_PROMO_BUY -> PromoScreen.ButtonBuy()
- EVENT_PROMO_SUCCESS_NEW_USER -> PromoScreen.SuccessScreenOpened(AnalyticsParam.ClientType.New())
- EVENT_PROMO_SUCCESS_OLD_USER -> PromoScreen.SuccessScreenOpened(AnalyticsParam.ClientType.Old())
else -> null
}
return analyticsEvent
}
private companion object {
- const val PATH_PROMO_CODE_CREATED = "code-created"
- const val PATH_READY_FOR_AWARD = "ready-for-existed-card-award"
+ const val PATH_LEARNING_SUCCESS = "success"
+ const val PATH_READY_FOR_AWARD = "ready-for-existing-card-award"
const val PATH_ANALYTICS = "analytics"
const val QUERY_PROMO_CODE = "code"
@@ -85,7 +90,5 @@ internal class WebViewUriParser(
const val QUERY_PROGRAM_NAME = "programName"
const val EVENT_PROMO_BUY = "promotion-buy"
- const val EVENT_PROMO_SUCCESS_NEW_USER = "promotion-success-new-user"
- const val EVENT_PROMO_SUCCESS_OLD_USER = "promotion-success-old-user"
}
}
\ 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 3c4178d472..9c650e8be0 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,7 @@
package com.tangem.feature.learn2earn.domain.api
+import com.tangem.domain.common.CardTypesResolver
+
/**
* Interface, a wrapper that allows us to get values from the AppStateHolder located in the app module
*
@@ -7,6 +9,8 @@ package com.tangem.feature.learn2earn.domain.api
*/
interface Learn2earnDependencyProvider {
+ fun getCardTypeResolver(): CardTypesResolver?
+
fun getLocaleProvider(): () -> String
fun getWebViewAuthCredentialsProvider(): () -> String?
diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/WebViewResultHandler.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/WebViewResultHandler.kt
index 6b7c851a69..5f5ab27959 100644
--- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/WebViewResultHandler.kt
+++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/domain/api/WebViewResultHandler.kt
@@ -12,8 +12,14 @@ interface WebViewResultHandler {
}
sealed class WebViewResult {
+
object Empty : WebViewResult()
- data class PromoCode(val promoCode: String) : WebViewResult()
+
+ data class NewUserLearningFinished(val promoCode: String?) : WebViewResult()
+
+ object OldUserLearningFinished : WebViewResult()
+
object ReadyForAward : WebViewResult()
+
data class Learn2earnAnalyticsEvent(val event: AnalyticsEvent) : WebViewResult()
}
\ 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 72c05a6953..437a8eb716 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
@@ -51,7 +51,7 @@ internal class Learn2earnDomainModule {
repository = repository,
userWalletManager = userWalletManager,
derivationManager = derivationManager,
- analyticsEventHandler = analyticsEventHandler,
+ analytics = analyticsEventHandler,
dependencyProvider = dependencyProvider,
)
}
diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt
index 18613b0f54..aa563091c9 100644
--- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt
+++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/presentation/Learn2earnViewModel.kt
@@ -220,7 +220,7 @@ class Learn2earnViewModel @Inject constructor(
interactor.webViewResultHandler = object : WebViewResultHandler {
override fun handleResult(result: WebViewResult) {
when (result) {
- is WebViewResult.PromoCode -> {
+ is WebViewResult.NewUserLearningFinished -> {
interactor.webViewResultHandler = null
}
WebViewResult.ReadyForAward -> {
@@ -228,7 +228,10 @@ class Learn2earnViewModel @Inject constructor(
updateMainScreenViews()
requestAward()
}
- WebViewResult.Empty, is WebViewResult.Learn2earnAnalyticsEvent -> Unit
+ is WebViewResult.OldUserLearningFinished,
+ is WebViewResult.Learn2earnAnalyticsEvent,
+ WebViewResult.Empty,
+ -> Unit
}
}
}