Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-29 16:41:30 +02:00
commit 383d42f6b3
113 changed files with 2380 additions and 649 deletions

View file

@ -13,12 +13,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.common.ui.account.AccountIconUM
import com.tangem.common.ui.earn.EarnBlock
import com.tangem.common.ui.earn.EarnBlockUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionsBlockState
import com.tangem.common.ui.notifications.notifications
@ -35,6 +37,7 @@ import com.tangem.core.ui.ds.button.TangemButtonUM
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.themedColor
import com.tangem.core.ui.res.LocalHazeState
import com.tangem.core.ui.test.TokenDetailsScreenTestTags
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreviewRedesign
import com.tangem.domain.models.account.CryptoPortfolioIcon
@ -140,7 +143,7 @@ private fun BoxScope.TokenDetailsMarketBlockOverlay(
)
}
@Suppress("LongParameterList")
@Suppress("LongParameterList", "LongMethod")
@Composable
private fun TokenDetailsBody(
tokenDetailsUM: TokenDetailsUM,
@ -165,6 +168,7 @@ private fun TokenDetailsBody(
LazyColumn(
modifier = modifier
.testTag(TokenDetailsScreenTestTags.SCREEN_CONTAINER)
.hazeSourceTangem(state = LocalHazeState.current)
.topFade(
height = topContentPadding,
@ -190,9 +194,18 @@ private fun TokenDetailsBody(
)
tokenDetailsUM.earnBlockState?.let { earnBlock ->
item(key = "staking_block") {
val stakingTag = when {
earnBlock is EarnBlockUM.Content &&
earnBlock.type == EarnBlockUM.Type.Staking &&
earnBlock.trailingUM is EarnBlockUM.TrailingUM.Button ->
TokenDetailsScreenTestTags.STAKING_AVAILABLE_BLOCK
else -> TokenDetailsScreenTestTags.STAKING_BLOCK
}
EarnBlock(
state = earnBlock,
modifier = itemModifier.padding(vertical = TangemTheme.dimens2.x3),
modifier = itemModifier
.padding(vertical = TangemTheme.dimens2.x3)
.testTag(stakingTag),
)
}
}

View file

@ -16,9 +16,18 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.*
import androidx.compose.ui.platform.testTag
import com.tangem.core.ui.test.TokenDetailsScreenTestTags
import com.tangem.core.ui.test.TokenDetailsTopBarTestTags
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.PlaceholderVerticalAlign
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.rememberTextMeasurer
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
@ -58,7 +67,9 @@ internal fun TokenDetailsTopBar(topAppBarUM: TokenDetailsTopAppBarUM, modifier:
.clip(CircleShape)
.hazeEffectTangem { blurRadius = ACTION_BLUR_RADIUS }
TangemTopBar(
modifier = modifier.statusBarsPadding(),
modifier = modifier
.statusBarsPadding()
.testTag(TokenDetailsTopBarTestTags.BACK_BUTTON),
startContent = {
TangemTopBarActionContent(
modifier = actionModifier,
@ -73,7 +84,7 @@ internal fun TokenDetailsTopBar(topAppBarUM: TokenDetailsTopAppBarUM, modifier:
var isDropdownMenuShown by rememberSaveable { mutableStateOf(false) }
Box {
TangemTopBarActionContent(
modifier = actionModifier,
modifier = actionModifier.testTag(TokenDetailsTopBarTestTags.MORE_BUTTON),
actionUM = TangemTopBarActionUM(
iconRes = CoreUiR.drawable.ic_more_default_24,
onClick = { isDropdownMenuShown = true },
@ -105,7 +116,9 @@ internal fun TokenDetailsTopBar(topAppBarUM: TokenDetailsTopAppBarUM, modifier:
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x0_5),
) {
TokenDetailsTitle(titleState = topAppBarUM.titleState)
Box(modifier = Modifier.testTag(TokenDetailsScreenTestTags.TOKEN_TITLE)) {
TokenDetailsTitle(titleState = topAppBarUM.titleState)
}
Text(
text = topAppBarUM.subtitle.resolveAnnotatedReference(),
color = TangemTheme.colors2.text.neutral.tertiary,