Updated on 2026-08-14
This commit is contained in:
parent
2f6a07c01a
commit
5ba06bd93e
3 changed files with 73 additions and 93 deletions
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -64,70 +64,41 @@
|
|||
tools:text="J" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_status_verified"
|
||||
android:id="@+id/tv_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="5dp"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:text="@string/wallet_balance_verified"
|
||||
android:textColor="@color/accent"
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"
|
||||
app:drawableStartCompat="@drawable/ic_ok"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount"
|
||||
tools:text="@string/wallet_balance_verified" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_status_error"
|
||||
android:layout_width="wrap_content"
|
||||
android:id="@+id/tv_error"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="5dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="6"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:text="@string/wallet_balance_blockchain_unreachable"
|
||||
android:textColor="@color/warning"
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"
|
||||
app:drawableStartCompat="@drawable/ic_warning_small"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintEnd_toStartOf="@+id/iv_currency"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_status_error_message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:textColor="@color/darkGray2"
|
||||
android:textSize="14sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_status_error" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount"
|
||||
tools:text="@string/lorem_ipsum" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/group_error"
|
||||
android:id="@+id/group_balance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="tv_status_error, tv_status_error_message" />
|
||||
app:constraint_referenced_ids="tv_amount, tv_fiat_amount, tv_status" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_status_loading"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="5dp"
|
||||
android:paddingStart="16dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingEnd="16dp"
|
||||
android:text="@string/wallet_balance_loading"
|
||||
android:textColor="@color/darkGray6"
|
||||
android:textSize="13sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tv_fiat_amount" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
Loading…
Add table
Add a link
Reference in a new issue