From 5ba06bd93e148139c4656bdd15396df5e9215610 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 26 Feb 2022 20:54:40 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/common/extensions/StringBuilder.kt | 16 +++- .../wallet/ui/WalletDetailsFragment.kt | 93 +++++++++---------- .../layout/layout_balance_wallet_details.xml | 57 +++--------- 3 files changed, 73 insertions(+), 93 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/extensions/StringBuilder.kt b/app/src/main/java/com/tangem/tap/common/extensions/StringBuilder.kt index 132b8cc44c..3f8fa992ff 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/StringBuilder.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/StringBuilder.kt @@ -3,6 +3,20 @@ package com.tangem.tap.common.extensions /** [REDACTED_AUTHOR] */ -fun StringBuilder.appendIf(value: String, predicate: (String) -> Boolean) { +fun StringBuilder.appendIf(value: String, predicate: (String) -> Boolean): StringBuilder { if (predicate(value)) this.append(value) + return this +} + +fun StringBuilder.appendIfNotNull(value: String?, prefix: String? = null, postfix: String? = null): StringBuilder { + if (value == null) return this + + prefix?.let { append(it) } + append(value) + postfix?.let { append(it) } + return this +} + +fun String.appendIfNotNull(value: String?, prefix: String? = null, postfix: String? = null): String { + return StringBuilder(this).apply { appendIfNotNull(value, prefix, postfix) }.toString() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index 936a4d0321..57d4b733de 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -3,8 +3,10 @@ package com.tangem.tap.features.wallet.ui import android.app.Dialog import android.os.Bundle import android.view.* +import android.widget.TextView import androidx.activity.OnBackPressedCallback -import androidx.annotation.IdRes +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager @@ -228,45 +230,38 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), private fun setupBalanceData(data: BalanceWidgetData) = with(binding.lWalletDetails) { when (data.status) { BalanceStatus.Loading -> { - lBalance.root.show() lBalanceError.root.hide() - lBalance.tvFiatAmount.hide() - lBalance.tvAmount.text = "" - showStatus(R.id.tv_status_loading) - showBalanceWithoutToken(data, false) + lBalance.root.show() + lBalance.groupBalance.show() + lBalance.tvError.hide() + lBalance.tvAmount.text = data.amount + lBalance.tvFiatAmount.text = data.fiatAmountFormatted + lBalance.tvStatus.setLoadingStatus(R.string.wallet_balance_loading) } BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress, BalanceStatus.TransactionInProgress -> { - lBalance.root.show() lBalanceError.root.hide() - val statusView = if (data.status == BalanceStatus.VerifiedOnline || - data.status == BalanceStatus.SameCurrencyTransactionInProgress - ) { - R.id.tv_status_verified - } else { - lBalance.tvStatusError.text = - getText(R.string.wallet_balance_tx_in_progress) - R.id.group_error + lBalance.root.show() + lBalance.groupBalance.show() + lBalance.tvError.hide() + lBalance.tvAmount.text = data.amount + lBalance.tvFiatAmount.text = data.fiatAmountFormatted + when (data.status) { + BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress -> { + lBalance.tvStatus.setVerifiedBalanceStatus(R.string.wallet_balance_verified) + } + else -> { + lBalance.tvStatus.setWarningStatus(R.string.wallet_balance_tx_in_progress) + } } - showStatus(statusView) - lBalance.tvStatusErrorMessage.hide() - showBalanceWithoutToken(data, true) } BalanceStatus.Unreachable -> { - lBalance.root.show() lBalanceError.root.hide() - lBalance.tvFiatAmount.hide() - - lBalance.tvAmount.text = "" - - lBalance.tvStatusErrorMessage.text = data.errorMessage - lBalance.tvStatusError.text = - getString(R.string.wallet_balance_blockchain_unreachable) - - showStatus(R.id.group_error) - lBalance.tvStatusErrorMessage.show(!data.errorMessage.isNullOrBlank()) + lBalance.root.show() + lBalance.groupBalance.hide() + lBalance.tvError.show() + lBalance.tvError.setWarningStatus(R.string.wallet_balance_blockchain_unreachable, data.errorMessage) } - BalanceStatus.NoAccount -> { lBalance.root.hide() lBalanceError.root.show() @@ -281,24 +276,6 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), binding.cardPendingTransactionWarning.show(data.status == BalanceStatus.SameCurrencyTransactionInProgress) } - private fun showStatus(@IdRes viewRes: Int) { - with(binding.lWalletDetails.lBalance) { - groupError.show(viewRes == R.id.group_error) - tvStatusLoading.show(viewRes == R.id.tv_status_loading) - tvStatusVerified.show(viewRes == R.id.tv_status_verified) - } - } - - private fun showBalanceWithoutToken(data: BalanceWidgetData, showAmount: Boolean) { - with(binding.lWalletDetails.lBalance) { - tvAmount.text = if (showAmount) data.amount else "" - if (showAmount) { - tvFiatAmount.show() - tvFiatAmount.text = data.fiatAmountFormatted - } - } - } - private fun handleDialogs(walletDialog: StateDialog?) { when (walletDialog) { is WalletDialog.SelectAmountToSendDialog -> { @@ -337,4 +314,22 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), menu.getItem(0).isEnabled = walletCanBeRemoved } -} + private fun TextView.setWarningStatus(mainMessage: Int, error: String? = null) { + val text = getString(mainMessage).appendIfNotNull(error, "\nError: ") + setStatus(text, R.color.warning, R.drawable.ic_warning_small) + } + + private fun TextView.setVerifiedBalanceStatus(mainMessage: Int) { + setStatus(getString(mainMessage), R.color.accent, R.drawable.ic_ok) + } + + private fun TextView.setLoadingStatus(mainMessage: Int) { + setStatus(getString(mainMessage), R.color.darkGray4, null) + } + + private fun TextView.setStatus(text: String, @ColorRes color: Int, @DrawableRes drawable: Int?) { + this.text = text + setTextColor(getColor(color)) + setCompoundDrawablesWithIntrinsicBounds(drawable ?: 0, 0, 0, 0) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/layout_balance_wallet_details.xml b/app/src/main/res/layout/layout_balance_wallet_details.xml index e094de5fee..29a44311c8 100644 --- a/app/src/main/res/layout/layout_balance_wallet_details.xml +++ b/app/src/main/res/layout/layout_balance_wallet_details.xml @@ -64,70 +64,41 @@ tools:text="J" /> + app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount" + tools:text="@string/wallet_balance_verified" /> - - + app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount" + tools:text="@string/lorem_ipsum" /> + app:constraint_referenced_ids="tv_amount, tv_fiat_amount, tv_status" /> - \ No newline at end of file