From fa92ff45c81eccab8bade7067f73087304ae62f4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 29 Jan 2019 09:14:21 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../data/network/ServerApiElectrum.java | 13 ++++++++++ .../com/tangem/domain/wallet/CoinEngine.java | 25 ++++++++++++++++++- .../tangem/domain/wallet/TangemContext.java | 3 +++ .../domain/wallet/bch/BtcCashEngine.java | 4 +++ .../tangem/domain/wallet/btc/BtcEngine.java | 1 + .../tangem/domain/wallet/ltc/LtcEngine.java | 5 ++++ .../domain/wallet/rsk/RskTokenEngine.java | 9 +++++++ .../domain/wallet/token/TokenEngine.java | 9 +++++++ .../activity/ConfirmTransactionActivity.kt | 9 ++++--- .../activity/PrepareTransactionActivity.kt | 9 +++---- .../presentation/fragment/LoadedWallet.kt | 6 ++--- 11 files changed, 80 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java index deb6e49560..a3995a4c5c 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java @@ -54,6 +54,7 @@ import io.reactivex.schedulers.Schedulers; * {@link ResponseListener}.onSuccess(...) callback */ public class ServerApiElectrum { + public static final String ERROR_STARTS_WITH_CODE_32601 = "{\"code\":-32601,"; private static String TAG = ServerApiElectrum.class.getSimpleName(); /** @@ -248,6 +249,12 @@ public class ServerApiElectrum { electrumRequest.port = port; if (electrumRequest.answerData != null) { Log.i(TAG, ">> " + electrumRequest.answerData); + if( (electrumRequest.getError()!=null && electrumRequest.getError().startsWith(ERROR_STARTS_WITH_CODE_32601)) ) + { + // method unknown error??? + electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); + electrumRequest.answerData=null; + } } else { electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); Log.i(TAG, ">> "); @@ -331,6 +338,12 @@ public class ServerApiElectrum { electrumRequest.answerData = in.readLine(); if (electrumRequest.answerData != null) { Log.i(TAG, ">> " + electrumRequest.answerData); + if( (electrumRequest.getError()!=null && electrumRequest.getError().startsWith(ERROR_STARTS_WITH_CODE_32601)) ) + { + // method unknown error??? + electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); + electrumRequest.answerData=null; + } } else { electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); Log.i(TAG, ">> "); 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 c09c9043ee..1f53e9b4bd 100644 --- a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java @@ -21,7 +21,6 @@ import java.util.Locale; public abstract class CoinEngine { - public static class InternalAmount extends BigDecimal { private String currency; @@ -339,4 +338,28 @@ public abstract class CoinEngine { * @throws Exception if something goes wrong */ public abstract void requestSendTransaction(BlockchainRequestsCallbacks blockchainRequestsCallbacks, byte[] txForSend) throws Exception; + + + /** + * @return true if blockchain need multiple lines to show balance (e.g. need show additional balance information, Token count for example) + */ + public boolean needMultipleLinesForBalance() { + return false; + } + + /** + * @return true to allow user select fee level - min, normal or priority + */ + public boolean allowSelectFeeLevel() { + return true; + } + + /** + * @return true to allow user select include or exclude fee + */ + public boolean allowSelectFeeInclusion() { + return true; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/domain/wallet/TangemContext.java b/app/src/main/java/com/tangem/domain/wallet/TangemContext.java index 8a837bb611..7e642c01b3 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TangemContext.java +++ b/app/src/main/java/com/tangem/domain/wallet/TangemContext.java @@ -84,6 +84,9 @@ public class TangemContext { public void setError(String error) { this.error = error; } + public void setError(int valueId) { + this.error = getString(valueId); + } public String getError() { return error; diff --git a/app/src/main/java/com/tangem/domain/wallet/bch/BtcCashEngine.java b/app/src/main/java/com/tangem/domain/wallet/bch/BtcCashEngine.java index 146145b2a5..689c25219b 100644 --- a/app/src/main/java/com/tangem/domain/wallet/bch/BtcCashEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/bch/BtcCashEngine.java @@ -780,4 +780,8 @@ public class BtcCashEngine extends CoinEngine { } + @Override + public boolean allowSelectFeeLevel() { + return false; + } } diff --git a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java index 8cab4364e7..c86b50ce48 100644 --- a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java @@ -609,6 +609,7 @@ public class BtcEngine extends CoinEngine { public void onFail(ElectrumRequest electrumRequest) { Log.i(TAG, "onFail: "+electrumRequest.getMethod()+" "+electrumRequest.getError()); ctx.setError(electrumRequest.getError()); +// ctx.setError(R.string.cannot_obtain_data_from_blockchain); if (serverApiElectrum.isRequestsSequenceCompleted()) { blockchainRequestsCallbacks.onComplete(false);//serverApiElectrum.isErrorOccurred(), serverApiElectrum.getError()); }else{ diff --git a/app/src/main/java/com/tangem/domain/wallet/ltc/LtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/ltc/LtcEngine.java index a0c3eb7dc3..56f6bcc379 100644 --- a/app/src/main/java/com/tangem/domain/wallet/ltc/LtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/ltc/LtcEngine.java @@ -557,4 +557,9 @@ public class LtcEngine extends BtcEngine { serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); } + + @Override + public boolean allowSelectFeeLevel() { + return false; + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/domain/wallet/rsk/RskTokenEngine.java b/app/src/main/java/com/tangem/domain/wallet/rsk/RskTokenEngine.java index d2ac844bba..c31d02069d 100644 --- a/app/src/main/java/com/tangem/domain/wallet/rsk/RskTokenEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/rsk/RskTokenEngine.java @@ -238,4 +238,13 @@ public class RskTokenEngine extends TokenEngine { } + @Override + public boolean needMultipleLinesForBalance() { + return true; + } + + @Override + public boolean allowSelectFeeInclusion() { + return getBalance().getCurrency().equals(Blockchain.Rootstock.getCurrency()); + } } diff --git a/app/src/main/java/com/tangem/domain/wallet/token/TokenEngine.java b/app/src/main/java/com/tangem/domain/wallet/token/TokenEngine.java index 4a40c6d608..8f8f1f856a 100644 --- a/app/src/main/java/com/tangem/domain/wallet/token/TokenEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/token/TokenEngine.java @@ -812,4 +812,13 @@ public class TokenEngine extends CoinEngine { } + @Override + public boolean needMultipleLinesForBalance() { + return true; + } + + @Override + public boolean allowSelectFeeInclusion() { + return getBalance().getCurrency().equals(Blockchain.Ethereum.getCurrency()); + } } diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt index 8a93a418b5..aa7826c36f 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt @@ -61,10 +61,10 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac amount = CoinEngine.Amount(intent.getStringExtra(Constant.EXTRA_AMOUNT), intent.getStringExtra(Constant.EXTRA_AMOUNT_CURRENCY)) - if (ctx.blockchain == Blockchain.Token && amount.currency != Blockchain.Ethereum.currency) - tvIncFee.visibility = View.INVISIBLE - else + if (engine.allowSelectFeeInclusion()) tvIncFee.visibility = View.VISIBLE + else + tvIncFee.visibility = View.INVISIBLE etAmount.setText(amount.toValueString()) tvCurrency.text = engine.balanceCurrency @@ -74,8 +74,9 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac btnSend.visibility = View.INVISIBLE + val allowFeeLevelSelection = engine!!.allowSelectFeeLevel() for (lol in rgFee.touchables) { - lol.isEnabled = !(ctx.blockchain == Blockchain.Ethereum || ctx.blockchain == Blockchain.EthereumTestNet || ctx.blockchain == Blockchain.Token || ctx.blockchain == Blockchain.BitcoinCash || ctx.blockchain == Blockchain.Litecoin) + lol.isEnabled = allowFeeLevelSelection } // set listeners diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt index a292980754..6050ead283 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt @@ -55,16 +55,15 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac @Suppress("DEPRECATION") val html = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Html.fromHtml(engine!!.balanceHTML, Html.FROM_HTML_MODE_LEGACY) - else + else Html.fromHtml(engine!!.balanceHTML) tvBalance.text = html - //TODO - to engine - if ((ctx.blockchain == Blockchain.Token && engine.balance.currency!=Blockchain.Ethereum.currency) || - ((ctx.blockchain == Blockchain.RootstockToken && engine.balance.currency!=Blockchain.Rootstock.currency))){ + if (!engine.allowSelectFeeInclusion()) { rgIncFee.visibility = View.INVISIBLE - } else + } else { rgIncFee.visibility = View.VISIBLE + } if (ctx.card!!.remainingSignatures < 2) etAmount.isEnabled = false 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 412132f522..c1d0a3eafc 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -1,6 +1,5 @@ package com.tangem.presentation.fragment -import android.annotation.SuppressLint import android.app.Activity import android.app.AlertDialog import android.content.* @@ -112,8 +111,9 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - if (ctx.blockchain == Blockchain.Token || ctx.blockchain == Blockchain.RootstockToken) - tvBalance.setSingleLine(false) + val engine=CoinEngineFactory.create(ctx) + + tvBalance.setSingleLine(!engine!!.needMultipleLinesForBalance()) ivTangemCard.setImageBitmap(App.localStorage.getCardArtworkBitmap(ctx.card))