From bd1779ab3cce60f9b205d2bb6634498b0dc0c6b2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 7 Oct 2018 15:32:37 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../activity/ConfirmPaymentActivity.kt | 57 ++++++++++++++----- .../presentation/fragment/LoadedWallet.kt | 2 +- app/src/main/res/values/strings.xml | 3 + 3 files changed, 46 insertions(+), 16 deletions(-) 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 822f9bfcff..2a16412d82 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.content.Intent import android.nfc.NfcAdapter import android.nfc.Tag -import android.os.AsyncTask import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.text.Editable @@ -17,7 +16,6 @@ import android.widget.* import com.tangem.data.network.ServerApiHelper import com.tangem.data.network.model.InfuraResponse import com.tangem.data.network.request.ElectrumRequest -import com.tangem.data.network.task.confirm_payment.ConnectTask import com.tangem.domain.cardReader.NfcManager import com.tangem.domain.wallet.* import com.tangem.util.BTCUtils @@ -26,6 +24,7 @@ import com.tangem.util.FormatUtil import com.tangem.util.Util import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_confirm_payment.* +import org.json.JSONException import java.io.IOException import java.math.BigDecimal import java.math.BigInteger @@ -60,7 +59,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { var dtVerified: Date? = null - var calcSize: Int = 0 + private var calcSize: Int = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -122,15 +121,18 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { } else { rgFee!!.isEnabled = true - val data = SharedData(SharedData.COUNT_REQUEST) - val engineCoin = CoinEngineFactory.create(card!!.blockchain) - for (i in 0 until data.allRequest) { - val nodeAddress = engineCoin!!.getNode(card) - val nodePort = engineCoin.getNodePort(card) - val connectTaskEx = ConnectTask(this@ConfirmPaymentActivity, nodeAddress, nodePort, data) - connectTaskEx.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.checkBalance(card!!.wallet)) - } +// val data = SharedData(SharedData.COUNT_REQUEST) +// val engineCoin = CoinEngineFactory.create(card!!.blockchain) + +// for (i in 0 until data.allRequest) { +// val nodeAddress = engineCoin!!.getNode(card) +// val nodePort = engineCoin.getNodePort(card) +// val connectTaskEx = ConnectTask(this@ConfirmPaymentActivity, nodeAddress, nodePort, data) +// connectTaskEx.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.checkBalance(card!!.wallet)) +// } + + requestElectrum(card!!, ElectrumRequest.checkBalance(card!!.wallet)) calcSize = 256 try { @@ -233,6 +235,29 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2) } + // request electrum listener + serverApiHelper!!.setElectrumRequestData { + if (it.isMethod(ElectrumRequest.METHOD_GetBalance)) { + try { + etFee!!.setText("--") + if ((it.result.getInt("confirmed") + it.result.getInt("unconfirmed")) / card!!.blockchain.multiplier * 1000000.0 < java.lang.Float.parseFloat(etAmount!!.text.toString())) { + etFee!!.error = "Not enough funds" + } else { + etFee!!.error = null + balanceRequestSuccess = true + if (feeRequestSuccess && balanceRequestSuccess) { + btnSend!!.visibility = View.VISIBLE + } + dtVerified = Date() + nodeCheck = true + } + } catch (e: JSONException) { + e.printStackTrace() + finishActivityWithError(Activity.RESULT_CANCELED, getString(R.string.cannot_check_balance_no_connection_with_blockchain_nodes)) + } + } + } + // request estimate fee listener serverApiHelper!!.setEstimateFee { blockCount, estimateFeeResponse -> var fee: BigDecimal? @@ -240,13 +265,13 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { if (fee == BigDecimal.ZERO) { progressBar!!.visibility = View.INVISIBLE - finishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! Wrong data received from the node") + finishActivityWithError(Activity.RESULT_CANCELED, getString(R.string.cannot_calculate_fee_wrong_data_received_from_node)) } if (calcSize.toLong() != 0L) { fee = fee.multiply(BigDecimal(calcSize.toLong())).divide(BigDecimal(1024)) // per Kb -> per byte } else { - finishActivityWithError(Activity.RESULT_CANCELED, "Cannot calculate fee! Tx length unknown") + finishActivityWithError(Activity.RESULT_CANCELED, getString(R.string.cannot_calculate_fee_tx_length_unknown)) } progressBar!!.visibility = View.INVISIBLE @@ -257,9 +282,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { df.isGroupingUsed = false val strFee = df.format(fee) - var txtFee = "" when (blockCount) { - ServerApiHelper.ESTIMATE_FEE_MINIMAL -> { minFee = strFee minFeeInInternalUnits = card!!.internalUnitsFromString(strFee) @@ -334,6 +357,10 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { serverApiHelper!!.setInfuraResponse(infuraBodyListener) } + private fun requestElectrum(card: TangemCard, electrumRequest: ElectrumRequest) { + serverApiHelper!!.electrumRequestData(card, electrumRequest) + } + private fun requestInfura(method: String) { serverApiHelper!!.infura(method, 67, card!!.wallet, "", "") } 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 235e779842..e86aecc573 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -216,7 +216,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific } } - // request electrum + // request electrum listener serverApiHelper!!.setElectrumRequestData { if (it.isMethod(ElectrumRequest.METHOD_GetBalance)) { try { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c17d8730ea..9e06fb2dbc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -177,11 +177,14 @@ The obtained data is outdated! Try again Cannot reach current active blockchain node. Try again Cannot check balance! No connection with blockchain nodes + Cannot calculate fee! Tx length unknown + Cannot calculate fee! Wrong data received from the node The wallet is empty Please wait for confirmation of incoming transaction Not enough funds or incorrect amount PIN2 is required to sign the payment + Wallet hasn\'t been yet created Create Wallet