diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt index c5a6d6cd4f..bea9728880 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt @@ -55,7 +55,7 @@ fun BigDecimal.toFiatRateString(fiatCurrencyName: String, fiatCode: String): Str formatter.currency = currency formatter.maximumFractionDigits = 2 formatter.roundingMode = RoundingMode.HALF_UP - return formatter.format(this) + return formatter.format(this).replace(currency.symbol, "$fiatCurrencyName ") } } catch (e: IllegalArgumentException) { Timber.e(e, "can't parse currency") @@ -96,7 +96,7 @@ fun BigDecimal.toFormattedFiatValue( formatter.currency = currency formatter.maximumFractionDigits = 2 formatter.roundingMode = RoundingMode.HALF_UP - return formatter.format(this) + return formatter.format(this).replace(currency.symbol, "$fiatCurrencyName ") } } catch (e: IllegalArgumentException) { Timber.e(e, "can't parse currency") diff --git a/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt b/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt index a522228976..55d0faa5d2 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt @@ -157,6 +157,10 @@ internal fun WalletDataModel.updateWithSelf(newWalletData: WalletDataModel): Wal -> newStatus }, existentialDeposit = newWalletData.existentialDeposit, + walletAddresses = newWalletData.walletAddresses?.copy( + selectedAddress = oldWalletData.walletAddresses?.selectedAddress + ?: newWalletData.walletAddresses.selectedAddress, + ), fiatRate = newWalletData.fiatRate ?: oldWalletData.fiatRate, ) } @@ -201,16 +205,7 @@ internal fun List.updateSelectedAddress( if (index == -1) return this val oldWalletData = this[index] - val addresses = oldWalletData.walletAddresses - ?: return this - val selectedAddress = addresses.list - .firstOrNull { it.type == addressType } - ?: addresses.selectedAddress - val updatedWalletData = oldWalletData.copy( - walletAddresses = addresses.copy( - selectedAddress = selectedAddress, - ), - ) + val updatedWalletData = oldWalletData.updateSelectedAddress(addressType) if (oldWalletData == updatedWalletData) return this return this.toMutableList().apply { @@ -218,6 +213,19 @@ internal fun List.updateSelectedAddress( } } +internal fun WalletDataModel.updateSelectedAddress(addressType: AddressType): WalletDataModel { + val addresses = walletAddresses ?: return this + val selectedAddress = addresses.list + .firstOrNull { it.type == addressType } + ?: addresses.selectedAddress + + return this.copy( + walletAddresses = addresses.copy( + selectedAddress = selectedAddress, + ), + ) +} + internal fun WalletDataModel.isSameWalletData(other: WalletDataModel): Boolean { return this.currency == other.currency } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index 607ecc34fd..f24fb15f88 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -176,18 +176,29 @@ private fun sendTransaction( scope.launch { val updateWalletResult = walletManager.safeUpdate() if (updateWalletResult is Result.Failure) { - when (val error = updateWalletResult.error) { - is TapError -> store.dispatchErrorNotification(error) - else -> { - val tapError = if (error.message == null) { - TapError.UnknownError - } else { - TapError.CustomError(error.message!!) + withMainContext { + when (val error = updateWalletResult.error) { + is TapError -> store.dispatchErrorNotification(error) + is BlockchainSdkError -> { + updateFeedbackManagerInfo( + walletManager = walletManager, + amountToSend = amountToSend, + feeAmount = feeAmount, + destinationAddress = destinationAddress, + ) + dispatch(SendAction.Dialog.SendTransactionFails.BlockchainSdkError(error = error)) + } + else -> { + val tapError = if (error.message == null) { + TapError.UnknownError + } else { + TapError.CustomError(error.message!!) + } + store.dispatchErrorNotification(tapError) } - store.dispatchErrorNotification(tapError) } + dispatch(SendAction.ChangeSendButtonState(ButtonState.ENABLED)) } - withMainContext { dispatch(SendAction.ChangeSendButtonState(ButtonState.ENABLED)) } return@launch } @@ -250,7 +261,7 @@ private fun sendTransaction( } } is SimpleResult.Failure -> { - store.state.globalState.feedbackManager?.infoHolder?.updateOnSendError( + updateFeedbackManagerInfo( walletManager = walletManager, amountToSend = amountToSend, feeAmount = feeAmount, @@ -306,6 +317,20 @@ private fun sendTransaction( } } +private fun updateFeedbackManagerInfo( + walletManager: WalletManager, + amountToSend: Amount, + feeAmount: Amount, + destinationAddress: String, +) { + store.state.globalState.feedbackManager?.infoHolder?.updateOnSendError( + walletManager = walletManager, + amountToSend = amountToSend, + feeAmount = feeAmount, + destinationAddress = destinationAddress, + ) +} + fun createValidateTransactionError( errorList: EnumSet, walletManager: WalletManager, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokenItemState.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokenItemState.kt index 603989d157..7c4f94e230 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokenItemState.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/states/TokenItemState.kt @@ -9,8 +9,8 @@ import kotlinx.collections.immutable.ImmutableList */ sealed interface TokenItemState { - /** Token name */ - val name: String + /** Token full name (name with symbol) */ + val fullName: String /** Token icon url */ val iconUrl: String @@ -21,12 +21,12 @@ sealed interface TokenItemState { /** * Token item state that is available for read * - * @property name token name + * @property fullName token name * @property iconUrl token icon url * @property networks list of networks that is available for read */ data class ReadContent( - override val name: String, + override val fullName: String, override val iconUrl: String, override val networks: ImmutableList, ) : TokenItemState @@ -34,17 +34,19 @@ sealed interface TokenItemState { /** * Token item state that is available for read and manage * - * @property name token name + * @property fullName token name * @property iconUrl token icon url * @property networks list of networks is available for read and edit * @property id token id + * @property name token name * @property symbol token brief name */ data class ManageContent( - override val name: String, + override val fullName: String, override val iconUrl: String, override val networks: ImmutableList, val id: String, + val name: String, val symbol: String, ) : TokenItemState } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt index 3545c6a2a5..9f3c695bb2 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenItem.kt @@ -60,7 +60,7 @@ internal fun TokenItem(model: TokenItemState) { val spacing6 = TangemTheme.dimens.spacing6 Icon( - name = model.name, + name = model.fullName, iconUrl = model.iconUrl, modifier = Modifier.constrainAs(icon) { top.linkTo(parent.top) @@ -69,7 +69,7 @@ internal fun TokenItem(model: TokenItemState) { ) Title( - title = model.name, + title = model.fullName, modifier = Modifier.constrainAs(title) { top.linkTo(parent.top) start.linkTo(icon.end, margin = spacing16) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenListPreviewData.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenListPreviewData.kt index 3fb8f93097..6341c4bd13 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenListPreviewData.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokenListPreviewData.kt @@ -15,17 +15,18 @@ object TokenListPreviewData { fun createManageToken(): TokenItemState.ManageContent { return TokenItemState.ManageContent( - name = "Tether (USDT)", + fullName = "Tether (USDT)", iconUrl = "https://s3.eu-central-1.amazonaws.com/tangem.api/coins/large/tether.png", networks = createManageNetworksList(), id = "", + name = "Tether", symbol = "", ) } fun createReadToken(): TokenItemState.ReadContent { return TokenItemState.ReadContent( - name = "Tether (USDT)", + fullName = "Tether (USDT)", iconUrl = "https://s3.eu-central-1.amazonaws.com/tangem.api/coins/large/tether.png", networks = createReadNetworksList(), ) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt index 09bacd8849..8cbfe2b322 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt @@ -141,7 +141,7 @@ private fun TokensListContent( item { DifferentAddressesWarning() } } - items(items = tokens, key = TokenItemState::name) { + items(items = tokens, key = TokenItemState::fullName) { it?.let { TokenItem(model = it) } } } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt index 543e23d996..eff8dd3e7d 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt @@ -126,10 +126,11 @@ internal class TokensListViewModel @Inject constructor( private fun createManageTokenContent(token: Token): TokenItemState.ManageContent { return TokenItemState.ManageContent( - name = getTokenName(token), + fullName = getTokenFullName(token), iconUrl = token.iconUrl, networks = token.networks.map(::createManageNetworkContent).toImmutableList(), id = token.id, + name = token.name, symbol = token.symbol, ) } @@ -156,7 +157,7 @@ internal class TokensListViewModel @Inject constructor( private fun createReadTokenContent(token: Token): TokenItemState.ReadContent { return TokenItemState.ReadContent( - name = getTokenName(token), + fullName = getTokenFullName(token), iconUrl = token.iconUrl, networks = token.networks.map(::createReadNetworkContent).toImmutableList(), ) @@ -171,7 +172,7 @@ internal class TokensListViewModel @Inject constructor( ) } - private fun getTokenName(token: Token) = "${token.name} (${token.symbol})" + private fun getTokenFullName(token: Token) = "${token.name} (${token.symbol})" private fun getNetworkProtocolName(network: Network): String { return if (network.address == null) { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index cbb32572e7..4aec238877 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -14,10 +14,10 @@ import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show import com.tangem.tap.domain.model.WalletDataModel import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.features.wallet.ui.images.load import com.tangem.tap.features.wallet.ui.utils.getFormattedAmount import com.tangem.tap.features.wallet.ui.utils.getFormattedFiatAmount import com.tangem.tap.features.wallet.ui.utils.getFormattedFiatRate -import com.tangem.tap.features.wallet.ui.images.load import com.tangem.tap.store import com.tangem.wallet.R import com.tangem.wallet.databinding.ItemCurrencyWalletBinding @@ -96,9 +96,13 @@ class WalletAdapter : ListAdapter