Updated on 2026-08-14

This commit is contained in:
Tangem 2024-09-09 13:59:33 +03:00
parent 72cf995bd6
commit 6962716694
13 changed files with 39 additions and 56 deletions

View file

@ -10,7 +10,6 @@ import com.tangem.domain.tokens.model.TotalFiatBalance
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.utils.StringsSigns.DOT
import com.tangem.utils.StringsSigns.STARS
import com.tangem.utils.converter.Converter
/**
@ -68,7 +67,7 @@ class UserWalletItemUMConverter(
)
return when {
isBalanceHidden -> combinedReference(cardCountRef, dividerRef, stringReference(STARS))
isBalanceHidden -> combinedReference(cardCountRef, dividerRef, TextReference.STARS)
isLocked -> combinedReference(cardCountRef, dividerRef, resourceReference(R.string.common_locked))
isLoading -> cardCountRef
else -> getBalanceInfo(balance, appCurrency, cardCountRef, dividerRef)

View file

@ -10,8 +10,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import com.tangem.core.ui.R
import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.res.TangemTheme
import com.tangem.utils.StringsSigns
import com.tangem.core.ui.components.token.state.TokenItemState.CryptoAmountState as TokenCryptoAmountState
@Composable
@ -23,7 +23,7 @@ internal fun TokenCryptoAmount(
when (state) {
is TokenCryptoAmountState.Content -> {
CryptoAmountText(
amount = if (isBalanceHidden) StringsSigns.STARS else state.text,
amount = state.text.orMaskWithStars(isBalanceHidden),
modifier = modifier,
)
}

View file

@ -16,8 +16,8 @@ import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextOverflow
import com.tangem.core.ui.R
import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.res.TangemTheme
import com.tangem.utils.StringsSigns
import com.tangem.core.ui.components.token.state.TokenItemState.FiatAmountState as TokenFiatAmountState
@Composable
@ -25,7 +25,7 @@ internal fun TokenFiatAmount(state: TokenFiatAmountState?, isBalanceHidden: Bool
when (state) {
is TokenFiatAmountState.Content -> {
FiatAmountText(
text = if (isBalanceHidden) StringsSigns.STARS else state.text,
text = state.text.orMaskWithStars(isBalanceHidden),
hasStaked = state.hasStaked,
modifier = modifier,
)

View file

@ -28,13 +28,9 @@ import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.components.transactions.state.TransactionState
import com.tangem.core.ui.components.transactions.state.TransactionState.Content.Direction
import com.tangem.core.ui.components.transactions.state.TransactionState.Content.Status
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.utils.StringsSigns
import java.util.UUID
/**
@ -258,7 +254,7 @@ private fun Amount(state: TransactionState, isBalanceHidden: Boolean, modifier:
when (state) {
is TransactionState.Content -> {
Text(
text = if (isBalanceHidden) StringsSigns.STARS else state.amount,
text = state.amount.orMaskWithStars(isBalanceHidden),
modifier = modifier,
textAlign = TextAlign.End,
color = when (state.status) {

View file

@ -6,7 +6,6 @@ import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.qrcode.QRCodeWriter
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
import com.tangem.utils.StringsSigns.STARS
import java.util.Hashtable
@Suppress("MagicNumber")
@ -35,5 +34,7 @@ fun String.toQrCode(sizePx: Int = 256, paddingPx: Int = 0): Bitmap {
fun String.capitalize(): String = replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
fun String.orMaskWithStars(maskWithStars: Boolean): String {
return if (maskWithStars) STARS else this
}
return if (maskWithStars) THREE_STARS else this
}
internal const val THREE_STARS = "\u2217\u2217\u2217"

View file

@ -11,7 +11,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.AnnotatedString.Builder
import androidx.compose.ui.text.buildAnnotatedString
import com.tangem.utils.StringsSigns.STARS
import org.intellij.markdown.MarkdownElementTypes
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
@ -68,6 +67,9 @@ sealed interface TextReference {
/** Empty string as [TextReference] */
val EMPTY: TextReference by lazy(mode = LazyThreadSafetyMode.NONE) { Str(value = "") }
/** Stars string as [TextReference] */
val STARS: TextReference by lazy(mode = LazyThreadSafetyMode.NONE) { Str(value = THREE_STARS) }
}
}
@ -263,5 +265,5 @@ private fun formatAnnotated(rawString: String): AnnotatedString {
* @return The original reference if hide is false, or reference with STARS if hide is true.
*/
fun TextReference.orMaskWithStars(maskWithStars: Boolean): TextReference {
return if (maskWithStars) stringReference(STARS) else this
return if (maskWithStars) stringReference(THREE_STARS) else this
}

View file

@ -2,7 +2,6 @@ package com.tangem.utils
object StringsSigns {
const val STARS = "\u2217\u2217\u2217"
const val DOT = ""
const val PLUS = "+"
const val MINUS = "-"

View file

@ -33,8 +33,8 @@ import com.tangem.features.send.impl.presentation.state.fields.SendTextField
import com.tangem.features.send.impl.presentation.state.previewdata.RecipientStatePreviewData
import com.tangem.features.send.impl.presentation.state.previewdata.SendClickIntentsStub
import com.tangem.core.ui.components.containers.FooterContainer
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.features.send.impl.presentation.viewmodel.SendClickIntents
import com.tangem.utils.StringsSigns.STARS
import kotlinx.collections.immutable.ImmutableList
private const val ADDRESS_FIELD_KEY = "ADDRESS_FIELD_KEY"
@ -205,7 +205,7 @@ private fun LazyListScope.listItem(
AnimateRecentAppearance(item.isVisible) {
ListItemWithIcon(
title = title,
subtitle = if (isBalanceHidden) STARS else item.subtitle.resolveReference(),
subtitle = item.subtitle.orMaskWithStars(isBalanceHidden).resolveReference(),
info = item.timestamp?.resolveReference(),
subtitleEndOffset = item.subtitleEndOffset,
subtitleIconRes = item.subtitleIconRes,

View file

@ -28,6 +28,7 @@ import com.tangem.core.ui.components.*
import com.tangem.core.ui.components.notifications.Notification
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.getActiveIconResByCoinId
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.res.TangemTheme
@ -38,7 +39,6 @@ import com.tangem.feature.swap.models.*
import com.tangem.feature.swap.models.states.FeeItemState
import com.tangem.feature.swap.models.states.ProviderState
import com.tangem.feature.swap.presentation.R
import com.tangem.utils.StringsSigns.STARS
@Suppress("LongMethod")
@Composable
@ -176,11 +176,7 @@ private fun TransactionCardData(
is SwapCardState.SwapCardData -> {
TransactionCard(
type = swapCardState.type,
balance = if (swapCardState.isBalanceHidden) {
STARS
} else {
swapCardState.balance
},
balance = swapCardState.balance.orMaskWithStars(swapCardState.isBalanceHidden),
textFieldValue = swapCardState.amountTextFieldValue,
amountEquivalent = swapCardState.amountEquivalent,
tokenIconUrl = swapCardState.tokenIconUrl ?: "",

View file

@ -24,6 +24,7 @@ import com.tangem.core.ui.components.appbar.ExpandableSearchView
import com.tangem.core.ui.components.currency.icon.CurrencyIcon
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.decorations.roundedShapeItemDecoration
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.res.TangemTheme
@ -32,7 +33,6 @@ import com.tangem.feature.swap.models.SwapSelectTokenStateHolder
import com.tangem.feature.swap.models.TokenBalanceData
import com.tangem.feature.swap.models.TokenToSelectState
import com.tangem.feature.swap.presentation.R
import com.tangem.utils.StringsSigns
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
@ -251,13 +251,10 @@ private fun TokenItem(
modifier = Modifier.padding(start = TangemTheme.dimens.spacing8),
) {
Text(
text = if (token.addedTokenBalanceData.isBalanceHidden &&
!token.addedTokenBalanceData.amountEquivalent.isNullOrEmpty()
) {
StringsSigns.STARS
} else {
token.addedTokenBalanceData.amountEquivalent.orEmpty()
},
text = token.addedTokenBalanceData.amountEquivalent.orEmpty().orMaskWithStars(
maskWithStars = token.addedTokenBalanceData.isBalanceHidden &&
!token.addedTokenBalanceData.amountEquivalent.isNullOrEmpty(),
),
style = TangemTheme.typography.subtitle1,
color = if (token.available) {
TangemTheme.colors.text.primary1
@ -267,13 +264,10 @@ private fun TokenItem(
)
SpacerW2()
Text(
text = if (token.addedTokenBalanceData.isBalanceHidden &&
!token.addedTokenBalanceData.amount.isNullOrEmpty()
) {
StringsSigns.STARS
} else {
token.addedTokenBalanceData.amount.orEmpty()
},
text = token.addedTokenBalanceData.amount.orEmpty().orMaskWithStars(
maskWithStars = token.addedTokenBalanceData.isBalanceHidden &&
!token.addedTokenBalanceData.amount.isNullOrEmpty(),
),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
)

View file

@ -14,6 +14,7 @@ import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameter
import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.components.buttons.HorizontalActionChips
import com.tangem.core.ui.components.buttons.segmentedbutton.SegmentedButtons
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -22,7 +23,6 @@ import com.tangem.feature.tokendetails.presentation.tokendetails.TokenDetailsPre
import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsBalanceBlockState
import com.tangem.feature.tokendetails.presentation.tokendetails.state.components.TokenDetailsActionButton
import com.tangem.features.tokendetails.impl.R
import com.tangem.utils.StringsSigns.STARS
import kotlinx.collections.immutable.toImmutableList
@Composable
@ -94,13 +94,13 @@ private fun FiatBalance(
)
is TokenDetailsBalanceBlockState.Content -> Text(
modifier = modifier,
text = if (isBalanceHidden) STARS else state.displayFiatBalance,
text = state.displayFiatBalance.orMaskWithStars(isBalanceHidden),
style = TangemTheme.typography.h2,
color = TangemTheme.colors.text.primary1,
)
is TokenDetailsBalanceBlockState.Error -> Text(
modifier = modifier,
text = if (isBalanceHidden) STARS else BigDecimalFormatter.EMPTY_BALANCE_SIGN,
text = BigDecimalFormatter.EMPTY_BALANCE_SIGN.orMaskWithStars(isBalanceHidden),
style = TangemTheme.typography.h2,
color = TangemTheme.colors.text.primary1,
)
@ -122,13 +122,13 @@ private fun CryptoBalance(
)
is TokenDetailsBalanceBlockState.Content -> Text(
modifier = modifier,
text = if (isBalanceHidden) STARS else state.displayCryptoBalance,
text = state.displayCryptoBalance.orMaskWithStars(isBalanceHidden),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
)
is TokenDetailsBalanceBlockState.Error -> Text(
modifier = modifier,
text = if (isBalanceHidden) STARS else BigDecimalFormatter.EMPTY_BALANCE_SIGN,
text = BigDecimalFormatter.EMPTY_BALANCE_SIGN.orMaskWithStars(isBalanceHidden),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
)

View file

@ -4,7 +4,6 @@ import androidx.annotation.DrawableRes
import androidx.compose.runtime.Immutable
import com.tangem.core.ui.extensions.TextReference
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.utils.StringsSigns
import com.tangem.utils.StringsSigns.DASH_SIGN
/** Wallet card state */
@ -124,7 +123,6 @@ internal sealed interface WalletCardState {
}
companion object {
val HIDDEN_BALANCE_TEXT by lazy { TextReference.Str(value = StringsSigns.STARS) }
val EMPTY_BALANCE_TEXT by lazy { TextReference.Str(value = DASH_SIGN) }
}
}

View file

@ -46,6 +46,7 @@ import com.tangem.core.ui.components.FontSizeRange
import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.components.ResizableText
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemDimens
import com.tangem.core.ui.res.TangemTheme
@ -53,7 +54,6 @@ import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.feature.wallet.impl.R
import com.tangem.feature.wallet.presentation.common.WalletPreviewData
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletCardState
import com.tangem.utils.StringsSigns
private const val HALF_OF_ITEM_WIDTH = 0.5
@ -104,11 +104,9 @@ internal fun WalletCard(state: WalletCardState, isBalanceHidden: Boolean, modifi
val additionalText by remember(state.additionalInfo, isBalanceHidden) {
mutableStateOf(
if (state.additionalInfo?.hideable == true && isBalanceHidden) {
WalletCardState.HIDDEN_BALANCE_TEXT
} else {
state.additionalInfo?.content
},
state.additionalInfo?.content?.orMaskWithStars(
maskWithStars = state.additionalInfo?.hideable == true && isBalanceHidden,
),
)
}
AdditionalInfo(
@ -291,7 +289,7 @@ private fun Balance(state: WalletCardState, isBalanceHidden: Boolean, modifier:
when (walletCardState) {
is WalletCardState.Content -> {
ResizableText(
text = if (isBalanceHidden) StringsSigns.STARS else walletCardState.balance,
text = walletCardState.balance.orMaskWithStars(isBalanceHidden),
fontSizeRange = FontSizeRange(min = 16.sp, max = TangemTheme.typography.h2.fontSize),
modifier = Modifier.defaultMinSize(minHeight = TangemTheme.dimens.size32),
color = TangemTheme.colors.text.primary1,
@ -301,7 +299,7 @@ private fun Balance(state: WalletCardState, isBalanceHidden: Boolean, modifier:
)
}
is WalletCardState.Error -> NonContentBalanceText(
text = if (isBalanceHidden) WalletCardState.HIDDEN_BALANCE_TEXT else WalletCardState.EMPTY_BALANCE_TEXT,
text = WalletCardState.EMPTY_BALANCE_TEXT.orMaskWithStars(isBalanceHidden),
)
is WalletCardState.Loading -> {
RectangleShimmer(modifier = Modifier.nonContentBalanceSize(TangemTheme.dimens))