Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-06 18:10:28 +03:00
parent 1feec554e6
commit eff4bd0336
24 changed files with 656 additions and 14 deletions

View file

@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@ -23,6 +24,7 @@ import com.tangem.core.ui.components.SpacerH
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.SendScreenTestTags
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.v2.subcomponents.amount.model.SendAmountClickIntents
import com.tangem.features.send.v2.subcomponents.amount.ui.preview.SendAmountClickIntentsStub
@ -65,7 +67,8 @@ private fun SendConvertTokenButton(onConvertToAnother: () -> Unit) {
Row(
modifier = Modifier
.padding(12.dp)
.align(Alignment.Center),
.align(Alignment.Center)
.testTag(SendScreenTestTags.SWAP_TO_ANOTHER_TOKEN_BUTTON),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {

View file

@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@ -39,6 +40,7 @@ import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.SendScreenTestTags
import com.tangem.domain.express.models.ExpressRateType
import com.tangem.features.swap.v2.impl.R
import com.tangem.features.swap.v2.impl.amount.entity.SwapAmountFieldUM
@ -131,7 +133,9 @@ private fun SwapAmountBlockSeparator(onClick: () -> Unit, modifier: Modifier = M
),
tint = TangemTheme.colors.icon.informative,
contentDescription = null,
modifier = Modifier.size(16.dp),
modifier = Modifier
.size(16.dp)
.testTag(SendScreenTestTags.CLOSE_CONVERT_ICON),
)
}
}
@ -333,6 +337,7 @@ private fun SwapAmountInfoMain(
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.primary1,
maxLines = 1,
modifier = Modifier.testTag(SendScreenTestTags.SWAP_TOKEN_NAME),
)
} else {
TextShimmer(

View file

@ -22,6 +22,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
@ -40,6 +41,7 @@ import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.SendConfirmScreenTestTags
import com.tangem.domain.express.models.ExpressProvider
import com.tangem.domain.express.models.ExpressProviderType
import com.tangem.domain.express.models.ExpressRateType
@ -171,7 +173,8 @@ private fun ProviderInfo(
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
end.linkTo(iconRef.start, goneMargin = 12.dp)
},
}
.testTag(SendConfirmScreenTestTags.PROVIDER_NAME),
)
Icon(
painter = rememberVectorPainter(
@ -287,7 +290,8 @@ private fun ConstraintLayoutScope.BestRateBadge(
tint = TangemTheme.colors.icon.constant,
modifier = Modifier
.padding(iconHorizontalPaddings, iconVerticalPaddings)
.size(iconSize),
.size(iconSize)
.testTag(SendConfirmScreenTestTags.BEST_RATE_BADGE),
)
AnimatedVisibility(
visibleState = animateState,

View file

@ -10,6 +10,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
@ -25,6 +26,7 @@ import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.SelectSwapProviderBottomSheetTestTags
import com.tangem.features.swap.v2.impl.chooseprovider.entity.SwapProviderState
import com.tangem.features.swap.v2.impl.common.entity.SwapQuoteUM
@ -45,7 +47,9 @@ internal fun SwapProviderItem(state: SwapProviderState, modifier: Modifier = Mod
@Composable
private fun ProviderContentState(state: SwapProviderState.Content, modifier: Modifier = Modifier) {
Row(
modifier = modifier.fillMaxWidth(),
modifier = modifier
.fillMaxWidth()
.testTag(SelectSwapProviderBottomSheetTestTags.PROVIDER_ITEM),
verticalAlignment = Alignment.CenterVertically,
) {
SubcomposeAsyncImage(
@ -67,12 +71,15 @@ private fun ProviderContentState(state: SwapProviderState.Content, modifier: Mod
text = state.name,
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.text.primary1,
modifier = Modifier.testTag(SelectSwapProviderBottomSheetTestTags.PROVIDER_NAME),
)
Text(
text = state.type,
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
modifier = Modifier.padding(start = 4.dp),
modifier = Modifier
.padding(start = 4.dp)
.testTag(SelectSwapProviderBottomSheetTestTags.PROVIDER_TYPE),
)
val badgeModifier = Modifier.padding(start = 4.dp)
when (state.additionalBadge) {
@ -91,6 +98,7 @@ private fun ProviderContentState(state: SwapProviderState.Content, modifier: Mod
color = TangemTheme.colors.text.tertiary,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
modifier = Modifier.testTag(SelectSwapProviderBottomSheetTestTags.AMOUNT),
)
if (state.diffPercent is SwapQuoteUM.Content.DifferencePercent.Diff) {
@ -143,7 +151,9 @@ private fun BestTradeItem(modifier: Modifier = Modifier) {
text = stringResourceSafe(R.string.express_provider_best_rate),
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.icon.accent,
modifier = Modifier.padding(horizontal = 6.dp),
modifier = Modifier
.padding(horizontal = 6.dp)
.testTag(SelectSwapProviderBottomSheetTestTags.BEST_RATE_LABEL),
maxLines = 1,
)
}

View file

@ -17,6 +17,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@ -31,6 +32,7 @@ import com.tangem.core.ui.decorations.roundedShapeItemDecoration
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.ChooseNetworkBottomSheetTestTags
import com.tangem.features.swap.v2.impl.R
import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.entity.SwapChooseNetworkUM
import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.entity.SwapChooseTokenNetworkContentUM
@ -116,15 +118,20 @@ private fun SwapChooseTokenNetworkContentList(swapNetworks: ImmutableList<SwapCh
indication = ripple(),
onClick = { network.onNetworkClick() },
)
.padding(vertical = 12.dp, horizontal = 14.dp),
.padding(vertical = 12.dp, horizontal = 14.dp)
.testTag(ChooseNetworkBottomSheetTestTags.NETWORK_ITEM),
) {
Image(
modifier = Modifier.size(36.dp),
modifier = Modifier
.size(36.dp)
.testTag(ChooseNetworkBottomSheetTestTags.NETWORK_ICON),
painter = painterResource(id = network.iconResId),
contentDescription = null,
)
Text(
modifier = Modifier.padding(start = 6.dp),
modifier = Modifier
.padding(start = 6.dp)
.testTag(ChooseNetworkBottomSheetTestTags.NETWORK_TITLE),
text = network.title.resolveReference(),
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.primary1,
@ -137,6 +144,7 @@ private fun SwapChooseTokenNetworkContentList(swapNetworks: ImmutableList<SwapCh
} else {
TangemTheme.colors.text.tertiary
},
modifier = Modifier.testTag(ChooseNetworkBottomSheetTestTags.NETWORK_SUBTITLE),
)
}
}