From 6d461cf400ad1034c7b6013d453267f3cd0d96cb Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 26 Aug 2025 16:27:33 +0200 Subject: [PATCH] Updated on 2026-08-14 --- core/res/src/main/res/values/strings.xml | 32 +++++ .../DefaultWalletAddressServiceRepository.kt | 2 +- .../domain/models/TokenReceiveConfig.kt | 3 +- .../GetReverseResolvedEnsAddressUseCase.kt | 8 +- .../impl/model/MarketsPortfolioModel.kt | 8 +- .../nft/receive/model/NFTReceiveModel.kt | 7 +- .../component/DefaultTokenReceiveComponent.kt | 2 +- .../component/TokenReceiveQrCodeComponent.kt | 3 +- .../tokenreceive/entity/ReceiveAddress.kt | 17 ++- .../model/TokenReceiveAssetsModel.kt | 1 - .../tokenreceive/model/TokenReceiveModel.kt | 49 ++++++-- .../model/TokenReceiveQrCodeModel.kt | 5 +- .../ui/TokenReceiveAssetsContent.kt | 112 ++++++++++-------- .../tokenreceive/ui/state/ReceiveAssetsUM.kt | 1 - .../tokendetails/model/TokenDetailsModel.kt | 7 +- .../WalletCurrencyActionsClickIntents.kt | 7 +- 16 files changed, 180 insertions(+), 84 deletions(-) diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index dc9ced8f5c..6eca54cb33 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -12,12 +12,20 @@ Set a %s-digit Access Code to unlock your wallet. Create Access Code Access code + You cannot create more than %1$s accounts. Archive one to add new. + Can’t add new account + Account archived + Archived accounts Recover + You’re about to recover “%1$s”. + Recover account Archived + Account created Archive account Archive You are archiving this account, but you can always get it back. Account + Account saved Account #%s — used for address derivation. Add account Save @@ -26,6 +34,9 @@ New account Add account Edit account + %1$s in %2$s + Account recovered + Long tap on an account to reorder accounts Keep Editing Discard Are you sure you want to discard new account? @@ -117,6 +128,16 @@ Please try again in 30 seconds or scan the card or ring Too many attempts You have disabled biometric authentication on your phone and will not be able to save wallets in the app. To save wallets, please enable the biometric authentication function in your phone settings. + An error occurred while processing your promo code. Please try again later. + Activation error + Your promo code was successfully activated. A bonus of 10 USDT in Bitcoin will be credited to your account within 14 days. + Promo Code Activated + This promo code has already been used and cannot be activated again. + Code unavailable + This promo code is not valid and cannot be activated. + Invalid code + A Bitcoin address is required to receive the bonus. Please add one to your wallet and retry the activation. + Bitcoin address required Start backup process Use a bank card or other payment methods @@ -152,6 +173,7 @@ Not enough ADA Accept Access denied + Accounts Add Add to portfolio Add token @@ -234,11 +256,17 @@ In progress Later %1$s left + Legacy Bitcoin Locked Main network month Network fee Amount sent will be reduced by %1$s (%2$s) to cover the selected fee level + + %d network + %d networks + + New address Next NFT No @@ -363,6 +391,7 @@ Details Check your internet connection or switch to a different network Terms of service + Default Address Receive assets Sending assets in other networks will result in permanent loss. %s network @@ -717,6 +746,9 @@ Join Now Share your code - earn 5 USDT per sale. Your friend gets 10% OFF. Get REWARDS for every friend! + Buy crypto + Enjoy zero fees when purchasing crypto via SEPA transfer. + Buy Crypto with SEPA Set up a single access code to protect all your devices. Protect Set an individual access code for each card or ring later. diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt index 10dba2b58b..23990f9704 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt @@ -31,7 +31,7 @@ class DefaultWalletAddressServiceRepository( blockchain = blockchain, derivationPath = network.derivationPath.value, ) - walletManager?.wallet?.ens + walletManager?.wallet?.ens.takeIf { it.isNullOrEmpty().not() } } } diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/TokenReceiveConfig.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/TokenReceiveConfig.kt index 728496ef05..d884942aeb 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/TokenReceiveConfig.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/TokenReceiveConfig.kt @@ -19,10 +19,9 @@ data class TokenReceiveConfig( data class ReceiveAddressModel( val nameService: NameService, val value: String, - val displayName: String, ) { enum class NameService { - Default, Ens + Default, Legacy, Ens } } diff --git a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/GetReverseResolvedEnsAddressUseCase.kt b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/GetReverseResolvedEnsAddressUseCase.kt index 93f053818e..6d8eadf4e0 100644 --- a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/GetReverseResolvedEnsAddressUseCase.kt +++ b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/GetReverseResolvedEnsAddressUseCase.kt @@ -35,7 +35,13 @@ class GetReverseResolvedEnsAddressUseCase(private val walletAddressServiceReposi return when (reverseResolveAddressResult) { is ReverseResolveAddressResult.Error -> EnsAddress.Error(reverseResolveAddressResult.error) ReverseResolveAddressResult.NotSupported -> EnsAddress.NotSupported - is ReverseResolveAddressResult.Resolved -> EnsAddress.Address(reverseResolveAddressResult.name) + is ReverseResolveAddressResult.Resolved -> { + if (reverseResolveAddressResult.name.isEmpty()) { + EnsAddress.NotSupported + } else { + EnsAddress.Address(reverseResolveAddressResult.name) + } + } } } } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MarketsPortfolioModel.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MarketsPortfolioModel.kt index 60673724c0..f7a23493ed 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MarketsPortfolioModel.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MarketsPortfolioModel.kt @@ -26,6 +26,7 @@ import com.tangem.domain.models.ReceiveAddressModel import com.tangem.domain.models.TokenReceiveConfig import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network +import com.tangem.domain.models.network.NetworkAddress import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.models.wallet.isMultiCurrency @@ -399,16 +400,17 @@ internal class MarketsPortfolioModel @Inject constructor( ReceiveAddressModel( nameService = ReceiveAddressModel.NameService.Ens, value = ens, - displayName = ens, ), ) } addresses.availableAddresses.map { address -> add( ReceiveAddressModel( - nameService = ReceiveAddressModel.NameService.Default, + nameService = when (address.type) { + NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default + NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy + }, value = address.value, - displayName = "${cryptoCurrency.name} (${cryptoCurrency.symbol})", ), ) } diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/model/NFTReceiveModel.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/model/NFTReceiveModel.kt index 632959d7e8..0439b74aea 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/model/NFTReceiveModel.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/receive/model/NFTReceiveModel.kt @@ -209,16 +209,17 @@ internal class NFTReceiveModel @Inject constructor( ReceiveAddressModel( nameService = ReceiveAddressModel.NameService.Ens, value = ens, - displayName = ens, ), ) } addresses.availableAddresses.map { address -> add( ReceiveAddressModel( - nameService = ReceiveAddressModel.NameService.Default, + nameService = when (address.type) { + NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default + NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy + }, value = address.value, - displayName = cryptoCurrency.symbol, ), ) } diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/DefaultTokenReceiveComponent.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/DefaultTokenReceiveComponent.kt index 83b0cf3b6f..a6914ac4c4 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/DefaultTokenReceiveComponent.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/DefaultTokenReceiveComponent.kt @@ -77,7 +77,7 @@ internal class DefaultTokenReceiveComponent @AssistedInject constructor( is TokenReceiveRoutes.QrCode -> TokenReceiveQrCodeComponent( appComponentContext = appComponentContext, params = TokenReceiveQrCodeComponent.TokenReceiveQrCodeParams( - network = model.params.config.cryptoCurrency.network.name, + cryptoCurrency = model.params.config.cryptoCurrency, address = model.state.value.addresses[config.addressId] ?: error("Address has to be there"), callback = model, onDismiss = ::dismiss, diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/TokenReceiveQrCodeComponent.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/TokenReceiveQrCodeComponent.kt index 8191f9a208..3eef391fc6 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/TokenReceiveQrCodeComponent.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/component/TokenReceiveQrCodeComponent.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.model.getOrCreateModel import com.tangem.core.ui.decompose.ComposableContentComponent +import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.features.tokenreceive.entity.ReceiveAddress import com.tangem.features.tokenreceive.model.TokenReceiveQrCodeModel import com.tangem.features.tokenreceive.ui.TokenReceiveQrCodeContent @@ -31,7 +32,7 @@ internal class TokenReceiveQrCodeComponent( data class TokenReceiveQrCodeParams( val id: Int, - val network: String, + val cryptoCurrency: CryptoCurrency, val address: ReceiveAddress, val callback: TokenReceiveQrCodeModelCallback, val onDismiss: () -> Unit, diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/entity/ReceiveAddress.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/entity/ReceiveAddress.kt index 960dda1224..0157541c0c 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/entity/ReceiveAddress.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/entity/ReceiveAddress.kt @@ -1,16 +1,27 @@ package com.tangem.features.tokenreceive.entity +import androidx.compose.runtime.Immutable import com.tangem.core.ui.extensions.TextReference internal data class ReceiveAddress( val value: String, val type: Type, ) { + + @Immutable sealed interface Type { data object Ens : Type - data class Default( - val displayName: TextReference, - ) : Type + sealed interface Primary : Type { + + val displayName: TextReference + + data class Default( + val title: TextReference?, + override val displayName: TextReference, + ) : Primary + + data class Legacy(override val displayName: TextReference) : Primary + } } } \ No newline at end of file diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveAssetsModel.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveAssetsModel.kt index bf37b011e3..fb162c4c53 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveAssetsModel.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveAssetsModel.kt @@ -44,7 +44,6 @@ internal class TokenReceiveAssetsModel @Inject constructor( showMemoDisclaimer = params.showMemoDisclaimer, isEnsResultLoading = false, notificationConfigs = params.notificationConfigs, - fullName = params.fullName, ), ) diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveModel.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveModel.kt index 183d11d046..0c7e6de0bf 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveModel.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveModel.kt @@ -12,8 +12,8 @@ import com.tangem.core.ui.R import com.tangem.core.ui.clipboard.ClipboardManager import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter import com.tangem.core.ui.components.notifications.NotificationConfig +import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resourceReference -import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.extensions.wrappedList import com.tangem.domain.models.Asset import com.tangem.domain.models.ReceiveAddressModel @@ -25,6 +25,8 @@ import com.tangem.domain.transaction.usecase.GetReverseResolvedEnsAddressUseCase import com.tangem.features.tokenreceive.TokenReceiveComponent import com.tangem.features.tokenreceive.component.TokenReceiveModelCallback import com.tangem.features.tokenreceive.entity.ReceiveAddress +import com.tangem.features.tokenreceive.entity.ReceiveAddress.Type.Ens +import com.tangem.features.tokenreceive.entity.ReceiveAddress.Type.Primary import com.tangem.features.tokenreceive.route.TokenReceiveRoutes import com.tangem.features.tokenreceive.ui.state.TokenReceiveUM import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -103,17 +105,33 @@ internal class TokenReceiveModel @Inject constructor( } } - private fun mapAddresses(addresses: List): ImmutableMap { + private fun mapAddresses( + addresses: List, + networkName: String, + ): ImmutableMap { + val conditionToUseTitle = addresses.any { it.nameService == ReceiveAddressModel.NameService.Legacy } return buildMap { addresses.mapIndexed { index, model -> val type = when (model.nameService) { ReceiveAddressModel.NameService.Default -> { - ReceiveAddress.Type.Default( - displayName = stringReference(model.displayName), + Primary.Default( + displayName = TextReference.Res( + id = R.string.domain_receive_assets_onboarding_network_name, + formatArgs = wrappedList(networkName), + ), + title = if (conditionToUseTitle) { + TextReference.Res(R.string.domain_receive_assets_default_address) + } else { + null + }, ) } - ReceiveAddressModel.NameService.Ens -> ReceiveAddress.Type.Ens + ReceiveAddressModel.NameService.Ens -> Ens + ReceiveAddressModel.NameService.Legacy -> Primary.Legacy( + displayName = TextReference.Res(R.string.common_legacy_bitcoin_address), + ) } + put( key = index, value = ReceiveAddress( @@ -146,10 +164,18 @@ internal class TokenReceiveModel @Inject constructor( val newEnsAddresses = reverseResolveResult .filterIsInstance() .filterNot { it.name in currentAddressValues } - .map { ensAddress -> ReceiveAddress(value = ensAddress.name, type = ReceiveAddress.Type.Ens) } + .map { ensAddress -> ReceiveAddress(value = ensAddress.name, type = Ens) } val combinedAddresses = (state.value.addresses.values + newEnsAddresses) - .sortedWith(compareByDescending { it.type is ReceiveAddress.Type.Ens }) + .sortedWith( + compareBy { address -> + when (address.type) { + is Ens -> 0 + is Primary.Default -> 1 + is Primary.Legacy -> 2 + } + }, + ) val updatedAddresses = combinedAddresses .mapIndexed { index, address -> index to address } @@ -191,7 +217,10 @@ internal class TokenReceiveModel @Inject constructor( private fun getInitState(): TokenReceiveUM { return TokenReceiveUM( - addresses = mapAddresses(params.config.receiveAddress), + addresses = mapAddresses( + addresses = params.config.receiveAddress, + networkName = params.config.cryptoCurrency.network.name, + ), iconState = iconStateConverter.convert(params.config.cryptoCurrency), network = params.config.cryptoCurrency.network.name, isEnsResultLoading = false, @@ -201,13 +230,13 @@ internal class TokenReceiveModel @Inject constructor( private fun sendCopyActionAnalytic(receiveAddress: ReceiveAddress) { val event = when (receiveAddress.type) { - is ReceiveAddress.Type.Default -> { + is Primary -> { TokenReceiveNewAnalyticsEvent.ButtonCopyAddress( token = getTokenName(), blockchainName = params.config.cryptoCurrency.network.name, ) } - ReceiveAddress.Type.Ens -> { + Ens -> { TokenReceiveNewAnalyticsEvent.ButtonCopyEns( token = getTokenName(), blockchainName = params.config.cryptoCurrency.network.name, diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveQrCodeModel.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveQrCodeModel.kt index 68246b663f..0a1f5ccddd 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveQrCodeModel.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/model/TokenReceiveQrCodeModel.kt @@ -6,7 +6,6 @@ import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.ui.extensions.TextReference import com.tangem.features.tokenreceive.component.TokenReceiveQrCodeComponent -import com.tangem.features.tokenreceive.entity.ReceiveAddress import com.tangem.features.tokenreceive.ui.state.QrCodeUM import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableStateFlow @@ -25,9 +24,9 @@ internal class TokenReceiveQrCodeModel @Inject constructor( internal val state: StateFlow field = MutableStateFlow( QrCodeUM( - network = params.network, + network = params.cryptoCurrency.network.name, addressValue = params.address.value, - addressName = (params.address.type as? ReceiveAddress.Type.Default)?.displayName ?: TextReference.EMPTY, + addressName = TextReference.Str("${params.cryptoCurrency.name} (${params.cryptoCurrency.symbol})"), onCopyClick = { params.callback.onCopyClick(params.id) }, onShareClick = params.callback::onShareClick, ), diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/TokenReceiveAssetsContent.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/TokenReceiveAssetsContent.kt index 10f41e7e05..84c59aeb20 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/TokenReceiveAssetsContent.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/TokenReceiveAssetsContent.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.util.fastForEach import com.tangem.common.ui.notifications.NotificationUM import com.tangem.core.res.getStringSafe import com.tangem.core.ui.R +import com.tangem.core.ui.components.SpacerH import com.tangem.core.ui.components.SpacerH12 import com.tangem.core.ui.components.SpacerH8 import com.tangem.core.ui.components.SpacerW12 @@ -36,6 +37,7 @@ import com.tangem.core.ui.components.atoms.text.TextEllipsis import com.tangem.core.ui.components.buttons.small.TangemIconButton import com.tangem.core.ui.components.icons.identicon.IdentIcon import com.tangem.core.ui.components.notifications.Notification +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.stringResourceSafe @@ -78,7 +80,6 @@ internal fun TokenReceiveAssetsContent(assetsUM: ReceiveAssetsUM) { onOpenQrCodeClick = assetsUM.onOpenQrCodeClick, addresses = assetsUM.addresses, snackbarHostState = snackbarHostState, - fullName = assetsUM.fullName, ) if (assetsUM.isEnsResultLoading) { @@ -125,7 +126,6 @@ private fun AddressBlock( onCopyClick: (id: Int) -> Unit, addresses: ImmutableMap, snackbarHostState: SnackbarHostState, - fullName: String, ) { val hapticFeedback = LocalHapticFeedback.current val coroutineScope = rememberCoroutineScope() @@ -133,8 +133,8 @@ private fun AddressBlock( val resources = context.resources addresses.entries.toList().fastForEach { entry -> - when (entry.value.type) { - is ReceiveAddress.Type.Default -> { + when (val type = entry.value.type) { + is ReceiveAddress.Type.Primary -> { key(entry.key) { AddressItem( onCopyClick = { @@ -152,8 +152,8 @@ private fun AddressBlock( hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) onOpenQrCodeClick(entry.key) }, - fullName = fullName, address = entry.value.value, + primaryType = type, ) SpacerH8() } @@ -184,9 +184,9 @@ private fun AddressBlock( @Composable private fun AddressItem( onOpenQrCodeClick: () -> Unit, - fullName: String, onCopyClick: () -> Unit, address: String, + primaryType: ReceiveAddress.Type.Primary, modifier: Modifier = Modifier, ) { Card( @@ -195,52 +195,68 @@ private fun AddressItem( colors = CardDefaults.cardColors(containerColor = TangemTheme.colors.background.action), onClick = onOpenQrCodeClick, ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 14.dp, horizontal = 12.dp), - verticalAlignment = Alignment.CenterVertically, + Column( + modifier = Modifier.padding(vertical = 14.dp, horizontal = 12.dp), ) { - IdentIcon( - address = address, - modifier = Modifier - .size(size = 36.dp) - .clip(shape = RoundedCornerShape(18.dp)), - ) - - SpacerW12() - - Column(modifier = Modifier.weight(1f)) { - EllipsisText( - text = stringResourceSafe(R.string.domain_receive_assets_onboarding_network_name, fullName), - ellipsis = TextEllipsis.Middle, - color = TangemTheme.colors.text.primary1, - style = TangemTheme.typography.subtitle1, - ) - - EllipsisText( - text = address, - ellipsis = TextEllipsis.Middle, - color = TangemTheme.colors.text.tertiary, - style = TangemTheme.typography.caption2, - ) + when (primaryType) { + is ReceiveAddress.Type.Primary.Default -> { + primaryType.title?.let { + Text( + text = it.resolveReference(), + style = TangemTheme.typography.subtitle2, + color = TangemTheme.colors.text.tertiary, + ) + SpacerH(12.dp) + } + } + is ReceiveAddress.Type.Primary.Legacy -> Unit } - SpacerW12() + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + IdentIcon( + address = address, + modifier = Modifier + .size(size = 36.dp) + .clip(shape = RoundedCornerShape(18.dp)), + ) - TangemIconButton( - modifier = Modifier.size(TangemTheme.dimens.size28), - iconRes = R.drawable.ic_qrcode_new_24, - onClick = onOpenQrCodeClick, - ) + SpacerW12() - SpacerW8() + Column(modifier = Modifier.weight(1f)) { + EllipsisText( + text = primaryType.displayName.resolveReference(), + ellipsis = TextEllipsis.Middle, + color = TangemTheme.colors.text.primary1, + style = TangemTheme.typography.subtitle1, + ) - TangemIconButton( - modifier = Modifier.size(TangemTheme.dimens.size28), - iconRes = R.drawable.ic_copy_new_24, - onClick = onCopyClick, - ) + EllipsisText( + text = address, + ellipsis = TextEllipsis.Middle, + color = TangemTheme.colors.text.tertiary, + style = TangemTheme.typography.caption2, + ) + } + + SpacerW12() + + TangemIconButton( + modifier = Modifier.size(TangemTheme.dimens.size28), + iconRes = R.drawable.ic_qrcode_new_24, + onClick = onOpenQrCodeClick, + ) + + SpacerW8() + + TangemIconButton( + modifier = Modifier.size(TangemTheme.dimens.size28), + iconRes = R.drawable.ic_copy_new_24, + onClick = onCopyClick, + ) + } } } } @@ -318,8 +334,9 @@ private fun Preview_TokenReceiveAssetsContent( private class TokenReceiveAssetsContentProvider : PreviewParameterProvider { val address = ReceiveAddress( value = "0xe5178c7d4d0e861ed2e9414e045b501226b0de8d", - type = ReceiveAddress.Type.Default( + type = ReceiveAddress.Type.Primary.Default( displayName = stringReference("Etherium address"), + title = null, ), ) private val config = ReceiveAssetsUM( @@ -338,7 +355,6 @@ private class TokenReceiveAssetsContentProvider : PreviewParameterProvider diff --git a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/state/ReceiveAssetsUM.kt b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/state/ReceiveAssetsUM.kt index 3953389152..905b3c0878 100644 --- a/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/state/ReceiveAssetsUM.kt +++ b/features/token-recieve/impl/src/main/java/com/tangem/features/tokenreceive/ui/state/ReceiveAssetsUM.kt @@ -12,5 +12,4 @@ internal data class ReceiveAssetsUM( val onCopyClick: (id: Int) -> Unit, val isEnsResultLoading: Boolean, val notificationConfigs: ImmutableList, - val fullName: String, ) \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index 7f2de4ef2c..ddba4024a8 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -1089,16 +1089,17 @@ internal class TokenDetailsModel @Inject constructor( ReceiveAddressModel( nameService = ReceiveAddressModel.NameService.Ens, value = ens, - displayName = ens, ), ) } addresses.availableAddresses.map { address -> add( ReceiveAddressModel( - nameService = ReceiveAddressModel.NameService.Default, + nameService = when (address.type) { + NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default + NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy + }, value = address.value, - displayName = "${cryptoCurrency.name} (${cryptoCurrency.symbol})", ), ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletCurrencyActionsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletCurrencyActionsClickIntents.kt index 71d5e76c5e..8e7103d993 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletCurrencyActionsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletCurrencyActionsClickIntents.kt @@ -673,16 +673,17 @@ internal class WalletCurrencyActionsClickIntentsImplementor @Inject constructor( ReceiveAddressModel( nameService = ReceiveAddressModel.NameService.Ens, value = ens, - displayName = ens, ), ) } networkAddress.availableAddresses.map { address -> add( ReceiveAddressModel( - nameService = ReceiveAddressModel.NameService.Default, + nameService = when (address.type) { + NetworkAddress.Address.Type.Primary -> ReceiveAddressModel.NameService.Default + NetworkAddress.Address.Type.Secondary -> ReceiveAddressModel.NameService.Legacy + }, value = address.value, - displayName = "${cryptoCurrencyStatus.currency.name} (${cryptoCurrencyStatus.currency.symbol})", ), ) }