Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-17 12:59:37 +04:00
parent 002265ac46
commit d748cb7a81
22 changed files with 57 additions and 29 deletions

View file

@ -1,5 +1,6 @@
package com.tangem.tap.common.analytics
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import javax.inject.Inject
@ -8,5 +9,5 @@ class CustomerIoFeatureToggles @Inject constructor(
) {
val isFeatureEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(name = "CUSTOMER_IO_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(toggle = FeatureToggles.CUSTOMER_IO_ENABLED)
}

View file

@ -1,11 +1,14 @@
package com.tangem.tap.core.ui
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.core.ui.DesignFeatureToggles
import javax.inject.Inject
class DefaultDesignFeatureToggles @Inject constructor(
featureTogglesManager: FeatureTogglesManager,
private val featureTogglesManager: FeatureTogglesManager,
) : DesignFeatureToggles {
override val isRedesignEnabled: Boolean = featureTogglesManager.isFeatureEnabled("APP_REDESIGN_ENABLED")
override val isRedesignEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.APP_REDESIGN_ENABLED)
}

View file

@ -1,13 +1,13 @@
package com.tangem.tap.core.ui
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.core.ui.HoldToConfirmButtonFeatureToggles
import javax.inject.Inject
class DefaultHoldToConfirmButtonFeatureToggles @Inject constructor(
featureTogglesManager: FeatureTogglesManager,
private val featureTogglesManager: FeatureTogglesManager,
) : HoldToConfirmButtonFeatureToggles {
override val isHoldToConfirmEnabled: Boolean = featureTogglesManager.isFeatureEnabled(
"HOLD_TO_CONFIRM_BUTTON_ENABLED",
)
override val isHoldToConfirmEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.HOLD_TO_CONFIRM_BUTTON_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.tap.domain.scanCard
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
/**
@ -12,5 +13,5 @@ class CardScanningFeatureToggles internal constructor(
) {
val isNewCardScanningEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(name = "NEW_CARD_SCANNING_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.NEW_CARD_SCANNING_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.tap.domain.tokens
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.domain.tokens.TokensFeatureToggles
@ -8,5 +9,5 @@ internal class DefaultTokensFeatureToggles(
) : TokensFeatureToggles {
override val isMultiAddressUtxoEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("MULTI_ADDRESS_UTXO_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.MULTI_ADDRESS_UTXO_ENABLED)
}

View file

@ -1,5 +1,7 @@
package com.tangem.core.configtoggle.feature
import com.tangem.core.configtoggle.FeatureToggles
/**
* Component for getting information about the availability of feature toggles
*
@ -7,6 +9,6 @@ package com.tangem.core.configtoggle.feature
*/
interface FeatureTogglesManager {
/** Check feature toggle availability by name [name] */
fun isFeatureEnabled(name: String): Boolean
/** Check feature [toggle] availability */
fun isFeatureEnabled(toggle: FeatureToggles): Boolean
}

View file

@ -1,6 +1,7 @@
package com.tangem.core.configtoggle.feature.impl
import androidx.annotation.VisibleForTesting
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.MutableFeatureTogglesManager
import com.tangem.core.configtoggle.feature.provider.FeatureTogglesProvider
import com.tangem.core.configtoggle.storage.LocalTogglesStorage
@ -38,7 +39,10 @@ internal class DevFeatureTogglesManager(
.toMutableMap()
}
override fun isFeatureEnabled(name: String): Boolean = featureTogglesMap[name] == true
override fun isFeatureEnabled(toggle: FeatureToggles): Boolean = featureTogglesMap[toggle.rawName] == true
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun isFeatureEnabledByName(name: String): Boolean = featureTogglesMap[name] == true
override fun getFeatureToggles(): Map<String, Boolean> = featureTogglesMap

View file

@ -1,6 +1,7 @@
package com.tangem.core.configtoggle.feature.impl
import androidx.annotation.VisibleForTesting
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.core.configtoggle.feature.provider.FeatureTogglesProvider
import com.tangem.core.configtoggle.utils.defineTogglesAvailability
@ -19,7 +20,10 @@ internal class ProdFeatureTogglesManager(
private val featureToggles: Map<String, Boolean> = getFileFeatureToggles()
override fun isFeatureEnabled(name: String): Boolean = featureToggles[name] == true
override fun isFeatureEnabled(toggle: FeatureToggles): Boolean = featureToggles[toggle.rawName] == true
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun isFeatureEnabledByName(name: String): Boolean = featureToggles[name] == true
private fun getFileFeatureToggles(): Map<String, Boolean> {
val appVersion = versionProvider.get()

View file

@ -248,7 +248,7 @@ internal class DevFeatureTogglesManagerTest {
@ProvideTestModels
fun isFeatureEnabled(model: IsFeatureEnabledModel) {
// Act
val actual = manager.isFeatureEnabled(name = model.name)
val actual = manager.isFeatureEnabledByName(name = model.name)
// Assert
Truth.assertThat(actual).isEqualTo(model.expected)

View file

@ -132,7 +132,7 @@ internal class ProdFeatureTogglesManagerTest {
@ProvideTestModels
fun isFeatureEnabled(model: IsFeatureEnabledModel) {
// Act
val actual = manager.isFeatureEnabled(name = model.name)
val actual = manager.isFeatureEnabledByName(name = model.name)
// Assert
Truth.assertThat(actual).isEqualTo(model.expected)

View file

@ -1,5 +1,6 @@
package com.tangem.data.feedback
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.domain.feedback.repository.FeedbackFeatureToggles
@ -8,5 +9,5 @@ internal class DefaultFeedbackFeatureToggles(
) : FeedbackFeatureToggles {
override val isUsedeskEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(name = "USEDESK_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(toggle = FeatureToggles.USEDESK_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.data.staking.toggles
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.domain.staking.toggles.StakingFeatureToggles
@ -8,5 +9,5 @@ internal class DefaultStakingFeatureToggles(
) : StakingFeatureToggles {
override val isEthStakingEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("STAKING_ETH_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.STAKING_ETH_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.approval.impl
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.approval.api.GiveApprovalFeatureToggles
import javax.inject.Inject
@ -10,5 +11,5 @@ internal class DefaultGiveApprovalFeatureToggles @Inject constructor(
// Remove GiveTxPermissionBottomSheet and all dependencies with this toggle
override val isGaslessApprovalEnabled: Boolean
get() = featureToggles.isFeatureEnabled("GASLESS_APPROVAL_ENABLED")
get() = featureToggles.isFeatureEnabled(FeatureToggles.GASLESS_APPROVAL_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.feed.featuretoggle
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.feed.entry.featuretoggle.FeedFeatureToggle
@ -8,5 +9,5 @@ internal class DefaultFeedFeatureToggle(
) : FeedFeatureToggle {
override val isEarnBlockEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("EARN_BLOCK_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.EARN_BLOCK_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.hotwallet
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
internal class DefaultHotWalletFeatureToggles(
@ -7,8 +8,8 @@ internal class DefaultHotWalletFeatureToggles(
) : HotWalletFeatureToggles {
override val isWalletCreationRestrictionEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(name = "HOT_WALLET_CREATION_RESTRICTION_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.HOT_WALLET_CREATION_RESTRICTION_ENABLED)
override val isTokenSyncEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled(name = "TOKEN_SYNC_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.TOKEN_SYNC_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.onboarding.v2
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import javax.inject.Inject
@ -7,5 +8,5 @@ internal class DefaultOnboardingV2FeatureToggles @Inject constructor(
private val featureTogglesManager: FeatureTogglesManager,
) : OnboardingV2FeatureToggles {
override val isVisaOnboardingEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("VISA_ONBOARDING_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.VISA_ONBOARDING_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.promobanners.impl.toggles
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.promobanners.api.NewPromoBannersFeatureToggles
import javax.inject.Inject
@ -9,5 +10,5 @@ internal class DefaultNewPromoBannersFeatureToggles @Inject constructor(
) : NewPromoBannersFeatureToggles {
override val isNewPromoBannersEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("NEW_PROMO_BANNERS_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(toggle = FeatureToggles.NEW_PROMO_BANNERS_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.swap.v2.impl
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.swap.v2.api.SwapFeatureToggles
@ -7,5 +8,5 @@ internal class DefaultSwapFeatureToggles(
private val featureToggles: FeatureTogglesManager,
) : SwapFeatureToggles {
override val isSwapRedesignEnabled: Boolean
get() = featureToggles.isFeatureEnabled("SWAP_REDESIGN_ENABLED")
get() = featureToggles.isFeatureEnabled(FeatureToggles.SWAP_REDESIGN_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.feature.swap
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.swap.SwapFeatureToggles
@ -7,5 +8,5 @@ internal class DefaultSwapFeatureToggles(
private val featureTogglesManager: FeatureTogglesManager,
) : SwapFeatureToggles {
override val isMarketListFeatureEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("SWAP_MARKET_LIST_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.SWAP_MARKET_LIST_ENABLED)
}

View file

@ -1,10 +1,11 @@
package com.tangem.features.tangempay
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
internal class DefaultTangemPayFeatureToggles(
private val featureTogglesManager: FeatureTogglesManager,
) : TangemPayFeatureToggles {
override val isTangemPayAccountsRefactorEnabled
get() = featureTogglesManager.isFeatureEnabled("TANGEM_PAY_ACCOUNTS_REFACTOR_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(FeatureToggles.TANGEM_PAY_ACCOUNTS_REFACTOR_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.virtualaccount.onboarding.impl
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.virtualaccount.onboarding.api.VirtualAccountsFeatureToggles
import javax.inject.Inject
@ -10,5 +11,5 @@ internal class DefaultVirtualAccountsFeatureToggles
) : VirtualAccountsFeatureToggles {
override val isVirtualAccountsEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("VIRTUAL_ACCOUNTS_ENABLED")
get() = featureTogglesManager.isFeatureEnabled(toggle = FeatureToggles.VIRTUAL_ACCOUNTS_ENABLED)
}

View file

@ -1,5 +1,6 @@
package com.tangem.feature.wallet.featuretoggles
import com.tangem.core.configtoggle.FeatureToggles
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
import javax.inject.Inject
@ -9,8 +10,8 @@ internal class DefaultWalletFeatureToggles @Inject constructor(
) : WalletFeatureToggles {
override val isWalletReorderFeatureEnabled: Boolean
get() = featureToggles.isFeatureEnabled("WALLET_REORDER_FEATURE_ENABLED")
get() = featureToggles.isFeatureEnabled(FeatureToggles.WALLET_REORDER_FEATURE_ENABLED)
override val isMainScreenQrScanningEnabled: Boolean
get() = featureToggles.isFeatureEnabled("MAIN_SCREEN_QR_SCANNING_ENABLED")
get() = featureToggles.isFeatureEnabled(FeatureToggles.MAIN_SCREEN_QR_SCANNING_ENABLED)
}