Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-16 20:41:42 +04:00
parent 50332186fa
commit 5f6767abaf
58 changed files with 85 additions and 717 deletions

View file

@ -1,11 +0,0 @@
package com.tangem.features.wallet.featuretoggles
/**
* Wallet feature toggles
*
[REDACTED_AUTHOR]
*/
interface WalletFeatureToggles {
val isManageFundsEnabled: Boolean
}

View file

@ -67,7 +67,6 @@ import com.tangem.features.biometry.AskBiometryComponent
import com.tangem.features.pushnotifications.api.PushNotificationsModelCallbacks
import com.tangem.features.pushnotificationsettings.PushNotificationSettingsFeatureToggles
import com.tangem.features.wallet.deeplink.WalletDeepLinkActionListener
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
import com.tangem.utils.Provider
import com.tangem.utils.coroutines.*
import com.tangem.utils.logging.TangemLogger
@ -125,7 +124,6 @@ internal class WalletModel @Inject constructor(
private val resolveQrSendTargetsUseCase: ResolveQrSendTargetsUseCase,
private val paymentAccountStatusFetcher: PaymentAccountStatusFetcher,
private val uiMessageSender: UiMessageSender,
private val walletFeatureToggles: WalletFeatureToggles,
private val pushNotificationSettingsFeatureToggles: PushNotificationSettingsFeatureToggles,
private val addressBookFeatureToggles: AddressBookFeatureToggles,
private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase,
@ -577,7 +575,6 @@ internal class WalletModel @Inject constructor(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled,
),
)
@ -624,7 +621,6 @@ internal class WalletModel @Inject constructor(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled,
),
)
}
@ -646,7 +642,6 @@ internal class WalletModel @Inject constructor(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled,
),
)
}
@ -663,7 +658,6 @@ internal class WalletModel @Inject constructor(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled,
),
)
@ -725,7 +719,6 @@ internal class WalletModel @Inject constructor(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = walletFeatureToggles.isManageFundsEnabled,
),
)

View file

@ -1,18 +0,0 @@
package com.tangem.feature.wallet.di
import com.tangem.feature.wallet.featuretoggles.DefaultWalletFeatureToggles
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal interface WalletFeatureTogglesModule {
@Singleton
@Binds
fun bindWalletFeatureToggles(toggles: DefaultWalletFeatureToggles): WalletFeatureToggles
}

View file

@ -1,14 +0,0 @@
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
internal class DefaultWalletFeatureToggles @Inject constructor(
private val featureToggles: FeatureTogglesManager,
) : WalletFeatureToggles {
override val isManageFundsEnabled: Boolean
get() = featureToggles.isFeatureEnabled(FeatureToggles.TWI_1377_MANAGE_FUNDS)
}

View file

@ -13,7 +13,6 @@ internal class AddWalletTransformer(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) : WalletScreenStateTransformer {
private val walletLoadingStateFactory by lazy {
@ -21,7 +20,6 @@ internal class AddWalletTransformer(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = isManageFundsEnabled,
)
}

View file

@ -28,7 +28,6 @@ internal class InitializeWalletsTransformer(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) : WalletScreenStateTransformer {
private val walletLoadingStateFactory by lazy {
@ -36,7 +35,6 @@ internal class InitializeWalletsTransformer(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = isManageFundsEnabled,
)
}
@ -156,11 +154,7 @@ internal class InitializeWalletsTransformer(
onClick = {},
)
val lastButton = if (isManageFundsEnabled) {
WalletManageButton.Transfer(enabled = false, dimContent = false, onClick = {})
} else {
WalletManageButton.Sell(enabled = false, dimContent = false, onClick = {})
}
val lastButton = WalletManageButton.Transfer(enabled = false, dimContent = false, onClick = {})
return persistentListOf(
firstButton,
@ -193,21 +187,12 @@ internal class InitializeWalletsTransformer(
onClick = {},
).buttonUM,
)
if (isManageFundsEnabled) {
add(
WalletActionButtons.Transfer(
isEnabled = false,
onClick = {},
).buttonUM,
)
} else {
add(
WalletActionButtons.Sell(
isEnabled = false,
onClick = {},
).buttonUM,
)
}
add(
WalletActionButtons.Transfer(
isEnabled = false,
onClick = {},
).buttonUM,
)
}.toPersistentList()
}
}

View file

@ -25,7 +25,6 @@ internal class ReinitializeNewWalletTransformer(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) : WalletScreenStateTransformer {
private val walletLoadingStateFactory by lazy {
@ -33,7 +32,6 @@ internal class ReinitializeNewWalletTransformer(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = isManageFundsEnabled,
)
}

View file

@ -20,7 +20,6 @@ internal class ReinitializeWalletTransformer(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) : WalletStateTransformer(userWalletId = userWallet.walletId) {
private val walletLoadingStateFactory by lazy {
@ -28,7 +27,6 @@ internal class ReinitializeWalletTransformer(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = isManageFundsEnabled,
)
}

View file

@ -18,7 +18,6 @@ internal class UnlockWalletTransformer(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) : WalletScreenStateTransformer {
private val walletLoadingStateFactory by lazy {
@ -26,7 +25,6 @@ internal class UnlockWalletTransformer(
clickIntents = clickIntents,
walletImageResolver = walletImageResolver,
getWalletIconUseCase = getWalletIconUseCase,
isManageFundsEnabled = isManageFundsEnabled,
)
}

View file

@ -34,7 +34,6 @@ internal class WalletLoadingStateFactory(
private val clickIntents: WalletClickIntents,
private val walletImageResolver: WalletImageResolver,
private val getWalletIconUseCase: GetWalletIconUseCase,
private val isManageFundsEnabled: Boolean,
) {
fun create(userWallet: UserWallet): WalletState {
@ -157,19 +156,11 @@ internal class WalletLoadingStateFactory(
onClick = { clickIntents.onAddFundsClick(userWallet.walletId) },
)
val lastButton = if (isManageFundsEnabled) {
WalletManageButton.Transfer(
enabled = true,
dimContent = false,
onClick = { clickIntents.onTransferClick(userWallet.walletId) },
)
} else {
WalletManageButton.Sell(
enabled = true,
dimContent = false,
onClick = { clickIntents.onMultiWalletSellClick(userWalletId = userWallet.walletId) },
)
}
val lastButton = WalletManageButton.Transfer(
enabled = true,
dimContent = false,
onClick = { clickIntents.onTransferClick(userWallet.walletId) },
)
return persistentListOf(
firstButton,
@ -201,25 +192,14 @@ internal class WalletLoadingStateFactory(
},
).buttonUM,
)
if (isManageFundsEnabled) {
add(
WalletActionButtons.Transfer(
isEnabled = false,
onClick = {
clickIntents.onTransferClick(userWalletId = userWallet.walletId)
},
).buttonUM,
)
} else {
add(
WalletActionButtons.Sell(
isEnabled = false,
onClick = {
clickIntents.onMultiWalletSellClick(userWalletId = userWallet.walletId)
},
).buttonUM,
)
}
add(
WalletActionButtons.Transfer(
isEnabled = false,
onClick = {
clickIntents.onTransferClick(userWalletId = userWallet.walletId)
},
).buttonUM,
)
}.toPersistentList()
}

View file

@ -13,7 +13,6 @@ import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents
import com.tangem.feature.wallet.presentation.account.AccountDependencies
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController
import com.tangem.features.polymarket.api.PolymarketFeatureToggles
import com.tangem.features.tangempay.TangemPayFeatureToggles
import com.tangem.utils.coroutines.combine7
import com.tangem.utils.logging.TangemLogger
import dagger.assisted.Assisted
@ -39,7 +38,6 @@ internal class AccountListSubscriber @AssistedInject constructor(
private val stakingAvailabilityListUseCase: StakingAvailabilityListUseCase,
private val yieldSupplyGetShouldShowMainPromoUseCase: YieldSupplyGetShouldShowMainPromoUseCase,
private val designFeatureToggles: DesignFeatureToggles,
private val tangemPayFeatureToggles: TangemPayFeatureToggles,
private val polymarketFeatureToggles: PolymarketFeatureToggles,
) : BasicAccountListSubscriber() {
@ -94,7 +92,7 @@ internal class AccountListSubscriber @AssistedInject constructor(
yieldSupplyApyMap = yieldSupplyApyMap,
stakingAvailabilityMap = stakingAvailabilityMap,
shouldShowMainPromo = shouldShowMainPromo,
isMultipleCardsEnabled = tangemPayFeatureToggles.isMultipleCardsEnabled,
isMultipleCardsEnabled = true,
isPolymarketEnabled = polymarketFeatureToggles.isPolymarketEnabled,
)
} else {

View file

@ -5,7 +5,6 @@ import com.tangem.domain.models.wallet.UserWallet
import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents
import com.tangem.feature.wallet.presentation.account.AccountDependencies
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController
import com.tangem.features.tangempay.TangemPayFeatureToggles
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@ -21,7 +20,6 @@ internal class SingleWalletSubscriber @AssistedInject constructor(
override val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
override val stateController: WalletStateController,
override val clickIntents: WalletClickIntents,
private val tangemPayFeatureToggles: TangemPayFeatureToggles,
) : BasicAccountListSubscriber() {
override fun create(coroutineScope: CoroutineScope): Flow<Unit> = combine(
@ -29,7 +27,7 @@ internal class SingleWalletSubscriber @AssistedInject constructor(
flow2 = getAppCurrencyFlow(),
flow3 = accountDependencies.expandedAccountsHolder.expandedAccounts(userWallet),
flow4 = accountDependencies.isAccountsModeEnabledUseCase(),
flow5 = flowOf(tangemPayFeatureToggles.isMultipleCardsEnabled),
flow5 = flowOf(true),
transform = ::updateState2,
)