From 6dbd7bd861dfde375b968a482b7e822450d12caa Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 18 Oct 2024 17:27:45 +0400 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 2 +- .../com/tangem/tap/ApplicationEntryPoint.kt | 2 +- .../java/com/tangem/tap/TangemApplication.kt | 2 +- .../tap/common/extensions/Blockchain.kt | 18 -------- .../tap/di/domain/CardLegacyDomainModule.kt | 2 +- .../scanCard/CardScanningFeatureToggles.kt | 2 +- .../di/WalletConnectInteractorModule.kt | 2 +- .../toggles/WalletConnectFeatureToggles.kt | 2 +- .../home/featuretoggles/HomeFeatureToggles.kt | 2 +- .../storage/FeatureTogglesStorage.kt | 15 ------- .../storage/LocalFeatureTogglesStorage.kt | 29 ------------ .../core/featuretoggle/utils/CollectionExt.kt | 13 ------ core/{featuretoggles => toggles}/.gitignore | 0 .../build.gradle.kts | 2 +- .../configs/excluded_blockchains_config.json | 10 +++++ .../toggle}/di/FeatureTogglesManagerModule.kt | 20 ++++----- .../toggle/feature}/FeatureTogglesManager.kt | 2 +- .../feature}/MutableFeatureTogglesManager.kt | 2 +- .../feature/impl}/DevFeatureTogglesManager.kt | 17 +++---- .../feature/impl/FeatureTogglesConstants.kt | 6 +++ .../impl}/ProdFeatureTogglesManager.kt | 17 +++---- .../toggle/storage/LocalTogglesStorage.kt | 24 ++++++++++ .../com/tangem/core/toggle/storage/Toggle.kt} | 10 ++--- .../core/toggle/storage/TogglesStorage.kt | 15 +++++++ .../tangem/core/toggle/utils/CollectionExt.kt | 13 ++++++ .../toggle}/version/DefaultVersionProvider.kt | 2 +- .../tangem/core/toggle/version}/Version.kt | 2 +- .../version}/VersionAvailabilityContract.kt | 2 +- .../core/toggle}/version/VersionProvider.kt | 2 +- .../VersionAvailabilityContractTest.kt | 3 +- .../core/toggle}/contract/VersionTest.kt | 3 +- .../toggle/manager/DevTogglesManagerTest.kt} | 45 ++++++++++--------- .../toggle/manager/ProdTogglesManagerTest.kt} | 45 ++++++++++--------- .../storage/LocalTogglesStorageTest.kt} | 28 ++++++------ features/details/impl/build.gradle.kts | 2 +- features/disclaimer/impl/build.gradle.kts | 2 +- features/manage-tokens/impl/build.gradle.kts | 2 +- features/markets/impl/build.gradle.kts | 2 +- features/onboarding-v2/impl/build.gradle.kts | 2 +- .../v2/DefaultOnboardingV2FeatureToggles.kt | 2 +- features/onboarding/build.gradle.kts | 2 +- features/onramp/impl/build.gradle.kts | 2 +- .../onramp/DefaultOnrampFeatureToggles.kt | 2 +- .../features/onramp/OnrampFeatureModule.kt | 4 +- .../push-notifications/impl/build.gradle.kts | 2 +- features/send/impl/build.gradle.kts | 2 +- features/staking/impl/build.gradle.kts | 2 +- features/swap/presentation/build.gradle.kts | 2 +- features/tester/impl/build.gradle.kts | 2 +- .../viewmodels/FeatureTogglesViewModel.kt | 4 +- features/tokendetails/impl/build.gradle.kts | 2 +- .../wallet-settings/impl/build.gradle.kts | 2 +- features/wallet/impl/build.gradle.kts | 2 +- .../DefaultWalletFeatureToggles.kt | 2 +- libs/blockchain-sdk/build.gradle.kts | 2 +- .../di/BlockchainSDKFactoryModule.kt | 2 +- .../DefaultBlockchainSDKFeatureToggles.kt | 2 +- settings.gradle.kts | 2 +- 58 files changed, 207 insertions(+), 206 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt delete mode 100644 core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureTogglesStorage.kt delete mode 100644 core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorage.kt delete mode 100644 core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/utils/CollectionExt.kt rename core/{featuretoggles => toggles}/.gitignore (100%) rename core/{featuretoggles => toggles}/build.gradle.kts (94%) create mode 100644 core/toggles/src/main/assets/configs/excluded_blockchains_config.json rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle => toggles/src/main/kotlin/com/tangem/core/toggle}/di/FeatureTogglesManagerModule.kt (62%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager => toggles/src/main/kotlin/com/tangem/core/toggle/feature}/FeatureTogglesManager.kt (86%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager => toggles/src/main/kotlin/com/tangem/core/toggle/feature}/MutableFeatureTogglesManager.kt (92%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager => toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl}/DevFeatureTogglesManager.kt (82%) create mode 100644 core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/FeatureTogglesConstants.kt rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager => toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl}/ProdFeatureTogglesManager.kt (63%) create mode 100644 core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorage.kt rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureToggle.kt => toggles/src/main/kotlin/com/tangem/core/toggle/storage/Toggle.kt} (53%) create mode 100644 core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/TogglesStorage.kt create mode 100644 core/toggles/src/main/kotlin/com/tangem/core/toggle/utils/CollectionExt.kt rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle => toggles/src/main/kotlin/com/tangem/core/toggle}/version/DefaultVersionProvider.kt (96%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract => toggles/src/main/kotlin/com/tangem/core/toggle/version}/Version.kt (98%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract => toggles/src/main/kotlin/com/tangem/core/toggle/version}/VersionAvailabilityContract.kt (93%) rename core/{featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle => toggles/src/main/kotlin/com/tangem/core/toggle}/version/VersionProvider.kt (74%) rename core/{featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle => toggles/src/test/kotlin/com/tangem/core/toggle}/contract/VersionAvailabilityContractTest.kt (94%) rename core/{featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle => toggles/src/test/kotlin/com/tangem/core/toggle}/contract/VersionTest.kt (97%) rename core/{featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManagerTest.kt => toggles/src/test/kotlin/com/tangem/core/toggle/manager/DevTogglesManagerTest.kt} (81%) rename core/{featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManagerTest.kt => toggles/src/test/kotlin/com/tangem/core/toggle/manager/ProdTogglesManagerTest.kt} (69%) rename core/{featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorageTest.kt => toggles/src/test/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorageTest.kt} (74%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f08ee1b88d..dd0208cf7f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -81,7 +81,7 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.navigation) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.res) implementation(projects.core.ui) implementation(projects.core.datasource) diff --git a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt index b116caf952..4a7cf3ec44 100644 --- a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt +++ b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt @@ -5,9 +5,9 @@ import com.tangem.blockchainsdk.BlockchainSDKFactory import com.tangem.blockchainsdk.signer.TransactionSignerFactory import com.tangem.common.routing.AppRouter import com.tangem.core.analytics.filter.OneTimeEventFilter -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager import com.tangem.core.navigation.share.ShareManager import com.tangem.core.navigation.url.UrlOpener +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.issuers.IssuersConfigStorage diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index 0e2e83f67f..0790e718b8 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -17,7 +17,7 @@ import com.tangem.core.analytics.models.AnalyticsEvent import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.analytics.models.Basic import com.tangem.core.analytics.models.Basic.TransactionSent.WalletForm -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.datasource.api.common.MoshiConverter import com.tangem.datasource.api.common.createNetworkLoggingInterceptor import com.tangem.datasource.connection.NetworkConnectionManager diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt b/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt deleted file mode 100644 index 08c1b72a81..0000000000 --- a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.tangem.tap.common.extensions - -import com.tangem.blockchain.common.Blockchain -import com.tangem.common.extensions.remove - -fun Blockchain.getNetworkStandardName(): String { - return when (this) { - Blockchain.Ethereum, Blockchain.EthereumTestnet -> "ERC20" - Blockchain.BSC, Blockchain.BSCTestnet -> "BEP20" - Blockchain.Binance, Blockchain.BinanceTestnet -> "BEP2" - Blockchain.Tron, Blockchain.TronTestnet -> "TRC20" - Blockchain.TON -> "TON" - else -> "" - } -} - -val Blockchain.networkNameWithoutTestnet - get() = this.getNetworkName().remove(" Testnet") \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt index 12b071ad16..77ff3a6bee 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt @@ -1,6 +1,6 @@ package com.tangem.tap.di.domain -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.domain.card.ScanCardProcessor import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.usecase.GenerateWalletNameUseCase diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/CardScanningFeatureToggles.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/CardScanningFeatureToggles.kt index 904cfe1673..1c989ca3db 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/CardScanningFeatureToggles.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/CardScanningFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.tap.domain.scanCard -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager /** * Add custom token feature toggles diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/di/WalletConnectInteractorModule.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/di/WalletConnectInteractorModule.kt index cc4a3e16c4..65faebf4db 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/di/WalletConnectInteractorModule.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/di/WalletConnectInteractorModule.kt @@ -3,7 +3,7 @@ package com.tangem.tap.domain.walletconnect2.di import android.app.Application import com.squareup.moshi.Moshi import com.tangem.core.analytics.api.AnalyticsEventHandler -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.datasource.di.SdkMoshi import com.tangem.datasource.files.FileReader import com.tangem.domain.tokens.repository.CurrenciesRepository diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/toggles/WalletConnectFeatureToggles.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/toggles/WalletConnectFeatureToggles.kt index 26547d68e8..e9f55f3815 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/toggles/WalletConnectFeatureToggles.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/toggles/WalletConnectFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.tap.domain.walletconnect2.toggles -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager internal class WalletConnectFeatureToggles( private val featureTogglesManager: FeatureTogglesManager, diff --git a/app/src/main/java/com/tangem/tap/features/home/featuretoggles/HomeFeatureToggles.kt b/app/src/main/java/com/tangem/tap/features/home/featuretoggles/HomeFeatureToggles.kt index ce8c0bcec3..ebbb05500b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/featuretoggles/HomeFeatureToggles.kt +++ b/app/src/main/java/com/tangem/tap/features/home/featuretoggles/HomeFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.tap.features.home.featuretoggles -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import javax.inject.Inject class HomeFeatureToggles @Inject constructor( diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureTogglesStorage.kt b/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureTogglesStorage.kt deleted file mode 100644 index dd788efacb..0000000000 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureTogglesStorage.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.tangem.core.featuretoggle.storage - -/** - * Component that initializes and stores a list of feature toggles - * -[REDACTED_AUTHOR] - */ -internal interface FeatureTogglesStorage { - - /** List of feature toggles */ - val featureToggles: List - - /** Initialize storage */ - suspend fun init() -} \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorage.kt b/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorage.kt deleted file mode 100644 index dbd92dee48..0000000000 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorage.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.tangem.core.featuretoggle.storage - -import com.tangem.core.featuretoggle.storage.LocalFeatureTogglesStorage.Companion.LOCAL_CONFIG_PATH -import com.tangem.datasource.asset.loader.AssetLoader -import kotlin.properties.Delegates - -/** - * Storage implementation for storing local feature toggles. - * Feature toggles are declared in file [LOCAL_CONFIG_PATH]. - * - * @property assetLoader asset loader - * -[REDACTED_AUTHOR] - */ -internal class LocalFeatureTogglesStorage( - private val assetLoader: AssetLoader, -) : FeatureTogglesStorage { - - override var featureToggles: List by Delegates.notNull() - private set - - override suspend fun init() { - featureToggles = assetLoader.loadList(LOCAL_CONFIG_PATH) - } - - private companion object { - const val LOCAL_CONFIG_PATH: String = "configs/feature_toggles_config" - } -} \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/utils/CollectionExt.kt b/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/utils/CollectionExt.kt deleted file mode 100644 index 990f95cf18..0000000000 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/utils/CollectionExt.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tangem.core.featuretoggle.utils - -import com.tangem.core.featuretoggle.contract.VersionAvailabilityContract -import com.tangem.core.featuretoggle.storage.FeatureToggle - -internal fun List.associateToggles(currentVersion: String): Map { - return associate { localToggle -> - Pair( - first = localToggle.name, - second = VersionAvailabilityContract(currentVersion, localToggle.version), - ) - } -} \ No newline at end of file diff --git a/core/featuretoggles/.gitignore b/core/toggles/.gitignore similarity index 100% rename from core/featuretoggles/.gitignore rename to core/toggles/.gitignore diff --git a/core/featuretoggles/build.gradle.kts b/core/toggles/build.gradle.kts similarity index 94% rename from core/featuretoggles/build.gradle.kts rename to core/toggles/build.gradle.kts index 410ef17d0e..e56b5955fe 100644 --- a/core/featuretoggles/build.gradle.kts +++ b/core/toggles/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } android { - namespace = "com.tangem.core.featuretoggles" + namespace = "com.tangem.core.toggles" } dependencies { diff --git a/core/toggles/src/main/assets/configs/excluded_blockchains_config.json b/core/toggles/src/main/assets/configs/excluded_blockchains_config.json new file mode 100644 index 0000000000..fe5273f780 --- /dev/null +++ b/core/toggles/src/main/assets/configs/excluded_blockchains_config.json @@ -0,0 +1,10 @@ +[ + { + "mainnet_id": "", + "excluded_till": "undefined" + }, + { + "mainnet_id": "NEXA", + "excluded_till": "undefined" + } +] \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/di/FeatureTogglesManagerModule.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/di/FeatureTogglesManagerModule.kt similarity index 62% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/di/FeatureTogglesManagerModule.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/di/FeatureTogglesManagerModule.kt index ca45c78a6b..0f740243f0 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/di/FeatureTogglesManagerModule.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/di/FeatureTogglesManagerModule.kt @@ -1,12 +1,12 @@ -package com.tangem.core.featuretoggle.di +package com.tangem.core.toggle.di import android.content.Context -import com.tangem.core.featuretoggle.manager.DevFeatureTogglesManager -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager -import com.tangem.core.featuretoggle.manager.ProdFeatureTogglesManager -import com.tangem.core.featuretoggle.storage.LocalFeatureTogglesStorage -import com.tangem.core.featuretoggle.version.DefaultVersionProvider -import com.tangem.core.featuretoggles.BuildConfig +import com.tangem.core.toggle.feature.FeatureTogglesManager +import com.tangem.core.toggle.feature.impl.DevFeatureTogglesManager +import com.tangem.core.toggle.feature.impl.ProdFeatureTogglesManager +import com.tangem.core.toggle.storage.LocalTogglesStorage +import com.tangem.core.toggle.version.DefaultVersionProvider +import com.tangem.core.toggles.BuildConfig import com.tangem.datasource.asset.loader.AssetLoader import com.tangem.datasource.local.preferences.AppPreferencesStore import dagger.Module @@ -27,18 +27,18 @@ internal object FeatureTogglesManagerModule { assetLoader: AssetLoader, appPreferencesStore: AppPreferencesStore, ): FeatureTogglesManager { - val localFeatureTogglesStorage = LocalFeatureTogglesStorage(assetLoader) + val localTogglesStorage = LocalTogglesStorage(assetLoader) val versionProvider = DefaultVersionProvider(context) return if (BuildConfig.TESTER_MENU_ENABLED) { DevFeatureTogglesManager( - localFeatureTogglesStorage = localFeatureTogglesStorage, + localTogglesStorage = localTogglesStorage, appPreferencesStore = appPreferencesStore, versionProvider = versionProvider, ) } else { ProdFeatureTogglesManager( - localFeatureTogglesStorage = localFeatureTogglesStorage, + localTogglesStorage = localTogglesStorage, versionProvider = versionProvider, ) } diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/FeatureTogglesManager.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/FeatureTogglesManager.kt similarity index 86% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/FeatureTogglesManager.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/FeatureTogglesManager.kt index 6111e7f73b..1de1ff39ee 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/FeatureTogglesManager.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/FeatureTogglesManager.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.feature /** * Component for getting information about the availability of feature toggles diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/MutableFeatureTogglesManager.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/MutableFeatureTogglesManager.kt similarity index 92% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/MutableFeatureTogglesManager.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/MutableFeatureTogglesManager.kt index f04b423f4f..ce9798863e 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/MutableFeatureTogglesManager.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/MutableFeatureTogglesManager.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.feature /** * Component for change information about the availability of feature toggles diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManager.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/DevFeatureTogglesManager.kt similarity index 82% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManager.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/DevFeatureTogglesManager.kt index 303dce3c7b..8441522e6d 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManager.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/DevFeatureTogglesManager.kt @@ -1,9 +1,10 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.feature.impl import androidx.annotation.VisibleForTesting -import com.tangem.core.featuretoggle.storage.FeatureTogglesStorage -import com.tangem.core.featuretoggle.utils.associateToggles -import com.tangem.core.featuretoggle.version.VersionProvider +import com.tangem.core.toggle.feature.MutableFeatureTogglesManager +import com.tangem.core.toggle.storage.TogglesStorage +import com.tangem.core.toggle.utils.associateToggles +import com.tangem.core.toggle.version.VersionProvider import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull @@ -13,12 +14,12 @@ import kotlin.properties.Delegates /** * Feature toggles manager implementation in DEV build * - * @property localFeatureTogglesStorage local feature toggles storage + * @property localTogglesStorage local feature toggles storage * @property appPreferencesStore application local store * @property versionProvider application version provider */ internal class DevFeatureTogglesManager( - private val localFeatureTogglesStorage: FeatureTogglesStorage, + private val localTogglesStorage: TogglesStorage, private val appPreferencesStore: AppPreferencesStore, private val versionProvider: VersionProvider, ) : MutableFeatureTogglesManager { @@ -27,13 +28,13 @@ internal class DevFeatureTogglesManager( private var localFeatureTogglesMap: Map by Delegates.notNull() override suspend fun init() { - localFeatureTogglesStorage.init() + localTogglesStorage.populate(FeatureTogglesConstants.LOCAL_CONFIG_PATH) val savedFeatureToggles = appPreferencesStore.getObjectSyncOrNull>( key = PreferencesKeys.FEATURE_TOGGLES_KEY, ) ?: emptyMap() - val localFeatureToggles = localFeatureTogglesStorage.featureToggles + val localFeatureToggles = localTogglesStorage.toggles .associateToggles(currentVersion = versionProvider.get().orEmpty()) localFeatureTogglesMap = localFeatureToggles diff --git a/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/FeatureTogglesConstants.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/FeatureTogglesConstants.kt new file mode 100644 index 0000000000..06fd9d9417 --- /dev/null +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/FeatureTogglesConstants.kt @@ -0,0 +1,6 @@ +package com.tangem.core.toggle.feature.impl + +internal object FeatureTogglesConstants { + + const val LOCAL_CONFIG_PATH: String = "configs/feature_toggles_config" +} \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManager.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/ProdFeatureTogglesManager.kt similarity index 63% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManager.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/ProdFeatureTogglesManager.kt index 0f88c3791c..4624273b81 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManager.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/feature/impl/ProdFeatureTogglesManager.kt @@ -1,27 +1,28 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.feature.impl import androidx.annotation.VisibleForTesting -import com.tangem.core.featuretoggle.storage.FeatureTogglesStorage -import com.tangem.core.featuretoggle.utils.associateToggles -import com.tangem.core.featuretoggle.version.VersionProvider +import com.tangem.core.toggle.feature.FeatureTogglesManager +import com.tangem.core.toggle.storage.TogglesStorage +import com.tangem.core.toggle.utils.associateToggles +import com.tangem.core.toggle.version.VersionProvider import kotlin.properties.Delegates /** * Feature toggles manager implementation in PROD build * - * @property localFeatureTogglesStorage local feature toggles storage + * @property localTogglesStorage local feature toggles storage * @property versionProvider application version provider */ internal class ProdFeatureTogglesManager( - private val localFeatureTogglesStorage: FeatureTogglesStorage, + private val localTogglesStorage: TogglesStorage, private val versionProvider: VersionProvider, ) : FeatureTogglesManager { private var featureToggles: Map by Delegates.notNull() override suspend fun init() { - localFeatureTogglesStorage.init() - featureToggles = localFeatureTogglesStorage.featureToggles + localTogglesStorage.populate(FeatureTogglesConstants.LOCAL_CONFIG_PATH) + featureToggles = localTogglesStorage.toggles .associateToggles(currentVersion = versionProvider.get() ?: "") } diff --git a/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorage.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorage.kt new file mode 100644 index 0000000000..1fadc664bd --- /dev/null +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorage.kt @@ -0,0 +1,24 @@ +package com.tangem.core.toggle.storage + +import com.tangem.datasource.asset.loader.AssetLoader +import kotlin.properties.Delegates + +/** + * Storage implementation for storing local feature toggles. + * Feature toggles are declared in file [LOCAL_CONFIG_PATH]. + * + * @property assetLoader asset loader + * +[REDACTED_AUTHOR] + */ +internal class LocalTogglesStorage( + private val assetLoader: AssetLoader, +) : TogglesStorage { + + override var toggles: List by Delegates.notNull() + private set + + override suspend fun populate(path: String) { + toggles = assetLoader.loadList(path) + } +} \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureToggle.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/Toggle.kt similarity index 53% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureToggle.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/Toggle.kt index b019bfc810..52973d28d3 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/storage/FeatureToggle.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/Toggle.kt @@ -1,20 +1,20 @@ -package com.tangem.core.featuretoggle.storage +package com.tangem.core.toggle.storage import com.squareup.moshi.Json import com.squareup.moshi.JsonClass /** - * Data model with information about feature toggle + * Data model with information about config toggle * - * @property name feature toggle name + * @property name toggle name * @property version version number in which the feature will be included * - * IMPORTANT: if the version is "undefined", it means that feature toggle is disabled! + * IMPORTANT: if the version is "undefined", it means that toggle is disabled! * [REDACTED_AUTHOR] */ @JsonClass(generateAdapter = true) -internal data class FeatureToggle( +internal data class Toggle( @Json(name = "name") val name: String, @Json(name = "version") val version: String, ) \ No newline at end of file diff --git a/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/TogglesStorage.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/TogglesStorage.kt new file mode 100644 index 0000000000..43027a29c8 --- /dev/null +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/storage/TogglesStorage.kt @@ -0,0 +1,15 @@ +package com.tangem.core.toggle.storage + +/** + * Component that initializes and stores a list of feature toggles + * +[REDACTED_AUTHOR] + */ +internal interface TogglesStorage { + + /** List of feature toggles */ + val toggles: List + + /** Populate the storage with toggles */ + suspend fun populate(path: String) +} \ No newline at end of file diff --git a/core/toggles/src/main/kotlin/com/tangem/core/toggle/utils/CollectionExt.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/utils/CollectionExt.kt new file mode 100644 index 0000000000..44a378ac2c --- /dev/null +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/utils/CollectionExt.kt @@ -0,0 +1,13 @@ +package com.tangem.core.toggle.utils + +import com.tangem.core.toggle.storage.Toggle +import com.tangem.core.toggle.version.VersionAvailabilityContract + +internal fun List.associateToggles(currentVersion: String): Map { + return associate { localToggle -> + Pair( + first = localToggle.name, + second = VersionAvailabilityContract(currentVersion, localToggle.version), + ) + } +} \ No newline at end of file diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/DefaultVersionProvider.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/DefaultVersionProvider.kt similarity index 96% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/DefaultVersionProvider.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/version/DefaultVersionProvider.kt index c602be463f..e69c13e2eb 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/DefaultVersionProvider.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/DefaultVersionProvider.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.version +package com.tangem.core.toggle.version import android.content.Context import android.content.pm.PackageManager diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/Version.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/Version.kt similarity index 98% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/Version.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/version/Version.kt index b506d80ec4..60b3188565 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/Version.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/Version.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.contract +package com.tangem.core.toggle.version import androidx.annotation.VisibleForTesting import timber.log.Timber diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContract.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionAvailabilityContract.kt similarity index 93% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContract.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionAvailabilityContract.kt index 2ee5c72e14..61f7e8f1e3 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContract.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionAvailabilityContract.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.contract +package com.tangem.core.toggle.version /** * Version contract to evaluate availability of feature toggle diff --git a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/VersionProvider.kt b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionProvider.kt similarity index 74% rename from core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/VersionProvider.kt rename to core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionProvider.kt index 585caf85b8..1df39f1487 100644 --- a/core/featuretoggles/src/main/kotlin/com/tangem/core/featuretoggle/version/VersionProvider.kt +++ b/core/toggles/src/main/kotlin/com/tangem/core/toggle/version/VersionProvider.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.version +package com.tangem.core.toggle.version /** Application version provider */ internal interface VersionProvider { diff --git a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContractTest.kt b/core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionAvailabilityContractTest.kt similarity index 94% rename from core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContractTest.kt rename to core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionAvailabilityContractTest.kt index 476c967367..f9907665f9 100644 --- a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionAvailabilityContractTest.kt +++ b/core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionAvailabilityContractTest.kt @@ -1,6 +1,7 @@ -package com.tangem.core.featuretoggle.contract +package com.tangem.core.toggle.contract import com.google.common.truth.Truth +import com.tangem.core.toggle.version.VersionAvailabilityContract import org.junit.Test /** diff --git a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionTest.kt b/core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionTest.kt similarity index 97% rename from core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionTest.kt rename to core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionTest.kt index f8763c6a00..32c3815325 100644 --- a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/contract/VersionTest.kt +++ b/core/toggles/src/test/kotlin/com/tangem/core/toggle/contract/VersionTest.kt @@ -1,6 +1,7 @@ -package com.tangem.core.featuretoggle.contract +package com.tangem.core.toggle.contract import com.google.common.truth.Truth +import com.tangem.core.toggle.version.Version import org.junit.Test /** diff --git a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManagerTest.kt b/core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/DevTogglesManagerTest.kt similarity index 81% rename from core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManagerTest.kt rename to core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/DevTogglesManagerTest.kt index e0e8fbef2f..31559dc763 100644 --- a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/DevFeatureTogglesManagerTest.kt +++ b/core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/DevTogglesManagerTest.kt @@ -1,11 +1,12 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.manager import android.annotation.SuppressLint import com.google.common.truth.Truth -import com.tangem.core.featuretoggle.storage.FeatureToggle -import com.tangem.core.featuretoggle.storage.FeatureTogglesStorage -import com.tangem.core.featuretoggle.utils.associateToggles -import com.tangem.core.featuretoggle.version.VersionProvider +import com.tangem.core.toggle.feature.impl.DevFeatureTogglesManager +import com.tangem.core.toggle.storage.Toggle +import com.tangem.core.toggle.storage.TogglesStorage +import com.tangem.core.toggle.utils.associateToggles +import com.tangem.core.toggle.version.VersionProvider import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull @@ -19,13 +20,13 @@ import kotlin.collections.set [REDACTED_AUTHOR] */ @SuppressLint("CheckResult") -internal class DevFeatureTogglesManagerTest { +internal class DevTogglesManagerTest { - private val localFeatureTogglesStorage = mockk() + private val localTogglesStorage = mockk() private val appPreferenceStore = mockk(relaxed = true) private val versionProvider = mockk() private val manager = DevFeatureTogglesManager( - localFeatureTogglesStorage = localFeatureTogglesStorage, + localTogglesStorage = localTogglesStorage, appPreferencesStore = appPreferenceStore, versionProvider = versionProvider, ) @@ -34,17 +35,17 @@ internal class DevFeatureTogglesManagerTest { fun `successfully initialize storage if shared prefs kept feature toggles`() = runTest { val currentVersion = "0.1.0" - coEvery { localFeatureTogglesStorage.init() } just Runs + coEvery { localTogglesStorage.populate() } just Runs coEvery { appPreferenceStore.getObjectSyncOrNull>(PreferencesKeys.FEATURE_TOGGLES_KEY) } returns savedFeatureTogglesMap - coEvery { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.toggles } returns localFeatureToggles coEvery { versionProvider.get() } returns currentVersion manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -61,17 +62,17 @@ internal class DevFeatureTogglesManagerTest { fun `successfully initialize storage if shared prefs kept empty list`() = runTest { val currentVersion = "0.1.0" - coEvery { localFeatureTogglesStorage.init() } just Runs + coEvery { localTogglesStorage.populate() } just Runs coEvery { appPreferenceStore.getObjectSyncOrNull>(PreferencesKeys.FEATURE_TOGGLES_KEY) } returns emptyMap() - coEvery { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.toggles } returns localFeatureToggles coEvery { versionProvider.get() } returns currentVersion manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -88,17 +89,17 @@ internal class DevFeatureTogglesManagerTest { fun `successfully initialize storage if shared prefs didn't keep feature toggles`() = runTest { val currentVersion = "0.1.0" - coEvery { localFeatureTogglesStorage.init() } just Runs + coEvery { localTogglesStorage.populate() } just Runs coEvery { appPreferenceStore.getObjectSyncOrNull>(PreferencesKeys.FEATURE_TOGGLES_KEY) } returns null - coEvery { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.toggles } returns localFeatureToggles coEvery { versionProvider.get() } returns currentVersion manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -111,15 +112,15 @@ internal class DevFeatureTogglesManagerTest { @Test fun `successfully initialize storage if versionProvider returns null`() = runTest { - coEvery { localFeatureTogglesStorage.init() } just Runs + coEvery { localTogglesStorage.populate() } just Runs coEvery { appPreferenceStore.getSyncOrNull(PreferencesKeys.FEATURE_TOGGLES_KEY) } returns savedFeatureToggles - coEvery { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.toggles } returns localFeatureToggles coEvery { versionProvider.get() } returns null manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -222,8 +223,8 @@ internal class DevFeatureTogglesManagerTest { ) val localFeatureToggles = listOf( - FeatureToggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), - FeatureToggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), + Toggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), + Toggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), ) } } \ No newline at end of file diff --git a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManagerTest.kt b/core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/ProdTogglesManagerTest.kt similarity index 69% rename from core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManagerTest.kt rename to core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/ProdTogglesManagerTest.kt index 35af42ae54..6b1841cb28 100644 --- a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/manager/ProdFeatureTogglesManagerTest.kt +++ b/core/toggles/src/test/kotlin/com/tangem/core/toggle/manager/ProdTogglesManagerTest.kt @@ -1,11 +1,12 @@ -package com.tangem.core.featuretoggle.manager +package com.tangem.core.toggle.manager import android.content.pm.PackageManager import com.google.common.truth.Truth -import com.tangem.core.featuretoggle.storage.FeatureToggle -import com.tangem.core.featuretoggle.storage.FeatureTogglesStorage -import com.tangem.core.featuretoggle.utils.associateToggles -import com.tangem.core.featuretoggle.version.VersionProvider +import com.tangem.core.toggle.feature.impl.ProdFeatureTogglesManager +import com.tangem.core.toggle.storage.Toggle +import com.tangem.core.toggle.storage.TogglesStorage +import com.tangem.core.toggle.utils.associateToggles +import com.tangem.core.toggle.version.VersionProvider import io.mockk.* import kotlinx.coroutines.test.runTest import org.junit.Test @@ -13,24 +14,24 @@ import org.junit.Test /** [REDACTED_AUTHOR] */ -internal class ProdFeatureTogglesManagerTest { +internal class ProdTogglesManagerTest { - private val localFeatureTogglesStorage = mockk() + private val localTogglesStorage = mockk() private val versionProvider = mockk() - private val manager = ProdFeatureTogglesManager(localFeatureTogglesStorage, versionProvider) + private val manager = ProdFeatureTogglesManager(localTogglesStorage, versionProvider) @Test fun `successfully initialize storage`() = runTest { val currentVersion = "1.0.0" - coEvery { localFeatureTogglesStorage.init() } just Runs - every { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.populate() } just Runs + every { localTogglesStorage.toggles } returns localFeatureToggles every { versionProvider.get() } returns currentVersion manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -40,14 +41,14 @@ internal class ProdFeatureTogglesManagerTest { @Test fun `successfully initialize storage if versionProvider returns null`() = runTest { - coEvery { localFeatureTogglesStorage.init() } just Runs - every { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.populate() } just Runs + every { localTogglesStorage.toggles } returns localFeatureToggles every { versionProvider.get() } returns null manager.init() coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } @@ -56,8 +57,8 @@ internal class ProdFeatureTogglesManagerTest { @Test fun `failure initialize storage if localFeatureTogglesStorage throws exception`() = runTest { - coEvery { localFeatureTogglesStorage.init() } just Runs - every { localFeatureTogglesStorage.featureToggles } throws IllegalStateException( + coEvery { localTogglesStorage.populate() } just Runs + every { localTogglesStorage.toggles } throws IllegalStateException( "Property featureToggles should be initialized before get.", ) @@ -72,14 +73,14 @@ internal class ProdFeatureTogglesManagerTest { Truth.assertThat(it).isInstanceOf(IllegalStateException::class.java) } - coVerifyOrder { localFeatureTogglesStorage.init() } + coVerifyOrder { localTogglesStorage.populate() } verifyAll(inverse = true) { versionProvider.get() } } @Test fun `failure initialize storage if versionProvider throws exception`() = runTest { - coEvery { localFeatureTogglesStorage.init() } just Runs - every { localFeatureTogglesStorage.featureToggles } returns localFeatureToggles + coEvery { localTogglesStorage.populate() } just Runs + every { localTogglesStorage.toggles } returns localFeatureToggles every { versionProvider.get() } throws PackageManager.NameNotFoundException() runCatching { manager.init() } @@ -89,7 +90,7 @@ internal class ProdFeatureTogglesManagerTest { } coVerifyOrder { - localFeatureTogglesStorage.init() + localTogglesStorage.populate() versionProvider.get() } } @@ -122,8 +123,8 @@ internal class ProdFeatureTogglesManagerTest { private companion object { val localFeatureToggles = listOf( - FeatureToggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), - FeatureToggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), + Toggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), + Toggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), ) val disabledFeatureToggles = mapOf( diff --git a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorageTest.kt b/core/toggles/src/test/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorageTest.kt similarity index 74% rename from core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorageTest.kt rename to core/toggles/src/test/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorageTest.kt index 3950e2c649..948f4d8f8e 100644 --- a/core/featuretoggles/src/test/kotlin/com/tangem/core/featuretoggle/storage/LocalFeatureTogglesStorageTest.kt +++ b/core/toggles/src/test/kotlin/com/tangem/core/toggle/storage/LocalTogglesStorageTest.kt @@ -1,4 +1,4 @@ -package com.tangem.core.featuretoggle.storage +package com.tangem.core.toggle.storage import android.annotation.SuppressLint import com.google.common.truth.Truth @@ -16,16 +16,16 @@ import java.io.IOException [REDACTED_AUTHOR] */ @SuppressLint("CheckResult") -internal class LocalFeatureTogglesStorageTest { +internal class LocalTogglesStorageTest { private val assetReader = mockk() private val moshi = mockk() - private val jsonAdapter = mockk>>() + private val jsonAdapter = mockk>>() // Impossible to mockk AssetLoader because it implement inline functions private val assetLoader = AssetLoader(assetReader = assetReader, moshi = moshi) - private val storage = LocalFeatureTogglesStorage(assetLoader) + private val storage = LocalTogglesStorage(assetLoader) @Test fun `successfully initialize storage`() = runTest { @@ -33,14 +33,14 @@ internal class LocalFeatureTogglesStorageTest { everyCreatingMoshiAdapter() returns jsonAdapter everyMappingJson() returns featureToggles - storage.init() + storage.populate() coVerifyOrder { assetReader.read(CONFIG_FILE_NAME) jsonAdapter.fromJson(json) } - Truth.assertThat(storage.featureToggles).containsExactlyElementsIn(featureToggles) + Truth.assertThat(storage.toggles).containsExactlyElementsIn(featureToggles) } @Test @@ -49,33 +49,33 @@ internal class LocalFeatureTogglesStorageTest { everyCreatingMoshiAdapter() returns jsonAdapter everyMappingJson() throws IOException() - storage.init() + storage.populate() coVerifyOrder { assetReader.read(CONFIG_FILE_NAME) jsonAdapter.fromJson(json) } - Truth.assertThat(storage.featureToggles).containsExactlyElementsIn(emptyList()) + Truth.assertThat(storage.toggles).containsExactlyElementsIn(emptyList()) } @Test fun `failure initialize storage if jsonAdapter throws exception`() = runTest { everyReadingJson() throws IOException() - storage.init() + storage.populate() coVerifyOrder { assetReader.read(CONFIG_FILE_NAME) } verifyAll(inverse = true) { jsonAdapter.fromJson(any()) } - Truth.assertThat(storage.featureToggles).containsExactlyElementsIn(emptyList()) + Truth.assertThat(storage.toggles).containsExactlyElementsIn(emptyList()) } private fun everyReadingJson() = coEvery { assetReader.read(CONFIG_FILE_NAME) } private fun everyCreatingMoshiAdapter() = every { - val types = Types.newParameterizedType(List::class.java, FeatureToggle::class.java) - moshi.adapter>(types) + val types = Types.newParameterizedType(List::class.java, Toggle::class.java) + moshi.adapter>(types) } private fun everyMappingJson() = every { jsonAdapter.fromJson(json) } @@ -97,8 +97,8 @@ internal class LocalFeatureTogglesStorageTest { """.trimIndent() val featureToggles = listOf( - FeatureToggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), - FeatureToggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), + Toggle(name = "INACTIVE_TEST_FEATURE_ENABLED", version = "undefined"), + Toggle(name = "ACTIVE2_TEST_FEATURE_ENABLED", version = "1.0.0"), ) } } \ No newline at end of file diff --git a/features/details/impl/build.gradle.kts b/features/details/impl/build.gradle.kts index 9a16bc4892..b38b859e27 100644 --- a/features/details/impl/build.gradle.kts +++ b/features/details/impl/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { /* Project - Core */ implementation(projects.core.decompose) implementation(projects.core.ui) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.analytics) implementation(projects.core.analytics.models) diff --git a/features/disclaimer/impl/build.gradle.kts b/features/disclaimer/impl/build.gradle.kts index d60dcd1885..443b47a2ac 100644 --- a/features/disclaimer/impl/build.gradle.kts +++ b/features/disclaimer/impl/build.gradle.kts @@ -28,7 +28,7 @@ dependencies { /** Core modules */ implementation(projects.core.ui) implementation(projects.core.utils) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.decompose) implementation(projects.common.routing) diff --git a/features/manage-tokens/impl/build.gradle.kts b/features/manage-tokens/impl/build.gradle.kts index 93e730eb6f..896ec5d1c3 100644 --- a/features/manage-tokens/impl/build.gradle.kts +++ b/features/manage-tokens/impl/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { implementation(projects.core.decompose) implementation(projects.core.ui) implementation(projects.common.routing) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.analytics) /* Project - Domain */ diff --git a/features/markets/impl/build.gradle.kts b/features/markets/impl/build.gradle.kts index 94012bfcb8..ee18d8dfb1 100644 --- a/features/markets/impl/build.gradle.kts +++ b/features/markets/impl/build.gradle.kts @@ -63,7 +63,7 @@ dependencies { /* Core */ implementation(projects.core.decompose) implementation(projects.core.ui) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.analytics) implementation(projects.core.analytics.models) diff --git a/features/onboarding-v2/impl/build.gradle.kts b/features/onboarding-v2/impl/build.gradle.kts index 5e2dc1d547..d9d42209ae 100644 --- a/features/onboarding-v2/impl/build.gradle.kts +++ b/features/onboarding-v2/impl/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { implementation(projects.features.onboardingV2.api) /** Core modules */ - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.utils) diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt index fe67d84f57..d677f7e5bf 100644 --- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt +++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/DefaultOnboardingV2FeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.features.onboarding.v2 -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import javax.inject.Inject internal class DefaultOnboardingV2FeatureToggles @Inject constructor( diff --git a/features/onboarding/build.gradle.kts b/features/onboarding/build.gradle.kts index 9f081a463f..480638468a 100644 --- a/features/onboarding/build.gradle.kts +++ b/features/onboarding/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { /** Core modules */ implementation(project(":common")) implementation(project(":domain:models")) - implementation(project(":core:featuretoggles")) + implementation(project(":core:toggles")) implementation(project(":core:datasource")) implementation(project(":core:analytics")) implementation(projects.core.analytics.models) diff --git a/features/onramp/impl/build.gradle.kts b/features/onramp/impl/build.gradle.kts index c97691d146..b6a32faee2 100644 --- a/features/onramp/impl/build.gradle.kts +++ b/features/onramp/impl/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { /** Project - Core */ implementation(projects.core.decompose) implementation(projects.core.ui) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) /** Project - Common */ diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/DefaultOnrampFeatureToggles.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/DefaultOnrampFeatureToggles.kt index 15d7dd6713..2669d201e9 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/DefaultOnrampFeatureToggles.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/DefaultOnrampFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.features.onramp -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager internal class DefaultOnrampFeatureToggles( private val featureTogglesManager: FeatureTogglesManager, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/OnrampFeatureModule.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/OnrampFeatureModule.kt index 6e668e4f69..3392e56a71 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/OnrampFeatureModule.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/OnrampFeatureModule.kt @@ -1,6 +1,8 @@ package com.tangem.features.onramp -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager +import com.tangem.features.onramp.DefaultOnrampFeatureToggles +import com.tangem.features.onramp.OnrampFeatureToggles import dagger.Module import dagger.Provides import dagger.hilt.InstallIn diff --git a/features/push-notifications/impl/build.gradle.kts b/features/push-notifications/impl/build.gradle.kts index a9965b5681..5cb0bfe1d8 100644 --- a/features/push-notifications/impl/build.gradle.kts +++ b/features/push-notifications/impl/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { /** Core modules */ implementation(projects.core.ui) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.analytics) implementation(projects.core.analytics.models) diff --git a/features/send/impl/build.gradle.kts b/features/send/impl/build.gradle.kts index 14e47173a5..1af9e0ba59 100644 --- a/features/send/impl/build.gradle.kts +++ b/features/send/impl/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { implementation(deps.tangem.blockchain) /** Core modules */ - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.ui) implementation(projects.core.utils) implementation(projects.core.navigation) diff --git a/features/staking/impl/build.gradle.kts b/features/staking/impl/build.gradle.kts index 808810f2d7..ed61b2bdcb 100644 --- a/features/staking/impl/build.gradle.kts +++ b/features/staking/impl/build.gradle.kts @@ -40,7 +40,7 @@ dependencies { implementation(deps.tangem.blockchain) /** Core modules */ - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.ui) implementation(projects.core.utils) implementation(projects.core.navigation) diff --git a/features/swap/presentation/build.gradle.kts b/features/swap/presentation/build.gradle.kts index 84cbe75297..23df0ea2f3 100644 --- a/features/swap/presentation/build.gradle.kts +++ b/features/swap/presentation/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { /** Core modules */ implementation(projects.core.analytics) implementation(projects.core.analytics.models) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.utils) implementation(projects.core.ui) diff --git a/features/tester/impl/build.gradle.kts b/features/tester/impl/build.gradle.kts index 0e94a8abeb..6158abaeb9 100644 --- a/features/tester/impl/build.gradle.kts +++ b/features/tester/impl/build.gradle.kts @@ -39,7 +39,7 @@ dependencies { /** Core modules */ implementation(projects.core.datasource) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.ui) implementation(projects.core.utils) implementation(projects.core.navigation) diff --git a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/viewmodels/FeatureTogglesViewModel.kt b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/viewmodels/FeatureTogglesViewModel.kt index 2af75d3b80..34b965c18b 100644 --- a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/viewmodels/FeatureTogglesViewModel.kt +++ b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/featuretoggles/viewmodels/FeatureTogglesViewModel.kt @@ -5,9 +5,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager -import com.tangem.core.featuretoggle.manager.MutableFeatureTogglesManager import com.tangem.core.navigation.finisher.AppFinisher +import com.tangem.core.toggle.feature.FeatureTogglesManager +import com.tangem.core.toggle.feature.MutableFeatureTogglesManager import com.tangem.feature.tester.presentation.featuretoggles.models.TesterFeatureToggle import com.tangem.feature.tester.presentation.featuretoggles.state.FeatureTogglesContentState import com.tangem.feature.tester.presentation.navigation.InnerTesterRouter diff --git a/features/tokendetails/impl/build.gradle.kts b/features/tokendetails/impl/build.gradle.kts index 32efd6bb49..cf37f98aed 100644 --- a/features/tokendetails/impl/build.gradle.kts +++ b/features/tokendetails/impl/build.gradle.kts @@ -54,7 +54,7 @@ dependencies { implementation(projects.core.datasource) implementation(projects.core.deepLinks) implementation(projects.core.deepLinks.global) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.decompose) implementation(projects.common.ui) diff --git a/features/wallet-settings/impl/build.gradle.kts b/features/wallet-settings/impl/build.gradle.kts index e472817d13..5af449e0c1 100644 --- a/features/wallet-settings/impl/build.gradle.kts +++ b/features/wallet-settings/impl/build.gradle.kts @@ -20,7 +20,7 @@ dependencies { /* Project - Core */ implementation(projects.core.decompose) implementation(projects.core.ui) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.analytics) implementation(projects.core.analytics.models) diff --git a/features/wallet/impl/build.gradle.kts b/features/wallet/impl/build.gradle.kts index 6164b3a3cc..4ed8e4e465 100644 --- a/features/wallet/impl/build.gradle.kts +++ b/features/wallet/impl/build.gradle.kts @@ -46,7 +46,7 @@ dependencies { kapt(deps.hilt.kapt) /** Core modules */ - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.navigation) implementation(projects.core.ui) implementation(projects.core.utils) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/featuretoggles/DefaultWalletFeatureToggles.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/featuretoggles/DefaultWalletFeatureToggles.kt index cda1776fc1..b32cabf35d 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/featuretoggles/DefaultWalletFeatureToggles.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/featuretoggles/DefaultWalletFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.feature.wallet.featuretoggles -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles import javax.inject.Inject diff --git a/libs/blockchain-sdk/build.gradle.kts b/libs/blockchain-sdk/build.gradle.kts index 47b65e7313..864077c492 100644 --- a/libs/blockchain-sdk/build.gradle.kts +++ b/libs/blockchain-sdk/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { // region Core modules implementation(projects.core.datasource) - implementation(projects.core.featuretoggles) + implementation(projects.core.toggles) implementation(projects.core.utils) // endregion diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt index de38a2241f..5e75ba18ed 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt @@ -9,7 +9,7 @@ import com.tangem.blockchainsdk.datastorage.DefaultBlockchainDataStorage import com.tangem.blockchainsdk.featuretoggles.DefaultBlockchainSDKFeatureToggles import com.tangem.blockchainsdk.loader.BlockchainProvidersResponseLoader import com.tangem.blockchainsdk.store.DefaultRuntimeStore -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.preferences.AppPreferencesStore diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/featuretoggles/DefaultBlockchainSDKFeatureToggles.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/featuretoggles/DefaultBlockchainSDKFeatureToggles.kt index 29df94634c..99a4bfeaa0 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/featuretoggles/DefaultBlockchainSDKFeatureToggles.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/featuretoggles/DefaultBlockchainSDKFeatureToggles.kt @@ -1,6 +1,6 @@ package com.tangem.blockchainsdk.featuretoggles -import com.tangem.core.featuretoggle.manager.FeatureTogglesManager +import com.tangem.core.toggle.feature.FeatureTogglesManager internal class DefaultBlockchainSDKFeatureToggles( private val featureTogglesManager: FeatureTogglesManager, diff --git a/settings.gradle.kts b/settings.gradle.kts index f915fb1945..a84de9b176 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -127,7 +127,7 @@ include(":common:routing") include(":core:analytics") include(":core:analytics:models") include(":core:datasource") -include(":core:featuretoggles") +include(":core:toggles") include(":core:navigation") include(":core:res") include(":core:ui")