diff --git a/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt b/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
index 965286eda3..a594c110a8 100644
--- a/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/MainFragment.kt
@@ -7,7 +7,6 @@ import android.net.Uri
import android.nfc.NfcAdapter
import android.nfc.Tag
import android.nfc.tech.IsoDep
-import android.nfc.tech.Ndef
import android.nfc.tech.NfcV
import android.os.Bundle
import android.text.Spannable
@@ -55,7 +54,7 @@ import com.tangem.wallet.BuildConfig
import com.tangem.wallet.CoinEngineFactory
import com.tangem.wallet.R
import com.tangem.wallet.TangemContext
-import com.tangem.wallet.xlmtag.XlmTagEngine
+import com.tangem.wallet.xlmTag.XlmTagEngine
import kotlinx.android.synthetic.main.fragment_main.*
import kotlinx.android.synthetic.main.layout_touch_card.*
import kotlinx.coroutines.CoroutineScope
diff --git a/app/src/main/java/com/tangem/ui/fragment/additional/TagFragment.kt b/app/src/main/java/com/tangem/ui/fragment/additional/TagFragment.kt
index dd2d27594c..8514ccf37c 100644
--- a/app/src/main/java/com/tangem/ui/fragment/additional/TagFragment.kt
+++ b/app/src/main/java/com/tangem/ui/fragment/additional/TagFragment.kt
@@ -20,7 +20,7 @@ import com.tangem.ui.navigation.NavigationResultListener
import com.tangem.util.LOG
import com.tangem.util.UtilHelper
import com.tangem.wallet.*
-import com.tangem.wallet.xlmtag.XlmTagEngine
+import com.tangem.wallet.xlmTag.XlmTagEngine
import kotlinx.android.synthetic.main.fr_loaded_wallet.*
import kotlinx.android.synthetic.main.layout_btn_details.*
import kotlinx.android.synthetic.main.layout_tangem_card.*
@@ -67,7 +67,7 @@ class TagFragment : BaseFragment(), NavigationResultListener {
btnExtract.backgroundTintList =
ContextCompat.getColorStateList(requireContext(), R.color.btn_dark)
- ivTangemCard.setImageResource(R.drawable.card_default_nft)
+ ivTangemCard.setImageResource(R.drawable.card_tgslix)
tvBalance.setSingleLine(!engine.needMultipleLinesForBalance())
tvWallet.text = ctx.coinData.wallet
@@ -78,7 +78,6 @@ class TagFragment : BaseFragment(), NavigationResultListener {
srl?.setOnRefreshListener { refresh(true) }
requestBalanceAndUnspentTransactions()
-// update()
}
@@ -129,14 +128,13 @@ class TagFragment : BaseFragment(), NavigationResultListener {
else -> tvBalance.text = ""
}
- if (ctx.card!!.tokenSymbol.length > 1) {
- @Suppress("DEPRECATION") val html = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
- Html.fromHtml(ctx.blockchainName, Html.FROM_HTML_MODE_LEGACY)
- else
- Html.fromHtml(ctx.blockchainName)
- tvBlockchain.text = html
- } else
- tvBlockchain.text = ctx.blockchainName
+
+ @Suppress("DEPRECATION") val html = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ Html.fromHtml(ctx.blockchainName, Html.FROM_HTML_MODE_LEGACY)
+ else
+ Html.fromHtml(ctx.blockchainName)
+ tvBlockchain.text = html
+
}
diff --git a/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt b/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt
index 26d5df4da2..3d93e06d50 100644
--- a/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt
+++ b/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt
@@ -20,7 +20,7 @@ import com.tangem.wallet.token.TokenEngine
import com.tangem.wallet.tezos.TezosEngine
import com.tangem.wallet.xlm.XlmAssetEngine
import com.tangem.wallet.xlm.XlmEngine
-import com.tangem.wallet.xlmtag.XlmTagEngine
+import com.tangem.wallet.xlmTag.XlmTagEngine
import com.tangem.wallet.xrp.XrpEngine
/**
diff --git a/app/src/main/java/com/tangem/wallet/TangemContext.java b/app/src/main/java/com/tangem/wallet/TangemContext.java
index b9bd30a334..df164a4616 100644
--- a/app/src/main/java/com/tangem/wallet/TangemContext.java
+++ b/app/src/main/java/com/tangem/wallet/TangemContext.java
@@ -58,14 +58,16 @@ public class TangemContext {
public String getBlockchainName() {
Blockchain blockchain = getBlockchain();
if (blockchain == Blockchain.Token || blockchain == Blockchain.RootstockToken) {
- String token = card.getTokenSymbol();
- return token + "
" + getBlockchain().getOfficialName() + " smart contract token";
+ return card.getTokenSymbol()+ "
" + getBlockchain().getOfficialName() + " smart contract token";
}
if (blockchain == Blockchain.NftToken) {
- return card.getTokenSymbol().substring(4) + "
" + getBlockchain().getOfficialName() + " NFT token";
+ return card.getTokenSymbol().substring(4) + "
" + getBlockchain().getOfficialName() + " non-fungible token";
}
if (blockchain == Blockchain.StellarAsset) {
- return card.getTokenSymbol() + "
" + getBlockchain().getOfficialName() + " asset";
+ return card.getTokenSymbol() + "
" + getBlockchain().getOfficialName() + " asset";
+ }
+ if (blockchain == Blockchain.StellarTag) {
+ return "TANGEM TAG
"+ getBlockchain().getOfficialName() + " non-fungible token ";
}
return blockchain.getOfficialName();
}
diff --git a/app/src/main/java/com/tangem/wallet/bch/BtcCashEngine.java b/app/src/main/java/com/tangem/wallet/bch/BtcCashEngine.java
index 2acdefb4bc..f5614c7d03 100644
--- a/app/src/main/java/com/tangem/wallet/bch/BtcCashEngine.java
+++ b/app/src/main/java/com/tangem/wallet/bch/BtcCashEngine.java
@@ -275,11 +275,11 @@ public class BtcCashEngine extends CoinEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/binance/BinanceEngine.java b/app/src/main/java/com/tangem/wallet/binance/BinanceEngine.java
index 9d4a9be074..48ae73ef42 100644
--- a/app/src/main/java/com/tangem/wallet/binance/BinanceEngine.java
+++ b/app/src/main/java/com/tangem/wallet/binance/BinanceEngine.java
@@ -247,11 +247,11 @@ public class BinanceEngine extends CoinEngine {
}
}
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalance().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
return true;
} catch (Exception e) {
diff --git a/app/src/main/java/com/tangem/wallet/btc/BtcEngine.java b/app/src/main/java/com/tangem/wallet/btc/BtcEngine.java
index fd49ed7ec4..49da3cd0a5 100644
--- a/app/src/main/java/com/tangem/wallet/btc/BtcEngine.java
+++ b/app/src/main/java/com/tangem/wallet/btc/BtcEngine.java
@@ -310,11 +310,11 @@ public class BtcEngine extends CoinEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java b/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java
index 3b7792df59..e51226a99b 100644
--- a/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java
+++ b/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java
@@ -251,11 +251,11 @@ public class CardanoEngine extends CoinEngine {
}
}
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
return true;
} catch (Exception e) {
diff --git a/app/src/main/java/com/tangem/wallet/ducatus/DucatusEngine.java b/app/src/main/java/com/tangem/wallet/ducatus/DucatusEngine.java
index 17e8b9789c..f79127ae7f 100644
--- a/app/src/main/java/com/tangem/wallet/ducatus/DucatusEngine.java
+++ b/app/src/main/java/com/tangem/wallet/ducatus/DucatusEngine.java
@@ -263,11 +263,11 @@ public class DucatusEngine extends BtcEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/eos/EosEngine.java b/app/src/main/java/com/tangem/wallet/eos/EosEngine.java
index 47ee91442f..f667cfd0ef 100644
--- a/app/src/main/java/com/tangem/wallet/eos/EosEngine.java
+++ b/app/src/main/java/com/tangem/wallet/eos/EosEngine.java
@@ -293,11 +293,11 @@ public class EosEngine extends CoinEngine {
}
}
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && getBalance().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
+// }
return true;
diff --git a/app/src/main/java/com/tangem/wallet/eth/EthEngine.java b/app/src/main/java/com/tangem/wallet/eth/EthEngine.java
index 839d066aa1..76e23e4771 100644
--- a/app/src/main/java/com/tangem/wallet/eth/EthEngine.java
+++ b/app/src/main/java/com/tangem/wallet/eth/EthEngine.java
@@ -334,11 +334,11 @@ public class EthEngine extends CoinEngine {
}
}
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && getBalance().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
+// }
return true;
diff --git a/app/src/main/java/com/tangem/wallet/ltc/LtcEngine.java b/app/src/main/java/com/tangem/wallet/ltc/LtcEngine.java
index 7402e658d9..45e9749077 100644
--- a/app/src/main/java/com/tangem/wallet/ltc/LtcEngine.java
+++ b/app/src/main/java/com/tangem/wallet/ltc/LtcEngine.java
@@ -275,11 +275,11 @@ public class LtcEngine extends BtcEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_verify_online);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/tezos/TezosEngine.kt b/app/src/main/java/com/tangem/wallet/tezos/TezosEngine.kt
index 5ad3c85cf2..2160bd4b86 100644
--- a/app/src/main/java/com/tangem/wallet/tezos/TezosEngine.kt
+++ b/app/src/main/java/com/tangem/wallet/tezos/TezosEngine.kt
@@ -161,18 +161,17 @@ class TezosEngine : CoinEngine {
balanceValidator.setSecondLine(R.string.empty_string)
}
}
- if (ctx.card.offlineBalance != null &&
- !coinData!!.isBalanceReceived &&
- ctx.card.remainingSignatures ==
- ctx.card.maxSignatures &&
- balance!!.notZero()
- ) {
- balanceValidator.setScore(80)
- balanceValidator.firstLine = R.string.balance_validator_first_line_verified_offline
- balanceValidator.setSecondLine(
- R.string.balance_validator_second_line_internet_to_get_balance
- )
- }
+// if (ctx.card.offlineBalance != null &&
+// !coinData!!.isBalanceReceived &&
+// ctx.card.remainingSignatures ==
+// ctx.card.maxSignatures
+// ) {
+// balanceValidator.setScore(80)
+// balanceValidator.firstLine = R.string.balance_validator_first_line_verified_offline
+// balanceValidator.setSecondLine(
+// R.string.balance_validator_second_line_internet_to_get_balance
+// )
+// }
return true
} catch (e: java.lang.Exception) {
e.printStackTrace()
diff --git a/app/src/main/java/com/tangem/wallet/xlm/XlmAssetEngine.java b/app/src/main/java/com/tangem/wallet/xlm/XlmAssetEngine.java
index 626b41ff00..394806cda9 100644
--- a/app/src/main/java/com/tangem/wallet/xlm/XlmAssetEngine.java
+++ b/app/src/main/java/com/tangem/wallet/xlm/XlmAssetEngine.java
@@ -275,11 +275,11 @@ public class XlmAssetEngine extends CoinEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getXlmBalance().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java
index c707517abc..3e2f6c8f77 100644
--- a/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java
+++ b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java
@@ -243,11 +243,11 @@ public class XlmEngine extends CoinEngine {
// return;
// }
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalance().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
// if(card.getFailedBalanceRequestCounter()!=0) {
// score -= 5 * card.getFailedBalanceRequestCounter();
diff --git a/app/src/main/java/com/tangem/wallet/xlmtag/XlmTagData.kt b/app/src/main/java/com/tangem/wallet/xlmTag/XlmTagData.kt
similarity index 99%
rename from app/src/main/java/com/tangem/wallet/xlmtag/XlmTagData.kt
rename to app/src/main/java/com/tangem/wallet/xlmTag/XlmTagData.kt
index bdd8f4e3af..e8287ccd86 100644
--- a/app/src/main/java/com/tangem/wallet/xlmtag/XlmTagData.kt
+++ b/app/src/main/java/com/tangem/wallet/xlmTag/XlmTagData.kt
@@ -1,4 +1,4 @@
-package com.tangem.wallet.xlmtag
+package com.tangem.wallet.xlmTag
import android.os.Bundle
import android.util.Log
diff --git a/app/src/main/java/com/tangem/wallet/xlmtag/XlmTagEngine.kt b/app/src/main/java/com/tangem/wallet/xlmTag/XlmTagEngine.kt
similarity index 78%
rename from app/src/main/java/com/tangem/wallet/xlmtag/XlmTagEngine.kt
rename to app/src/main/java/com/tangem/wallet/xlmTag/XlmTagEngine.kt
index 4fe5de60ca..a21f69f934 100644
--- a/app/src/main/java/com/tangem/wallet/xlmtag/XlmTagEngine.kt
+++ b/app/src/main/java/com/tangem/wallet/xlmTag/XlmTagEngine.kt
@@ -1,4 +1,4 @@
-package com.tangem.wallet.xlmtag
+package com.tangem.wallet.xlmTag
import android.net.Uri
import android.os.StrictMode
@@ -53,12 +53,18 @@ class XlmTagEngine : CoinEngine {
}
override fun getBalanceHTML(): String {
- return if (hasBalanceInfo() && isBalanceNotZero && coinData!!.fundsFromTrustedSource) {
- ctx.getString(R.string.tag_genuine)
- } else if (coinData!!.fundsSentToTrustedSource) {
- ctx.getString(R.string.tag_claimed)
+ return if (hasBalanceInfo()) {
+ if (coinData!!.fundsFromTrustedSource) {
+// if (coinData!!.fundsSentToTrustedSource) { //TODO: shut down for example tags to appear genuine, turn on for production
+// ctx.getString(R.string.tag_claimed)
+// } else {
+ ctx.getString(R.string.tag_genuine)
+// }
+ } else {
+ ctx.getString(R.string.tag_not_genuine)
+ }
} else {
- ctx.getString(R.string.tag_not_genuine)
+ ""
}
}
@@ -72,7 +78,7 @@ class XlmTagEngine : CoinEngine {
}
override fun hasBalanceInfo(): Boolean {
- return if (coinData == null) false else coinData!!.getBalance() != null || coinData!!.isError404
+ return if (coinData == null) false else coinData!!.isBalanceReceived
}
override fun isExtractPossible(): Boolean {
@@ -130,40 +136,26 @@ class XlmTagEngine : CoinEngine {
}
override fun validateBalance(balanceValidator: BalanceValidator): Boolean {
- return try {
- if (ctx.card.offlineBalance == null && !ctx.coinData.isBalanceReceived || !ctx.coinData.isBalanceReceived && ctx.card.remainingSignatures != ctx.card.maxSignatures) {
- if (coinData!!.isError404) {
- balanceValidator.setScore(0)
- balanceValidator.firstLine = R.string.balance_validator_first_line_no_account
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_create_account_instruction)
- } else {
- balanceValidator.setScore(0)
- balanceValidator.firstLine = R.string.balance_validator_first_line_unknown_balance
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_unverified_balance)
- return false
- }
+ try {
+ if (!hasBalanceInfo()) {
+ balanceValidator.setScore(0)
+ balanceValidator.firstLine = R.string.balance_validator_first_line_no_connection
+ balanceValidator.setSecondLine(R.string.balance_validator_second_line_authenticity_not_verified)
+ return false
}
-
- if (coinData!!.isBalanceReceived && coinData!!.isBalanceEqual) {
+ if (coinData!!.fundsFromTrustedSource) {
balanceValidator.setScore(100)
- balanceValidator.firstLine = R.string.balance_validator_first_line_verified_balance
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_confirmed_in_blockchain)
- if (coinData!!.getBalance()!!.isZero) {
- balanceValidator.firstLine = R.string.balance_validator_first_line_empty_wallet
- balanceValidator.setSecondLine(R.string.empty_string)
- }
+ balanceValidator.firstLine = R.string.balance_validator_first_line_verified_in_blockchain
+ balanceValidator.setSecondLine(R.string.empty_string)
+ } else {
+ balanceValidator.setScore(0)
+ balanceValidator.firstLine = R.string.balance_validator_first_line_authenticity
+ balanceValidator.setSecondLine(R.string.empty_string)
}
-
- if (ctx.card.offlineBalance != null && !coinData!!.isBalanceReceived && ctx.card.remainingSignatures == ctx.card.maxSignatures && coinData!!.getBalance()!!.notZero()) {
- balanceValidator.setScore(80)
- balanceValidator.firstLine = R.string.balance_validator_first_line_verified_offline
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance)
- }
-
- true
+ return true
} catch (e: Exception) {
e.printStackTrace()
- false
+ return false
}
}
@@ -310,7 +302,7 @@ class XlmTagEngine : CoinEngine {
val accountKeyPair = KeyPair.fromAccountId(coinData!!.wallet)
try {
- var operationsPage = server.payments().forAccount(accountKeyPair).order(RequestBuilder.Order.DESC).execute()
+ var operationsPage = server.payments().forAccount(accountKeyPair).limit(200).order(RequestBuilder.Order.DESC).execute()
Log.e("Stellar", operationsPage.records.toString())
operations.addAll(operationsPage.records)
@@ -324,6 +316,8 @@ class XlmTagEngine : CoinEngine {
}
parsePayments(blockchainRequestsCallbacks)
+
+ CoroutineScope(Dispatchers.Main).launch { blockchainRequestsCallbacks.onComplete(!ctx.hasError()) }
} catch (e: Exception) {
if (e.message != null) {
ctx.error = e.message
@@ -342,53 +336,11 @@ class XlmTagEngine : CoinEngine {
Log.e("Stellar",
"fundsFromTrustedSource $coinData!!.fundsFromTrustedSource, " +
"fundsSentToTrustedSource $coinData!!.fundsSentToTrustedSource")
- blockchainRequestsCallbacks.onComplete(!ctx.hasError())
+ coinData!!.isBalanceReceived = true
}
override fun requestBalanceAndUnspentTransactions(blockchainRequestsCallbacks: BlockchainRequestsCallbacks) {
CoroutineScope(Dispatchers.IO).launch { requestPayments(blockchainRequestsCallbacks) }
- val serverApi = ServerApiStellar(Blockchain.Stellar)
- val listener: ServerApiStellar.Listener = object : ServerApiStellar.Listener {
- override fun onSuccess(request: StellarRequest.Base) {
- Log.i(TAG, "onSuccess: " + request.javaClass.simpleName)
- if (request is StellarRequest.Balance) {
- coinData!!.accountResponse = request.accountResponse
- coinData!!.validationNodeDescription = serverApi.currentURL
-
- blockchainRequestsCallbacks.onProgress()
- } else if (request is Ledgers) {
- coinData!!.setLedgerResponse(request.ledgerResponse)
- if (serverApi.isRequestsSequenceCompleted) {
- } else {
- blockchainRequestsCallbacks.onProgress()
- }
- } else {
- ctx.error = "Invalid request logic"
- blockchainRequestsCallbacks.onComplete(false)
- }
- }
-
- override fun onFail(request: StellarRequest.Base) {
- Log.i(TAG, "onFail: " + request.javaClass.simpleName + " " + request.error)
- if (request.errorResponse != null && request.errorResponse.code == 404) {
- coinData!!.isError404 = true
- } else {
- ctx.error = request.error
- }
- if (serverApi.isRequestsSequenceCompleted) {
- if (ctx.hasError()) {
- blockchainRequestsCallbacks.onComplete(false)
- } else {
- blockchainRequestsCallbacks.onComplete(true)
- }
- } else {
- blockchainRequestsCallbacks.onProgress()
- }
- }
- }
- serverApi.setListener(listener)
- serverApi.requestData(ctx, StellarRequest.Balance(coinData!!.wallet))
- serverApi.requestData(ctx, Ledgers())
}
@Throws(Exception::class)
@@ -463,7 +415,7 @@ class XlmTagEngine : CoinEngine {
private val multiplier = BigDecimal("10000000")
- const val OPERATIONS_LIMIT = 50
+ const val OPERATIONS_LIMIT = 200
private val TRUSTED_DESTINATION = "GAYPZMHFZERB42ONEJ4CY6ADDVTINEXMY6OZ5G6CLR4HHVKOSNJSZGMM"
private val TRUSTED_SOURCE = "GAZY7H4BWWEVB6QGB4RV3LW7DH5NO5CD5O6JCEQXA7N2UCGZSAPJFYW2"
}
diff --git a/app/src/main/java/com/tangem/wallet/xrp/XrpEngine.java b/app/src/main/java/com/tangem/wallet/xrp/XrpEngine.java
index 9ae763d5fa..73db5449a5 100644
--- a/app/src/main/java/com/tangem/wallet/xrp/XrpEngine.java
+++ b/app/src/main/java/com/tangem/wallet/xrp/XrpEngine.java
@@ -228,11 +228,11 @@ public class XrpEngine extends CoinEngine {
}
}
- if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalanceInInternalUnits().notZero()) {
- balanceValidator.setScore(80);
- balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
- balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
- }
+// if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) {
+// balanceValidator.setScore(80);
+// balanceValidator.setFirstLine(R.string.balance_validator_first_line_verified_offline);
+// balanceValidator.setSecondLine(R.string.balance_validator_second_line_internet_to_get_balance);
+// }
return true;
} catch (Exception e) {
diff --git a/server-android/src/main/java/com/tangem/server_android/data/LocalStorage.kt b/server-android/src/main/java/com/tangem/server_android/data/LocalStorage.kt
index 81dc1f368a..3fa43bfe6b 100644
--- a/server-android/src/main/java/com/tangem/server_android/data/LocalStorage.kt
+++ b/server-android/src/main/java/com/tangem/server_android/data/LocalStorage.kt
@@ -47,7 +47,7 @@ class LocalStorage
artworks = HashMap()
}
- if (artworks.count() < 31) {
+ if (artworks.count() < 32) {
// forceSave=true only on the last one
putResourceArtworkToCatalog(R.drawable.card_default, false)
putResourceArtworkToCatalog(R.drawable.card_default_nft, false)
@@ -78,6 +78,7 @@ class LocalStorage
putResourceArtworkToCatalog(R.drawable.card_ru043, false)
putResourceArtworkToCatalog(R.drawable.card_tg044, false)
putResourceArtworkToCatalog(R.drawable.card_tg046, false)
+ putResourceArtworkToCatalog(R.drawable.card_tgslix, false)
putResourceArtworkToCatalog(R.drawable.card_bc00, false)
putResourceArtworkToCatalog(R.drawable.card_ff32, true)
}
diff --git a/server-android/src/main/res/drawable/card_tgslix.png b/server-android/src/main/res/drawable/card_tgslix.png
new file mode 100644
index 0000000000..fe2f544598
Binary files /dev/null and b/server-android/src/main/res/drawable/card_tgslix.png differ
diff --git a/tangem-core/src/main/java/com/tangem/CardEnvironment.kt b/tangem-core/src/main/java/com/tangem/CardEnvironment.kt
index 8c32ac506f..39e077006e 100644
--- a/tangem-core/src/main/java/com/tangem/CardEnvironment.kt
+++ b/tangem-core/src/main/java/com/tangem/CardEnvironment.kt
@@ -10,7 +10,8 @@ data class CardEnvironment(
val pin2: String = DEFAULT_PIN2,
val cardId: String? = null,
val terminalKeys: KeyPair? = null,
- val encryptionKey: ByteArray? = null
+ val encryptionKey: ByteArray? = null,
+ val cvc: ByteArray? = null
) {
companion object {
diff --git a/tangem-core/src/main/java/com/tangem/CardManager.kt b/tangem-core/src/main/java/com/tangem/CardManager.kt
index 197c82891a..e381f57e3d 100644
--- a/tangem-core/src/main/java/com/tangem/CardManager.kt
+++ b/tangem-core/src/main/java/com/tangem/CardManager.kt
@@ -122,6 +122,37 @@ class CardManager(
runTask(task, cardId, callback)
}
+ /**
+ * This command will create a new wallet on the card having ‘Empty’ state.
+ * A key pair WalletPublicKey / WalletPrivateKey is generated and securely stored in the card.
+ * App will need to obtain Wallet_PublicKey from the response of [CreateWalletCommand] or [ReadCommand]
+ * and then transform it into an address of corresponding blockchain wallet
+ * according to a specific blockchain algorithm.
+ * WalletPrivateKey is never revealed by the card and will be used by [SignCommand] and [CheckWalletCommand].
+ * RemainingSignature is set to MaxSignatures.
+ * @param cardId CID, Unique Tangem card ID number.
+ */
+ fun createWallet(cardId: String,
+ callback: (result: TaskEvent) -> Unit) {
+ val createWalletCommand = CreateWalletCommand(cardId)
+ val task = SingleCommandTask(createWalletCommand)
+ runTask(task, cardId, callback)
+ }
+
+ /**
+ * This command deletes all wallet data. If Is_Reusable flag is enabled during personalization,
+
+ * If Is_Reusable flag is disabled, the card switches to ‘Purged’ state.
+ * ‘Purged’ state is final, it makes the card useless.
+ * @param cardId CID, Unique Tangem card ID number.
+ */
+ fun purgeWallet(cardId: String,
+ callback: (result: TaskEvent) -> Unit) {
+ val purgeWalletCommand = PurgeWalletCommand(cardId)
+ val task = SingleCommandTask(purgeWalletCommand)
+ runTask(task, cardId, callback)
+ }
+
/**
*/
@@ -157,6 +188,6 @@ class CardManager(
}
private fun fetchCardEnvironment(cardId: String?): CardEnvironment {
- return cardEnvironmentRepository[cardId] ?: CardEnvironment()
+ return cardEnvironmentRepository[cardId] ?: CardEnvironment(cardId = cardId)
}
}
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt
new file mode 100644
index 0000000000..833795cbbf
--- /dev/null
+++ b/tangem-core/src/main/java/com/tangem/commands/CreateWalletCommand.kt
@@ -0,0 +1,71 @@
+package com.tangem.commands
+
+import com.tangem.CardEnvironment
+import com.tangem.common.apdu.CommandApdu
+import com.tangem.common.apdu.Instruction
+import com.tangem.common.apdu.ResponseApdu
+import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.hexToBytes
+import com.tangem.common.tlv.Tlv
+import com.tangem.common.tlv.TlvMapper
+import com.tangem.common.tlv.TlvTag
+import com.tangem.tasks.TaskError
+
+class CreateWalletResponse(
+ /**
+ * CID, Unique Tangem card ID number.
+ */
+ val cardId: String,
+ /**
+ * Current status of the card [1 - Empty, 2 - Loaded, 3- Purged]
+ */
+ val status: CardStatus,
+ /**
+
+ */
+ val walletPublicKey: ByteArray
+) : CommandResponse
+
+/**
+ * This command will create a new wallet on the card having ‘Empty’ state.
+ * A key pair WalletPublicKey / WalletPrivateKey is generated and securely stored in the card.
+ * App will need to obtain Wallet_PublicKey from the response of [CreateWalletCommand] or [ReadCommand]
+ * and then transform it into an address of corresponding blockchain wallet
+ * according to a specific blockchain algorithm.
+ * WalletPrivateKey is never revealed by the card and will be used by [SignCommand] and [CheckWalletCommand].
+ * RemainingSignature is set to MaxSignatures.
+ *
+ * @property cardId CID, Unique Tangem card ID number.
+ */
+class CreateWalletCommand(
+ private val cardId: String
+) : CommandSerializer() {
+
+ override fun serialize(cardEnvironment: CardEnvironment): CommandApdu {
+ val tlvData = mutableListOf(
+ Tlv(TlvTag.Pin, cardEnvironment.pin1.calculateSha256()),
+ Tlv(TlvTag.CardId, cardId.hexToBytes()),
+ Tlv(TlvTag.Pin2, cardEnvironment.pin2.calculateSha256())
+ )
+ if (cardEnvironment.cvc != null) {
+ tlvData.add(Tlv(TlvTag.Cvc, cardEnvironment.cvc))
+ }
+
+ return CommandApdu(Instruction.CreateWallet, tlvData)
+ }
+
+ override fun deserialize(cardEnvironment: CardEnvironment, responseApdu: ResponseApdu): CreateWalletResponse? {
+ val tlvData = responseApdu.getTlvData() ?: return null
+
+ return try {
+ val mapper = TlvMapper(tlvData)
+ CreateWalletResponse(
+ cardId = mapper.map(TlvTag.CardId),
+ status = mapper.map(TlvTag.Status),
+ walletPublicKey = mapper.map(TlvTag.WalletPublicKey)
+ )
+ } catch (exception: Exception) {
+ throw TaskError.SerializeCommandError()
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt
new file mode 100644
index 0000000000..f8c3feaf7f
--- /dev/null
+++ b/tangem-core/src/main/java/com/tangem/commands/PurgeWalletCommand.kt
@@ -0,0 +1,57 @@
+package com.tangem.commands
+
+import com.tangem.CardEnvironment
+import com.tangem.common.apdu.CommandApdu
+import com.tangem.common.apdu.Instruction
+import com.tangem.common.apdu.ResponseApdu
+import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.hexToBytes
+import com.tangem.common.tlv.Tlv
+import com.tangem.common.tlv.TlvMapper
+import com.tangem.common.tlv.TlvTag
+import com.tangem.tasks.TaskError
+
+class PurgeWalletResponse(
+ /**
+ * CID, Unique Tangem card ID number.
+ */
+ val cardId: String,
+ /**
+ * Current status of the card [1 - Empty, 2 - Loaded, 3- Purged]
+ */
+ val status: CardStatus
+) : CommandResponse
+
+/**
+* This command deletes all wallet data. If Is_Reusable flag is enabled during personalization,
+
+ * If Is_Reusable flag is disabled, the card switches to ‘Purged’ state.
+ * ‘Purged’ state is final, it makes the card useless.
+ * @property cardId CID, Unique Tangem card ID number.
+ */
+class PurgeWalletCommand(
+ private val cardId: String
+) : CommandSerializer() {
+
+ override fun serialize(cardEnvironment: CardEnvironment): CommandApdu {
+ val tlvData = mutableListOf(
+ Tlv(TlvTag.Pin, cardEnvironment.pin1.calculateSha256()),
+ Tlv(TlvTag.CardId, cardId.hexToBytes()),
+ Tlv(TlvTag.Pin2, cardEnvironment.pin2.calculateSha256())
+ )
+ return CommandApdu(Instruction.PurgeWallet, tlvData)
+ }
+
+ override fun deserialize(cardEnvironment: CardEnvironment, responseApdu: ResponseApdu): PurgeWalletResponse? {
+ val tlvData = responseApdu.getTlvData() ?: return null
+
+ return try {
+ val mapper = TlvMapper(tlvData)
+ PurgeWalletResponse(
+ cardId = mapper.map(TlvTag.CardId),
+ status = mapper.map(TlvTag.Status))
+ } catch (exception: Exception) {
+ throw TaskError.SerializeCommandError()
+ }
+ }
+}
\ No newline at end of file
diff --git a/tangem-core/src/main/java/com/tangem/common/tlv/TlvTag.kt b/tangem-core/src/main/java/com/tangem/common/tlv/TlvTag.kt
index 491509ae08..ca292d37f4 100644
--- a/tangem-core/src/main/java/com/tangem/common/tlv/TlvTag.kt
+++ b/tangem-core/src/main/java/com/tangem/common/tlv/TlvTag.kt
@@ -52,7 +52,7 @@ enum class TlvTag(val code: Int) {
Pause(0x1C),
ManufactureId(0x20),
- ManufacturerSignature(0x21),
+ ManufacturerSignature(0x86),
IssuerDataPublicKey(0x30),
IssuerTransactionPublicKey(0x31),
diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/MainActivity.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/MainActivity.kt
index 018ca60ce5..52b2951309 100644
--- a/tangem-demo/src/main/java/com/tangem/tangemtest/MainActivity.kt
+++ b/tangem-demo/src/main/java/com/tangem/tangemtest/MainActivity.kt
@@ -45,6 +45,8 @@ class MainActivity : AppCompatActivity() {
tv_card_cid?.text = cardId
btn_sign.isEnabled = true
btn_read_issuer_data.isEnabled = true
+ btn_purge_wallet.isEnabled = true
+ btn_create_wallet.isEnabled = true
}
}
}
@@ -103,6 +105,32 @@ class MainActivity : AppCompatActivity() {
}
}
}
+ btn_purge_wallet?.setOnClickListener { _ ->
+ cardManager.purgeWallet(
+ cardId) {
+ when (it) {
+ is TaskEvent.Completion -> {
+ if (it.error != null) runOnUiThread { tv_card_cid?.text = it.error!!::class.simpleName }
+ }
+ is TaskEvent.Event -> runOnUiThread {
+ tv_card_cid?.text = it.data.status.name
+ }
+ }
+ }
+ }
+ btn_create_wallet?.setOnClickListener { _ ->
+ cardManager.createWallet(
+ cardId) {
+ when (it) {
+ is TaskEvent.Completion -> {
+ if (it.error != null) runOnUiThread { tv_card_cid?.text = it.error!!::class.simpleName }
+ }
+ is TaskEvent.Event -> runOnUiThread {
+ tv_card_cid?.text = it.data.status.name
+ }
+ }
+ }
+ }
}
private fun createSampleHashes(): Array {
diff --git a/tangem-demo/src/main/res/layout/activity_main.xml b/tangem-demo/src/main/res/layout/activity_main.xml
index a1cecca79b..5759633c21 100644
--- a/tangem-demo/src/main/res/layout/activity_main.xml
+++ b/tangem-demo/src/main/res/layout/activity_main.xml
@@ -9,12 +9,12 @@
+
+
+
+
\ No newline at end of file