From e4e0dbdea132cd3a559594c356846d24addfbede Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 17 Dec 2024 18:34:41 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../impl/DefaultExcludedBlockchainsManager.kt | 52 ++++++++++--------- .../local/preferences/PreferencesKeys.kt | 2 +- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DefaultExcludedBlockchainsManager.kt b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DefaultExcludedBlockchainsManager.kt index 8c208bae34..0a260230e9 100644 --- a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DefaultExcludedBlockchainsManager.kt +++ b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DefaultExcludedBlockchainsManager.kt @@ -6,8 +6,8 @@ import com.tangem.core.configtoggle.utils.associateToggles import com.tangem.core.configtoggle.version.VersionProvider import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys -import com.tangem.datasource.local.preferences.utils.getSyncOrDefault -import com.tangem.datasource.local.preferences.utils.store +import com.tangem.datasource.local.preferences.utils.getObjectMapSync +import com.tangem.datasource.local.preferences.utils.storeObjectMap internal class DefaultExcludedBlockchainsManager( private val localTogglesStorage: TogglesStorage, @@ -17,62 +17,64 @@ internal class DefaultExcludedBlockchainsManager( private var isInitialized: Boolean = false - private lateinit var currentExcludedBlockchainsIds: Set - private lateinit var localExcludedBlockchainsIds: Set + private lateinit var currentExcludedBlockchains: MutableMap + private lateinit var localExcludedBlockchains: Map override val excludedBlockchainsIds: Set get() { if (!isInitialized) error("ExcludedBlockchainsManager is not initialized") - return currentExcludedBlockchainsIds + return currentExcludedBlockchains + .filterValues { it } + .keys } override suspend fun init() { localTogglesStorage.populate(path = "configs/excluded_blockchains_config") - val storedExcludedBlockchainsIds = appPreferencesStore.getSyncOrDefault( + val storedExcludedBlockchainsIds = appPreferencesStore.getObjectMapSync( key = PreferencesKeys.EXCLUDED_BLOCKCHAINS_KEY, - default = emptySet(), ) - localExcludedBlockchainsIds = localTogglesStorage.toggles + localExcludedBlockchains = localTogglesStorage.toggles .associateToggles(currentVersion = versionProvider.get().orEmpty()) - .filterValues { isIncluded -> !isIncluded } - .keys + .mapValues { (_, isIncluded) -> !isIncluded } - if (storedExcludedBlockchainsIds.isEmpty()) { - recoverLocalConfig() - } else { - currentExcludedBlockchainsIds = storedExcludedBlockchainsIds - } + currentExcludedBlockchains = (localExcludedBlockchains.keys + storedExcludedBlockchainsIds.keys) + .fold(mutableMapOf()) { acc, blockchainId -> + val isExcluded = storedExcludedBlockchainsIds[blockchainId] ?: localExcludedBlockchains[blockchainId] + + requireNotNull(isExcluded) { + "Unable to find $blockchainId in local or stored excluded blockchains" + } + + acc[blockchainId] = isExcluded + acc + } isInitialized = true } override suspend fun excludeBlockchain(mainnetId: String, isExcluded: Boolean) { - if (isExcluded) { - currentExcludedBlockchainsIds += mainnetId - } else { - currentExcludedBlockchainsIds -= mainnetId - } + currentExcludedBlockchains[mainnetId] = isExcluded storeCurrent() } override fun isMatchLocalConfig(): Boolean { - return currentExcludedBlockchainsIds == localExcludedBlockchainsIds + return currentExcludedBlockchains == localExcludedBlockchains } override suspend fun recoverLocalConfig() { - currentExcludedBlockchainsIds = localExcludedBlockchainsIds + currentExcludedBlockchains = localExcludedBlockchains.toMutableMap() storeCurrent() } private suspend fun storeCurrent() { - appPreferencesStore.store( - PreferencesKeys.EXCLUDED_BLOCKCHAINS_KEY, - currentExcludedBlockchainsIds, + appPreferencesStore.storeObjectMap( + key = PreferencesKeys.EXCLUDED_BLOCKCHAINS_KEY, + value = currentExcludedBlockchains, ) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt index df2f985c7d..0e9a1885e9 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt @@ -55,7 +55,7 @@ object PreferencesKeys { val FEATURE_TOGGLES_KEY by lazy { stringPreferencesKey(name = "featureToggles") } - val EXCLUDED_BLOCKCHAINS_KEY by lazy { stringSetPreferencesKey(name = "excludedBlockchains") } + val EXCLUDED_BLOCKCHAINS_KEY by lazy { stringPreferencesKey(name = "excludedBlockchainsV2") } val WAS_TWINS_ONBOARDING_SHOWN by lazy { booleanPreferencesKey(name = "twinsOnboardingShown") }