Updated on 2026-08-14
This commit is contained in:
parent
9db902b25c
commit
275e07cb9d
22 changed files with 34 additions and 199 deletions
|
|
@ -247,20 +247,15 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac
|
||||||
|
|
||||||
private fun createAppThemeModeFlow(): SharedFlow<AppThemeMode?> {
|
private fun createAppThemeModeFlow(): SharedFlow<AppThemeMode?> {
|
||||||
val tapApplication = application as TapApplication
|
val tapApplication = application as TapApplication
|
||||||
val featureToggle = tapApplication.darkThemeFeatureToggle
|
|
||||||
|
|
||||||
return if (featureToggle.isDarkThemeEnabled) {
|
return tapApplication.getAppThemeModeUseCase()
|
||||||
tapApplication.getAppThemeModeUseCase()
|
.map { maybeMode ->
|
||||||
.map { maybeMode ->
|
maybeMode.getOrElse { AppThemeMode.DEFAULT }
|
||||||
maybeMode.getOrElse { AppThemeMode.DEFAULT }
|
}
|
||||||
}
|
.shareIn(
|
||||||
.shareIn(
|
scope = lifecycleScope + Dispatchers.IO,
|
||||||
scope = lifecycleScope + Dispatchers.IO,
|
started = SharingStarted.WhileSubscribed(stopTimeoutMillis = 5_000),
|
||||||
started = SharingStarted.WhileSubscribed(stopTimeoutMillis = 5_000),
|
)
|
||||||
)
|
|
||||||
} else {
|
|
||||||
MutableStateFlow(AppThemeMode.FORCE_LIGHT)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ import com.tangem.domain.wallets.legacy.UserWalletsListManager
|
||||||
import com.tangem.domain.wallets.repository.WalletsRepository
|
import com.tangem.domain.wallets.repository.WalletsRepository
|
||||||
import com.tangem.features.managetokens.featuretoggles.ManageTokensFeatureToggles
|
import com.tangem.features.managetokens.featuretoggles.ManageTokensFeatureToggles
|
||||||
import com.tangem.features.send.api.featuretoggles.SendFeatureToggles
|
import com.tangem.features.send.api.featuretoggles.SendFeatureToggles
|
||||||
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
|
|
||||||
import com.tangem.tap.common.analytics.AnalyticsFactory
|
import com.tangem.tap.common.analytics.AnalyticsFactory
|
||||||
import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder
|
import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder
|
||||||
import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler
|
import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler
|
||||||
|
|
@ -62,8 +61,6 @@ import com.tangem.tap.domain.userWalletList.di.provideRuntimeImplementation
|
||||||
import com.tangem.tap.domain.walletconnect.WalletConnectRepository
|
import com.tangem.tap.domain.walletconnect.WalletConnectRepository
|
||||||
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectSessionsRepository
|
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectSessionsRepository
|
||||||
import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles
|
import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles
|
||||||
import com.tangem.tap.features.details.DarkThemeFeatureToggle
|
|
||||||
import com.tangem.tap.features.details.featuretoggles.DetailsFeatureToggles
|
|
||||||
import com.tangem.tap.proxy.AppStateHolder
|
import com.tangem.tap.proxy.AppStateHolder
|
||||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||||
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
||||||
|
|
@ -110,9 +107,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferencesDataSource: PreferencesDataSource
|
lateinit var preferencesDataSource: PreferencesDataSource
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var walletFeatureToggles: WalletFeatureToggles
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var walletConnect2Repository: WalletConnect2Repository
|
lateinit var walletConnect2Repository: WalletConnect2Repository
|
||||||
|
|
||||||
|
|
@ -149,12 +143,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var balanceHidingRepository: BalanceHidingRepository
|
lateinit var balanceHidingRepository: BalanceHidingRepository
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var detailsFeatureToggles: DetailsFeatureToggles
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var darkThemeFeatureToggle: DarkThemeFeatureToggle
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userTokensStore: UserTokensStore
|
lateinit var userTokensStore: UserTokensStore
|
||||||
|
|
||||||
|
|
@ -222,9 +210,7 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
storageService = userTokensStorageService,
|
storageService = userTokensStorageService,
|
||||||
)
|
)
|
||||||
derivationsFinder = DerivationsFinder(
|
derivationsFinder = DerivationsFinder(
|
||||||
legacyTokensStore = userTokensStorageService,
|
|
||||||
newTokensStore = userTokensStore,
|
newTokensStore = userTokensStore,
|
||||||
walletFeatureToggles = walletFeatureToggles,
|
|
||||||
dispatchers = AppCoroutineDispatcherProvider(),
|
dispatchers = AppCoroutineDispatcherProvider(),
|
||||||
)
|
)
|
||||||
appStateHolder.mainStore = store
|
appStateHolder.mainStore = store
|
||||||
|
|
@ -242,7 +228,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
assetReader = assetReader,
|
assetReader = assetReader,
|
||||||
networkConnectionManager = networkConnectionManager,
|
networkConnectionManager = networkConnectionManager,
|
||||||
customTokenFeatureToggles = customTokenFeatureToggles,
|
customTokenFeatureToggles = customTokenFeatureToggles,
|
||||||
walletFeatureToggles = walletFeatureToggles,
|
|
||||||
walletConnectRepository = walletConnect2Repository,
|
walletConnectRepository = walletConnect2Repository,
|
||||||
walletConnectSessionsRepository = walletConnectSessionsRepository,
|
walletConnectSessionsRepository = walletConnectSessionsRepository,
|
||||||
manageTokensFeatureToggles = manageTokensFeatureToggles,
|
manageTokensFeatureToggles = manageTokensFeatureToggles,
|
||||||
|
|
@ -254,7 +239,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
currenciesRepository = currenciesRepository,
|
currenciesRepository = currenciesRepository,
|
||||||
appThemeModeRepository = appThemeModeRepository,
|
appThemeModeRepository = appThemeModeRepository,
|
||||||
balanceHidingRepository = balanceHidingRepository,
|
balanceHidingRepository = balanceHidingRepository,
|
||||||
detailsFeatureToggles = detailsFeatureToggles,
|
|
||||||
walletsRepository = walletsRepository,
|
walletsRepository = walletsRepository,
|
||||||
sendFeatureToggles = sendFeatureToggles,
|
sendFeatureToggles = sendFeatureToggles,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import com.tangem.datasource.config.models.Config
|
||||||
import com.tangem.domain.common.LogConfig
|
import com.tangem.domain.common.LogConfig
|
||||||
import com.tangem.domain.models.scan.CardDTO
|
import com.tangem.domain.models.scan.CardDTO
|
||||||
import com.tangem.domain.models.scan.ScanResponse
|
import com.tangem.domain.models.scan.ScanResponse
|
||||||
import com.tangem.tap.*
|
|
||||||
import com.tangem.tap.common.analytics.events.Basic
|
import com.tangem.tap.common.analytics.events.Basic
|
||||||
import com.tangem.tap.common.entities.FiatCurrency
|
import com.tangem.tap.common.entities.FiatCurrency
|
||||||
import com.tangem.tap.common.extensions.dispatchDebugErrorNotification
|
import com.tangem.tap.common.extensions.dispatchDebugErrorNotification
|
||||||
|
|
@ -18,6 +17,7 @@ import com.tangem.tap.common.extensions.dispatchOnMain
|
||||||
import com.tangem.tap.common.extensions.dispatchWithMain
|
import com.tangem.tap.common.extensions.dispatchWithMain
|
||||||
import com.tangem.tap.common.redux.AppState
|
import com.tangem.tap.common.redux.AppState
|
||||||
import com.tangem.tap.features.send.redux.SendAction
|
import com.tangem.tap.features.send.redux.SendAction
|
||||||
|
import com.tangem.tap.mainScope
|
||||||
import com.tangem.tap.network.exchangeServices.BuyExchangeService
|
import com.tangem.tap.network.exchangeServices.BuyExchangeService
|
||||||
import com.tangem.tap.network.exchangeServices.CardExchangeRules
|
import com.tangem.tap.network.exchangeServices.CardExchangeRules
|
||||||
import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager
|
import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager
|
||||||
|
|
@ -26,6 +26,9 @@ import com.tangem.tap.network.exchangeServices.mercuryo.MercuryoEnvironment
|
||||||
import com.tangem.tap.network.exchangeServices.mercuryo.MercuryoService
|
import com.tangem.tap.network.exchangeServices.mercuryo.MercuryoService
|
||||||
import com.tangem.tap.network.exchangeServices.moonpay.MoonPayService
|
import com.tangem.tap.network.exchangeServices.moonpay.MoonPayService
|
||||||
import com.tangem.tap.proxy.redux.DaggerGraphState
|
import com.tangem.tap.proxy.redux.DaggerGraphState
|
||||||
|
import com.tangem.tap.scope
|
||||||
|
import com.tangem.tap.store
|
||||||
|
import com.tangem.tap.userWalletsListManager
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.*
|
import kotlinx.coroutines.flow.*
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
@ -66,17 +69,7 @@ private fun handleAction(action: Action, appState: () -> AppState?) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is GlobalAction.RestoreAppCurrency -> {
|
is GlobalAction.RestoreAppCurrency -> {
|
||||||
val daggerGraphState = store.state.daggerGraphState
|
restoreAppCurrency()
|
||||||
val walletFeatureToggles = daggerGraphState.get(DaggerGraphState::walletFeatureToggles)
|
|
||||||
val detailsFeatureToggles = daggerGraphState.get(DaggerGraphState::detailsFeatureToggles)
|
|
||||||
|
|
||||||
if (walletFeatureToggles.isRedesignedScreenEnabled ||
|
|
||||||
detailsFeatureToggles.isRedesignedAppCurrencySelectorEnabled
|
|
||||||
) {
|
|
||||||
restoreAppCurrencyNew()
|
|
||||||
} else {
|
|
||||||
restoreAppCurrencyLegacy()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is GlobalAction.HideWarningMessage -> {
|
is GlobalAction.HideWarningMessage -> {
|
||||||
store.state.globalState.warningManager?.let {
|
store.state.globalState.warningManager?.let {
|
||||||
|
|
@ -193,17 +186,7 @@ private fun handleAction(action: Action, appState: () -> AppState?) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun restoreAppCurrencyLegacy() {
|
private fun restoreAppCurrency() {
|
||||||
store.dispatch(
|
|
||||||
GlobalAction.RestoreAppCurrency.Success(
|
|
||||||
preferencesStorage.fiatCurrenciesPrefStorage.getAppCurrency()
|
|
||||||
?.run { FiatCurrency(code, name, symbol) }
|
|
||||||
?: FiatCurrency.Default,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun restoreAppCurrencyNew() {
|
|
||||||
scope.launch {
|
scope.launch {
|
||||||
val currency = store.state.daggerGraphState.get(DaggerGraphState::appCurrencyRepository)
|
val currency = store.state.daggerGraphState.get(DaggerGraphState::appCurrencyRepository)
|
||||||
.getSelectedAppCurrency()
|
.getSelectedAppCurrency()
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ import java.util.concurrent.CopyOnWriteArrayList
|
||||||
/**
|
/**
|
||||||
[REDACTED_AUTHOR]
|
[REDACTED_AUTHOR]
|
||||||
*/
|
*/
|
||||||
// TODO: Delete with WalletFeatureToggles
|
// TODO: Delete with SendFeatureToggles
|
||||||
@Deprecated(message = "Used only in old wallet screen")
|
@Deprecated(message = "Used only in old send screen")
|
||||||
class WarningMessagesManager {
|
class WarningMessagesManager {
|
||||||
|
|
||||||
private val warningsList = CopyOnWriteArrayList<WarningMessage>()
|
private val warningsList = CopyOnWriteArrayList<WarningMessage>()
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@ import com.tangem.domain.common.extensions.fromNetworkId
|
||||||
import com.tangem.domain.models.scan.CardDTO
|
import com.tangem.domain.models.scan.CardDTO
|
||||||
import com.tangem.domain.userwallets.UserWalletIdBuilder
|
import com.tangem.domain.userwallets.UserWalletIdBuilder
|
||||||
import com.tangem.domain.wallets.models.UserWalletId
|
import com.tangem.domain.wallets.models.UserWalletId
|
||||||
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
|
|
||||||
import com.tangem.tap.domain.tokens.UserTokensStorageService
|
|
||||||
import com.tangem.tap.features.demo.DemoHelper
|
import com.tangem.tap.features.demo.DemoHelper
|
||||||
import com.tangem.tap.features.wallet.models.Currency
|
|
||||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
|
|
@ -25,9 +22,7 @@ internal data class BlockchainToDerive(
|
||||||
|
|
||||||
// FIXME: May be move to DI, currently unnecessary
|
// FIXME: May be move to DI, currently unnecessary
|
||||||
internal class DerivationsFinder(
|
internal class DerivationsFinder(
|
||||||
private val legacyTokensStore: UserTokensStorageService,
|
|
||||||
private val newTokensStore: UserTokensStore,
|
private val newTokensStore: UserTokensStore,
|
||||||
private val walletFeatureToggles: WalletFeatureToggles,
|
|
||||||
private val dispatchers: CoroutineDispatcherProvider,
|
private val dispatchers: CoroutineDispatcherProvider,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -40,11 +35,7 @@ internal class DerivationsFinder(
|
||||||
val derivationStyle = derivationStyleProvider.getDerivationStyle()
|
val derivationStyle = derivationStyleProvider.getDerivationStyle()
|
||||||
|
|
||||||
var blockchains = withContext(dispatchers.io) {
|
var blockchains = withContext(dispatchers.io) {
|
||||||
if (walletFeatureToggles.isRedesignedScreenEnabled) {
|
getBlockchains(userWalletId)
|
||||||
getBlockchainsNew(userWalletId)
|
|
||||||
} else {
|
|
||||||
getBlockchainsLegacy(userWalletId)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockchains.isEmpty()) {
|
if (blockchains.isEmpty()) {
|
||||||
|
|
@ -72,7 +63,7 @@ internal class DerivationsFinder(
|
||||||
return blockchains
|
return blockchains
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun getBlockchainsNew(userWalletId: UserWalletId): MutableSet<BlockchainToDerive> {
|
private suspend fun getBlockchains(userWalletId: UserWalletId): MutableSet<BlockchainToDerive> {
|
||||||
val responseTokens = newTokensStore.getSyncOrNull(userWalletId)
|
val responseTokens = newTokensStore.getSyncOrNull(userWalletId)
|
||||||
?.tokens
|
?.tokens
|
||||||
?: return hashSetOf()
|
?: return hashSetOf()
|
||||||
|
|
@ -88,22 +79,6 @@ internal class DerivationsFinder(
|
||||||
.toMutableSet()
|
.toMutableSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getBlockchainsLegacy(userWalletId: UserWalletId): MutableSet<BlockchainToDerive> {
|
|
||||||
val currencies = legacyTokensStore.getUserTokens(userWalletId.stringValue)
|
|
||||||
?.takeIf { it.isNotEmpty() }
|
|
||||||
?: return hashSetOf()
|
|
||||||
|
|
||||||
return currencies.asSequence()
|
|
||||||
.filterIsInstance<Currency.Blockchain>()
|
|
||||||
.map { coin ->
|
|
||||||
val blockchain = coin.blockchain
|
|
||||||
val derivationPath = coin.derivationPath?.let(::DerivationPath)
|
|
||||||
|
|
||||||
BlockchainToDerive(blockchain, derivationPath)
|
|
||||||
}
|
|
||||||
.toMutableSet()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Move to user wallet config
|
// TODO: Move to user wallet config
|
||||||
private fun getDemoBlockchains(derivationStyle: DerivationStyle?): MutableSet<BlockchainToDerive> {
|
private fun getDemoBlockchains(derivationStyle: DerivationStyle?): MutableSet<BlockchainToDerive> {
|
||||||
return DemoHelper.config.demoBlockchains.mapToBlockchainsWithDerivations(derivationStyle)
|
return DemoHelper.config.demoBlockchains.mapToBlockchainsWithDerivations(derivationStyle)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import com.tangem.domain.features.addCustomToken.CustomCurrency
|
||||||
import com.tangem.domain.tokens.GetCryptoCurrenciesUseCase
|
import com.tangem.domain.tokens.GetCryptoCurrenciesUseCase
|
||||||
import com.tangem.domain.tokens.model.CryptoCurrency
|
import com.tangem.domain.tokens.model.CryptoCurrency
|
||||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
||||||
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
|
|
||||||
import com.tangem.tap.features.customtoken.impl.domain.CustomTokenInteractor
|
import com.tangem.tap.features.customtoken.impl.domain.CustomTokenInteractor
|
||||||
import com.tangem.tap.features.customtoken.impl.domain.models.FoundToken
|
import com.tangem.tap.features.customtoken.impl.domain.models.FoundToken
|
||||||
import com.tangem.tap.features.customtoken.impl.presentation.models.*
|
import com.tangem.tap.features.customtoken.impl.presentation.models.*
|
||||||
|
|
@ -68,7 +67,6 @@ internal class AddCustomTokenViewModel @Inject constructor(
|
||||||
private val featureInteractor: CustomTokenInteractor,
|
private val featureInteractor: CustomTokenInteractor,
|
||||||
private val dispatchers: AppCoroutineDispatcherProvider,
|
private val dispatchers: AppCoroutineDispatcherProvider,
|
||||||
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||||
private val walletFeatureToggles: WalletFeatureToggles,
|
|
||||||
) : ViewModel(), DefaultLifecycleObserver {
|
) : ViewModel(), DefaultLifecycleObserver {
|
||||||
|
|
||||||
private val analyticsSender = AddCustomTokenAnalyticsSender(analyticsEventHandler)
|
private val analyticsSender = AddCustomTokenAnalyticsSender(analyticsEventHandler)
|
||||||
|
|
@ -85,18 +83,16 @@ internal class AddCustomTokenViewModel @Inject constructor(
|
||||||
private var foundToken: FoundToken? = null
|
private var foundToken: FoundToken? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (walletFeatureToggles.isRedesignedScreenEnabled) {
|
viewModelScope.launch(dispatchers.main) {
|
||||||
viewModelScope.launch(dispatchers.main) {
|
currentCryptoCurrencies = getSelectedWalletSyncUseCase().fold(
|
||||||
currentCryptoCurrencies = getSelectedWalletSyncUseCase().fold(
|
ifLeft = { emptyList() },
|
||||||
ifLeft = { emptyList() },
|
ifRight = { selectedWallet ->
|
||||||
ifRight = { selectedWallet ->
|
getCurrenciesUseCase(selectedWallet.walletId).fold(
|
||||||
getCurrenciesUseCase(selectedWallet.walletId).fold(
|
ifLeft = { emptyList() },
|
||||||
ifLeft = { emptyList() },
|
ifRight = { it },
|
||||||
ifRight = { it },
|
)
|
||||||
)
|
},
|
||||||
},
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
package com.tangem.tap.features.details
|
|
||||||
|
|
||||||
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
|
|
||||||
|
|
||||||
class DarkThemeFeatureToggle(
|
|
||||||
private val featureTogglesManager: FeatureTogglesManager,
|
|
||||||
) {
|
|
||||||
val isDarkThemeEnabled: Boolean
|
|
||||||
get() = featureTogglesManager.isFeatureEnabled(name = "DARK_THEME_ENABLED")
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
package com.tangem.tap.features.details.featuretoggles
|
|
||||||
|
|
||||||
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
|
|
||||||
|
|
||||||
internal class DefaultDetailsFeatureToggles(
|
|
||||||
private val featureTogglesManager: FeatureTogglesManager,
|
|
||||||
) : DetailsFeatureToggles {
|
|
||||||
|
|
||||||
override val isRedesignedAppCurrencySelectorEnabled: Boolean
|
|
||||||
get() = featureTogglesManager.isFeatureEnabled(name = "REDESIGNED_APP_CURRENCY_SELECTOR_ENABLED")
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
package com.tangem.tap.features.details.featuretoggles
|
|
||||||
|
|
||||||
interface DetailsFeatureToggles {
|
|
||||||
|
|
||||||
val isRedesignedAppCurrencySelectorEnabled: Boolean
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
package com.tangem.tap.features.details.featuretoggles
|
|
||||||
|
|
||||||
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
|
|
||||||
import dagger.Module
|
|
||||||
import dagger.Provides
|
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
|
|
||||||
@Module
|
|
||||||
@InstallIn(SingletonComponent::class)
|
|
||||||
internal object DetailsFeatureTogglesModule {
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
fun provideDetailsFeatureToggles(featureTogglesManager: FeatureTogglesManager): DetailsFeatureToggles {
|
|
||||||
return DefaultDetailsFeatureToggles(featureTogglesManager)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -13,7 +13,6 @@ sealed class DetailsAction : Action {
|
||||||
|
|
||||||
data class PrepareScreen(
|
data class PrepareScreen(
|
||||||
val scanResponse: ScanResponse,
|
val scanResponse: ScanResponse,
|
||||||
val darkThemeSwitchEnabled: Boolean,
|
|
||||||
val shouldSaveUserWallets: Boolean,
|
val shouldSaveUserWallets: Boolean,
|
||||||
) : DetailsAction()
|
) : DetailsAction()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,6 @@ private fun handlePrepareScreen(action: DetailsAction.PrepareScreen): DetailsSta
|
||||||
store.state.daggerGraphState
|
store.state.daggerGraphState
|
||||||
.get { balanceHidingRepository }.getBalanceHidingSettings().isHidingEnabledInSettings
|
.get { balanceHidingRepository }.getBalanceHidingSettings().isHidingEnabledInSettings
|
||||||
},
|
},
|
||||||
darkThemeSwitchEnabled = action.darkThemeSwitchEnabled,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,6 @@ data class AppSettingsState(
|
||||||
val isInProgress: Boolean = false,
|
val isInProgress: Boolean = false,
|
||||||
val selectedFiatCurrency: FiatCurrency = FiatCurrency.Default,
|
val selectedFiatCurrency: FiatCurrency = FiatCurrency.Default,
|
||||||
val selectedThemeMode: AppThemeMode = AppThemeMode.DEFAULT,
|
val selectedThemeMode: AppThemeMode = AppThemeMode.DEFAULT,
|
||||||
val darkThemeSwitchEnabled: Boolean = false,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
enum class SecurityOption { LongTap, PassCode, AccessCode }
|
enum class SecurityOption { LongTap, PassCode, AccessCode }
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import com.tangem.core.navigation.NavigationAction
|
||||||
import com.tangem.core.ui.screen.ComposeFragment
|
import com.tangem.core.ui.screen.ComposeFragment
|
||||||
import com.tangem.core.ui.theme.AppThemeModeHolder
|
import com.tangem.core.ui.theme.AppThemeModeHolder
|
||||||
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
||||||
import com.tangem.tap.features.details.featuretoggles.DetailsFeatureToggles
|
|
||||||
import com.tangem.tap.features.details.redux.DetailsAction
|
import com.tangem.tap.features.details.redux.DetailsAction
|
||||||
import com.tangem.tap.features.details.redux.DetailsState
|
import com.tangem.tap.features.details.redux.DetailsState
|
||||||
import com.tangem.tap.store
|
import com.tangem.tap.store
|
||||||
|
|
@ -21,14 +20,11 @@ internal class AppSettingsFragment : ComposeFragment(), StoreSubscriber<DetailsS
|
||||||
@Inject
|
@Inject
|
||||||
override lateinit var appThemeModeHolder: AppThemeModeHolder
|
override lateinit var appThemeModeHolder: AppThemeModeHolder
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var detailsFeatureToggles: DetailsFeatureToggles
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var appCurrencyRepository: AppCurrencyRepository
|
lateinit var appCurrencyRepository: AppCurrencyRepository
|
||||||
|
|
||||||
private val viewModel by lazy(mode = LazyThreadSafetyMode.NONE) {
|
private val viewModel by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||||
AppSettingsViewModel(store, detailsFeatureToggles, appCurrencyRepository)
|
AppSettingsViewModel(store, appCurrencyRepository)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import com.tangem.tap.common.entities.FiatCurrency
|
||||||
import com.tangem.tap.common.extensions.dispatchOnMain
|
import com.tangem.tap.common.extensions.dispatchOnMain
|
||||||
import com.tangem.tap.common.extensions.dispatchWithMain
|
import com.tangem.tap.common.extensions.dispatchWithMain
|
||||||
import com.tangem.tap.common.redux.AppState
|
import com.tangem.tap.common.redux.AppState
|
||||||
import com.tangem.tap.features.details.featuretoggles.DetailsFeatureToggles
|
|
||||||
import com.tangem.tap.features.details.redux.AppSetting
|
import com.tangem.tap.features.details.redux.AppSetting
|
||||||
import com.tangem.tap.features.details.redux.AppSettingsState
|
import com.tangem.tap.features.details.redux.AppSettingsState
|
||||||
import com.tangem.tap.features.details.redux.DetailsAction
|
import com.tangem.tap.features.details.redux.DetailsAction
|
||||||
|
|
@ -31,7 +30,6 @@ import org.rekotlin.Store
|
||||||
|
|
||||||
internal class AppSettingsViewModel(
|
internal class AppSettingsViewModel(
|
||||||
private val store: Store<AppState>,
|
private val store: Store<AppState>,
|
||||||
private val detailsFeatureToggles: DetailsFeatureToggles,
|
|
||||||
private val appCurrencyRepository: AppCurrencyRepository,
|
private val appCurrencyRepository: AppCurrencyRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -44,9 +42,7 @@ internal class AppSettingsViewModel(
|
||||||
private set
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (detailsFeatureToggles.isRedesignedAppCurrencySelectorEnabled) {
|
bootstrapAppCurrencyUpdates()
|
||||||
bootstrapAppCurrencyUpdates()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateState(state: DetailsState) {
|
fun updateState(state: DetailsState) {
|
||||||
|
|
@ -93,11 +89,9 @@ internal class AppSettingsViewModel(
|
||||||
onCheckedChange = ::onFlipToHideBalanceToggled,
|
onCheckedChange = ::onFlipToHideBalanceToggled,
|
||||||
).let(::add)
|
).let(::add)
|
||||||
|
|
||||||
if (state.darkThemeSwitchEnabled) {
|
itemsFactory.createSelectThemeModeButton(state.selectedThemeMode) {
|
||||||
itemsFactory.createSelectThemeModeButton(state.selectedThemeMode) {
|
showThemeModeSelector(state.selectedThemeMode)
|
||||||
showThemeModeSelector(state.selectedThemeMode)
|
}.let(::add)
|
||||||
}.let(::add)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return items.toImmutableList()
|
return items.toImmutableList()
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import com.tangem.core.ui.screen.ComposeFragment
|
||||||
import com.tangem.core.ui.theme.AppThemeModeHolder
|
import com.tangem.core.ui.theme.AppThemeModeHolder
|
||||||
import com.tangem.domain.wallets.repository.WalletsRepository
|
import com.tangem.domain.wallets.repository.WalletsRepository
|
||||||
import com.tangem.tap.common.analytics.events.Settings
|
import com.tangem.tap.common.analytics.events.Settings
|
||||||
import com.tangem.tap.features.details.DarkThemeFeatureToggle
|
|
||||||
import com.tangem.tap.features.details.redux.DetailsState
|
import com.tangem.tap.features.details.redux.DetailsState
|
||||||
import com.tangem.tap.store
|
import com.tangem.tap.store
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
@ -22,9 +21,6 @@ internal class DetailsFragment : ComposeFragment(), StoreSubscriber<DetailsState
|
||||||
@Inject
|
@Inject
|
||||||
override lateinit var appThemeModeHolder: AppThemeModeHolder
|
override lateinit var appThemeModeHolder: AppThemeModeHolder
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var darkThemeFeatureToggle: DarkThemeFeatureToggle
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var walletsRepository: WalletsRepository
|
lateinit var walletsRepository: WalletsRepository
|
||||||
|
|
||||||
|
|
@ -32,7 +28,7 @@ internal class DetailsFragment : ComposeFragment(), StoreSubscriber<DetailsState
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
detailsViewModel = DetailsViewModel(store, darkThemeFeatureToggle, walletsRepository)
|
detailsViewModel = DetailsViewModel(store, walletsRepository)
|
||||||
Analytics.send(Settings.ScreenOpened())
|
Analytics.send(Settings.ScreenOpened())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import com.tangem.tap.common.feedback.FeedbackEmail
|
||||||
import com.tangem.tap.common.feedback.SupportInfo
|
import com.tangem.tap.common.feedback.SupportInfo
|
||||||
import com.tangem.tap.common.redux.AppState
|
import com.tangem.tap.common.redux.AppState
|
||||||
import com.tangem.tap.common.redux.global.GlobalAction
|
import com.tangem.tap.common.redux.global.GlobalAction
|
||||||
import com.tangem.tap.features.details.DarkThemeFeatureToggle
|
|
||||||
import com.tangem.tap.features.details.redux.DetailsAction
|
import com.tangem.tap.features.details.redux.DetailsAction
|
||||||
import com.tangem.tap.features.details.redux.DetailsState
|
import com.tangem.tap.features.details.redux.DetailsState
|
||||||
import com.tangem.tap.features.disclaimer.redux.DisclaimerAction
|
import com.tangem.tap.features.disclaimer.redux.DisclaimerAction
|
||||||
|
|
@ -43,7 +42,6 @@ import timber.log.Timber
|
||||||
// TODO: change to Android ViewModel [REDACTED_JIRA]
|
// TODO: change to Android ViewModel [REDACTED_JIRA]
|
||||||
internal class DetailsViewModel(
|
internal class DetailsViewModel(
|
||||||
private val store: Store<AppState>,
|
private val store: Store<AppState>,
|
||||||
private val darkThemeFeatureToggle: DarkThemeFeatureToggle,
|
|
||||||
private val walletsRepository: WalletsRepository,
|
private val walletsRepository: WalletsRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
@ -202,7 +200,6 @@ internal class DetailsViewModel(
|
||||||
store.dispatchWithMain(
|
store.dispatchWithMain(
|
||||||
DetailsAction.PrepareScreen(
|
DetailsAction.PrepareScreen(
|
||||||
scanResponse = selectedUserWallet.scanResponse,
|
scanResponse = selectedUserWallet.scanResponse,
|
||||||
darkThemeSwitchEnabled = darkThemeFeatureToggle.isDarkThemeEnabled,
|
|
||||||
shouldSaveUserWallets = walletsRepository.shouldSaveUserWalletsSync(),
|
shouldSaveUserWallets = walletsRepository.shouldSaveUserWalletsSync(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.tangem.tap.proxy.di
|
||||||
|
|
||||||
import com.tangem.common.Provider
|
import com.tangem.common.Provider
|
||||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||||
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
|
|
||||||
import com.tangem.domain.card.repository.CardSdkConfigRepository
|
import com.tangem.domain.card.repository.CardSdkConfigRepository
|
||||||
import com.tangem.domain.common.CardTypesResolver
|
import com.tangem.domain.common.CardTypesResolver
|
||||||
import com.tangem.domain.common.util.cardTypesResolver
|
import com.tangem.domain.common.util.cardTypesResolver
|
||||||
|
|
@ -13,7 +12,6 @@ import com.tangem.feature.learn2earn.domain.api.Learn2earnDependencyProvider
|
||||||
import com.tangem.lib.crypto.DerivationManager
|
import com.tangem.lib.crypto.DerivationManager
|
||||||
import com.tangem.lib.crypto.TransactionManager
|
import com.tangem.lib.crypto.TransactionManager
|
||||||
import com.tangem.lib.crypto.UserWalletManager
|
import com.tangem.lib.crypto.UserWalletManager
|
||||||
import com.tangem.tap.features.details.DarkThemeFeatureToggle
|
|
||||||
import com.tangem.tap.proxy.*
|
import com.tangem.tap.proxy.*
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
|
@ -75,12 +73,6 @@ class ProxyModule {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideDarkThemeFeatureToggle(featureTogglesManager: FeatureTogglesManager): DarkThemeFeatureToggle {
|
|
||||||
return DarkThemeFeatureToggle(featureTogglesManager)
|
|
||||||
}
|
|
||||||
|
|
||||||
// regions FeatureConsumers
|
// regions FeatureConsumers
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,11 @@ import com.tangem.features.send.api.featuretoggles.SendFeatureToggles
|
||||||
import com.tangem.features.send.api.navigation.SendRouter
|
import com.tangem.features.send.api.navigation.SendRouter
|
||||||
import com.tangem.features.tester.api.TesterRouter
|
import com.tangem.features.tester.api.TesterRouter
|
||||||
import com.tangem.features.tokendetails.navigation.TokenDetailsRouter
|
import com.tangem.features.tokendetails.navigation.TokenDetailsRouter
|
||||||
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
|
|
||||||
import com.tangem.features.wallet.navigation.WalletRouter
|
import com.tangem.features.wallet.navigation.WalletRouter
|
||||||
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectInteractor
|
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectInteractor
|
||||||
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectRepository
|
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectRepository
|
||||||
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectSessionsRepository
|
import com.tangem.tap.domain.walletconnect2.domain.WalletConnectSessionsRepository
|
||||||
import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles
|
import com.tangem.tap.features.customtoken.api.featuretoggles.CustomTokenFeatureToggles
|
||||||
import com.tangem.tap.features.details.featuretoggles.DetailsFeatureToggles
|
|
||||||
import com.tangem.tap.proxy.AppStateHolder
|
import com.tangem.tap.proxy.AppStateHolder
|
||||||
import org.rekotlin.StateType
|
import org.rekotlin.StateType
|
||||||
|
|
||||||
|
|
@ -34,7 +32,6 @@ data class DaggerGraphState(
|
||||||
val networkConnectionManager: NetworkConnectionManager? = null,
|
val networkConnectionManager: NetworkConnectionManager? = null,
|
||||||
val customTokenFeatureToggles: CustomTokenFeatureToggles? = null,
|
val customTokenFeatureToggles: CustomTokenFeatureToggles? = null,
|
||||||
val scanCardUseCase: ScanCardUseCase? = null,
|
val scanCardUseCase: ScanCardUseCase? = null,
|
||||||
val walletFeatureToggles: WalletFeatureToggles? = null,
|
|
||||||
val walletRouter: WalletRouter? = null,
|
val walletRouter: WalletRouter? = null,
|
||||||
val walletConnectRepository: WalletConnectRepository? = null,
|
val walletConnectRepository: WalletConnectRepository? = null,
|
||||||
val walletConnectSessionsRepository: WalletConnectSessionsRepository? = null,
|
val walletConnectSessionsRepository: WalletConnectSessionsRepository? = null,
|
||||||
|
|
@ -49,7 +46,6 @@ data class DaggerGraphState(
|
||||||
val appStateHolder: AppStateHolder? = null,
|
val appStateHolder: AppStateHolder? = null,
|
||||||
val appThemeModeRepository: AppThemeModeRepository? = null,
|
val appThemeModeRepository: AppThemeModeRepository? = null,
|
||||||
val balanceHidingRepository: BalanceHidingRepository? = null,
|
val balanceHidingRepository: BalanceHidingRepository? = null,
|
||||||
val detailsFeatureToggles: DetailsFeatureToggles? = null,
|
|
||||||
val walletsRepository: WalletsRepository? = null,
|
val walletsRepository: WalletsRepository? = null,
|
||||||
val networksRepository: NetworksRepository? = null,
|
val networksRepository: NetworksRepository? = null,
|
||||||
val sendFeatureToggles: SendFeatureToggles? = null,
|
val sendFeatureToggles: SendFeatureToggles? = null,
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,8 @@
|
||||||
[
|
[
|
||||||
{
|
|
||||||
"name": "OPTIMISM_SWAP_FEATURE_ENABLED",
|
|
||||||
"version": "4.3.1"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "NEW_CARD_SCANNING_ENABLED",
|
"name": "NEW_CARD_SCANNING_ENABLED",
|
||||||
"version": "undefined"
|
"version": "undefined"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "REDESIGNED_WALLET_SCREEN_ENABLED",
|
|
||||||
"version": "5.0.0"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "1INCH_LEARN_2_EARN_ENABLED",
|
"name": "1INCH_LEARN_2_EARN_ENABLED",
|
||||||
"version": "undefined"
|
"version": "undefined"
|
||||||
|
|
@ -19,14 +11,6 @@
|
||||||
"name": "SHOPIFY_DYNAMIC_ENABLED",
|
"name": "SHOPIFY_DYNAMIC_ENABLED",
|
||||||
"version": "undefined"
|
"version": "undefined"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "REDESIGNED_APP_CURRENCY_SELECTOR_ENABLED",
|
|
||||||
"version": "5.0.0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "DARK_THEME_ENABLED",
|
|
||||||
"version": "5.0.0"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "REDESIGNED_MANAGE_TOKENS_SCREEN_ENABLED",
|
"name": "REDESIGNED_MANAGE_TOKENS_SCREEN_ENABLED",
|
||||||
"version": "undefined"
|
"version": "undefined"
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,5 @@ package com.tangem.features.wallet.featuretoggles
|
||||||
*/
|
*/
|
||||||
interface WalletFeatureToggles {
|
interface WalletFeatureToggles {
|
||||||
|
|
||||||
/** Availability of redesigned screen */
|
|
||||||
val isRedesignedScreenEnabled: Boolean
|
|
||||||
|
|
||||||
val isWalletsScrollingPreviewEnabled: Boolean
|
val isWalletsScrollingPreviewEnabled: Boolean
|
||||||
}
|
}
|
||||||
|
|
@ -14,9 +14,6 @@ internal class DefaultWalletFeatureToggles(
|
||||||
private val featureTogglesManager: FeatureTogglesManager,
|
private val featureTogglesManager: FeatureTogglesManager,
|
||||||
) : WalletFeatureToggles {
|
) : WalletFeatureToggles {
|
||||||
|
|
||||||
override val isRedesignedScreenEnabled: Boolean
|
|
||||||
get() = featureTogglesManager.isFeatureEnabled(name = "REDESIGNED_WALLET_SCREEN_ENABLED")
|
|
||||||
|
|
||||||
override val isWalletsScrollingPreviewEnabled: Boolean
|
override val isWalletsScrollingPreviewEnabled: Boolean
|
||||||
get() = featureTogglesManager.isFeatureEnabled(name = "WALLETS_SCROLLING_PREVIEW_ENABLED")
|
get() = featureTogglesManager.isFeatureEnabled(name = "WALLETS_SCROLLING_PREVIEW_ENABLED")
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue