diff --git a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java
index be5d301a97..a2ce9efaa0 100644
--- a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java
+++ b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java
@@ -125,6 +125,9 @@ public class SignPaymentTask extends Thread {
} catch (CardProtocol.TangemException_InvalidPIN e) {
e.printStackTrace();
protocol.setError(e);
+ } catch (CardProtocol.TangemException_WrongAmount e) {
+ e.printStackTrace();
+ protocol.setError(e);
} catch (Exception e) {
e.printStackTrace();
protocol.setError(e);
diff --git a/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java b/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java
index 5e38310835..9e865aad43 100644
--- a/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java
+++ b/app/src/main/java/com/tangem/domain/cardReader/CardProtocol.java
@@ -137,6 +137,12 @@ public class CardProtocol {
}
}
+ public static class TangemException_WrongAmount extends TangemException {
+ public TangemException_WrongAmount(String message) {
+ super(message);
+ }
+ }
+
public byte[] GetUID() {
if (mIsoDep == null || mIsoDep.getTag() == null) return null;
return mIsoDep.getTag().getId();
diff --git a/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java b/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java
index adc6c43bd1..baafb9f01b 100644
--- a/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java
+++ b/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java
@@ -341,7 +341,7 @@ public class BtcCashEngine extends CoinEngine {
}
if (amount + fees > fullAmount) {
- throw new Exception(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount));
+ throw new CardProtocol.TangemException_WrongAmount(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount));
}
byte[][] dataForSign = new byte[unspentOutputs.size()][];
diff --git a/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java
index c50871c589..ff7101b5b1 100644
--- a/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java
+++ b/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java
@@ -498,7 +498,7 @@ public class BtcEngine extends CoinEngine {
}
if (amount + fees > fullAmount) {
- throw new Exception(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount));
+ throw new CardProtocol.TangemException_WrongAmount(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount));
}
byte[][] dataForSign = new byte[unspentOutputs.size()][];
diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt
index e2b3e67e37..a30c04a577 100644
--- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt
@@ -50,6 +50,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
var minFee: String? = null
var maxFee: String? = null
var normalFee: String? = null
+ var incFee: Boolean = true
var minFeeInInternalUnits: Long? = 0L
private var requestPIN2Count = 0
var nodeCheck = false
@@ -81,7 +82,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
} else
tvBalance.text = engine!!.getBalanceWithAlter(card)
- if (intent.getBooleanExtra("IncFee", true)) {
+ incFee = intent.getBooleanExtra("IncFee", true);
+ if (incFee) {
tvIncFee!!.setText(R.string.including_fee)
} else {
tvIncFee!!.setText(R.string.not_including_fee)
@@ -211,6 +213,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
intent.putExtra("UID", card!!.uid)
intent.putExtra("Card", card!!.asBundle)
+ intent.putExtra("IncFee", incFee)
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
}
@@ -272,6 +275,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
intent.putExtra("UID", card!!.uid)
intent.putExtra("Card", card!!.asBundle)
+ intent.putExtra("IncFee", incFee)
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
return
}
@@ -285,6 +289,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
intent.putExtra("Wallet", etWallet!!.text.toString())
intent.putExtra(SignPaymentActivity.EXTRA_AMOUNT, etAmount!!.text.toString())
intent.putExtra("Fee", etFee!!.text.toString())
+ intent.putExtra("IncFee", incFee)
startActivityForResult(intent, REQUEST_CODE_SIGN_PAYMENT)
} else
Toast.makeText(baseContext, R.string.pin_2_is_required_to_sign_the_payment, Toast.LENGTH_LONG).show()
diff --git a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt
index 9aecf620dc..1361b1efc1 100644
--- a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt
@@ -179,6 +179,18 @@ class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card
}
}, 500)
} else {
+ if (cardProtocol.error is CardProtocol.TangemException_WrongAmount) {
+ try {
+ val intent = Intent()
+ intent.putExtra("message", getString(R.string.cannot_sign_transaction_wrong_amount))
+ intent.putExtra("UID", cardProtocol.card.uid)
+ intent.putExtra("Card", cardProtocol.card.asBundle)
+ setResult(Activity.RESULT_CANCELED, intent)
+ finish()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
progressBar!!.post {
if (cardProtocol.error is CardProtocol.TangemException_ExtendedLengthNotSupported) {
if (!NoExtendedLengthSupportDialog.allReadyShowed) {
diff --git a/app/src/main/res/layout/activity_confirm_payment.xml b/app/src/main/res/layout/activity_confirm_payment.xml
index 19deb73508..b783961c1f 100644
--- a/app/src/main/res/layout/activity_confirm_payment.xml
+++ b/app/src/main/res/layout/activity_confirm_payment.xml
@@ -133,6 +133,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
+ android:layout_marginLeft="5dp"
android:fontFamily="@font/maax"
android:textColor="@color/primary"
android:textSize="14sp"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ace5d5454b..96f84edc90 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,6 +155,7 @@
Transaction has been successfully signed and sent to blockchain node. Wallet balance will be updated in a while
Try again. Failed to send transaction (%1$s)
Cannot sign transaction. Make sure you enter correct PIN2!
+ Amount and fee exceed total wallet balance!
Not enough funds on your card