diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 2c19ca8e8b..158d7e61ff 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -120,15 +120,17 @@ class MultiWalletReducer { } ?: emptyList() val sendButtonEnabled = action.amount.value?.isZero() == false && pendingTransactions.isEmpty() - val balanceStatus = if (pendingTransactions.isNotEmpty()) { - BalanceStatus.TransactionInProgress - } else { - BalanceStatus.VerifiedOnline + val tokenPendingTransactions = pendingTransactions + .filter { it.currency == action.amount.currencySymbol } + val tokenBalanceStatus = when { + tokenPendingTransactions.isNotEmpty() -> BalanceStatus.TransactionInProgress + pendingTransactions.isNotEmpty() -> BalanceStatus.SameCurrencyTransactionInProgress + else -> BalanceStatus.VerifiedOnline } val tokenWalletData = state.getWalletData(action.amount.currencySymbol) val newTokenWalletData = tokenWalletData?.copy( currencyData = tokenWalletData.currencyData.copy( - status = balanceStatus, + status = tokenBalanceStatus, amount = action.amount.value?.toFormattedCurrencyString( action.amount.decimals, action.amount.currencySymbol ), diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt index 1b3442c812..2b3ad57454 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt @@ -65,9 +65,15 @@ class OnWalletLoadedReducer { val tokens = wallet.getTokens().mapNotNull { token -> val tokenWalletData = walletState.getWalletData(token.symbol) + val tokenPendingTransactions = pendingTransactions.filter { it.currency == token.symbol } + val tokenBalanceStatus = when { + tokenPendingTransactions.isNotEmpty() -> BalanceStatus.TransactionInProgress + pendingTransactions.isNotEmpty() -> BalanceStatus.SameCurrencyTransactionInProgress + else -> BalanceStatus.VerifiedOnline + } tokenWalletData?.copy( currencyData = tokenWalletData.currencyData.copy( - status = balanceStatus, + status = tokenBalanceStatus, amount = wallet.getTokenAmount(token)?.value?.toFormattedCurrencyString( token.decimals, token.symbol ), @@ -76,7 +82,7 @@ class OnWalletLoadedReducer { ?.toFiatString(it, fiatCurrencySymbol) } ), - pendingTransactions = pendingTransactions.removeUnknownTransactions(), + pendingTransactions = tokenPendingTransactions.removeUnknownTransactions(), mainButton = WalletMainButton.SendButton(sendButtonEnabled) ) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt index ed446c3ee5..508a62b08c 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/BalanceWidget.kt @@ -13,6 +13,7 @@ import java.math.BigDecimal enum class BalanceStatus { VerifiedOnline, TransactionInProgress, + SameCurrencyTransactionInProgress, Unreachable, Loading, NoAccount, 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 bd13ada0c9..5b59b03015 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 @@ -205,10 +205,12 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), StoreS showStatus(R.id.tv_status_loading) showBalanceWithoutToken(data, false) } - BalanceStatus.VerifiedOnline, BalanceStatus.TransactionInProgress -> { + BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress, + BalanceStatus.TransactionInProgress -> { l_balance.show() l_balance_error.hide() - val statusView = if (data.status == BalanceStatus.VerifiedOnline) { + val statusView = if (data.status == BalanceStatus.VerifiedOnline || + data.status == BalanceStatus.SameCurrencyTransactionInProgress) { R.id.tv_status_verified } else { tv_status_error.text = @@ -245,6 +247,7 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), StoreS ) } } + card_pending_transaction_warning.show(data.status == BalanceStatus.SameCurrencyTransactionInProgress) } private fun showStatus(@IdRes viewRes: Int) { 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 73083d0e58..c14d364abf 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 @@ -100,7 +100,7 @@ class WalletAdapter view.iv_currency.setImageResource(R.drawable.shape_circle) } when (wallet.currencyData.status) { - BalanceStatus.VerifiedOnline -> hideWarning() + BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress -> hideWarning() BalanceStatus.Loading -> { hideWarning() if (wallet.currencyData.amount == null) { diff --git a/app/src/main/res/layout/fragment_wallet_details.xml b/app/src/main/res/layout/fragment_wallet_details.xml index a848f0df9d..757eeab445 100644 --- a/app/src/main/res/layout/fragment_wallet_details.xml +++ b/app/src/main/res/layout/fragment_wallet_details.xml @@ -79,6 +79,36 @@ app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" /> + + + + + + + @@ -107,12 +138,13 @@ android:id="@+id/btn_confirm" style="@style/TapButtonWithIcon" android:layout_width="0dp" - android:layout_marginStart="8dp" + android:layout_marginStart="4dp" android:layout_marginTop="30dp" android:layout_marginEnd="16dp" android:layout_marginBottom="33dp" android:text="@string/wallet_button_send" app:icon="@drawable/ic_send" + app:layout_constraintTop_toBottomOf="@id/barrier" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/guideline" diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 860b985336..238bc7a845 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -97,7 +97,7 @@ this wallet. Copy Share + Add tokens - + Please wait for the transaction to complete to be able to send funds Authenticity check failed This card might be a production sample or counterfeit