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 f3d2a2b6d0..417e817b97 100644
--- a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java
+++ b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java
@@ -5,7 +5,11 @@ import android.text.InputFilter;
import com.tangem.domain.cardReader.CardProtocol;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
import java.math.BigDecimal;
+import java.math.BigInteger;
import java.math.RoundingMode;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
@@ -42,6 +46,11 @@ public abstract class CoinEngine {
this.currency=currency;
}
+ public InternalAmount(BigInteger amount, String currency) {
+ super(new BigDecimal(amount).unscaledValue(), new BigDecimal(amount).scale());
+ this.currency=currency;
+ }
+
public boolean notZero()
{
return compareTo(BigDecimal.ZERO)>0;
@@ -54,6 +63,32 @@ public abstract class CoinEngine {
public String getCurrency() {
return currency;
}
+
+ public String toValueString(int decimals) {
+ DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
+ symbols.setDecimalSeparator('.');
+ DecimalFormat df = new DecimalFormat();
+ df.setDecimalFormatSymbols(symbols);
+ df.setMaximumFractionDigits(decimals);
+
+ df.setMinimumFractionDigits(0);
+
+ df.setGroupingUsed(false);
+
+ BigDecimal bd=new BigDecimal(unscaledValue(), scale());
+ bd.setScale(decimals, ROUND_DOWN);
+ return df.format(bd);
+ }
+
+ public String toValueString() {
+ return toValueString(scale());
+ }
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
}
public static class Amount extends BigDecimal {
@@ -94,6 +129,10 @@ public abstract class CoinEngine {
}
public String toDescriptionString(int decimals) {
+ return toValueString(decimals)+ " " + currency;
+ }
+
+ public String toValueString(int decimals) {
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
symbols.setDecimalSeparator('.');
DecimalFormat df = new DecimalFormat();
@@ -106,11 +145,11 @@ public abstract class CoinEngine {
BigDecimal bd=new BigDecimal(unscaledValue(), scale());
bd.setScale(decimals, ROUND_DOWN);
- return df.format(bd)+ " " + currency;
+ return df.format(bd);
}
- public String toEditString() {
- return super.toString();
+ public String toValueString() {
+ return toValueString(scale());
}
public String toEquivalentString(double rateValue) {
diff --git a/app/src/main/java/com/tangem/domain/wallet/EthData.java b/app/src/main/java/com/tangem/domain/wallet/EthData.java
index d81539bab5..79646cb92e 100644
--- a/app/src/main/java/com/tangem/domain/wallet/EthData.java
+++ b/app/src/main/java/com/tangem/domain/wallet/EthData.java
@@ -31,12 +31,12 @@ public class EthData extends CoinData {
public void setUnconfirmedTXCount(BigInteger count) {
countUnconfirmedTX = count;
}
-
- public String getAmountInGwei(String amount) {
- BigInteger d = new BigInteger(amount, 10);
- BigInteger m = d.divide(BigInteger.valueOf(1000000000L));
- return m.toString(10);
- }
+//
+// public String getAmountInGwei(String amount) {
+// BigInteger d = new BigInteger(amount, 10);
+// BigInteger m = d.divide(BigInteger.valueOf(1000000000L));
+// return m.toString(10);
+// }
@Override
public void clearInfo() {
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 8388b4c701..bcb434c6fb 100644
--- a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java
+++ b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java
@@ -75,7 +75,7 @@ public class TokenEngine extends CoinEngine {
return " " + convertToAmount(coinData.getBalanceInInternalUnits()).toDescriptionString(getTokenDecimals()) + "
+ " + convertToAmount(coinData.getBalanceAlterInInternalUnits()).toDescriptionString(getEthDecimals()) + " for gas";
} catch (Exception e) {
e.printStackTrace();
- return null;
+ return "";
}
} else {
return "";
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 20e830c3ac..2ff106fbe3 100644
--- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt
@@ -40,14 +40,13 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
private var serverApiHelper: ServerApiHelper = ServerApiHelper()
private var serverApiHelperElectrum: ServerApiHelperElectrum = ServerApiHelperElectrum()
- //private var card: TangemCard? = null
private lateinit var ctx: TangemContext
private var feeRequestSuccess = false
private var balanceRequestSuccess = false
- private var minFee: String? = null
- private var maxFee: String? = null
- private var normalFee: String? = null
+ private var minFee: CoinEngine.Amount? = null
+ private var maxFee: CoinEngine.Amount? = null
+ private var normalFee: CoinEngine.Amount? = null
private var isIncludeFee: Boolean = true
private var minFeeInInternalUnits: CoinEngine.InternalAmount? = CoinEngine.InternalAmount(0, "")
private var requestPIN2Count = 0
@@ -69,8 +68,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
//
val engine = CoinEngineFactory.create(ctx)
- val html = Html.fromHtml(engine!!.balanceHTML)
- tvBalance.text = html
+ val html = Html.fromHtml(engine!!.balanceHTML)
+ tvBalance.text = html
isIncludeFee = intent.getBooleanExtra(SignPaymentActivity.EXTRA_FEE_INCLUDED, true)
@@ -82,7 +81,9 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
tvIncFee.visibility = View.INVISIBLE
else
tvIncFee.visibility = View.VISIBLE
- etAmount.setText(intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT))
+
+ val amount=CoinEngine.Amount(intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT), intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT_CURRENCY))
+ etAmount.setText(amount.toValueString())
tvCurrency.text = engine.balanceCurrency
tvCurrency2.text = engine.feeCurrency
tvCardID.text = ctx.card!!.cidDescription
@@ -188,8 +189,6 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
val intent = Intent(baseContext, PinRequestActivity::class.java)
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
ctx.saveToIntent(intent)
-// intent.putExtra(TangemCard.EXTRA_UID, card!!.uid)
-// intent.putExtra(TangemCard.EXTRA_CARD, card!!.asBundle)
intent.putExtra(SignPaymentActivity.EXTRA_FEE_INCLUDED, isIncludeFee)
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
}
@@ -201,7 +200,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
try {
etFee.setText(getString(R.string.empty))
val engine = CoinEngineFactory.create(ctx)
- val balance= engine.convertToAmount(CoinEngine.InternalAmount(electrumRequest.result.getLong("confirmed") + electrumRequest.result.getLong("unconfirmed"), "Satoshi"))
+ val balance = engine.convertToAmount(CoinEngine.InternalAmount(electrumRequest.result.getLong("confirmed") + electrumRequest.result.getLong("unconfirmed"), "Satoshi"))
val amount = CoinEngine.Amount(etAmount.text.toString(), ctx.blockchain.currency)
if (balance < amount) {
etFee.error = getString(R.string.not_enough_funds)
@@ -240,20 +239,21 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
val l = BigInteger(gasPrice, 16).divide(BigInteger.valueOf(1000000000L)).multiply(BigInteger.valueOf(1000000000L))
val m = if (ctx.blockchain == Blockchain.Token) BigInteger.valueOf(60000) else BigInteger.valueOf(21000)
- val minFeeInGwei = (ctx.coinData!! as EthData).getAmountInGwei(l.multiply(m).toString())
- val normalFeeInGwei = (ctx.coinData!! as EthData).getAmountInGwei(l.multiply(BigInteger.valueOf(12)).divide(BigInteger.valueOf(10)).multiply(m).toString())
- val maxFeeInGwei = (ctx.coinData!! as EthData).getAmountInGwei(l.multiply(BigInteger.valueOf(15)).divide(BigInteger.valueOf(10)).multiply(m).toString())
+ val weiMinFee = CoinEngine.InternalAmount(l.multiply(m), "wei")
+ val weiNormalFee = CoinEngine.InternalAmount(weiMinFee.multiply(BigDecimal.valueOf(12)).divide(BigDecimal.valueOf(10)), "wei")
+ val weiMaxFee = CoinEngine.InternalAmount(weiMinFee.multiply(BigDecimal.valueOf(15)).divide(BigDecimal.valueOf(10)), "wei")
- minFee = minFeeInGwei
- normalFee = normalFeeInGwei
- maxFee = maxFeeInGwei
- etFee.setText(normalFeeInGwei.replace(',', '.'))
+ minFee = engine.convertToAmount(weiMinFee)
+ normalFee = engine.convertToAmount(weiNormalFee)
+ maxFee = engine.convertToAmount(weiMaxFee)
+ doSetFee(rgFee.checkedRadioButtonId)
+ //etFee.setText(weiNormalFee.toValueString())
etFee.error = null
btnSend.visibility = View.VISIBLE
feeRequestSuccess = true
balanceRequestSuccess = true
dtVerified = Date()
- minFeeInInternalUnits = CoinEngine.InternalAmount(normalFeeInGwei,"Gwei")
+ minFeeInInternalUnits = weiNormalFee // TODO why not weiMinFee ???
}
}
}
@@ -291,25 +291,23 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
df.maximumFractionDigits = 7
df.minimumFractionDigits = 3
df.isGroupingUsed = false
- val strFee = df.format(fee)
when (blockCount) {
ServerApiHelper.ESTIMATE_FEE_MINIMAL -> {
- minFee = strFee
- //TODO - we must know currency of fee
- minFeeInInternalUnits = CoinEngine.InternalAmount(strFee, tvCurrency2.text.toString())
+ minFee = CoinEngine.Amount(fee, engine.feeCurrency)
+ minFeeInInternalUnits = engine.convertToInternalAmount(minFee)
}
ServerApiHelper.ESTIMATE_FEE_NORMAL -> {
- normalFee = strFee
+ normalFee = CoinEngine.Amount(fee, engine.feeCurrency)
- doSetFee(rgFee.checkedRadioButtonId)
}
ServerApiHelper.ESTIMATE_FEE_PRIORITY -> {
- maxFee = strFee
+ maxFee = CoinEngine.Amount(fee, engine.feeCurrency)
}
}
+ doSetFee(rgFee.checkedRadioButtonId)
etFee.error = null
feeRequestSuccess = true
diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherAPIWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherAPIWithdrawalActivity.kt
index ced8c667d8..b54d8b7c1c 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherAPIWithdrawalActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherAPIWithdrawalActivity.kt
@@ -8,7 +8,6 @@ import android.nfc.NfcAdapter
import android.nfc.Tag
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
-import android.text.Html
import android.view.View
import com.tangem.data.network.Cryptonit_OtherAPI
import com.tangem.domain.cardReader.NfcManager
@@ -57,7 +56,7 @@ class PrepareCryptonitOtherAPIWithdrawalActivity : AppCompatActivity(), NfcAdapt
tvCurrency.text = engine.balanceCurrency
- etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toEditString())
+ etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toValueString())
etAmount.filters=engine.amountInputFilters
// set listeners
diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt
index 4e62c4892a..4c8d54ed51 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt
@@ -7,7 +7,6 @@ import android.nfc.NfcAdapter
import android.nfc.Tag
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
-import android.text.Html
import android.text.InputFilter
import android.view.View
import android.view.inputmethod.EditorInfo
@@ -59,7 +58,7 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade
tvCurrency.text = engine.balanceCurrency
tvFeeCurrency.text = engine.feeCurrency
- etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toEditString())
+ etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toValueString())
etAmount.filters=engine.amountInputFilters
etAmount.setOnEditorActionListener { lv, actionId, event ->
diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt
index 2eeaeb6907..0610e0b847 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt
@@ -11,7 +11,6 @@ import android.nfc.NfcAdapter
import android.nfc.Tag
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
-import android.text.Html
import android.view.View
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
@@ -63,7 +62,7 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa
tvCurrency.text = engine.balanceCurrency
- etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toEditString())
+ etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toValueString())
etAmount.filters=engine.amountInputFilters
etAmount.setOnEditorActionListener { lv, actionId, event ->
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 2f1256688d..81489774a0 100644
--- a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt
+++ b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt
@@ -41,7 +41,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
nfcManager = NfcManager(this, this)
- ctx= TangemContext.loadFromBundle(this, intent.extras)
+ ctx = TangemContext.loadFromBundle(this, intent.extras)
tvCardID.text = ctx.card!!.cidDescription
val engine = CoinEngineFactory.create(ctx)
@@ -60,7 +60,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
etAmount.isEnabled = false
tvCurrency.text = engine.balance.currency
- etAmount.setText(engine.balance.toEditString())
+ etAmount.setText(engine.balance.toValueString())
// limit number of symbols after comma
etAmount.filters = engine.amountInputFilters
@@ -81,11 +81,13 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
val engine1 = CoinEngineFactory.create(ctx)
val strAmount: String = etAmount.text.toString().replace(",", ".")
- val amount=engine1.convertToAmount(etAmount.text.toString(), tvCurrency.text.toString())
+ val amount = engine1.convertToAmount(etAmount.text.toString(), tvCurrency.text.toString())
try {
if (!engine.checkNewTransactionAmount(amount))
etAmount.error = getString(R.string.not_enough_funds_on_your_card)
+ else
+ etAmount.error = null
} catch (e: Exception) {
etAmount.error = getString(R.string.unknown_amount_format)
}
@@ -98,6 +100,8 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
if (!checkAddress) {
etWallet.error = getString(R.string.incorrect_destination_wallet_address)
return@setOnClickListener
+ } else {
+ etWallet.error = null
}
if (etWallet.text.toString() == ctx.card!!.wallet) {
@@ -111,6 +115,9 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
// etAmount.error = getString(R.string.not_enough_funds_on_your_card)
// return@setOnClickListener
// }
+ if (!etAmount.error.isNullOrEmpty() || !etWallet.error.isNullOrEmpty()) {
+ return@setOnClickListener
+ }
val intent = Intent(baseContext, ConfirmPaymentActivity::class.java)
ctx.saveToIntent(intent)
diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt
index 6d9b919858..44f987d5da 100644
--- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt
+++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt
@@ -344,7 +344,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
ctx.card!!.addTokenToBlockchainName()
//TODO check
- //ctx.blockchain=Blockchain.Ethereum
+ //ctx.blockchain=lBlockchain.Ethereum
requestCounter--
if (requestCounter == 0) srl!!.isRefreshing = false
@@ -427,7 +427,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
localStorage.applySubstitution(ctx.card!!)
if (ctx.card!!.blockchain == Blockchain.Token || ctx.card!!.blockchain == Blockchain.Ethereum) {
ctx.card!!.setBlockchainIDFromCard(Blockchain.Ethereum.id)
- ctx.blockchain=Blockchain.Ethereum
+ //ctx.blockchain=Blockchain.Ethereum
//engine=engine!!.swithToOtherEngine(Blockchain.Ethereum)
}
refresh()