From 7a0514dc7fa2160b3009b3b88c39418c2e9999ab Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 19 Mar 2019 14:58:01 +0300 Subject: [PATCH 1/9] Updated on 2026-08-14 --- app/build.gradle | 2 +- .../tangem/domain/wallet/btc/BtcEngine.java | 97 +++++++++---------- 2 files changed, 46 insertions(+), 53 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ec8de2db1a..c1ad1bffc5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ android { minSdkVersion 21 targetSdkVersion 28 versionCode 104 - versionName "0.902.2." + generateVersionName() + versionName "0.903.2." + generateVersionName() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } androidExtensions { 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 4f27c40330..824bee559a 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 @@ -759,71 +759,64 @@ public class BtcEngine extends CoinEngine { public void requestFee(BlockchainRequestsCallbacks blockchainRequestsCallbacks, String targetAddress, Amount amount) throws Exception { final int calcSize = calculateEstimatedTransactionSize(targetAddress, amount.toValueString()); Log.e(TAG, String.format("Estimated tx size %d", calcSize)); - coinData.minFee = null; - coinData.maxFee = null; - coinData.normalFee = null; + coinData.minFee=null; + coinData.maxFee=null; + coinData.normalFee=null; - final ServerApiCommon serverApiCommon = new ServerApiCommon(); + final ServerApiElectrum serverApiElectrum = new ServerApiElectrum(); - final ServerApiCommon.EstimatedFeeListener estimatedFeeListener = new ServerApiCommon.EstimatedFeeListener() { + final ServerApiElectrum.ResponseListener electrumListener = new ServerApiElectrum.ResponseListener() { @Override - public void onSuccess(int blockCount, String estimateFeeResponse) { - BigDecimal fee = new BigDecimal(estimateFeeResponse); // BTC per 1 kb + public void onSuccess(ElectrumRequest electrumRequest) { + BigDecimal fee; + if (electrumRequest.isMethod(ElectrumRequest.METHOD_GetFee)) { + try { + fee = new BigDecimal(electrumRequest.getResultString()); //fee per KB - if (fee.equals(BigDecimal.ZERO)) { - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); + if (fee.equals(BigDecimal.ZERO)) { + serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); + } + +// if (calcSize != 0) { + fee = fee.multiply(new BigDecimal(calcSize)).divide(new BigDecimal(1024)); // (per KB -> per byte)*size +// } else { +// serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); +// } + + //compare fee to usual relay fee +// if (fee.compareTo(relayFee) < 0) { +// fee = relayFee; +// } + fee = fee.setScale(8, RoundingMode.DOWN); + + CoinEngine.Amount minAmount = new CoinEngine.Amount(fee, ctx.getBlockchain().getCurrency()); + CoinEngine.Amount normalAmount = new CoinEngine.Amount(fee.multiply(new BigDecimal(3)), ctx.getBlockchain().getCurrency()); + CoinEngine.Amount maxAmount = new CoinEngine.Amount(fee.multiply(new BigDecimal(6)), ctx.getBlockchain().getCurrency()); + + coinData.minFee = minAmount; + coinData.normalFee = normalAmount; + coinData.maxFee = maxAmount; +// if (coinData.minFee != null && coinData.normalFee != null && coinData.maxFee != null) { + blockchainRequestsCallbacks.onComplete(true); +// } else { +// blockchainRequestsCallbacks.onProgress(); +// } + + } catch (JSONException e) { + e.printStackTrace(); } - return; - } - - if (calcSize != 0) { - fee = fee.multiply(new BigDecimal(calcSize)).divide(new BigDecimal(1024), BigDecimal.ROUND_DOWN); // per Kb -> per byte - } else { - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); - } - return; - } - - fee = fee.setScale(8, RoundingMode.DOWN); - - switch (blockCount) { - case ServerApiCommon.ESTIMATE_FEE_MINIMAL: - coinData.minFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - case ServerApiCommon.ESTIMATE_FEE_NORMAL: - coinData.normalFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - case ServerApiCommon.ESTIMATE_FEE_PRIORITY: - coinData.maxFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - } - - if (coinData.minFee != null && coinData.normalFee != null && coinData.maxFee != null) { - blockchainRequestsCallbacks.onComplete(true); - } else { - blockchainRequestsCallbacks.onProgress(); } } @Override - public void onFail(int blockCount, String message) { - // TODO - add fail counter to terminate after NNN tries - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); - return; - } - ctx.setError(ctx.getContext().getString(R.string.cannot_calculate_fee_wrong_data_received_from_node)); + public void onFail(ElectrumRequest electrumRequest) { + ctx.setError(electrumRequest.getError()); blockchainRequestsCallbacks.onComplete(false); } }; - serverApiCommon.setBtcEstimatedFeeListener(estimatedFeeListener); - - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_PRIORITY); - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_NORMAL); - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_MINIMAL); + serverApiElectrum.setResponseListener(electrumListener); + serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); } @Override From f3135fff4398ac56303ec9b940eacb586575771d Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 19 Mar 2019 15:03:53 +0300 Subject: [PATCH 2/9] Updated on 2026-08-14 --- .../java/com/tangem/domain/wallet/btc/BitcoinNode.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt b/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt index 2b1e170b29..31b995cd4a 100644 --- a/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt +++ b/app/src/main/java/com/tangem/domain/wallet/btc/BitcoinNode.kt @@ -20,10 +20,8 @@ enum class BitcoinNode(val host: String, val port: Int, val proto: String) { N_017("fn.48.org", 50002, "ssl"), N_018("vps.hsmiths.com", 50002, "ssl"), N_019("electrum.qtornado.com", 50002, "ssl"), - N_020("electrum-server.ninja", 50002, "ssl"), - N_021("electrum2.eff.ro", 50002, "ssl"), - N_022("electrum.hsmiths.com", 995, "ssl"), - N_023("electrum.hsmiths.com", 50002, "ssl"), - N_024("139.162.14.142", 50002, "ssl"), - N_025("tardis.bauerj.eu", 50002, "ssl"), + N_020("electrum2.eff.ro", 50002, "ssl"), + N_021("electrum.hsmiths.com", 995, "ssl"), + N_022("electrum.hsmiths.com", 50002, "ssl"), + N_023("tardis.bauerj.eu", 50002, "ssl"), } \ No newline at end of file From 72e25805e95ae2f34b3401a12ba691299a8b2e56 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Mar 2019 15:35:20 +0300 Subject: [PATCH 3/9] Updated on 2026-08-14 --- app/src/main/java/com/tangem/Constant.kt | 2 ++ .../com/tangem/ui/activity/MainActivity.kt | 24 +++++++++++++--- app/src/main/res/layout/activity_main.xml | 28 ++++++------------- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/tangem/Constant.kt b/app/src/main/java/com/tangem/Constant.kt index 433d912aa0..19a2d09a1c 100644 --- a/app/src/main/java/com/tangem/Constant.kt +++ b/app/src/main/java/com/tangem/Constant.kt @@ -4,6 +4,8 @@ import android.app.Activity object Constant { + const val URL_TANGEM = "https://play.google.com/store/apps/details?id=com.tangem.wallet" + const val EXTRA_BLOCKCHAIN_DATA = "BLOCKCHAIN_DATA" const val EXTRA_MESSAGE = "message" diff --git a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt index cff1c18a5c..90a9b3c00e 100644 --- a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt @@ -2,10 +2,13 @@ package com.tangem.ui.activity import android.Manifest import android.app.Activity +import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager +import android.graphics.Color +import android.net.Uri import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep @@ -18,6 +21,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.PopupMenu import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import com.google.android.material.snackbar.Snackbar import com.scottyab.rootbeer.RootBeer import com.tangem.App import com.tangem.Constant @@ -128,16 +132,29 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco val apiHelper = ServerApiCommon() apiHelper.setLastVersionListener { response -> try { - if (response.isNullOrEmpty()) return@setLastVersionListener + if (response.isNullOrEmpty()) + return@setLastVersionListener val responseVersionName = response.trim(' ', '\n', '\r', '\t') val responseBuildVersion = responseVersionName.split('.').last() val appBuildVersion = BuildConfig.VERSION_NAME.split('.').last() - if (responseBuildVersion.toInt() > appBuildVersion.toInt()) Toast.makeText(this, "There is a new application version: $responseVersionName", Toast.LENGTH_LONG).show() + if (responseBuildVersion.toInt() > appBuildVersion.toInt()) + Snackbar.make(cl, String.format(getString(R.string.new_app_version), responseVersionName), Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.update) { + try { + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(Constant.URL_TANGEM) + startActivity(intent) + } catch (e: ActivityNotFoundException) { + e.printStackTrace() + } + }.show() } catch (E: Exception) { E.printStackTrace() } } apiHelper.requestLastVersion() + + } private fun verifyPermissions() { @@ -275,7 +292,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco cardInfo.putBundle(EXTRA_TANGEM_CARD, bCard) cardProtocol.card.saveToBundle(bCard) - val uid = cardInfo.getString("UID") + val uid = cardInfo.getString(EXTRA_TANGEM_CARD_UID) val card = TangemCard(uid) cardInfo.getBundle(EXTRA_TANGEM_CARD)?.let { card.loadFromBundle(it) } @@ -288,7 +305,6 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco navigator.showLoadedWallet(this, it, ctx) } } -// ?: throw CardProtocol.TangemException("Can't create CoinEngine!") card.status == TangemCard.Status.Empty -> navigator.showEmptyWallet(this, ctx) card.status == TangemCard.Status.Purged -> Toast.makeText(this, R.string.erased_wallet, Toast.LENGTH_SHORT).show() card.status == TangemCard.Status.NotPersonalized -> Toast.makeText(this, R.string.not_personalized, Toast.LENGTH_SHORT).show() diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index edc089a4db..cc0bdcca10 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,8 @@ - - - - - - + android:layout_gravity="bottom|start" + android:layout_margin="10dp" + android:src="@drawable/ic_show_menu" + app:backgroundTint="@color/colorPrimary" + app:fabSize="normal" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f20adac23e..815f8e5599 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -91,6 +91,8 @@ Last unspent Wallet was erased Not personalized + There is a new application version: %1$s + Update The wallet is empty From 16f92f0df6816c112ecb38dd959bb10bb5e876a2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Mar 2019 16:14:08 +0300 Subject: [PATCH 4/9] Updated on 2026-08-14 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index c1ad1bffc5..86cc310cf9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { applicationId "com.tangem.wallet" minSdkVersion 21 targetSdkVersion 28 - versionCode 104 + versionCode 105 versionName "0.903.2." + generateVersionName() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } From 153c4f73bbfca0d0ed5501ea5b5d9eb9208172ca Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Mar 2019 16:52:45 +0300 Subject: [PATCH 5/9] Updated on 2026-08-14 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 86cc310cf9..ab63c2525b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { applicationId "com.tangem.wallet" minSdkVersion 21 targetSdkVersion 28 - versionCode 105 + versionCode 106 versionName "0.903.2." + generateVersionName() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } From b9e1691dd249945b2858e091219c3e29e4cf0119 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Mar 2019 21:58:15 +0300 Subject: [PATCH 6/9] Updated on 2026-08-14 --- .idea/misc.xml | 2 +- app/src/main/java/com/tangem/Constant.kt | 8 +- .../ui/activity/CreateNewWalletActivity.kt | 72 +++++--------- .../tangem/ui/activity/EmptyWalletActivity.kt | 6 +- .../tangem/ui/activity/PinRequestActivity.kt | 20 ++-- .../com/tangem/ui/activity/PinSwapActivity.kt | 2 +- .../com/tangem/ui/activity/PurgeActivity.kt | 3 +- .../ui/dialog/PINSwapWarningDialog.java | 10 +- .../tangem/ui/dialog/ShowQRCodeDialog.java | 4 +- .../com/tangem/ui/fragment/LoadedWallet.kt | 22 ++--- .../java/com/tangem/ui/fragment/VerifyCard.kt | 98 +++++++++---------- 11 files changed, 113 insertions(+), 134 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 8e44652cdd..cd2f3a654d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,7 +7,7 @@