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