diff --git a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json index ab2ed7ee14..9a45d3070f 100644 --- a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json @@ -14,5 +14,9 @@ { "name": "REDESIGNED_WALLET_SCREEN_ENABLED", "version": "undefined" + }, + { + "name": "1INCH_LEARN_2_EARN_ENABLED", + "version": "undefined" } ] \ No newline at end of file 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..971d2b741d 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 @@ -6,6 +6,7 @@ import com.tangem.datasource.api.promotion.models.* import com.tangem.feature.learn2earn.data.api.Learn2earnPreferenceStorage import com.tangem.feature.learn2earn.data.api.Learn2earnRepository import com.tangem.feature.learn2earn.data.models.PromoUserData +import com.tangem.feature.learn2earn.data.toggles.Learn2earnFeatureToggleManager import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider import kotlinx.coroutines.withContext import timber.log.Timber @@ -14,6 +15,7 @@ import timber.log.Timber [REDACTED_AUTHOR] */ internal class DefaultLearn2earnRepository( + override val featureToggleManager: Learn2earnFeatureToggleManager, private val preferencesStorage: Learn2earnPreferenceStorage, private val api: PromotionApi, private val dispatchers: AppCoroutineDispatcherProvider, diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/api/Learn2earnRepository.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/api/Learn2earnRepository.kt index 06e95628d7..442106b597 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/api/Learn2earnRepository.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/api/Learn2earnRepository.kt @@ -2,12 +2,15 @@ package com.tangem.feature.learn2earn.data.api import com.tangem.datasource.api.promotion.models.* import com.tangem.feature.learn2earn.data.models.PromoUserData +import com.tangem.feature.learn2earn.data.toggles.Learn2earnFeatureToggleManager /** [REDACTED_AUTHOR] */ interface Learn2earnRepository { + val featureToggleManager: Learn2earnFeatureToggleManager + fun getUserData(): PromoUserData fun updateUserData(userData: PromoUserData) diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/di/Learn2earnDataModule.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/di/Learn2earnDataModule.kt index 98cb9f1b9c..a27766ed01 100644 --- a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/di/Learn2earnDataModule.kt +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/di/Learn2earnDataModule.kt @@ -2,6 +2,7 @@ package com.tangem.feature.learn2earn.data.di import android.content.Context import com.squareup.moshi.Moshi +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager import com.tangem.datasource.api.promotion.PromotionApi import com.tangem.datasource.di.NetworkMoshi import com.tangem.datasource.di.PromotionOneInch @@ -9,6 +10,10 @@ import com.tangem.feature.learn2earn.data.DefaultLearn2earnRepository import com.tangem.feature.learn2earn.data.DefaultPreferenceStorage import com.tangem.feature.learn2earn.data.api.Learn2earnPreferenceStorage import com.tangem.feature.learn2earn.data.api.Learn2earnRepository +import com.tangem.feature.learn2earn.data.toggles.DevLearn2earnFeatureToggleManager +import com.tangem.feature.learn2earn.data.toggles.Learn2earnFeatureToggleManager +import com.tangem.feature.learn2earn.data.toggles.ProdLearn2earnFeatureToggleManager +import com.tangem.feature.learn2earn.impl.BuildConfig import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -21,6 +26,16 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) class Learn2earnDataModule { + @Provides + @Singleton + fun provideFeatureToggle(featureToggleManager: FeatureTogglesManager): Learn2earnFeatureToggleManager { + return if (BuildConfig.DEBUG) { + DevLearn2earnFeatureToggleManager() + } else { + ProdLearn2earnFeatureToggleManager(featureToggleManager) + } + } + @Provides @Singleton fun providePreferenceStorage(@ApplicationContext context: Context): Learn2earnPreferenceStorage { @@ -30,12 +45,14 @@ class Learn2earnDataModule { @Provides @Singleton fun provideRepository( + featureToggleManager: Learn2earnFeatureToggleManager, preferenceStorage: Learn2earnPreferenceStorage, @NetworkMoshi moshi: Moshi, @PromotionOneInch promotionApi: PromotionApi, dispatchers: AppCoroutineDispatcherProvider, ): Learn2earnRepository { return DefaultLearn2earnRepository( + featureToggleManager = featureToggleManager, preferencesStorage = preferenceStorage, api = promotionApi, dispatchers = dispatchers, diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/DevLearn2earnFeatureToggleManager.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/DevLearn2earnFeatureToggleManager.kt new file mode 100644 index 0000000000..79cfec1eb8 --- /dev/null +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/DevLearn2earnFeatureToggleManager.kt @@ -0,0 +1,10 @@ +package com.tangem.feature.learn2earn.data.toggles + +/** +[REDACTED_AUTHOR] + */ +class DevLearn2earnFeatureToggleManager : Learn2earnFeatureToggleManager { + + override val isLearn2earnEnabled: Boolean + get() = true +} \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/Learn2earnFeatureToggleManager.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/Learn2earnFeatureToggleManager.kt new file mode 100644 index 0000000000..64f5c4abfc --- /dev/null +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/Learn2earnFeatureToggleManager.kt @@ -0,0 +1,11 @@ +package com.tangem.feature.learn2earn.data.toggles + +/** + * Feature toggles manager implementation of "learn2earn" feature + * +[REDACTED_AUTHOR] + */ +interface Learn2earnFeatureToggleManager { + + val isLearn2earnEnabled: Boolean +} \ No newline at end of file diff --git a/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/ProdLearn2earnFeatureToggleManager.kt b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/ProdLearn2earnFeatureToggleManager.kt new file mode 100644 index 0000000000..400cae57b8 --- /dev/null +++ b/features/learn2earn/impl/src/main/java/com/tangem/feature/learn2earn/data/toggles/ProdLearn2earnFeatureToggleManager.kt @@ -0,0 +1,14 @@ +package com.tangem.feature.learn2earn.data.toggles + +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager + +/** +[REDACTED_AUTHOR] + */ +class ProdLearn2earnFeatureToggleManager( + private val featureTogglesManager: FeatureTogglesManager, +) : Learn2earnFeatureToggleManager { + + override val isLearn2earnEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "1INCH_LEARN_2_EARN_ENABLED") +} \ 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 7bfc706242..6031624216 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 @@ -207,6 +207,7 @@ class DefaultLearn2earnInteractor( private fun promotionIsActive(): Boolean { val userData = repository.getUserData() val isActive = when { + !repository.featureToggleManager.isLearn2earnEnabled -> false userData.isAlreadyReceivedAward -> false promotion.isError() -> false else -> { @@ -219,34 +220,41 @@ class DefaultLearn2earnInteractor( } private suspend fun initPromotionInfo() { - promotion = repository.getPromotionInfo() - .fold( - onSuccess = { response -> - val responseError = response.error - if (responseError == null) { - val npeMessage = { "Shouldn't be null" } - Promotion( - info = Promotion.PromotionInfo( - newCard = requireNotNull(response.newCard, npeMessage), - oldCard = requireNotNull(response.oldCard, npeMessage), - awardPaymentToken = requireNotNull(response.awardPaymentToken, npeMessage), - ), - error = null, - ) - } else { + promotion = if (repository.featureToggleManager.isLearn2earnEnabled) { + repository.getPromotionInfo() + .fold( + onSuccess = { response -> + val responseError = response.error + if (responseError == null) { + val npeMessage = { "Shouldn't be null" } + Promotion( + info = Promotion.PromotionInfo( + newCard = requireNotNull(response.newCard, npeMessage), + oldCard = requireNotNull(response.oldCard, npeMessage), + awardPaymentToken = requireNotNull(response.awardPaymentToken, npeMessage), + ), + error = null, + ) + } else { + Promotion( + info = null, + error = responseError.toDomainError(), + ) + } + }, + onFailure = { Promotion( info = null, - error = responseError.toDomainError(), + error = PromotionError.NetworkUnreachable, ) - } - }, - onFailure = { - Promotion( - info = null, - error = PromotionError.NetworkUnreachable, - ) - }, + }, + ) + } else { + Promotion( + info = null, + error = null, ) + } } private fun getCurrencyForAward(): Currency? {