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