Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-22 15:42:04 +04:00
parent bd33dadcfe
commit 5a62376bfa
18 changed files with 194 additions and 163 deletions

View file

@ -64,7 +64,6 @@ internal class PreviewWalletSettingsComponent : WalletSettingsComponent {
onReferralClick = {},
isManageTokensAvailable = true,
isNotificationsEnabled = true,
isNotificationsFeatureEnabled = true,
onCheckedNotificationsChanged = {},
onNotificationsDescriptionClick = {},
isNotificationsPermissionGranted = false,

View file

@ -48,11 +48,13 @@ import com.tangem.hot.sdk.model.HotWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
@OptIn(ExperimentalCoroutinesApi::class)
@Suppress("LongParameterList", "LargeClass")
@ModelScoped
internal class WalletSettingsModel @Inject constructor(
@ -128,11 +130,11 @@ internal class WalletSettingsModel @Inject constructor(
}
fun combineUI(wallet: UserWallet) = combine(
getWalletNFTEnabledUseCase.invoke(params.userWalletId),
getWalletNotificationsEnabledUseCase(params.userWalletId),
isUpgradeWalletNotificationEnabledUseCase(params.userWalletId),
walletCardItemDelegate.cardItemFlow(wallet),
accountItemsDelegate.loadAccount(),
flow = getWalletNFTEnabledUseCase.invoke(params.userWalletId),
flow2 = getWalletNotificationsEnabledUseCase(params.userWalletId),
flow3 = isUpgradeWalletNotificationEnabledUseCase(params.userWalletId),
flow4 = walletCardItemDelegate.cardItemFlow(wallet),
flow5 = accountItemsDelegate.loadAccount(),
) { nftEnabled, notificationsEnabled, isUpgradeNotificationEnabled, cardItem, accountList ->
val isWalletBackedUp = when (wallet) {
is UserWallet.Hot -> wallet.backedUp
@ -145,7 +147,6 @@ internal class WalletSettingsModel @Inject constructor(
cardItem = cardItem,
isNFTEnabled = nftEnabled,
isNotificationsEnabled = notificationsEnabled,
isNotificationsFeatureEnabled = true,
isNotificationsPermissionGranted = isNotificationsPermissionGranted(),
isUpgradeNotificationEnabled = isUpgradeNotificationEnabled,
accountList = accountList,
@ -180,7 +181,6 @@ internal class WalletSettingsModel @Inject constructor(
userWallet: UserWallet,
cardItem: WalletSettingsItemUM.CardBlock,
isNFTEnabled: Boolean,
isNotificationsFeatureEnabled: Boolean,
isNotificationsEnabled: Boolean,
isNotificationsPermissionGranted: Boolean,
isUpgradeNotificationEnabled: Boolean,
@ -202,7 +202,11 @@ internal class WalletSettingsModel @Inject constructor(
is UserWallet.Cold -> userWallet.scanResponse.card.backupStatus == CardDTO.BackupStatus.NoBackup
is UserWallet.Hot -> false
},
isManageTokensAvailable = !accountsFeatureEnabled && isMultiCurrency,
isManageTokensAvailable = if (accountsFeatureEnabled) {
isMultiCurrency && accountList.count { it is WalletSettingsAccountsUM.Account } == 0
} else {
isMultiCurrency
},
isNFTFeatureEnabled = isMultiCurrency,
isNFTEnabled = isNFTEnabled,
onCheckedNFTChange = ::onCheckedNFTChange,
@ -217,7 +221,6 @@ internal class WalletSettingsModel @Inject constructor(
},
onReferralClick = { onReferralClick(userWallet) },
isNotificationsEnabled = isNotificationsEnabled,
isNotificationsFeatureEnabled = isNotificationsFeatureEnabled,
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
onCheckedNotificationsChanged = ::onCheckedNotificationsChange,
onNotificationsDescriptionClick = ::onNotificationsDescriptionClick,

View file

@ -16,6 +16,7 @@ import com.tangem.domain.account.models.AccountList
import com.tangem.domain.account.models.AccountStatusList
import com.tangem.domain.account.status.producer.SingleAccountStatusListProducer
import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier
import com.tangem.domain.account.usecase.IsAccountsModeEnabledUseCase
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
@ -40,6 +41,7 @@ internal class AccountItemsDelegate @Inject constructor(
private val singleAccountStatusListSupplier: SingleAccountStatusListSupplier,
private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase,
private val accountsFeatureToggles: AccountsFeatureToggles,
) {
val userWalletId = paramsContainer.require<WalletSettingsComponent.Params>().userWalletId
@ -51,8 +53,9 @@ internal class AccountItemsDelegate @Inject constructor(
flow = singleAccountStatusListSupplier(params),
flow2 = getSelectedAppCurrencyUseCase.invokeOrDefault(),
flow3 = getBalanceHidingSettingsUseCase.isBalanceHidden(),
) { accountStatusList, appCurrency, isBalanceHidden ->
buildUiList(accountStatusList, appCurrency, isBalanceHidden)
flow4 = isAccountsModeEnabledUseCase(),
) { accountStatusList, appCurrency, isBalanceHidden, isAccountsMode ->
buildUiList(accountStatusList, appCurrency, isBalanceHidden, isAccountsMode)
}
}
@ -60,6 +63,7 @@ internal class AccountItemsDelegate @Inject constructor(
accountStatusList: AccountStatusList,
appCurrency: AppCurrency,
isBalanceHidden: Boolean,
isAccountsMode: Boolean,
): List<WalletSettingsAccountsUM> = buildList {
fun AccountStatus.CryptoPortfolio.mapCryptoPortfolio(): WalletSettingsAccountsUM {
val accountItemUM = AccountPortfolioItemUMConverter(
@ -81,7 +85,9 @@ internal class AccountItemsDelegate @Inject constructor(
text = resourceReference(R.string.common_accounts),
).let(::add)
addAll(accounts.map(::mapAccount))
if (isAccountsMode) {
addAll(accounts.map(::mapAccount))
}
val addAccountEnabled = accounts.size < AccountList.MAX_ACCOUNTS_COUNT
val showDescription = accounts.size > 1

View file

@ -38,7 +38,6 @@ internal class ItemsBuilder @Inject constructor(
isNFTFeatureEnabled: Boolean,
isNFTEnabled: Boolean,
onCheckedNFTChange: (Boolean) -> Unit,
isNotificationsFeatureEnabled: Boolean,
isNotificationsEnabled: Boolean,
isNotificationsPermissionGranted: Boolean,
onCheckedNotificationsChanged: (Boolean) -> Unit,
@ -74,7 +73,6 @@ internal class ItemsBuilder @Inject constructor(
)
.addAll(
buildNotificationItems(
isNotificationsFeatureEnabled = isNotificationsFeatureEnabled,
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
isNotificationsEnabled = isNotificationsEnabled,
onCheckedNotificationsChanged = onCheckedNotificationsChanged,
@ -103,13 +101,11 @@ internal class ItemsBuilder @Inject constructor(
}
private fun buildNotificationItems(
isNotificationsFeatureEnabled: Boolean,
isNotificationsPermissionGranted: Boolean,
isNotificationsEnabled: Boolean,
onCheckedNotificationsChanged: (Boolean) -> Unit,
onNotificationsDescriptionClick: () -> Unit,
): List<WalletSettingsItemUM> {
if (!isNotificationsFeatureEnabled) return emptyList()
return buildList {
if (!isNotificationsPermissionGranted) {
add(buildNotificationsPermissionItem())