diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt index 1a1e789e5f..3cd51e527f 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt @@ -15,6 +15,7 @@ import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig.ShowRefreshState import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.message.SnackbarMessage +import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase import com.tangem.domain.models.TokenReceiveConfig import com.tangem.domain.pay.TangemPayTopUpData import com.tangem.domain.pay.model.TangemPayCardBalance @@ -41,8 +42,8 @@ import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn import com.tangem.utils.transformer.update import kotlinx.coroutines.Job -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import javax.inject.Inject @@ -55,6 +56,7 @@ internal class TangemPayDetailsModel @Inject constructor( private val router: Router, private val urlOpener: UrlOpener, private val cardDetailsRepository: TangemPayCardDetailsRepository, + private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, private val uiMessageSender: UiMessageSender, private val cardDetailsEventListener: CardDetailsEventListener, private val txHistoryUpdateListener: TangemPayTxHistoryUpdateListener, @@ -80,6 +82,7 @@ internal class TangemPayDetailsModel @Inject constructor( val bottomSheetNavigation: SlotNavigation = SlotNavigation() init { + handleBalanceHiding() fetchAddToWalletBanner() fetchBalance() } @@ -174,6 +177,12 @@ internal class TangemPayDetailsModel @Inject constructor( }.saveIn(fetchBalanceJobHolder) } + private fun handleBalanceHiding() { + getBalanceHidingSettingsUseCase().onEach { + uiState.update(DetailBalanceVisibilityTransformer(isHidden = it.isBalanceHidden)) + }.launchIn(modelScope) + } + private fun fetchAddToWalletBanner() { modelScope.launch { val isDone = cardDetailsRepository.isAddToWalletDone().getOrNull() ?: false diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailBalanceVisibilityTransformer.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailBalanceVisibilityTransformer.kt new file mode 100644 index 0000000000..02b03a3a14 --- /dev/null +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailBalanceVisibilityTransformer.kt @@ -0,0 +1,13 @@ +package com.tangem.features.tangempay.model.transformers + +import com.tangem.features.tangempay.entity.TangemPayDetailsUM +import com.tangem.utils.transformer.Transformer + +internal class DetailBalanceVisibilityTransformer( + private val isHidden: Boolean, +) : Transformer { + + override fun transform(prevState: TangemPayDetailsUM): TangemPayDetailsUM { + return prevState.copy(isBalanceHidden = isHidden) + } +} \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt index dadfe61af4..012cd5ed10 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt @@ -221,7 +221,7 @@ private fun WalletContent( item( key = "TangemPayMainScreenBlock", contentType = state.tangemPayState::class.java, - ) { TangemPayMainScreenBlock(state.tangemPayState, itemModifier) } + ) { TangemPayMainScreenBlock(state.tangemPayState, isBalanceHidden = state.isHidingMode, itemModifier) } (selectedWallet as? WalletState.SingleCurrency)?.let { walletState -> walletState.marketPriceBlockState?.let { marketPriceBlockState -> diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/singlecurrency/TangemPayCardMainBlock.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/singlecurrency/TangemPayCardMainBlock.kt index c108284448..3a07018d27 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/singlecurrency/TangemPayCardMainBlock.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/singlecurrency/TangemPayCardMainBlock.kt @@ -13,13 +13,18 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.tangem.common.ui.R +import com.tangem.core.ui.extensions.orMaskWithStars import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState @Composable -internal fun TangemPayCardMainBlock(state: TangemPayState.Card, modifier: Modifier = Modifier) { +internal fun TangemPayCardMainBlock( + state: TangemPayState.Card, + isBalanceHidden: Boolean, + modifier: Modifier = Modifier, +) { Surface( modifier = modifier.fillMaxWidth(), shape = TangemTheme.shapes.roundedCornersXMedium, @@ -72,7 +77,7 @@ internal fun TangemPayCardMainBlock(state: TangemPayState.Card, modifier: Modifi contentAlignment = Alignment.TopEnd, ) { Text( - text = state.balanceText.resolveReference(), + text = state.balanceText.resolveReference().orMaskWithStars(isBalanceHidden), style = TangemTheme.typography.body2, color = TangemTheme.colors.text.primary1, textAlign = TextAlign.End, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayMainScreenBlock.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayMainScreenBlock.kt index d76ececd2e..80f748716e 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayMainScreenBlock.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayMainScreenBlock.kt @@ -19,7 +19,7 @@ import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState. import com.tangem.feature.wallet.presentation.wallet.ui.components.singlecurrency.TangemPayCardMainBlock @Composable -internal fun TangemPayMainScreenBlock(state: TangemPayState, modifier: Modifier = Modifier) { +internal fun TangemPayMainScreenBlock(state: TangemPayState, isBalanceHidden: Boolean, modifier: Modifier = Modifier) { when (state) { is Progress -> { Notification( @@ -38,7 +38,7 @@ internal fun TangemPayMainScreenBlock(state: TangemPayState, modifier: Modifier ), ) } - is TangemPayState.Card -> TangemPayCardMainBlock(state, modifier) + is TangemPayState.Card -> TangemPayCardMainBlock(state, isBalanceHidden, modifier) is TangemPayState.Empty -> Unit } } @@ -56,6 +56,7 @@ private fun ResetCardScreenPreview() { iconRes = R.drawable.ic_promo_kyc_36, onButtonClick = {}, ), + isBalanceHidden = false, ) TangemPayMainScreenBlock( @@ -65,6 +66,7 @@ private fun ResetCardScreenPreview() { iconRes = R.drawable.ic_tangem_pay_promo_card_36, onButtonClick = {}, ), + isBalanceHidden = false, ) TangemPayMainScreenBlock( @@ -75,6 +77,7 @@ private fun ResetCardScreenPreview() { onButtonClick = {}, showProgress = true, ), + isBalanceHidden = false, ) TangemPayMainScreenBlock( @@ -83,6 +86,7 @@ private fun ResetCardScreenPreview() { balanceText = TextReference.Str("$ 0.00"), onClick = {}, ), + isBalanceHidden = false, ) } }