From 50332186faedca6214855cd14d1058db3bde45c1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Jul 2026 17:45:25 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../kotlin/com/tangem/common/BaseTestCase.kt | 11 ---- .../appsflyer/AppsFlyerDeeplinkRouter.kt | 13 ----- .../di/domain/DynamicAddressesDomainModule.kt | 7 +-- .../tap/di/domain/TransactionDomainModule.kt | 3 - .../appsflyer/AppsFlyerDeeplinkRouterTest.kt | 22 +------ .../configs/feature_toggles_config.json | 36 ------------ .../FeatureTogglesNamingConventionTest.kt | 5 -- .../DefaultWalletAccountsResponseFactory.kt | 12 ++-- ...efaultWalletAccountsResponseFactoryTest.kt | 58 +------------------ .../DefaultDynamicAddressesFeatureToggles.kt | 13 ----- .../DefaultDynamicAddressesRepository.kt | 3 - .../DynamicAddressesInitializer.kt | 4 -- .../di/DynamicAddressesDataModule.kt | 13 ----- .../DefaultDynamicAddressesRepositoryTest.kt | 28 +-------- .../DefaultColdMapDerivationsRepository.kt | 6 +- .../hot/DefaultHotMapDerivationsRepository.kt | 6 +- .../DynamicAddressesFeatureToggles.kt | 6 -- .../IsDynamicAddressesAvailableUseCase.kt | 5 +- .../IsDynamicAddressesAvailableUseCaseTest.kt | 15 +---- .../usecase/ReceiveAddressesFactory.kt | 3 - .../usecase/ReceiveAddressesFactoryTest.kt | 4 -- .../txhistory/TxHistoryFeatureToggles.kt | 1 - .../hotwallet/HotWalletFeatureToggles.kt | 5 -- .../DefaultHotWalletFeatureToggles.kt | 12 ---- .../HotAccessCodeRequestModel.kt | 6 +- .../model/AddExistingWalletImportModel.kt | 6 +- .../hotwallet/di/HotWalletFeatureModule.kt | 21 ------- .../forgetwallet/ForgetWalletModel.kt | 6 +- .../HotAccessCodeRequestModelTest.kt | 5 -- ...aultCustomTokenDerivationInputComponent.kt | 3 - .../DynamicAddressesDerivationValidator.kt | 3 - .../di/DefaultTxHistoryFeatureToggles.kt | 3 - .../model/WalletSettingsModel.kt | 4 +- .../featuretoggles/WalletFeatureToggles.kt | 2 - .../wallet/child/wallet/model/WalletModel.kt | 11 +--- .../DefaultWalletFeatureToggles.kt | 3 - .../domain/GetMultiWalletWarningsFactory.kt | 7 +-- .../domain/GetWalletNotificationsFactory.kt | 4 +- .../implementors/MultiWalletContentLoader.kt | 4 +- .../transformers/AddWalletTransformer.kt | 2 - .../InitializeWalletsTransformer.kt | 16 ++--- .../ReinitializeNewWalletTransformer.kt | 2 - .../ReinitializeWalletTransformer.kt | 2 - .../transformers/UnlockWalletTransformer.kt | 2 - .../state/utils/WalletLoadingStateFactory.kt | 25 ++------ .../WalletManagerFactoryCreator.kt | 9 +-- .../di/BlockchainSDKFactoryModule.kt | 9 --- 47 files changed, 38 insertions(+), 408 deletions(-) delete mode 100644 data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesFeatureToggles.kt delete mode 100644 domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/DynamicAddressesFeatureToggles.kt delete mode 100644 features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt delete mode 100644 features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt delete mode 100644 features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/di/HotWalletFeatureModule.kt diff --git a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt index ec79f8fc29..a7213a50ec 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt @@ -194,21 +194,10 @@ abstract class BaseTestCase : TestCase( "SWAP_REDESIGN_ENABLED" to false, "ACCOUNTS_FEATURE_ENABLED" to true, "MAIN_SCREEN_QR_SCANNING_ENABLED" to true, - "ASSETS_DISCOVERY_ENABLED" to true, "VISA_ONBOARDING_ENABLED" to true, // Version-gated toggles released in versions <= 6.0 — forced on so tests run against the actual // build even when the app version resolves to 1.0.0-SNAPSHOT on CI (then 1.0.0 < x.xx would // disable them). On the releases/6.0 branch every toggle with version <= 6.0 ships enabled. - // 5.37 - "HEDERA_ERC20_ENABLED" to true, - // 5.39 - "DYNAMIC_ADDRESSES_ENABLED" to true, - "SOLANA_TX_HISTORY_ENABLED" to true, - "SOLANA_SCALED_UI_AMOUNT_ENABLED" to true, - "AND_15310_ADD_FUNDS_STAGE1" to true, - "AND_15101_TANGEM_PAY_HOT_WALLET_ONBOARDING" to true, - "AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED" to true, - "TWI_1512_HIDE_STORIES_FOR_REFERRAL_ENABLED" to true, // 5.40 "TWI_1377_MANAGE_FUNDS" to true, // 6.0 diff --git a/app/src/main/java/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouter.kt b/app/src/main/java/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouter.kt index 7b560adc5e..41eb6ebd80 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouter.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouter.kt @@ -2,8 +2,6 @@ package com.tangem.tap.common.analytics.appsflyer import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter -import com.tangem.core.configtoggle.FeatureToggles -import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.domain.appsflyer.AppsFlyerDeeplink import com.tangem.domain.appsflyer.usecase.ClearAppsFlyerDeeplinkUseCase @@ -29,7 +27,6 @@ class AppsFlyerDeeplinkRouter @Inject constructor( private val appsFlyerStore: AppsFlyerStore, private val userWalletsListRepository: UserWalletsListRepository, private val clearAppsFlyerDeeplinkUseCase: ClearAppsFlyerDeeplinkUseCase, - private val featureTogglesManager: FeatureTogglesManager, private val appRouter: AppRouter, ) { @@ -54,11 +51,6 @@ class AppsFlyerDeeplinkRouter @Inject constructor( } private suspend fun routeTangemPayOnboarding(currentRoute: AppRoute) { - val isEnabled = featureTogglesManager.isFeatureEnabled( - FeatureToggles.AND_15101_TANGEM_PAY_HOT_WALLET_ONBOARDING, - ) - if (!isEnabled) return - // Not on an idle entry screen yet: keep the deep link pending, re-evaluate on next route change. if (!isIdleEntryPoint(currentRoute)) return @@ -76,11 +68,6 @@ class AppsFlyerDeeplinkRouter @Inject constructor( } private suspend fun routeReferral(currentRoute: AppRoute) { - val isEnabled = featureTogglesManager.isFeatureEnabled( - FeatureToggles.TWI_1512_HIDE_STORIES_FOR_REFERRAL_ENABLED, - ) - if (!isEnabled) return - // Referral targets fresh installs: from an idle entry screen, go straight to hot wallet creation // (skips stories). The deep link is NOT cleared here — it stays as referral attribution (read by // IsReferralInstallUseCase, cleared on wallet creation); replaceAll keeps it off the back stack. diff --git a/app/src/main/java/com/tangem/tap/di/domain/DynamicAddressesDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/DynamicAddressesDomainModule.kt index e1323551b4..d366fe452a 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/DynamicAddressesDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/DynamicAddressesDomainModule.kt @@ -1,7 +1,6 @@ package com.tangem.tap.di.domain import com.tangem.domain.dynamicaddresses.CreateConsolidationTransactionUseCase -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.EnableDynamicAddressesUseCase import com.tangem.domain.dynamicaddresses.GetDynamicAddressesStatusUseCase import com.tangem.domain.dynamicaddresses.GetDynamicReceiveAddressUseCase @@ -71,10 +70,8 @@ internal object DynamicAddressesDomainModule { @Provides @Singleton - fun provideIsDynamicAddressesAvailableUseCase( - featureToggles: DynamicAddressesFeatureToggles, - ): IsDynamicAddressesAvailableUseCase { - return IsDynamicAddressesAvailableUseCase(featureToggles) + fun provideIsDynamicAddressesAvailableUseCase(): IsDynamicAddressesAvailableUseCase { + return IsDynamicAddressesAvailableUseCase() } @Provides diff --git a/app/src/main/java/com/tangem/tap/di/domain/TransactionDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/TransactionDomainModule.kt index 890e24c01b..c5ed2859ba 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/TransactionDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/TransactionDomainModule.kt @@ -8,7 +8,6 @@ import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.core.configtoggle.FeatureToggles import com.tangem.core.configtoggle.feature.FeatureTogglesManager -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.GetDynamicReceiveAddressUseCase import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository import com.tangem.domain.transaction.GaslessYieldRepository @@ -287,7 +286,6 @@ internal object TransactionDomainModule { getViewedTokenReceiveWarningUseCase: GetViewedTokenReceiveWarningUseCase, getDynamicReceiveAddressUseCase: GetDynamicReceiveAddressUseCase, dynamicAddressesRepository: DynamicAddressesRepository, - dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, userWalletsListRepository: UserWalletsListRepository, ): ReceiveAddressesFactory { return ReceiveAddressesFactory( @@ -295,7 +293,6 @@ internal object TransactionDomainModule { getViewedTokenReceiveWarningUseCase = getViewedTokenReceiveWarningUseCase, getDynamicReceiveAddressUseCase = getDynamicReceiveAddressUseCase, dynamicAddressesRepository = dynamicAddressesRepository, - dynamicAddressesFeatureToggles = dynamicAddressesFeatureToggles, userWalletsListRepository = userWalletsListRepository, ) } diff --git a/app/src/test/kotlin/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouterTest.kt b/app/src/test/kotlin/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouterTest.kt index 006a465704..4f359f82ba 100644 --- a/app/src/test/kotlin/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouterTest.kt +++ b/app/src/test/kotlin/com/tangem/tap/common/analytics/appsflyer/AppsFlyerDeeplinkRouterTest.kt @@ -3,7 +3,6 @@ package com.tangem.tap.common.analytics.appsflyer import com.google.common.truth.Truth.assertThat import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter -import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.domain.appsflyer.usecase.ClearAppsFlyerDeeplinkUseCase import com.tangem.domain.common.wallets.UserWalletsListRepository @@ -33,14 +32,12 @@ internal class AppsFlyerDeeplinkRouterTest { private val appsFlyerStore: AppsFlyerStore = mockk() private val userWalletsListRepository: UserWalletsListRepository = mockk() private val clearAppsFlyerDeeplinkUseCase: ClearAppsFlyerDeeplinkUseCase = mockk(relaxed = true) - private val featureTogglesManager: FeatureTogglesManager = mockk() private val appRouter: AppRouter = mockk(relaxed = true) private val router = AppsFlyerDeeplinkRouter( appsFlyerStore = appsFlyerStore, userWalletsListRepository = userWalletsListRepository, clearAppsFlyerDeeplinkUseCase = clearAppsFlyerDeeplinkUseCase, - featureTogglesManager = featureTogglesManager, appRouter = appRouter, ) @@ -50,11 +47,9 @@ internal class AppsFlyerDeeplinkRouterTest { appsFlyerStore, userWalletsListRepository, clearAppsFlyerDeeplinkUseCase, - featureTogglesManager, appRouter, ) - // Happy baseline: feature on, deep link pending, authorized. - every { featureTogglesManager.isFeatureEnabled(any()) } returns true + // Happy baseline: deep link pending, authorized. every { appsFlyerStore.observeNavigationDeeplink() } returns flowOf("tpay_mobileonboard") coEvery { userWalletsListRepository.userWalletsSync() } returns listOf(mockk()) } @@ -161,20 +156,5 @@ internal class AppsFlyerDeeplinkRouterTest { verify(exactly = 0) { appRouter.push(any(), any()) } } - @Test - fun `GIVEN feature disabled WHEN observe THEN does not navigate`() = runTest(UnconfinedTestDispatcher()) { - // Arrange - every { featureTogglesManager.isFeatureEnabled(any()) } returns false - val currentRoute = MutableStateFlow(AppRoute.Wallet) - - // Act - router.observe(backgroundScope, currentRoute) - advanceUntilIdle() - - // Assert - coVerify(exactly = 0) { userWalletsListRepository.userWalletsSync() } - verify(exactly = 0) { appRouter.push(any(), any()) } - } - // endregion } \ No newline at end of file diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index 7a08104191..51ef362a67 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -23,30 +23,10 @@ "name": "APP_REDESIGN_ENABLED", "version": "6.0" }, - { - "name": "DYNAMIC_ADDRESSES_ENABLED", - "version": "5.39" - }, { "name": "VIRTUAL_ACCOUNTS_ENABLED", "version": "undefined" }, - { - "name": "ASSETS_DISCOVERY_ENABLED", - "version": "5.38" - }, - { - "name": "SOLANA_TX_HISTORY_ENABLED", - "version": "5.39" - }, - { - "name": "SOLANA_SCALED_UI_AMOUNT_ENABLED", - "version": "5.39" - }, - { - "name": "HEDERA_ERC20_ENABLED", - "version": "5.37" - }, { "name": "WALLET_CONNECT_BITCOIN_ENABLED", "version": "undefined" @@ -75,26 +55,10 @@ "name": "AND_15596_ONBOARDING_PUSH_NOTIFICATION_DOUBLE_ASK_AB_ENABLED", "version": "6.0" }, - { - "name": "AND_15310_ADD_FUNDS_STAGE1", - "version": "5.39" - }, { "name": "TWI_1377_MANAGE_FUNDS", "version": "6.0" }, - { - "name": "AND_15101_TANGEM_PAY_HOT_WALLET_ONBOARDING", - "version": "5.39" - }, - { - "name": "AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED", - "version": "5.39" - }, - { - "name": "TWI_1512_HIDE_STORIES_FOR_REFERRAL_ENABLED", - "version": "5.39" - }, { "name": "AND_15438_BACKEND_AUTHENTICATION_ENABLED", "version": "undefined" diff --git a/core/config-toggles/src/test/kotlin/com/tangem/core/configtoggle/feature/FeatureTogglesNamingConventionTest.kt b/core/config-toggles/src/test/kotlin/com/tangem/core/configtoggle/feature/FeatureTogglesNamingConventionTest.kt index cf06016949..73c3b4de0b 100644 --- a/core/config-toggles/src/test/kotlin/com/tangem/core/configtoggle/feature/FeatureTogglesNamingConventionTest.kt +++ b/core/config-toggles/src/test/kotlin/com/tangem/core/configtoggle/feature/FeatureTogglesNamingConventionTest.kt @@ -40,12 +40,7 @@ internal class FeatureTogglesNamingConventionTest { val EXCLUDED_TOGGLES_LIST = setOf( "ADDRESS_SYNC_ENABLED", "APP_REDESIGN_ENABLED", - "ASSETS_DISCOVERY_ENABLED", - "DYNAMIC_ADDRESSES_ENABLED", - "HEDERA_ERC20_ENABLED", "NEW_CARD_SCANNING_ENABLED", - "SOLANA_SCALED_UI_AMOUNT_ENABLED", - "SOLANA_TX_HISTORY_ENABLED", "VIRTUAL_ACCOUNTS_ENABLED", "VISA_ONBOARDING_ENABLED", "WALLET_CONNECT_BITCOIN_ENABLED", diff --git a/data/account/src/main/kotlin/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactory.kt b/data/account/src/main/kotlin/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactory.kt index 785e102825..16a5b7256e 100644 --- a/data/account/src/main/kotlin/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactory.kt +++ b/data/account/src/main/kotlin/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactory.kt @@ -1,8 +1,6 @@ package com.tangem.data.account.utils import com.tangem.blockchain.common.Blockchain -import com.tangem.core.configtoggle.FeatureToggles -import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.data.account.converter.CryptoPortfolioConverter import com.tangem.data.common.currency.UserTokensResponseFactory import com.tangem.data.common.network.NetworkFactory @@ -34,7 +32,6 @@ internal class DefaultWalletAccountsResponseFactory @Inject constructor( private val cryptoPortfolioCF: CryptoPortfolioConverter.Factory, private val userTokensResponseFactory: UserTokensResponseFactory, private val networkFactory: NetworkFactory, - private val featureTogglesManager: FeatureTogglesManager, ) { fun create(userWalletId: UserWalletId, userTokensResponse: UserTokensResponse?): GetWalletAccountsResponse { @@ -79,11 +76,10 @@ internal class DefaultWalletAccountsResponseFactory @Inject constructor( private fun UserWallet.extraDefaultBlockchains(): List { val batchId = (this as? UserWallet.Cold)?.scanResponse?.card?.batchId ?: return emptyList() - return when { - batchId == ADI_PROMO_BATCH_ID && - featureTogglesManager.isFeatureEnabled(FeatureToggles.AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED) -> - listOf(Blockchain.Adi) - else -> emptyList() + return if (batchId == ADI_PROMO_BATCH_ID) { + listOf(Blockchain.Adi) + } else { + emptyList() } } diff --git a/data/account/src/test/java/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactoryTest.kt b/data/account/src/test/java/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactoryTest.kt index 76d6f4b213..d246997397 100644 --- a/data/account/src/test/java/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactoryTest.kt +++ b/data/account/src/test/java/com/tangem/data/account/utils/DefaultWalletAccountsResponseFactoryTest.kt @@ -2,8 +2,6 @@ package com.tangem.data.account.utils import com.google.common.truth.Truth import com.tangem.blockchain.common.Blockchain -import com.tangem.core.configtoggle.FeatureToggles -import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.data.account.converter.CryptoPortfolioConverter import com.tangem.data.account.converter.createWalletAccountDTO import com.tangem.data.account.utils.GetWalletAccountsResponseExtTest.Companion.createUserToken @@ -35,14 +33,12 @@ class DefaultWalletAccountsResponseFactoryTest { private val cryptoPortfolioConverter = mockk() private val userTokensResponseFactory = mockk() private val networkFactory = mockk() - private val featureTogglesManager = mockk() private val factory = DefaultWalletAccountsResponseFactory( userWalletsListRepository = userWalletsListRepository, cryptoPortfolioCF = cryptoPortfolioCF, userTokensResponseFactory = userTokensResponseFactory, networkFactory = networkFactory, - featureTogglesManager = featureTogglesManager, ) private val userWalletId = UserWalletId("011") @@ -221,7 +217,7 @@ class DefaultWalletAccountsResponseFactoryTest { } @Test - fun `create passes ADI as extra blockchain when batch is BB000053 and toggle is on`() = runTest { + fun `create passes ADI as extra blockchain when batch is BB000053`() = runTest { // Arrange val userWallet = mockk(relaxed = true) { every { walletId } returns userWalletId @@ -229,9 +225,6 @@ class DefaultWalletAccountsResponseFactoryTest { } every { userWalletsListRepository.userWallets } returns MutableStateFlow(listOf(userWallet)) - every { - featureTogglesManager.isFeatureEnabled(FeatureToggles.AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED) - } returns true val accounts = AccountList.empty(userWallet.walletId).accounts .filterIsInstance() @@ -265,51 +258,7 @@ class DefaultWalletAccountsResponseFactoryTest { } @Test - fun `create passes no extra blockchains when batch is BB000053 but toggle is off`() = runTest { - // Arrange - val userWallet = mockk(relaxed = true) { - every { walletId } returns userWalletId - every { scanResponse.card.batchId } returns "BB000053" - } - - every { userWalletsListRepository.userWallets } returns MutableStateFlow(listOf(userWallet)) - every { - featureTogglesManager.isFeatureEnabled(FeatureToggles.AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED) - } returns false - - val accounts = AccountList.empty(userWallet.walletId).accounts - .filterIsInstance() - val defaultResponse = UserTokensResponse( - group = UserTokensResponse.GroupType.NETWORK, - sort = UserTokensResponse.SortType.BALANCE, - tokens = emptyList(), - ) - every { - userTokensResponseFactory.createDefaultResponse( - userWallet = userWallet, - networkFactory = networkFactory, - accountId = accounts.first().accountId, - extraBlockchains = emptyList(), - ) - } returns defaultResponse - every { cryptoPortfolioConverter.convertListBack(accounts) } returns emptyList() - - // Act - factory.create(userWalletId, null) - - // Assert - coVerifyOrder { - userTokensResponseFactory.createDefaultResponse( - userWallet = userWallet, - networkFactory = networkFactory, - accountId = accounts.first().accountId, - extraBlockchains = emptyList(), - ) - } - } - - @Test - fun `create passes no extra blockchains when batch is not BB000053 even if toggle is on`() = runTest { + fun `create passes no extra blockchains when batch is not BB000053`() = runTest { // Arrange val userWallet = mockk(relaxed = true) { every { walletId } returns userWalletId @@ -317,9 +266,6 @@ class DefaultWalletAccountsResponseFactoryTest { } every { userWalletsListRepository.userWallets } returns MutableStateFlow(listOf(userWallet)) - every { - featureTogglesManager.isFeatureEnabled(FeatureToggles.AND_15402_ADI_MAIN_SCREEN_DEFAULT_ENABLED) - } returns true val accounts = AccountList.empty(userWallet.walletId).accounts .filterIsInstance() diff --git a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesFeatureToggles.kt b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesFeatureToggles.kt deleted file mode 100644 index 83680d2320..0000000000 --- a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesFeatureToggles.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tangem.data.dynamicaddresses - -import com.tangem.core.configtoggle.FeatureToggles -import com.tangem.core.configtoggle.feature.FeatureTogglesManager -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles - -internal class DefaultDynamicAddressesFeatureToggles( - private val featureTogglesManager: FeatureTogglesManager, -) : DynamicAddressesFeatureToggles { - - override val isDynamicAddressesEnabled: Boolean - get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.DYNAMIC_ADDRESSES_ENABLED) -} \ No newline at end of file diff --git a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepository.kt b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepository.kt index 7342b9439d..3040c3ea17 100644 --- a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepository.kt +++ b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepository.kt @@ -6,7 +6,6 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse import com.tangem.domain.account.repository.AccountsCRUDRepository import com.tangem.domain.dynamicaddresses.DynamicAddressesDerivationChecker -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.DynamicAddressesSupportedBlockchains import com.tangem.domain.dynamicaddresses.GetDerivedXpubUseCase import com.tangem.domain.dynamicaddresses.model.DynamicAddressesStatus @@ -35,7 +34,6 @@ internal class DefaultDynamicAddressesRepository( private val walletAccountsSaver: WalletAccountsSaver, private val accountsCRUDRepository: AccountsCRUDRepository, private val walletManagersFacade: WalletManagersFacade, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, private val getDerivedXpubUseCase: GetDerivedXpubUseCase, private val dispatchers: CoroutineDispatcherProvider, ) : DynamicAddressesRepository { @@ -107,7 +105,6 @@ internal class DefaultDynamicAddressesRepository( } override fun hasFundsOnAdditionalAddresses(userWalletId: UserWalletId, network: Network): Flow { - if (!dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) return flowOf(false) if (!DynamicAddressesSupportedBlockchains.isSupportedByNetworkId(network.id.rawId.value)) return flowOf(false) return getStatus(userWalletId, network) diff --git a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DynamicAddressesInitializer.kt b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DynamicAddressesInitializer.kt index 903a2b4575..8e228f070e 100644 --- a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DynamicAddressesInitializer.kt +++ b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/DynamicAddressesInitializer.kt @@ -2,7 +2,6 @@ package com.tangem.data.dynamicaddresses import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.common.wallets.getSyncOrNull -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.DynamicAddressesSupportedBlockchains import com.tangem.domain.dynamicaddresses.GetDerivedXpubUseCase import com.tangem.domain.dynamicaddresses.model.DynamicAddressesStatus @@ -22,14 +21,11 @@ import javax.inject.Singleton @Singleton class DynamicAddressesInitializer @Inject constructor( private val dynamicAddressesRepository: DynamicAddressesRepository, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, private val getDerivedXpubUseCase: GetDerivedXpubUseCase, private val userWalletsListRepository: UserWalletsListRepository, ) { suspend fun getXpubs(userWalletId: UserWalletId, networks: Set): Map { - if (!dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) return emptyMap() - /* * Dynamic addresses rely on the server-side wallet accounts list, which is populated only for * multi-currency wallets. Single-currency wallets (Note, s2c, etc.) never populate it, so diff --git a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/di/DynamicAddressesDataModule.kt b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/di/DynamicAddressesDataModule.kt index 141f6a756e..aa227ea8bc 100644 --- a/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/di/DynamicAddressesDataModule.kt +++ b/data/dynamic-addresses/src/main/java/com/tangem/data/dynamicaddresses/di/DynamicAddressesDataModule.kt @@ -1,13 +1,10 @@ package com.tangem.data.dynamicaddresses.di -import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.data.common.account.WalletAccountsSaver import com.tangem.data.dynamicaddresses.DefaultConsolidationRepository import com.tangem.domain.account.repository.AccountsCRUDRepository -import com.tangem.data.dynamicaddresses.DefaultDynamicAddressesFeatureToggles import com.tangem.data.dynamicaddresses.DefaultDynamicAddressesRepository -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.GetDerivedXpubUseCase import com.tangem.domain.dynamicaddresses.repository.ConsolidationRepository import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository @@ -30,7 +27,6 @@ internal object DynamicAddressesDataModule { walletAccountsSaver: WalletAccountsSaver, accountsCRUDRepository: AccountsCRUDRepository, walletManagersFacade: WalletManagersFacade, - dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, getDerivedXpubUseCase: GetDerivedXpubUseCase, dispatchers: CoroutineDispatcherProvider, ): DynamicAddressesRepository { @@ -39,20 +35,11 @@ internal object DynamicAddressesDataModule { walletAccountsSaver = walletAccountsSaver, accountsCRUDRepository = accountsCRUDRepository, walletManagersFacade = walletManagersFacade, - dynamicAddressesFeatureToggles = dynamicAddressesFeatureToggles, getDerivedXpubUseCase = getDerivedXpubUseCase, dispatchers = dispatchers, ) } - @Provides - @Singleton - fun provideDynamicAddressesFeatureToggles( - featureTogglesManager: FeatureTogglesManager, - ): DynamicAddressesFeatureToggles { - return DefaultDynamicAddressesFeatureToggles(featureTogglesManager = featureTogglesManager) - } - @Provides @Singleton fun provideConsolidationRepository( diff --git a/data/dynamic-addresses/src/test/kotlin/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepositoryTest.kt b/data/dynamic-addresses/src/test/kotlin/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepositoryTest.kt index 4202bd889b..dfe51a8e1a 100644 --- a/data/dynamic-addresses/src/test/kotlin/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepositoryTest.kt +++ b/data/dynamic-addresses/src/test/kotlin/com/tangem/data/dynamicaddresses/DefaultDynamicAddressesRepositoryTest.kt @@ -6,7 +6,6 @@ import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.data.common.account.WalletAccountsSaver import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse import com.tangem.domain.account.repository.AccountsCRUDRepository -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.GetDerivedXpubUseCase import com.tangem.domain.models.network.Network import com.tangem.domain.models.wallet.UserWalletId @@ -32,7 +31,6 @@ class DefaultDynamicAddressesRepositoryTest { private val walletAccountsSaver: WalletAccountsSaver = mockk(relaxed = true) private val accountsCRUDRepository: AccountsCRUDRepository = mockk(relaxed = true) private val walletManagersFacade: WalletManagersFacade = mockk(relaxed = true) - private val featureToggles: DynamicAddressesFeatureToggles = mockk(relaxed = true) private val getDerivedXpubUseCase: GetDerivedXpubUseCase = mockk(relaxed = true) private val userWalletId: UserWalletId = mockk(relaxed = true) @@ -49,7 +47,7 @@ class DefaultDynamicAddressesRepositoryTest { @BeforeEach fun setUp() { - clearMocks(walletManagersFacade, featureToggles, getDerivedXpubUseCase, answers = false) + clearMocks(walletManagersFacade, getDerivedXpubUseCase, answers = false) // Empty response → findToken returns null → getStatus emits DISABLED. val emptyResponse = mockk(relaxed = true) { every { accounts } returns emptyList() @@ -63,31 +61,14 @@ class DefaultDynamicAddressesRepositoryTest { walletAccountsSaver = walletAccountsSaver, accountsCRUDRepository = accountsCRUDRepository, walletManagersFacade = walletManagersFacade, - dynamicAddressesFeatureToggles = featureToggles, getDerivedXpubUseCase = getDerivedXpubUseCase, dispatchers = dispatchers, ) } @Test - fun `GIVEN feature toggle off WHEN collect THEN probe is never called and flow emits false`() = runTest { + fun `GIVEN xpub is null WHEN collect THEN probe is not called AND cache is empty`() = runTest { // GIVEN - every { featureToggles.isDynamicAddressesEnabled } returns false - - // WHEN - val values = repository.hasFundsOnAdditionalAddresses(userWalletId, network).toList() - - // THEN - assertThat(values).doesNotContain(true) - coVerify(exactly = 0) { - walletManagersFacade.probeHasFundsOnAdditionalAddresses(any(), any(), any()) - } - } - - @Test - fun `GIVEN toggle on AND xpub is null WHEN collect THEN probe is not called AND cache is empty`() = runTest { - // GIVEN - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns null // WHEN @@ -105,7 +86,6 @@ class DefaultDynamicAddressesRepositoryTest { @Test fun `GIVEN probe returns true WHEN collect THEN result is cached AND next collect skips probe`() = runTest { // GIVEN - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns XPUB coEvery { walletManagersFacade.probeHasFundsOnAdditionalAddresses(userWalletId, network, XPUB) @@ -126,7 +106,6 @@ class DefaultDynamicAddressesRepositoryTest { @Test fun `GIVEN probe returns false WHEN collect twice THEN probe runs each time`() = runTest { // GIVEN - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns XPUB coEvery { walletManagersFacade.probeHasFundsOnAdditionalAddresses(userWalletId, network, XPUB) @@ -145,7 +124,6 @@ class DefaultDynamicAddressesRepositoryTest { @Test fun `GIVEN cached true WHEN enable succeeds THEN cache is invalidated and next probe runs again`() = runTest { // GIVEN — populate cache with a positive probe - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns XPUB coEvery { walletManagersFacade.probeHasFundsOnAdditionalAddresses(userWalletId, network, XPUB) @@ -165,7 +143,6 @@ class DefaultDynamicAddressesRepositoryTest { @Test fun `GIVEN cached true WHEN disable succeeds THEN cache is invalidated and next probe runs again`() = runTest { // GIVEN - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns XPUB coEvery { walletManagersFacade.probeHasFundsOnAdditionalAddresses(userWalletId, network, XPUB) @@ -185,7 +162,6 @@ class DefaultDynamicAddressesRepositoryTest { @Test fun `GIVEN cache entry for one network WHEN invalidate other network THEN first entry is preserved`() = runTest { // GIVEN — cache populated for `network` - every { featureToggles.isDynamicAddressesEnabled } returns true coEvery { getDerivedXpubUseCase(userWalletId, network) } returns XPUB coEvery { walletManagersFacade.probeHasFundsOnAdditionalAddresses(userWalletId, network, XPUB) diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/cold/DefaultColdMapDerivationsRepository.kt b/data/wallets/src/main/java/com/tangem/data/wallets/cold/DefaultColdMapDerivationsRepository.kt index 8f8ab2cfaa..5c7d8ea244 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/cold/DefaultColdMapDerivationsRepository.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/cold/DefaultColdMapDerivationsRepository.kt @@ -11,7 +11,6 @@ import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.data.common.network.NetworkFactory import com.tangem.data.wallets.derivations.Derivations import com.tangem.data.wallets.derivations.MissedDerivationsFinder -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network import com.tangem.domain.models.scan.ScanResponse @@ -31,7 +30,6 @@ internal class DefaultColdMapDerivationsRepository @Inject constructor( private val tangemSdkManager: TangemSdkManager, private val networkFactory: NetworkFactory, private val dispatchers: CoroutineDispatcherProvider, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, ) : ColdMapDerivationsRepository { override suspend fun derivePublicKeys( @@ -66,7 +64,7 @@ internal class DefaultColdMapDerivationsRepository @Inject constructor( return@withContext userWallet } - val derivations = MissedDerivationsFinder(userWallet, dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) + val derivations = MissedDerivationsFinder(userWallet, isDynamicAddressesEnabled = true) .findByNetworks(networks) .ifEmpty { TangemLogger.d("Nothing to derive") @@ -110,7 +108,7 @@ internal class DefaultColdMapDerivationsRepository @Inject constructor( networksWithDerivationPath: Map, ): Boolean = withContext(dispatchers.io) { val derivations = - MissedDerivationsFinder(userWallet, dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) + MissedDerivationsFinder(userWallet, isDynamicAddressesEnabled = true) .findByNetworks( networksWithDerivationPath.mapNotNull { (backendId, extraDerivationPath) -> networkFactory.create( diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/hot/DefaultHotMapDerivationsRepository.kt b/data/wallets/src/main/java/com/tangem/data/wallets/hot/DefaultHotMapDerivationsRepository.kt index 91d94a7313..961b04a2db 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/hot/DefaultHotMapDerivationsRepository.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/hot/DefaultHotMapDerivationsRepository.kt @@ -8,7 +8,6 @@ import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.data.common.network.NetworkFactory import com.tangem.data.wallets.derivations.MissedDerivationsFinder import com.tangem.domain.common.wallets.UserWalletsListRepository -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.common.wallets.getSyncStrict import com.tangem.domain.models.account.DerivationIndex import com.tangem.domain.models.currency.CryptoCurrency @@ -29,7 +28,6 @@ internal class DefaultHotMapDerivationsRepository @Inject constructor( private val networkFactory: NetworkFactory, private val hotWalletAccessor: HotWalletAccessor, private val dispatchers: CoroutineDispatcherProvider, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, ) : HotMapDerivationsRepository { override suspend fun derivePublicKeys( @@ -61,7 +59,7 @@ internal class DefaultHotMapDerivationsRepository @Inject constructor( userWallet: UserWallet.Hot, networks: List, ): UserWallet.Hot = withContext(dispatchers.default) { - val derivations = MissedDerivationsFinder(userWallet, dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) + val derivations = MissedDerivationsFinder(userWallet, isDynamicAddressesEnabled = true) .findByNetworks(networks) .ifEmpty { TangemLogger.d("Nothing to derive") @@ -110,7 +108,7 @@ internal class DefaultHotMapDerivationsRepository @Inject constructor( userWallet: UserWallet.Hot, networksWithDerivationPath: Map, ): Boolean = withContext(dispatchers.default) { - val derivations = MissedDerivationsFinder(userWallet, dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) + val derivations = MissedDerivationsFinder(userWallet, isDynamicAddressesEnabled = true) .findByNetworks( networksWithDerivationPath.mapNotNull { (backendId, extraDerivationPath) -> networkFactory.create( diff --git a/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/DynamicAddressesFeatureToggles.kt b/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/DynamicAddressesFeatureToggles.kt deleted file mode 100644 index 0d665d090e..0000000000 --- a/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/DynamicAddressesFeatureToggles.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.tangem.domain.dynamicaddresses - -interface DynamicAddressesFeatureToggles { - - val isDynamicAddressesEnabled: Boolean -} \ No newline at end of file diff --git a/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCase.kt b/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCase.kt index e6e97b552b..865145887d 100644 --- a/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCase.kt +++ b/domain/dynamic-addresses/src/main/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCase.kt @@ -11,12 +11,9 @@ import com.tangem.domain.wallets.derivations.derivationStyleProvider * Whether the Dynamic Addresses menu entry should be shown for a given (wallet, currency) pair. * Policy check only — hardware XPUB capability is verified by [IsXpubSupportedUseCase]. */ -class IsDynamicAddressesAvailableUseCase( - private val featureToggles: DynamicAddressesFeatureToggles, -) { +class IsDynamicAddressesAvailableUseCase { operator fun invoke(userWallet: UserWallet, cryptoCurrency: CryptoCurrency): Boolean { - if (!featureToggles.isDynamicAddressesEnabled) return false if (cryptoCurrency !is CryptoCurrency.Coin) return false val network = cryptoCurrency.network diff --git a/domain/dynamic-addresses/src/test/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCaseTest.kt b/domain/dynamic-addresses/src/test/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCaseTest.kt index c48c34c2b0..db04b7311d 100644 --- a/domain/dynamic-addresses/src/test/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCaseTest.kt +++ b/domain/dynamic-addresses/src/test/kotlin/com/tangem/domain/dynamicaddresses/IsDynamicAddressesAvailableUseCaseTest.kt @@ -21,13 +21,11 @@ import org.junit.jupiter.api.TestInstance @TestInstance(TestInstance.Lifecycle.PER_CLASS) class IsDynamicAddressesAvailableUseCaseTest { - private val featureToggles: DynamicAddressesFeatureToggles = mockk() - private val useCase = IsDynamicAddressesAvailableUseCase(featureToggles) + private val useCase = IsDynamicAddressesAvailableUseCase() @BeforeAll fun setup() { mockkStatic("com.tangem.domain.wallets.derivations.DerivationStyleProviderExtKt") - every { featureToggles.isDynamicAddressesEnabled } returns true } @AfterAll @@ -37,17 +35,6 @@ class IsDynamicAddressesAvailableUseCaseTest { // region Gating - @Test - fun `feature toggle off returns false`() { - every { featureToggles.isDynamicAddressesEnabled } returns false - - val coin = coin(Blockchain.Bitcoin, "m/84'/0'/0'/0/0") - val result = useCase(walletWithStyle(DerivationStyle.V3), coin) - - assertThat(result).isFalse() - every { featureToggles.isDynamicAddressesEnabled } returns true // restore - } - @Test fun `token currency returns false`() { val token = token(Blockchain.Ethereum, "m/44'/60'/0'/0/0") diff --git a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactory.kt b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactory.kt index 7f19a5a852..9077c02ad7 100644 --- a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactory.kt +++ b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactory.kt @@ -2,7 +2,6 @@ package com.tangem.domain.transaction.usecase import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.common.wallets.getSyncOrNull -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.GetDynamicReceiveAddressUseCase import com.tangem.domain.dynamicaddresses.model.DynamicAddressesStatus import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository @@ -27,7 +26,6 @@ class ReceiveAddressesFactory( private val getViewedTokenReceiveWarningUseCase: GetViewedTokenReceiveWarningUseCase, private val getDynamicReceiveAddressUseCase: GetDynamicReceiveAddressUseCase, private val dynamicAddressesRepository: DynamicAddressesRepository, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, private val userWalletsListRepository: UserWalletsListRepository, ) { @@ -68,7 +66,6 @@ class ReceiveAddressesFactory( userWalletId: UserWalletId, cryptoCurrency: CryptoCurrency, ): String? { - if (!dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) return null if (cryptoCurrency !is CryptoCurrency.Coin) return null val userWallet = userWalletsListRepository.getSyncOrNull(userWalletId) diff --git a/domain/transaction/src/test/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactoryTest.kt b/domain/transaction/src/test/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactoryTest.kt index e5440e7e58..0426b46d5b 100644 --- a/domain/transaction/src/test/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactoryTest.kt +++ b/domain/transaction/src/test/java/com/tangem/domain/transaction/usecase/ReceiveAddressesFactoryTest.kt @@ -5,7 +5,6 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.common.test.domain.token.MockCryptoCurrencyFactory import com.tangem.common.test.domain.wallet.MockUserWalletFactory import com.tangem.domain.common.wallets.UserWalletsListRepository -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.GetDynamicReceiveAddressUseCase import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository import com.tangem.domain.models.currency.CryptoCurrencyStatus @@ -28,7 +27,6 @@ internal class ReceiveAddressesFactoryTest { private val getViewedTokenReceiveWarningUseCase: GetViewedTokenReceiveWarningUseCase = mockk() private val getDynamicReceiveAddressUseCase: GetDynamicReceiveAddressUseCase = mockk() private val dynamicAddressesRepository: DynamicAddressesRepository = mockk() - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles = mockk() private val userWalletsListRepository: UserWalletsListRepository = mockk() private val factory = ReceiveAddressesFactory( @@ -36,7 +34,6 @@ internal class ReceiveAddressesFactoryTest { getViewedTokenReceiveWarningUseCase = getViewedTokenReceiveWarningUseCase, getDynamicReceiveAddressUseCase = getDynamicReceiveAddressUseCase, dynamicAddressesRepository = dynamicAddressesRepository, - dynamicAddressesFeatureToggles = dynamicAddressesFeatureToggles, userWalletsListRepository = userWalletsListRepository, ) @@ -54,7 +51,6 @@ internal class ReceiveAddressesFactoryTest { ) } - every { dynamicAddressesFeatureToggles.isDynamicAddressesEnabled } returns true every { userWalletsListRepository.userWallets } returns MutableStateFlow?>(listOf(userWallet)) // Single-currency wallets never populate the accounts store, so the status flow never emits ([REDACTED_TASK_KEY]) every { dynamicAddressesRepository.getStatus(any(), any()) } returns flow { awaitCancellation() } diff --git a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/TxHistoryFeatureToggles.kt b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/TxHistoryFeatureToggles.kt index 7cf937781c..23600fb0e1 100644 --- a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/TxHistoryFeatureToggles.kt +++ b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/TxHistoryFeatureToggles.kt @@ -1,6 +1,5 @@ package com.tangem.domain.txhistory interface TxHistoryFeatureToggles { - val isSolanaTxHistoryEnabled: Boolean val isNewTxHistoryEnabled: Boolean } \ No newline at end of file diff --git a/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt b/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt deleted file mode 100644 index 373418d3b3..0000000000 --- a/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.tangem.features.hotwallet - -interface HotWalletFeatureToggles { - val isAssetsDiscoveryEnabled: Boolean -} \ No newline at end of file diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt deleted file mode 100644 index 9c0d680f33..0000000000 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.tangem.features.hotwallet - -import com.tangem.core.configtoggle.FeatureToggles -import com.tangem.core.configtoggle.feature.FeatureTogglesManager - -internal class DefaultHotWalletFeatureToggles( - private val featureTogglesManager: FeatureTogglesManager, -) : HotWalletFeatureToggles { - - override val isAssetsDiscoveryEnabled: Boolean - get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.ASSETS_DISCOVERY_ENABLED) -} \ No newline at end of file diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModel.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModel.kt index 34dd1cf459..783cd80867 100644 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModel.kt +++ b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModel.kt @@ -17,7 +17,6 @@ import com.tangem.domain.wallets.hot.HotWalletAccessCodeAttemptsRepository.Attem import com.tangem.domain.wallets.hot.HotWalletAccessCodeAttemptsRepository.Companion.MAX_FAST_FORWARD_ATTEMPTS import com.tangem.domain.wallets.hot.HotWalletPasswordRequester import com.tangem.domain.wallets.usecase.DeleteWalletUseCase -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.hotwallet.accesscode.ACCESS_CODE_LENGTH import com.tangem.features.hotwallet.accesscoderequest.entity.HotAccessCodeRequestUM import com.tangem.features.hotwallet.impl.R @@ -42,7 +41,6 @@ internal class HotAccessCodeRequestModel @Inject constructor( private val canUseBiometryUseCase: CanUseBiometryUseCase, private val analyticsEventHandler: AnalyticsEventHandler, private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, ) : Model() { private val result = MutableStateFlow(null) @@ -231,9 +229,7 @@ internal class HotAccessCodeRequestModel @Inject constructor( val userWallet = userWalletsListRepository.userWalletsSync() .firstOrNull { it is UserWallet.Hot && it.hotWalletId == currentRequest.hotWalletId } ?: return - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled) { - startAssetsDiscoveryUseCase.cancel(userWallet.walletId) - } + startAssetsDiscoveryUseCase.cancel(userWallet.walletId) deleteWalletUseCase(userWallet.walletId) dismiss() diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/addexistingwallet/im/port/model/AddExistingWalletImportModel.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/addexistingwallet/im/port/model/AddExistingWalletImportModel.kt index 1d47e02224..40a73a47a8 100644 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/addexistingwallet/im/port/model/AddExistingWalletImportModel.kt +++ b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/addexistingwallet/im/port/model/AddExistingWalletImportModel.kt @@ -22,7 +22,6 @@ import com.tangem.domain.wallets.builder.HotUserWalletBuilder import com.tangem.domain.wallets.models.WalletSyncResult import com.tangem.domain.wallets.usecase.SaveWalletUseCase import com.tangem.domain.wallets.usecase.SyncWalletWithRemoteUseCase -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.hotwallet.MnemonicRepository import com.tangem.features.hotwallet.addexistingwallet.im.port.AddExistingWalletImportComponent import com.tangem.features.hotwallet.addexistingwallet.im.port.entity.AddExistingWalletImportUM @@ -47,7 +46,6 @@ internal class AddExistingWalletImportModel @Inject constructor( private val saveUserWalletUseCase: SaveWalletUseCase, private val syncWalletWithRemoteUseCase: SyncWalletWithRemoteUseCase, private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, @GlobalUiMessageSender private val uiMessageSender: UiMessageSender, private val analyticsEventHandler: AnalyticsEventHandler, private val appsFlyerStore: AppsFlyerStore, @@ -120,9 +118,7 @@ internal class AddExistingWalletImportModel @Inject constructor( launch(dispatchers.main + NonCancellable) { val syncResult = syncWalletWithRemoteUseCase(userWallet.walletId) - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled && - syncResult == WalletSyncResult.Created - ) { + if (syncResult == WalletSyncResult.Created) { startAssetsDiscoveryUseCase(userWallet.walletId) } } diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/di/HotWalletFeatureModule.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/di/HotWalletFeatureModule.kt deleted file mode 100644 index ccb6fb049a..0000000000 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/di/HotWalletFeatureModule.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.tangem.features.hotwallet.di - -import com.tangem.core.configtoggle.feature.FeatureTogglesManager -import com.tangem.features.hotwallet.DefaultHotWalletFeatureToggles -import com.tangem.features.hotwallet.HotWalletFeatureToggles -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal object HotWalletFeatureModule { - - @Provides - @Singleton - fun provideHotWalletFeatureToggles(featureTogglesManager: FeatureTogglesManager): HotWalletFeatureToggles { - return DefaultHotWalletFeatureToggles(featureTogglesManager) - } -} \ No newline at end of file diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/forgetwallet/ForgetWalletModel.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/forgetwallet/ForgetWalletModel.kt index fea68a0a31..47984c84b9 100644 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/forgetwallet/ForgetWalletModel.kt +++ b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/forgetwallet/ForgetWalletModel.kt @@ -15,7 +15,6 @@ import com.tangem.core.ui.message.SnackbarMessage import com.tangem.domain.assetsdiscovery.usecase.StartAssetsDiscoveryUseCase import com.tangem.domain.wallets.usecase.DeleteWalletUseCase import com.tangem.features.hotwallet.ForgetWalletComponent -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.hotwallet.forgetwallet.entity.ForgetWalletUM import com.tangem.features.hotwallet.impl.R import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -34,7 +33,6 @@ internal class ForgetWalletModel @Inject constructor( private val deleteWalletUseCase: DeleteWalletUseCase, private val uiMessageSender: UiMessageSender, private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, ) : Model() { private val params = paramsContainer.require() @@ -84,9 +82,7 @@ internal class ForgetWalletModel @Inject constructor( private fun forgetWallet() { modelScope.launch { - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled) { - startAssetsDiscoveryUseCase.cancel(params.userWalletId) - } + startAssetsDiscoveryUseCase.cancel(params.userWalletId) val hasUserWallets = deleteWalletUseCase(params.userWalletId) .getOrElse { error -> diff --git a/features/hot-wallet/impl/src/test/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModelTest.kt b/features/hot-wallet/impl/src/test/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModelTest.kt index e8edc8e418..76632886f1 100644 --- a/features/hot-wallet/impl/src/test/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModelTest.kt +++ b/features/hot-wallet/impl/src/test/kotlin/com/tangem/features/hotwallet/accesscoderequest/HotAccessCodeRequestModelTest.kt @@ -11,7 +11,6 @@ import com.tangem.domain.wallets.hot.HotWalletAccessCodeAttemptsRepository.Attem import com.tangem.domain.wallets.hot.HotWalletAccessCodeAttemptsRepository.Attempts import com.tangem.domain.wallets.hot.HotWalletPasswordRequester.AttemptRequest import com.tangem.domain.wallets.usecase.DeleteWalletUseCase -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.hot.sdk.model.HotWalletId import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider import io.mockk.clearMocks @@ -38,9 +37,6 @@ internal class HotAccessCodeRequestModelTest { private val canUseBiometryUseCase: CanUseBiometryUseCase = mockk(relaxed = true) private val analyticsEventHandler: AnalyticsEventHandler = mockk(relaxUnitFun = true) private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase = mockk(relaxed = true) - private val hotWalletFeatureToggles: HotWalletFeatureToggles = mockk { - every { isAssetsDiscoveryEnabled } returns false - } private val hotWalletIdA: HotWalletId = mockk() private val hotWalletIdB: HotWalletId = mockk() @@ -152,7 +148,6 @@ internal class HotAccessCodeRequestModelTest { canUseBiometryUseCase = canUseBiometryUseCase, analyticsEventHandler = analyticsEventHandler, startAssetsDiscoveryUseCase = startAssetsDiscoveryUseCase, - hotWalletFeatureToggles = hotWalletFeatureToggles, ) } diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/impl/DefaultCustomTokenDerivationInputComponent.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/impl/DefaultCustomTokenDerivationInputComponent.kt index cb0043af8a..8e371bc41b 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/impl/DefaultCustomTokenDerivationInputComponent.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/impl/DefaultCustomTokenDerivationInputComponent.kt @@ -7,7 +7,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import arrow.core.getOrElse import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.ui.extensions.resourceReference -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository import com.tangem.domain.managetokens.ValidateDerivationPathUseCase import com.tangem.domain.managetokens.model.exceptoin.DerivationPathValidationException @@ -31,13 +30,11 @@ internal class DefaultCustomTokenDerivationInputComponent @AssistedInject constr @Assisted private val params: CustomTokenDerivationInputComponent.Params, private val validateDerivationPathUseCase: ValidateDerivationPathUseCase, private val dynamicAddressesRepository: DynamicAddressesRepository, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, ) : CustomTokenDerivationInputComponent, AppComponentContext by context { private val cardanoDerivationPathValidator = CardanoDerivationPathValidator() private val dynamicAddressesDerivationValidator = DynamicAddressesDerivationValidator( dynamicAddressesRepository = dynamicAddressesRepository, - dynamicAddressesFeatureToggles = dynamicAddressesFeatureToggles, ) private val state: MutableStateFlow = MutableStateFlow( diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/DynamicAddressesDerivationValidator.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/DynamicAddressesDerivationValidator.kt index a7f0a8a514..0717baae1d 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/DynamicAddressesDerivationValidator.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/utils/DynamicAddressesDerivationValidator.kt @@ -2,7 +2,6 @@ package com.tangem.features.managetokens.utils import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.dynamicaddresses.DynamicAddressesDerivationChecker -import com.tangem.domain.dynamicaddresses.DynamicAddressesFeatureToggles import com.tangem.domain.dynamicaddresses.DynamicAddressesSupportedBlockchains import com.tangem.domain.dynamicaddresses.repository.DynamicAddressesRepository import com.tangem.domain.models.network.Network @@ -18,7 +17,6 @@ import kotlinx.coroutines.flow.firstOrNull */ internal class DynamicAddressesDerivationValidator( private val dynamicAddressesRepository: DynamicAddressesRepository, - private val dynamicAddressesFeatureToggles: DynamicAddressesFeatureToggles, ) { /** @@ -29,7 +27,6 @@ internal class DynamicAddressesDerivationValidator( networkId: Network.ID, path: String?, ): Boolean { - if (!dynamicAddressesFeatureToggles.isDynamicAddressesEnabled) return false if (path == null) return false if (!isSupportedBlockchain(networkId)) return false diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/DefaultTxHistoryFeatureToggles.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/DefaultTxHistoryFeatureToggles.kt index 6eaf006671..ffbbebd512 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/DefaultTxHistoryFeatureToggles.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/DefaultTxHistoryFeatureToggles.kt @@ -9,9 +9,6 @@ internal class DefaultTxHistoryFeatureToggles @Inject constructor( private val featureTogglesManager: FeatureTogglesManager, ) : TxHistoryFeatureToggles { - override val isSolanaTxHistoryEnabled: Boolean - get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.SOLANA_TX_HISTORY_ENABLED) - override val isNewTxHistoryEnabled: Boolean get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.AND_15767_NEW_TX_HISTORY_ENABLED) } \ No newline at end of file diff --git a/features/wallet-settings/impl/src/main/kotlin/com/tangem/feature/walletsettings/model/WalletSettingsModel.kt b/features/wallet-settings/impl/src/main/kotlin/com/tangem/feature/walletsettings/model/WalletSettingsModel.kt index 6741173d06..53c5a0ba27 100644 --- a/features/wallet-settings/impl/src/main/kotlin/com/tangem/feature/walletsettings/model/WalletSettingsModel.kt +++ b/features/wallet-settings/impl/src/main/kotlin/com/tangem/feature/walletsettings/model/WalletSettingsModel.kt @@ -49,7 +49,6 @@ import com.tangem.feature.walletsettings.utils.AccountItemsDelegate import com.tangem.feature.walletsettings.utils.AccountListSortingSaver import com.tangem.feature.walletsettings.utils.ItemsBuilder import com.tangem.feature.walletsettings.utils.WalletCardItemDelegate -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents import com.tangem.features.pushnotificationsettings.PushNotificationSettingsFeatureToggles import com.tangem.hot.sdk.model.HotWalletId @@ -92,7 +91,6 @@ internal class WalletSettingsModel @Inject constructor( private val singleAccountListSupplier: SingleAccountListSupplier, private val accountListSortingSaver: AccountListSortingSaver, private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, private val pushNotificationSettingsFeatureToggles: PushNotificationSettingsFeatureToggles, ) : Model() { @@ -266,7 +264,7 @@ internal class WalletSettingsModel @Inject constructor( val userWallet = getUserWalletUseCase(params.userWalletId) .getOrNull() - if (userWallet is UserWallet.Hot && hotWalletFeatureToggles.isAssetsDiscoveryEnabled) { + if (userWallet is UserWallet.Hot) { startAssetsDiscoveryUseCase.cancel(params.userWalletId) } diff --git a/features/wallet/api/src/main/kotlin/com/tangem/features/wallet/featuretoggles/WalletFeatureToggles.kt b/features/wallet/api/src/main/kotlin/com/tangem/features/wallet/featuretoggles/WalletFeatureToggles.kt index e736c3833e..fd5149ae02 100644 --- a/features/wallet/api/src/main/kotlin/com/tangem/features/wallet/featuretoggles/WalletFeatureToggles.kt +++ b/features/wallet/api/src/main/kotlin/com/tangem/features/wallet/featuretoggles/WalletFeatureToggles.kt @@ -7,7 +7,5 @@ package com.tangem.features.wallet.featuretoggles */ interface WalletFeatureToggles { - val isAddFundsStage1Enabled: Boolean - val isManageFundsEnabled: Boolean } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt index 3194ea7e11..25f9789417 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/WalletModel.kt @@ -64,7 +64,6 @@ import com.tangem.feature.wallet.presentation.wallet.ui.components.visa.KycRejec import com.tangem.feature.wallet.presentation.wallet.utils.ScreenLifecycleProvider import com.tangem.features.addressbook.AddressBookFeatureToggles import com.tangem.features.biometry.AskBiometryComponent -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.pushnotifications.api.PushNotificationsModelCallbacks import com.tangem.features.pushnotificationsettings.PushNotificationSettingsFeatureToggles import com.tangem.features.wallet.deeplink.WalletDeepLinkActionListener @@ -126,7 +125,6 @@ internal class WalletModel @Inject constructor( private val resolveQrSendTargetsUseCase: ResolveQrSendTargetsUseCase, private val paymentAccountStatusFetcher: PaymentAccountStatusFetcher, private val uiMessageSender: UiMessageSender, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, private val walletFeatureToggles: WalletFeatureToggles, private val pushNotificationSettingsFeatureToggles: PushNotificationSettingsFeatureToggles, private val addressBookFeatureToggles: AddressBookFeatureToggles, @@ -579,7 +577,6 @@ internal class WalletModel @Inject constructor( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = walletFeatureToggles.isAddFundsStage1Enabled, isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled, ), ) @@ -627,7 +624,6 @@ internal class WalletModel @Inject constructor( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = walletFeatureToggles.isAddFundsStage1Enabled, isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled, ), ) @@ -650,7 +646,6 @@ internal class WalletModel @Inject constructor( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = walletFeatureToggles.isAddFundsStage1Enabled, isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled, ), ) @@ -668,7 +663,6 @@ internal class WalletModel @Inject constructor( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = walletFeatureToggles.isAddFundsStage1Enabled, isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled, ), ) @@ -731,7 +725,6 @@ internal class WalletModel @Inject constructor( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = walletFeatureToggles.isAddFundsStage1Enabled, isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled, ), ) @@ -888,9 +881,7 @@ internal class WalletModel @Inject constructor( } private fun applyPendingAssetsDiscovery() { - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled) { - startAssetsDiscoveryUseCase.applyPendingAssetsDiscovery() - } + startAssetsDiscoveryUseCase.applyPendingAssetsDiscovery() } private fun syncAddressBooksIfNeeded() { 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 436dc1f2f9..3f20073d42 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 @@ -9,9 +9,6 @@ internal class DefaultWalletFeatureToggles @Inject constructor( private val featureToggles: FeatureTogglesManager, ) : WalletFeatureToggles { - override val isAddFundsStage1Enabled: Boolean - get() = featureToggles.isFeatureEnabled(FeatureToggles.AND_15310_ADD_FUNDS_STAGE1) - override val isManageFundsEnabled: Boolean get() = featureToggles.isFeatureEnabled(FeatureToggles.TWI_1377_MANAGE_FUNDS) } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt index 5860f51c0d..68797af233 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt @@ -37,8 +37,6 @@ import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.presentation.account.AccountDependencies import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification -import com.tangem.features.hotwallet.HotWalletFeatureToggles -import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles import com.tangem.hot.sdk.model.HotWalletId import com.tangem.lib.crypto.BlockchainUtils import com.tangem.utils.annotations.RemoveWithToggle @@ -66,11 +64,9 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( private val getUpgradeBannerClosureTimestampUseCase: GetUpgradeBannerClosureTimestampUseCase, private val checkHotWalletUpgradeBannerUseCase: CheckHotWalletUpgradeBannerUseCase, private val observeAssetsDiscoveryUseCase: ObserveAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, private val shouldShowYieldBoostMainBannerUseCase: ShouldShowYieldBoostMainBannerUseCase, private val yieldSupplyGetShouldShowMainPromoUseCase: YieldSupplyGetShouldShowMainPromoUseCase, private val designFeatureToggles: DesignFeatureToggles, - private val walletFeatureToggles: WalletFeatureToggles, ) { @Suppress("UNCHECKED_CAST", "MagicNumber", "LongMethod", "CastNullableToNonNullableType") @@ -80,7 +76,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( val accountStatusListFlow = accountDependencies.singleAccountStatusListSupplier(params) val assetsDiscoveryProgressFlow = - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled && userWallet is UserWallet.Hot) { + if (userWallet is UserWallet.Hot) { observeAssetsDiscoveryUseCase(userWallet.walletId).distinctUntilChanged() } else { flowOf(AssetsDiscoveryProgress.Idle) @@ -256,7 +252,6 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( } private fun isAddFundsBannerVisible(totalFiatBalance: TotalFiatBalance): Boolean { - if (!walletFeatureToggles.isAddFundsStage1Enabled) return false val loaded = totalFiatBalance as? TotalFiatBalance.Loaded ?: return false return loaded.amount.orZero().signum() == 0 } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt index 91f16d234e..91364bf4e8 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt @@ -25,7 +25,6 @@ import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.presentation.account.AccountDependencies import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotificationUM -import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.hot.sdk.model.HotWalletId import com.tangem.lib.crypto.BlockchainUtils import com.tangem.utils.extensions.addIf @@ -50,7 +49,6 @@ internal class GetWalletNotificationsFactory @Inject constructor( private val getAccessCodeSkippedUseCase: GetAccessCodeSkippedUseCase, private val hasSingleWalletSignedHashesUseCase: HasSingleWalletSignedHashesUseCase, private val observeAssetsDiscoveryUseCase: ObserveAssetsDiscoveryUseCase, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, ) { fun create(userWallet: UserWallet, clickIntents: WalletClickIntents): Flow> { val cardTypesResolver = (userWallet as? UserWallet.Cold)?.scanResponse?.cardTypesResolver @@ -59,7 +57,7 @@ internal class GetWalletNotificationsFactory @Inject constructor( val accountStatusListFlow = accountDependencies.singleAccountStatusListSupplier(params) val assetsDiscoveryProgressFlow = - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled && userWallet is UserWallet.Hot) { + if (userWallet is UserWallet.Hot) { observeAssetsDiscoveryUseCase(userWallet.walletId).distinctUntilChanged() } else { flowOf(AssetsDiscoveryProgress.Idle) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt index b6ea0fcf2a..5673f87fb3 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt @@ -3,7 +3,6 @@ package com.tangem.feature.wallet.presentation.wallet.loaders.implementors import com.tangem.core.ui.DesignFeatureToggles import com.tangem.domain.models.wallet.UserWallet import com.tangem.feature.wallet.presentation.wallet.subscribers.* -import com.tangem.features.hotwallet.HotWalletFeatureToggles import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject @@ -21,7 +20,6 @@ internal class MultiWalletContentLoader @AssistedInject constructor( private val assetsDiscoverySubscriberFactory: AssetsDiscoverySubscriber.Factory, private val tokenListAnalyticsSubscriberFactory: TokenListAnalyticsSubscriber.Factory, private val designFeatureToggles: DesignFeatureToggles, - private val hotWalletFeatureToggles: HotWalletFeatureToggles, ) : WalletContentLoader(id = userWallet.walletId) { override fun create(): List = listOfNotNull( @@ -36,7 +34,7 @@ internal class MultiWalletContentLoader @AssistedInject constructor( multiWalletActionButtonsSubscriberFactory.create(userWallet), tangemPayMainSubscriberFactory.create(userWallet), tokenListAnalyticsSubscriberFactory.create(userWallet), - if (hotWalletFeatureToggles.isAssetsDiscoveryEnabled && userWallet is UserWallet.Hot) { + if (userWallet is UserWallet.Hot) { assetsDiscoverySubscriberFactory.create(userWallet) } else { null diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt index ae0310fa34..ea3bcea7f4 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt @@ -13,7 +13,6 @@ internal class AddWalletTransformer( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) : WalletScreenStateTransformer { @@ -22,7 +21,6 @@ internal class AddWalletTransformer( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = isAddFundsStage1Enabled, isManageFundsEnabled = isManageFundsEnabled, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt index edfe70df42..765ba717bd 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt @@ -28,7 +28,6 @@ internal class InitializeWalletsTransformer( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) : WalletScreenStateTransformer { @@ -37,7 +36,6 @@ internal class InitializeWalletsTransformer( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = isAddFundsStage1Enabled, isManageFundsEnabled = isManageFundsEnabled, ) } @@ -152,15 +150,11 @@ internal class InitializeWalletsTransformer( userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken() if (isSingleWalletWithToken) return persistentListOf() - val firstButton = if (isAddFundsStage1Enabled) { - WalletManageButton.AddFunds( - enabled = false, - dimContent = false, - onClick = {}, - ) - } else { - WalletManageButton.Buy(enabled = false, dimContent = false, onClick = {}) - } + val firstButton = WalletManageButton.AddFunds( + enabled = false, + dimContent = false, + onClick = {}, + ) val lastButton = if (isManageFundsEnabled) { WalletManageButton.Transfer(enabled = false, dimContent = false, onClick = {}) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeNewWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeNewWalletTransformer.kt index 66fa7bb5b2..0d82b17d84 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeNewWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeNewWalletTransformer.kt @@ -25,7 +25,6 @@ internal class ReinitializeNewWalletTransformer( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) : WalletScreenStateTransformer { @@ -34,7 +33,6 @@ internal class ReinitializeNewWalletTransformer( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = isAddFundsStage1Enabled, isManageFundsEnabled = isManageFundsEnabled, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt index 5032c7975a..98cd5a5786 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt @@ -20,7 +20,6 @@ internal class ReinitializeWalletTransformer( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) : WalletStateTransformer(userWalletId = userWallet.walletId) { @@ -29,7 +28,6 @@ internal class ReinitializeWalletTransformer( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = isAddFundsStage1Enabled, isManageFundsEnabled = isManageFundsEnabled, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt index c64e5fa443..938f21813a 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt @@ -18,7 +18,6 @@ internal class UnlockWalletTransformer( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) : WalletScreenStateTransformer { @@ -27,7 +26,6 @@ internal class UnlockWalletTransformer( clickIntents = clickIntents, walletImageResolver = walletImageResolver, getWalletIconUseCase = getWalletIconUseCase, - isAddFundsStage1Enabled = isAddFundsStage1Enabled, isManageFundsEnabled = isManageFundsEnabled, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt index 1410822ee8..8248f0d35c 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt @@ -1,7 +1,6 @@ package com.tangem.feature.wallet.presentation.wallet.state.utils import com.tangem.common.ui.userwallet.converter.WalletIconUMConverter -import com.tangem.core.analytics.models.event.MainScreenAnalyticsEvent.Companion.WALLET_TYPE import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig import com.tangem.core.ui.components.marketprice.MarketPriceBlockState import com.tangem.core.ui.components.transactions.state.TxHistoryState @@ -35,7 +34,6 @@ internal class WalletLoadingStateFactory( private val clickIntents: WalletClickIntents, private val walletImageResolver: WalletImageResolver, private val getWalletIconUseCase: GetWalletIconUseCase, - private val isAddFundsStage1Enabled: Boolean, private val isManageFundsEnabled: Boolean, ) { @@ -153,24 +151,11 @@ internal class WalletLoadingStateFactory( userWallet is UserWallet.Cold && userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken() if (isSingleWalletWithToken) return persistentListOf() - val firstButton = if (isAddFundsStage1Enabled) { - WalletManageButton.AddFunds( - enabled = true, - dimContent = false, - onClick = { clickIntents.onAddFundsClick(userWallet.walletId) }, - ) - } else { - WalletManageButton.Buy( - enabled = true, - dimContent = false, - onClick = { - clickIntents.onMultiWalletBuyClick( - userWalletId = userWallet.walletId, - WALLET_TYPE, - ) - }, - ) - } + val firstButton = WalletManageButton.AddFunds( + enabled = true, + dimContent = false, + onClick = { clickIntents.onAddFundsClick(userWallet.walletId) }, + ) val lastButton = if (isManageFundsEnabled) { WalletManageButton.Transfer( diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/WalletManagerFactoryCreator.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/WalletManagerFactoryCreator.kt index 1e2e3552c5..0c98fa60be 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/WalletManagerFactoryCreator.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/WalletManagerFactoryCreator.kt @@ -39,9 +39,9 @@ internal class WalletManagerFactoryCreator @Inject constructor( isYieldSupplyEnabled = true, isYieldModeSwapEnabled = featureToggleValues.isYieldModeSwapEnabled, isPendingTransactionsEnabled = true, - isSolanaTxHistoryEnabled = featureToggleValues.isSolanaTxHistoryEnabled, - isSolanaScaledUiAmountEnabled = featureToggleValues.isSolanaScaledUiAmountEnabled, - isHederaErc20Enabled = featureToggleValues.isHederaErc20Enabled, + isSolanaTxHistoryEnabled = true, + isSolanaScaledUiAmountEnabled = true, + isHederaErc20Enabled = true, isStateOverrideGasEstimateEnabled = featureToggleValues.isStateOverrideGasEstimateEnabled, ), blockchainDataStorage = blockchainDataStorage, @@ -50,10 +50,7 @@ internal class WalletManagerFactoryCreator @Inject constructor( } data class FeatureToggleValues( - val isSolanaTxHistoryEnabled: Boolean, - val isSolanaScaledUiAmountEnabled: Boolean, val isYieldModeSwapEnabled: Boolean, - val isHederaErc20Enabled: Boolean, val isStateOverrideGasEstimateEnabled: Boolean, ) } \ No newline at end of file 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 ef8a7025e7..040608ca93 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 @@ -98,18 +98,9 @@ internal object BlockchainSDKFactoryModule { blockchainDataStorage = DefaultBlockchainDataStorage(appPreferencesStore), blockchainSDKLogger = blockchainSDKLogger, featureToggleValues = WalletManagerFactoryCreator.FeatureToggleValues( - isSolanaTxHistoryEnabled = featureTogglesManager.isFeatureEnabled( - FeatureToggles.SOLANA_TX_HISTORY_ENABLED, - ), - isSolanaScaledUiAmountEnabled = featureTogglesManager.isFeatureEnabled( - FeatureToggles.SOLANA_SCALED_UI_AMOUNT_ENABLED, - ), isYieldModeSwapEnabled = featureTogglesManager.isFeatureEnabled( FeatureToggles.TWI_1326_YIELD_MODE_SWAP_ENABLED, ), - isHederaErc20Enabled = featureTogglesManager.isFeatureEnabled( - FeatureToggles.HEDERA_ERC20_ENABLED, - ), isStateOverrideGasEstimateEnabled = featureTogglesManager.isFeatureEnabled( FeatureToggles.AND_15120_SWAP_INTEGRATED_APPROVE, ),