diff --git a/app/src/main/java/com/tangem/data/network/task/confirm_payment/ETHRequestTask.java b/app/src/main/java/com/tangem/data/network/task/confirm_payment/ETHRequestTask.java index a3772a1fd9..77a0edda0f 100644 --- a/app/src/main/java/com/tangem/data/network/task/confirm_payment/ETHRequestTask.java +++ b/app/src/main/java/com/tangem/data/network/task/confirm_payment/ETHRequestTask.java @@ -46,20 +46,22 @@ public class ETHRequestTask extends InfuraTask { BigInteger m = confirmPaymentActivity.getCard().getBlockchain() == Blockchain.Token ? BigInteger.valueOf(55000) : BigInteger.valueOf(21000); l = l.multiply(m); - String feeInGwei = confirmPaymentActivity.getCard().getAmountInGwei(String.valueOf(l)); + String MinFeeInGwei = confirmPaymentActivity.getCard().getAmountInGwei(String.valueOf(l)); + String NormalFeeInGwei = confirmPaymentActivity.getCard().getAmountInGwei(String.valueOf(l.multiply(BigInteger.valueOf(12)).divide(BigInteger.valueOf(10)))); + String MaxFeeInGwei = confirmPaymentActivity.getCard().getAmountInGwei(String.valueOf(l.multiply(BigInteger.valueOf(15)).divide(BigInteger.valueOf(10)))); - Log.i("sjjoefeff", feeInGwei); + Log.i("sjjoefeff", MinFeeInGwei); - confirmPaymentActivity.setMinFee(feeInGwei); - confirmPaymentActivity.setMaxFee(feeInGwei); - confirmPaymentActivity.setNormalFee(feeInGwei); - confirmPaymentActivity.getEtFee().setText(feeInGwei); + confirmPaymentActivity.setMinFee(MinFeeInGwei); + confirmPaymentActivity.setNormalFee(NormalFeeInGwei); + confirmPaymentActivity.setMaxFee(MaxFeeInGwei); + confirmPaymentActivity.getEtFee().setText(NormalFeeInGwei); confirmPaymentActivity.getEtFee().setError(null); confirmPaymentActivity.getBtnSend().setVisibility(View.VISIBLE); confirmPaymentActivity.setFeeRequestSuccess(true); confirmPaymentActivity.setBalanceRequestSuccess(true); confirmPaymentActivity.setDtVerified(new Date()); - confirmPaymentActivity.setMinFeeInInternalUnits(confirmPaymentActivity.getCard().InternalUnitsFromString(feeInGwei)); + confirmPaymentActivity.setMinFeeInInternalUnits(confirmPaymentActivity.getCard().InternalUnitsFromString(NormalFeeInGwei)); } catch (JSONException e) { e.printStackTrace(); 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 a2423e28bb..be5d301a97 100644 --- a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java +++ b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java @@ -20,10 +20,12 @@ public class SignPaymentTask extends Thread { private String txAmount = ""; private String txFee = ""; + private Boolean txIncFee = true; - public void SetTransactionValue(String amount, String fee) { + public void SetTransactionValue(String amount, String fee, Boolean incfee) { txAmount = amount; txFee = fee; + txIncFee = incfee; } private String txOutAddress; @@ -34,14 +36,14 @@ public class SignPaymentTask extends Thread { private CardProtocol.Notifications mNotifications; private boolean isCancelled = false; - public SignPaymentTask(Activity context, TangemCard card, NfcManager nfcManager, IsoDep isoDep, CardProtocol.Notifications notifications, String amount, String fee, String outAddress) { + public SignPaymentTask(Activity context, TangemCard card, NfcManager nfcManager, IsoDep isoDep, CardProtocol.Notifications notifications, String amount, String fee, Boolean IncFee, String outAddress) { mCard = card; mContext = context; mNfcManager = nfcManager; mIsoDep = isoDep; mNotifications = notifications; txOutAddress = outAddress; - SetTransactionValue(amount, fee); + SetTransactionValue(amount, fee, IncFee); } @Override @@ -90,7 +92,7 @@ public class SignPaymentTask extends Thread { byte[] tx; // try { - tx = engine.sign(txFee, txAmount, txOutAddress, mCard, protocol); + tx = engine.sign(txFee, txAmount, txIncFee, txOutAddress, mCard, protocol); // } // finally { // mNotifications.onReadWait(0); 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 f4ce877a4a..5d1d2743d7 100644 --- a/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/BtcCashEngine.java @@ -311,7 +311,7 @@ public class BtcCashEngine extends CoinEngine { return getAmountEquivalentDescriptionBTC(Double.parseDouble(value) / 1000.0, mCard.getRate()); } - public byte[] sign(String feeValue, String amountValue, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { + public byte[] sign(String feeValue, String amountValue, boolean IncFee, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { String myAddress = mCard.getWallet(); byte[] pbKey = mCard.getWalletPublicKeyRar(); //ALWAYS USING COMPRESS KEY @@ -333,9 +333,12 @@ public class BtcCashEngine extends CoinEngine { long fees = FormatUtil.ConvertStringToLong(feeValue); long amount = FormatUtil.ConvertStringToLong(amountValue); - amount = amount - fees; - - long change = fullAmount - fees - amount; + long change = fullAmount - amount; + if (IncFee) { + amount = amount - fees; + } else { + change = change - fees; + } if (amount + fees > fullAmount) { throw new Exception(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount)); 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 ec0384868b..a5d152e7e2 100644 --- a/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java @@ -468,7 +468,7 @@ public class BtcEngine extends CoinEngine { return getAmountEquivalentDescriptionBTC(Double.parseDouble(value) / 1000.0, mCard.getRate()); } - public byte[] sign(String feeValue, String amountValue, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { + public byte[] sign(String feeValue, String amountValue, boolean IncFee, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { String myAddress = mCard.getWallet(); byte[] pbKey = mCard.getWalletPublicKey(); @@ -490,9 +490,12 @@ public class BtcEngine extends CoinEngine { long fees = FormatUtil.ConvertStringToLong(feeValue); long amount = FormatUtil.ConvertStringToLong(amountValue); - amount = amount - fees; - - long change = fullAmount - fees - amount; + long change = fullAmount - amount; + if (IncFee) { + amount = amount - fees; + } else { + change = change - fees; + } if (amount + fees > fullAmount) { throw new Exception(String.format("Balance (%d) < amount (%d) + (%d)", fullAmount, change, amount)); diff --git a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java index b6a8e424ac..398a54472f 100644 --- a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java @@ -37,7 +37,7 @@ public abstract class CoinEngine { public abstract String getContractAddress(TangemCard card); - public abstract byte[] sign(String feeValue, String amountValue, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception; + public abstract byte[] sign(String feeValue, String amountValue, boolean IncFee, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception; public abstract boolean checkUnspentTransaction(TangemCard card); diff --git a/app/src/main/java/com/tangem/domain/wallet/EthEngine.java b/app/src/main/java/com/tangem/domain/wallet/EthEngine.java index 8de6579a7a..1c9c59a493 100644 --- a/app/src/main/java/com/tangem/domain/wallet/EthEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/EthEngine.java @@ -227,7 +227,11 @@ public class EthEngine extends CoinEngine { } public Uri getShareWalletUri(TangemCard mCard) { - return Uri.parse("" + mCard.getWallet()); + if (mCard.getDenomination() != null) { + return Uri.parse("ethereum:" + mCard.getWallet());// + "?value=" + mCard.getDenomination() +"e18"); + } else { + return Uri.parse("ethereum:" + mCard.getWallet()); + } } public Uri getShareWalletUriExplorer(TangemCard mCard) { @@ -303,7 +307,7 @@ public class EthEngine extends CoinEngine { return String.format("0x%s", BTCUtils.toHex(address)); } - public byte[] sign(String feeValue, String amountValue, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { + public byte[] sign(String feeValue, String amountValue, boolean IncFee, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { BigInteger nonceValue = mCard.GetConfirmTXCount(); byte[] pbKey = mCard.getWalletPublicKey(); @@ -318,7 +322,9 @@ public class EthEngine extends CoinEngine { BigInteger amount = amountDec.toBigInteger(); //new BigInteger(amountValue, 10); - amount = amount.subtract(fee); + if (IncFee) { + amount = amount.subtract(fee); + } BigInteger nonce = nonceValue; BigInteger gasPrice = fee.divide(BigInteger.valueOf(21000)); diff --git a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java index 8909818775..f273d4f1f1 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java @@ -281,7 +281,11 @@ public class TokenEngine extends CoinEngine { } public Uri getShareWalletUri(TangemCard mCard) { - return Uri.parse("" + mCard.getWallet()); + if (mCard.getDenomination() != null) { + return Uri.parse("ethereum:" + mCard.getWallet());// + "?value=" + mCard.getDenomination() +"e18"); + } else { + return Uri.parse("ethereum:" + mCard.getWallet()); + } } public boolean checkUnspentTransaction(TangemCard mCard) { @@ -327,7 +331,7 @@ public class TokenEngine extends CoinEngine { return GetFeeEqualentDescriptor(mCard, gweFee.toString()); } - public byte[] sign(String feeValue, String amountValue, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { + public byte[] sign(String feeValue, String amountValue, boolean IncFee, String toValue, TangemCard mCard, CardProtocol protocol) throws Exception { BigInteger nonceValue = mCard.GetConfirmTXCount(); byte[] pbKey = mCard.getWalletPublicKey(); 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 70dcaa3da2..3357875951 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt @@ -75,7 +75,6 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { etAmount = findViewById(R.id.etAmount) etFee = findViewById(R.id.etFee) tvFeeEquivalent = findViewById(R.id.tvFeeEquivalent) - rgFee = findViewById(R.id.rgFee) val engine = CoinEngineFactory.create(card!!.blockchain) if (card!!.blockchain == Blockchain.Token) { @@ -84,6 +83,12 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { } else tvBalance.text = engine!!.getBalanceWithAlter(card) + if(intent.getBooleanExtra("IncFee", true)) { + tvIncFee!!.setText(R.string.feein); + } else { + tvIncFee!!.setText(R.string.feeout); + } + etAmount!!.setText(intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT)) tvCurrency.text = engine.getBalanceCurrency(card) tvCurrency2.text = engine.feeCurrency @@ -176,7 +181,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { val req = InfuraRequest.GetGasPrise(card!!.wallet) req.id = 67 req.setBlockchain(card!!.blockchain) - rgFee!!.isEnabled = false + rgFee!!.isEnabled = true task.execute(req) } else { diff --git a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt index fcce6c2aa3..d796a82175 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt @@ -10,6 +10,7 @@ import android.support.v7.app.AppCompatActivity import android.text.Html import android.text.InputFilter import android.util.Log +import android.view.View import android.widget.Toast import com.tangem.domain.cardReader.NfcManager import com.tangem.domain.wallet.Blockchain @@ -52,8 +53,11 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { if (card!!.blockchain == Blockchain.Token) { val html = Html.fromHtml(engine!!.getBalanceWithAlter(card)) tvBalance.text = html - } else + rgIncFee!!.visibility = View.INVISIBLE + } else { tvBalance.text = engine!!.getBalanceWithAlter(card) + rgIncFee!!.visibility = View.VISIBLE + } if (card!!.remainingSignatures < 2) etAmount.isEnabled = false @@ -80,11 +84,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { tvCurrency.text = "m" + card!!.blockchain.currency useCurrency = true val output = FormatUtil.DoubleToString(balance) - etAmount.setText(output) - } - - // Default - else { + } else { tvCurrency.text = engine.getBalanceCurrency(card) useCurrency = false etAmount.setText(engine.getBalanceValue(card)) @@ -137,6 +137,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { intent.putExtra("UID", card!!.uid) intent.putExtra("Card", card!!.asBundle) intent.putExtra("Wallet", etWallet!!.text.toString()) + intent.putExtra("IncFee", (rgIncFee!!.checkedRadioButtonId == R.id.rbFeeIn)) intent.putExtra(SignPaymentActivity.EXTRA_AMOUNT, strAmount) startActivityForResult(intent, REQUEST_CODE_SEND_PAYMENT) } 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 8730dff2f2..9aecf620dc 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt @@ -40,6 +40,7 @@ class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card private var amountStr: String? = null private var feeStr: String? = null + private var incfeeBool = true private var outAddressStr: String? = null private var lastReadSuccess = true @@ -58,6 +59,7 @@ class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card amountStr = intent.getStringExtra(EXTRA_AMOUNT) feeStr = intent.getStringExtra("Fee") + incfeeBool = intent.getBooleanExtra("IncFee", true) outAddressStr = intent.getStringExtra("Wallet") tvCardID.text = card!!.cidDescription @@ -82,7 +84,7 @@ class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card } else { isoDep.timeout = card!!.pauseBeforePIN2 + 65000 } - signPaymentTask = SignPaymentTask(this, card, nfcManager, isoDep, this, amountStr, feeStr, outAddressStr) + signPaymentTask = SignPaymentTask(this, card, nfcManager, isoDep, this, amountStr, feeStr,incfeeBool, outAddressStr) signPaymentTask!!.start() } else { // Log.d(TAG, "Mismatch card UID (" + sUID + " instead of " + card!!.uid + ")") diff --git a/app/src/main/res/layout/activity_confirm_payment.xml b/app/src/main/res/layout/activity_confirm_payment.xml index 332054f2b0..fbafce3753 100644 --- a/app/src/main/res/layout/activity_confirm_payment.xml +++ b/app/src/main/res/layout/activity_confirm_payment.xml @@ -129,7 +129,7 @@ app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + + Minimal Normal Priority + Including fee + Not including fee The obtained data is outdated! Try again Cannot reach current active blockchain node. Try again Cannot check balance! No connection with blockchain nodes