Updated on 2026-08-14

This commit is contained in:
Tangem 2025-09-02 17:33:18 +03:00
parent 498e62329a
commit 02f927fd48
18 changed files with 898 additions and 29 deletions

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.graphics.Color
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
@ -17,6 +18,8 @@ import coil.compose.AsyncImage
import com.tangem.core.ui.extensions.clickableSingle
import com.tangem.core.ui.extensions.conditional
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.test.WalletConnectBottomSheetTestTags
import com.tangem.core.ui.test.WalletConnectDetailsBottomSheetTestTags
import com.tangem.features.walletconnect.connections.entity.VerifiedDAppState
import com.tangem.features.walletconnect.impl.R
@ -43,7 +46,8 @@ internal fun WcAppInfoItem(
AsyncImage(
modifier = Modifier
.size(TangemTheme.dimens.size48)
.clip(RoundedCornerShape(TangemTheme.dimens.radius8)),
.clip(RoundedCornerShape(TangemTheme.dimens.radius8))
.testTag(WalletConnectBottomSheetTestTags.APP_ICON),
model = iconUrl,
contentDescription = title,
error = painterResource(R.drawable.img_wc_dapp_icon_placeholder_48),
@ -58,7 +62,9 @@ internal fun WcAppInfoItem(
verticalAlignment = Alignment.CenterVertically,
) {
Text(
modifier = Modifier.weight(1f, fill = false),
modifier = Modifier
.weight(1f, fill = false)
.testTag(WalletConnectBottomSheetTestTags.APP_NAME),
text = title,
color = TangemTheme.colors.text.primary1,
style = TangemTheme.typography.h3,
@ -67,7 +73,9 @@ internal fun WcAppInfoItem(
)
if (verifiedDAppState is VerifiedDAppState.Verified) {
Icon(
modifier = Modifier.size(20.dp),
modifier = Modifier
.size(20.dp)
.testTag(WalletConnectBottomSheetTestTags.APPROVE_ICON),
painter = painterResource(R.drawable.img_approvale2_20),
contentDescription = null,
tint = Color.Unspecified,
@ -78,6 +86,7 @@ internal fun WcAppInfoItem(
text = subtitle,
color = TangemTheme.colors.text.tertiary,
style = TangemTheme.typography.body2,
modifier = Modifier.testTag(WalletConnectBottomSheetTestTags.APP_URL),
)
}
}
@ -86,11 +95,15 @@ internal fun WcAppInfoItem(
@Composable
internal fun WcNetworkInfoItem(@DrawableRes icon: Int, name: String, symbol: String, modifier: Modifier = Modifier) {
Row(
modifier = modifier.padding(vertical = 14.dp, horizontal = 12.dp),
modifier = modifier
.padding(vertical = 14.dp, horizontal = 12.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.NETWORK_ITEM),
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
modifier = Modifier.size(24.dp),
modifier = Modifier
.size(24.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.NETWORK_ICON),
painter = painterResource(icon),
contentDescription = null,
tint = Color.Unspecified,
@ -98,7 +111,8 @@ internal fun WcNetworkInfoItem(@DrawableRes icon: Int, name: String, symbol: Str
Text(
modifier = Modifier
.padding(start = 12.dp)
.weight(1f, fill = false),
.weight(1f, fill = false)
.testTag(WalletConnectDetailsBottomSheetTestTags.NETWORK_NAME),
text = name,
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
@ -106,7 +120,9 @@ internal fun WcNetworkInfoItem(@DrawableRes icon: Int, name: String, symbol: Str
overflow = TextOverflow.Ellipsis,
)
Text(
modifier = Modifier.padding(start = 4.dp),
modifier = Modifier
.padding(start = 4.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.NETWORK_SYMBOL),
text = symbol,
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.tertiary,

View file

@ -20,6 +20,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
@ -42,6 +43,7 @@ import com.tangem.core.ui.extensions.wrappedList
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.WalletConnectBottomSheetTestTags
import com.tangem.features.walletconnect.connections.entity.*
import com.tangem.features.walletconnect.impl.R
import kotlinx.collections.immutable.ImmutableList
@ -62,6 +64,7 @@ internal fun WcAppInfoModalBottomSheet(state: WcAppInfoUM, onBack: () -> Unit, o
title = resourceReference(R.string.wc_wallet_connect),
endIconRes = R.drawable.ic_close_24,
onEndClick = onDismiss,
modifier = Modifier.testTag(WalletConnectBottomSheetTestTags.TITLE),
)
},
content = {
@ -157,7 +160,9 @@ private fun WcAppInfoFirstBlock(state: WcAppInfoUM.Content, modifier: Modifier =
private fun ConnectionRequestBlock(expanded: Boolean, modifier: Modifier = Modifier) {
Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) {
Icon(
modifier = Modifier.size(24.dp),
modifier = Modifier
.size(24.dp)
.testTag(WalletConnectBottomSheetTestTags.CONNECTION_REQUEST_ICON),
painter = painterResource(R.drawable.ic_connect_new_24),
contentDescription = null,
tint = TangemTheme.colors.icon.accent,
@ -165,7 +170,8 @@ private fun ConnectionRequestBlock(expanded: Boolean, modifier: Modifier = Modif
Text(
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing4)
.weight(1f),
.weight(1f)
.testTag(WalletConnectBottomSheetTestTags.CONNECTION_REQUEST_TEXT),
text = stringResourceSafe(R.string.wc_connection_request),
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
@ -173,7 +179,8 @@ private fun ConnectionRequestBlock(expanded: Boolean, modifier: Modifier = Modif
Icon(
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing12)
.size(width = 18.dp, height = 24.dp),
.size(width = 18.dp, height = 24.dp)
.testTag(WalletConnectBottomSheetTestTags.CONNECTION_REQUEST_CHEVRON),
painter = painterResource(if (expanded) R.drawable.ic_chevron_up_24 else R.drawable.ic_chevron_24),
contentDescription = null,
tint = TangemTheme.colors.icon.informative,
@ -319,7 +326,9 @@ private fun WcAppInfoSecondBlock(state: WcAppInfoUM.Content, modifier: Modifier
private fun WalletRowItem(walletName: String, showEndIcon: Boolean, modifier: Modifier = Modifier) {
Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) {
Icon(
modifier = Modifier.size(24.dp),
modifier = Modifier
.size(24.dp)
.testTag(WalletConnectBottomSheetTestTags.WALLET_ICON),
painter = painterResource(R.drawable.ic_wallet_new_24),
contentDescription = null,
tint = TangemTheme.colors.icon.accent,
@ -330,14 +339,18 @@ private fun WalletRowItem(walletName: String, showEndIcon: Boolean, modifier: Mo
verticalAlignment = Alignment.CenterVertically,
) {
Text(
modifier = Modifier.padding(start = TangemTheme.dimens.spacing4),
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing4)
.testTag(WalletConnectBottomSheetTestTags.WALLET_NAME_TITLE),
text = stringResourceSafe(R.string.manage_tokens_network_selector_wallet),
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
maxLines = 1,
)
Text(
modifier = Modifier.padding(start = TangemTheme.dimens.spacing16),
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing16)
.testTag(WalletConnectBottomSheetTestTags.WALLET_NAME),
text = walletName,
textAlign = TextAlign.End,
style = TangemTheme.typography.body1,
@ -366,7 +379,9 @@ private fun SelectNetworksBlock(networksInfo: WcNetworksInfo, modifier: Modifier
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
modifier = Modifier.size(24.dp),
modifier = Modifier
.size(24.dp)
.testTag(WalletConnectBottomSheetTestTags.NETWORKS_ICON),
painter = painterResource(R.drawable.ic_network_new_24),
contentDescription = null,
tint = TangemTheme.colors.icon.accent,
@ -374,7 +389,8 @@ private fun SelectNetworksBlock(networksInfo: WcNetworksInfo, modifier: Modifier
Text(
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing4)
.weight(1f),
.weight(1f)
.testTag(WalletConnectBottomSheetTestTags.NETWORKS_TITLE),
text = stringResourceSafe(R.string.wc_common_networks),
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
@ -385,7 +401,9 @@ private fun SelectNetworksBlock(networksInfo: WcNetworksInfo, modifier: Modifier
is WcNetworksInfo.NoneNetworksAdded -> Unit
}
Icon(
modifier = Modifier.size(width = 18.dp, height = 24.dp),
modifier = Modifier
.size(width = 18.dp, height = 24.dp)
.testTag(WalletConnectBottomSheetTestTags.NETWORKS_SELECTOR_ICON),
painter = painterResource(id = R.drawable.ic_select_18_24),
contentDescription = null,
tint = TangemTheme.colors.icon.informative,
@ -417,7 +435,8 @@ private fun NetworkIcons(items: ImmutableList<WcNetworkInfoItem>, modifier: Modi
)
.padding(2.dp)
.clip(CircleShape)
.size(20.dp),
.size(20.dp)
.testTag(WalletConnectBottomSheetTestTags.NETWORKS_ICONS),
)
}
if (remainingCount > 0) {

View file

@ -12,6 +12,7 @@ import androidx.compose.runtime.key
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@ -28,6 +29,7 @@ import com.tangem.core.ui.extensions.wrappedList
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.WalletConnectDetailsBottomSheetTestTags
import com.tangem.core.ui.utils.DateTimeFormatters
import com.tangem.core.ui.utils.toDateFormatWithTodayYesterday
import com.tangem.core.ui.utils.toTimeFormat
@ -116,7 +118,8 @@ private fun WcConnectedAppInfoBSContent(state: WcConnectedAppInfoUM, modifier: M
SecondaryButton(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 16.dp),
.padding(vertical = 16.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.DISCONNECT_BUTTON),
text = stringResourceSafe(R.string.common_disconnect),
enabled = state.disconnectButtonConfig.enabled,
showProgress = state.disconnectButtonConfig.showProgress,
@ -142,7 +145,9 @@ private fun AppInfoFirstBlock(state: WcConnectedAppInfoUM, modifier: Modifier =
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
modifier = Modifier.size(24.dp),
modifier = Modifier
.size(24.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.WALLET_ICON),
painter = painterResource(R.drawable.ic_wallet_new_24),
contentDescription = null,
tint = TangemTheme.colors.icon.accent,
@ -150,7 +155,8 @@ private fun AppInfoFirstBlock(state: WcConnectedAppInfoUM, modifier: Modifier =
Text(
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing4)
.weight(1f),
.weight(1f)
.testTag(WalletConnectDetailsBottomSheetTestTags.WALLET_TITLE),
text = stringResourceSafe(R.string.manage_tokens_network_selector_wallet),
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
@ -158,7 +164,8 @@ private fun AppInfoFirstBlock(state: WcConnectedAppInfoUM, modifier: Modifier =
Text(
modifier = Modifier
.padding(start = TangemTheme.dimens.spacing16)
.weight(1f),
.weight(1f)
.testTag(WalletConnectDetailsBottomSheetTestTags.WALLET_NAME),
text = state.walletName,
textAlign = TextAlign.End,
style = TangemTheme.typography.body1,
@ -174,7 +181,8 @@ private fun NetworksBlock(networks: ImmutableList<WcNetworkInfoItem.Required>, m
Text(
modifier = Modifier
.padding(top = 12.dp, bottom = 4.dp)
.padding(horizontal = 12.dp),
.padding(horizontal = 12.dp)
.testTag(WalletConnectDetailsBottomSheetTestTags.NETWORKS_TITLE),
text = stringResourceSafe(R.string.wc_connected_networks),
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.tertiary,

View file

@ -17,6 +17,7 @@ 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.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
@ -35,6 +36,7 @@ import com.tangem.core.ui.components.snackbar.TangemSnackbarHost
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.WalletConnectScreenTestTags
import com.tangem.features.walletconnect.connections.entity.*
import com.tangem.features.walletconnect.connections.ui.preview.WcConnectionsPreviewData
import com.tangem.features.walletconnect.impl.R
@ -170,7 +172,9 @@ private fun ConnectionItem(connection: WcConnectionsUM, modifier: Modifier = Mod
Column(modifier = modifier) {
key("${connection.userWalletId}_${connection.walletName}") {
Text(
modifier = Modifier.padding(top = 12.dp, bottom = 4.dp, start = 12.dp, end = 12.dp),
modifier = Modifier
.padding(top = 12.dp, bottom = 4.dp, start = 12.dp, end = 12.dp)
.testTag(WalletConnectScreenTestTags.WALLET_NAME),
text = connection.walletName,
color = TangemTheme.colors.text.tertiary,
style = TangemTheme.typography.subtitle2,
@ -199,7 +203,8 @@ private fun AppInfoItem(appInfo: WcConnectedAppInfo, modifier: Modifier = Modifi
AsyncImage(
modifier = Modifier
.size(40.dp)
.clip(RoundedCornerShape(TangemTheme.dimens.radius8)),
.clip(RoundedCornerShape(TangemTheme.dimens.radius8))
.testTag(WalletConnectScreenTestTags.APP_ICON),
model = appInfo.iconUrl,
error = painterResource(R.drawable.img_wc_dapp_icon_placeholder_48),
fallback = painterResource(R.drawable.img_wc_dapp_icon_placeholder_48),
@ -214,7 +219,9 @@ private fun AppInfoItem(appInfo: WcConnectedAppInfo, modifier: Modifier = Modifi
verticalAlignment = Alignment.CenterVertically,
) {
Text(
modifier = Modifier.weight(1f, fill = false),
modifier = Modifier
.weight(1f, fill = false)
.testTag(WalletConnectScreenTestTags.APP_NAME),
text = appInfo.name,
color = TangemTheme.colors.text.primary1,
style = TangemTheme.typography.subtitle2,
@ -223,7 +230,9 @@ private fun AppInfoItem(appInfo: WcConnectedAppInfo, modifier: Modifier = Modifi
)
if (appInfo.verifiedState is VerifiedDAppState.Verified) {
Icon(
modifier = Modifier.size(20.dp),
modifier = Modifier
.size(20.dp)
.testTag(WalletConnectScreenTestTags.APPROVE_ICON),
painter = painterResource(R.drawable.img_approvale2_20),
contentDescription = null,
tint = Color.Unspecified,
@ -234,6 +243,7 @@ private fun AppInfoItem(appInfo: WcConnectedAppInfo, modifier: Modifier = Modifi
text = appInfo.subtitle,
color = TangemTheme.colors.text.tertiary,
style = TangemTheme.typography.caption2,
modifier = Modifier.testTag(WalletConnectScreenTestTags.APP_URL),
)
}
}
@ -259,6 +269,7 @@ private fun ConnectionsTopBar(
TopAppBarButton(
button = config.startButtonUM,
tint = TangemTheme.colors.icon.primary1,
modifier = Modifier.testTag(WalletConnectScreenTestTags.MORE_BUTTON),
)
},
title = {