From 9868dd2bc2a5e34f70f18e6b3c2f38a5add46dda Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 May 2024 14:14:44 +0200 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 2 + .../configs/feature_toggles_config.json | 4 ++ features/staking/api/.gitignore | 1 + features/staking/api/build.gradle.kts | 16 +++++ .../featuretoggles/StakingFeatureToggles.kt | 10 +++ .../staking/api/navigation/StakingRouter.kt | 8 +++ features/staking/impl/.gitignore | 1 + features/staking/impl/build.gradle.kts | 62 +++++++++++++++++++ .../impl/di/StakingFeatureTogglesModule.kt | 24 +++++++ .../staking/impl/di/StakingRouterModule.kt | 23 +++++++ .../DefaultStakingFeatureToggles.kt | 17 +++++ .../impl/navigation/DefaultStakingRouter.kt | 8 +++ .../impl/navigation/InnerStakingRouter.kt | 5 ++ settings.gradle.kts | 3 + 14 files changed, 184 insertions(+) create mode 100644 features/staking/api/.gitignore create mode 100644 features/staking/api/build.gradle.kts create mode 100644 features/staking/api/src/main/kotlin/com/tangem/features/staking/api/featuretoggles/StakingFeatureToggles.kt create mode 100644 features/staking/api/src/main/kotlin/com/tangem/features/staking/api/navigation/StakingRouter.kt create mode 100644 features/staking/impl/.gitignore create mode 100644 features/staking/impl/build.gradle.kts create mode 100644 features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingFeatureTogglesModule.kt create mode 100644 features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingRouterModule.kt create mode 100644 features/staking/impl/src/main/java/com/tangem/features/staking/impl/featuretoggles/DefaultStakingFeatureToggles.kt create mode 100644 features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/DefaultStakingRouter.kt create mode 100644 features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/InnerStakingRouter.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f775c46b33..46ab6491ef 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -121,6 +121,8 @@ dependencies { implementation(projects.features.send.impl) implementation(projects.features.qrScanning.api) implementation(projects.features.qrScanning.impl) + implementation(projects.features.staking.api) + implementation(projects.features.staking.impl) /** AndroidX libraries */ implementation(deps.androidx.core.ktx) 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 d91a3988e8..7b611616d8 100644 --- a/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/featuretoggles/src/main/assets/configs/feature_toggles_config.json @@ -30,5 +30,9 @@ { "name": "CARDANO_TOKENS_SUPPORT_ENABLED", "version": "5.11.0" + }, + { + "name": "STAKING_ENABLED", + "version": "undefined" } ] diff --git a/features/staking/api/.gitignore b/features/staking/api/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/features/staking/api/.gitignore @@ -0,0 +1 @@ +/build diff --git a/features/staking/api/build.gradle.kts b/features/staking/api/build.gradle.kts new file mode 100644 index 0000000000..a14e2d42b0 --- /dev/null +++ b/features/staking/api/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) + id("kotlin-parcelize") + id("configuration") +} + +android { + namespace = "com.tangem.features.staking.api" +} + +dependencies { + + /** AndroidX */ + implementation(deps.androidx.fragment.ktx) +} \ No newline at end of file diff --git a/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/featuretoggles/StakingFeatureToggles.kt b/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/featuretoggles/StakingFeatureToggles.kt new file mode 100644 index 0000000000..90ccdc617d --- /dev/null +++ b/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/featuretoggles/StakingFeatureToggles.kt @@ -0,0 +1,10 @@ +package com.tangem.features.staking.api.featuretoggles + +/** + * Staking feature toggles + */ +interface StakingFeatureToggles { + + /** Availability of staking */ + val isStakingEnabled: Boolean +} \ No newline at end of file diff --git a/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/navigation/StakingRouter.kt b/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/navigation/StakingRouter.kt new file mode 100644 index 0000000000..d2b216513e --- /dev/null +++ b/features/staking/api/src/main/kotlin/com/tangem/features/staking/api/navigation/StakingRouter.kt @@ -0,0 +1,8 @@ +package com.tangem.features.staking.api.navigation + +import androidx.fragment.app.Fragment + +interface StakingRouter { + + fun getEntryFragment(): Fragment +} \ No newline at end of file diff --git a/features/staking/impl/.gitignore b/features/staking/impl/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/features/staking/impl/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/features/staking/impl/build.gradle.kts b/features/staking/impl/build.gradle.kts new file mode 100644 index 0000000000..ac2ce74301 --- /dev/null +++ b/features/staking/impl/build.gradle.kts @@ -0,0 +1,62 @@ +plugins { + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) + alias(deps.plugins.kotlin.kapt) + alias(deps.plugins.hilt.android) + id("configuration") +} + +android { + namespace = "com.tangem.features.staking.impl" +} + +dependencies { + /** AndroidX */ + implementation(deps.androidx.fragment.ktx) + implementation(deps.androidx.appCompat) + implementation(deps.androidx.paging.runtime) + + /** Other dependencies */ + implementation(deps.kotlin.immutable.collections) + implementation(deps.material) + implementation(deps.arrow.core) + implementation(deps.lifecycle.compose) + implementation(deps.jodatime) + implementation(deps.timber) + + /** Compose */ + implementation(deps.compose.accompanist.systemUiController) + implementation(deps.compose.material3) + implementation(deps.compose.material) + implementation(deps.compose.foundation) + implementation(deps.compose.ui) + implementation(deps.compose.ui.tooling) + implementation(deps.compose.navigation) + implementation(deps.compose.navigation.hilt) + implementation(deps.compose.constraintLayout) + + /** Tangem SDKs */ + implementation(deps.tangem.card.core) + implementation(deps.tangem.blockchain) + + /** Core modules */ + implementation(projects.core.featuretoggles) + implementation(projects.core.ui) + implementation(projects.core.utils) + implementation(projects.core.navigation) + implementation(projects.core.analytics) + implementation(projects.core.analytics.models) + + /** Common */ + implementation(projects.common) + + /** Libs */ + implementation(projects.libs.crypto) + + /** Feature modules */ + implementation(projects.features.staking.api) + + /** DI */ + implementation(deps.hilt.android) + kapt(deps.hilt.kapt) +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingFeatureTogglesModule.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingFeatureTogglesModule.kt new file mode 100644 index 0000000000..e40072f8bf --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingFeatureTogglesModule.kt @@ -0,0 +1,24 @@ +package com.tangem.features.staking.impl.di + +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.features.staking.api.featuretoggles.StakingFeatureToggles +import com.tangem.features.staking.impl.featuretoggles.DefaultStakingFeatureToggles +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +/** + * DI module provides implementation of [StakingFeatureToggles] + */ +@Module +@InstallIn(SingletonComponent::class) +internal object StakingFeatureTogglesModule { + + @Provides + @Singleton + fun provideStakingFeatureToggles(featureTogglesManager: FeatureTogglesManager): StakingFeatureToggles { + return DefaultStakingFeatureToggles(featureTogglesManager = featureTogglesManager) + } +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingRouterModule.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingRouterModule.kt new file mode 100644 index 0000000000..c351d87a6e --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/di/StakingRouterModule.kt @@ -0,0 +1,23 @@ +package com.tangem.features.staking.impl.di + +import com.tangem.features.staking.impl.navigation.DefaultStakingRouter +import com.tangem.features.staking.api.navigation.StakingRouter +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.scopes.ActivityScoped + +/** + * DI module provides implementation of [StakingRouter] + */ +@Module +@InstallIn(ActivityComponent::class) +internal object StakingRouterModule { + + @Provides + @ActivityScoped + fun provideStakingRouter(): StakingRouter { + return DefaultStakingRouter() + } +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/featuretoggles/DefaultStakingFeatureToggles.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/featuretoggles/DefaultStakingFeatureToggles.kt new file mode 100644 index 0000000000..735c22b027 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/featuretoggles/DefaultStakingFeatureToggles.kt @@ -0,0 +1,17 @@ +package com.tangem.features.staking.impl.featuretoggles + +import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.features.staking.api.featuretoggles.StakingFeatureToggles + +/** + * Default implementation of staking feature toggles + * + * @property featureTogglesManager manager for getting information about the availability of feature toggles + */ +internal class DefaultStakingFeatureToggles( + private val featureTogglesManager: FeatureTogglesManager, +) : StakingFeatureToggles { + + override val isStakingEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "STAKING_ENABLED") +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/DefaultStakingRouter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/DefaultStakingRouter.kt new file mode 100644 index 0000000000..83cd830e4d --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/DefaultStakingRouter.kt @@ -0,0 +1,8 @@ +package com.tangem.features.staking.impl.navigation + +import androidx.fragment.app.Fragment + +internal class DefaultStakingRouter : InnerStakingRouter { + + override fun getEntryFragment(): Fragment = TODO() +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/InnerStakingRouter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/InnerStakingRouter.kt new file mode 100644 index 0000000000..7d7aa226d4 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/navigation/InnerStakingRouter.kt @@ -0,0 +1,5 @@ +package com.tangem.features.staking.impl.navigation + +import com.tangem.features.staking.api.navigation.StakingRouter + +interface InnerStakingRouter : StakingRouter \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index e297edfac7..b714ecb4b4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -153,6 +153,9 @@ include(":features:manage-tokens:impl") include(":features:qr-scanning:api") include(":features:qr-scanning:impl") + +include(":features:staking:api") +include(":features:staking:impl") // endregion Feature modules // region Domain modules