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 ffd3d3f097..3c4b5285c5 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 c65b0da0e2..1f888ee616 100644 --- a/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt +++ b/app/src/main/java/com/tangem/wallet/CoinEngineFactory.kt @@ -19,7 +19,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 07cb229329..1f71dc9873 100644 --- a/app/src/main/java/com/tangem/wallet/TangemContext.java +++ b/app/src/main/java/com/tangem/wallet/TangemContext.java @@ -55,14 +55,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/xlm/XlmEngine.java b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java index c707517abc..297991bd3f 100644 --- a/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java +++ b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java @@ -76,7 +76,7 @@ public class XlmEngine extends CoinEngine { public String getBalanceHTML() { Amount balance = getBalance(); if (balance != null) { - return " " + balance.toDescriptionString(getDecimals()) + "
+ " + coinData.getReserve().toDescriptionString(getDecimals()) + " reserve"; + return " " + balance.toDescriptionString(getDecimals()) + "
+ " + coinData.getReserve().toDescriptionString(getDecimals()) + " reserve1"; } else { return ""; } @@ -243,7 +243,7 @@ public class XlmEngine extends CoinEngine { // return; // } - if ((ctx.getCard().getOfflineBalance() != null) && !coinData.isBalanceReceived() && (ctx.getCard().getRemainingSignatures() == ctx.getCard().getMaxSignatures()) && coinData.getBalance().notZero()) { + 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); 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..3a4548442d 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,43 +136,30 @@ 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 } } + override fun getBalance(): Amount? { return if (!hasBalanceInfo()) null else coinData!!.getBalance()!! } @@ -310,7 +303,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 +317,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 +337,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 +416,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/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