From 18b4e4e3e531c7daa3383851fa0e8f6a025164a8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 26 Apr 2021 12:16:24 +0300 Subject: [PATCH 1/8] Updated on 2026-08-14 --- app/src/main/assets/tangem-android-config | 1 - app/src/main/assets/tangem-app-config | 1 + app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 160000 app/src/main/assets/tangem-android-config create mode 160000 app/src/main/assets/tangem-app-config diff --git a/app/src/main/assets/tangem-android-config b/app/src/main/assets/tangem-android-config deleted file mode 160000 index cbdda0d566..0000000000 --- a/app/src/main/assets/tangem-android-config +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cbdda0d566da0dd1baa534fd5ce815ce7c88cea0 diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config new file mode 160000 index 0000000000..415eb6e9cc --- /dev/null +++ b/app/src/main/assets/tangem-app-config @@ -0,0 +1 @@ +Subproject commit 415eb6e9ccfcdc3573391b869adeba433f790087 diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt b/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt index 3471ed78ee..873b71c500 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt @@ -10,7 +10,7 @@ interface Loader { companion object { const val featuresName = "features_${BuildConfig.CONFIG_ENVIRONMENT}" - const val configValuesName = "tangem-android-config/config_${BuildConfig.CONFIG_ENVIRONMENT}" + const val configValuesName = "tangem-app-config/config_${BuildConfig.CONFIG_ENVIRONMENT}" const val warnings = "warnings_${BuildConfig.CONFIG_ENVIRONMENT}" } } \ No newline at end of file From 5e770b26b56313ea10865d30cc3a9d9f4fadf0f5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 5 May 2021 18:28:22 +0300 Subject: [PATCH 2/8] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt b/app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt index 05c2b6a6bd..00c2f87e19 100644 --- a/app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt +++ b/app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt @@ -44,6 +44,7 @@ class NetworkConnectivity( (capabilities != null) && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) } else { From cf785b1f75dba4da2a1a83784b4e237a1afcd55e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 6 May 2021 07:23:13 +0300 Subject: [PATCH 3/8] Updated on 2026-08-14 --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 0fde302b00..13b2127afa 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ # Local configuration file (sdk path, etc) local.properties +# Google services + + # Gradle generated files .gradle From 23daa7bed70c77f12786a0ed12bfe3653a1209db Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 May 2021 10:50:06 +0300 Subject: [PATCH 4/8] Updated on 2026-08-14 --- .../java/com/tangem/tap/features/details/redux/DetailsReducer.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt index 4ec1681b66..5ec4fe3547 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt @@ -83,6 +83,7 @@ private fun handleEraseWallet(action: DetailsAction.EraseWallet, state: DetailsS return when (action) { DetailsAction.EraseWallet.Check -> { val notAllowedByCard = state.card?.settingsMask?.contains(Settings.ProhibitPurgeWallet) == true + || state.card?.settingsMask?.contains(Settings.IsReusable) == false val notEmpty = state.wallets.any { !it.recentTransactions.isNullOrEmpty() || it.amounts.toSendableAmounts().isNotEmpty() } From 944a01ba42706444e491aeb9cad42057f57d9070 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 May 2021 10:53:40 +0300 Subject: [PATCH 5/8] Updated on 2026-08-14 --- .../tap/features/wallet/redux/WalletState.kt | 3 +++ .../redux/middlewares/MultiWalletMiddleware.kt | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index 244f7f026d..0dabc601c8 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -81,6 +81,9 @@ data class WalletState( && (walletData.token == null || walletData.token != store.state.walletState.primaryToken)) { val walletManager = getWalletManager(walletData.currencyData.currencySymbol) ?: return true + + if (walletData.token == null && walletManager.presetTokens.isNotEmpty()) return false + val wallet = walletManager.wallet if (walletData.blockchain != null) { return wallet.recentTransactions.toPendingTransactions(wallet.address).isEmpty() && diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index d68d7863f2..da28809df6 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -39,10 +39,10 @@ class MultiWalletMiddleware { globalState?.scanNoteResponse?.card?.cardId?.let { currenciesRepository.saveAddedToken(it, action.token) } - addToken(action.token, walletState) + addToken(action.token, walletState, globalState) } is WalletAction.MultiWallet.AddTokens -> { - action.tokens.map { addToken(it, walletState) } + action.tokens.map { addToken(it, walletState, globalState) } } is WalletAction.MultiWallet.AddBlockchain -> { globalState?.scanNoteResponse?.card?.let { card -> @@ -62,6 +62,8 @@ class MultiWalletMiddleware { is WalletAction.MultiWallet.RemoveWallet -> { val cardId = globalState?.scanNoteResponse?.card?.cardId if (action.walletData.token != null) { + walletState?.getWalletManagerForToken(action.walletData.token.symbol) + ?.removeToken(action.walletData.token) cardId?.let { currenciesRepository.removeToken(it, action.walletData.token) } } else if (action.walletData.blockchain != null) { cardId?.let { currenciesRepository.removeBlockchain(it, action.walletData.blockchain) } @@ -120,8 +122,15 @@ class MultiWalletMiddleware { } } - private fun addToken(token: Token, walletState: WalletState?) { - val walletManager = walletState?.getWalletManager(token.symbol) + private fun addToken(token: Token, walletState: WalletState?, globalState: GlobalState?) { + val card = globalState?.scanNoteResponse?.card ?: return + val walletManager = walletState?.getWalletManager(token.symbol) ?: + globalState.tapWalletManager.walletManagerFactory.makeWalletManagerForApp( + card = card, + blockchain = Blockchain.Ethereum + )?.also { walletManager -> + store.dispatch(WalletAction.MultiWallet.AddWalletManagers(walletManager)) + } scope.launch { val result = walletManager?.addToken(token) withContext(Dispatchers.Main) { From f6e8d7fd73dfd6f7baabc47be21523d12ec2ec5f Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 May 2021 10:56:35 +0300 Subject: [PATCH 6/8] Updated on 2026-08-14 --- app/build.gradle | 10 +-- .../tangem/tap/common/extensions/Picasso.kt | 78 +++++++++++++++++++ .../tokens/ui/adapters/CurrenciesAdapter.kt | 26 +++++-- .../wallet/ui/adapters/WalletAdapter.kt | 28 ++++--- dependencies.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt diff --git a/app/build.gradle b/app/build.gradle index 44a13aa801..6674f33d44 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,13 +75,9 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' -// TODO: change to prod dependencies when they are available -// implementation 'com.tangem:blockchain:1.164.0' -// implementation 'com.tangem:core:1.109.0' -// implementation 'com.tangem:sdk:1.109.0' - implementation 'blockchain-sdk-kotlin:blockchain:tangem-20210416.151414-8' - implementation 'com.tangem:tangem-core:tangem-20210414.185224-2' - implementation 'com.tangem:tangem-sdk:tangem-20210414.185231-2' + implementation 'com.tangem:blockchain:develop-5' + implementation 'com.tangem:core:develop-10' + implementation 'com.tangem:sdk:develop-10' // WebView implementation "androidx.browser:browser:1.3.0" diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt new file mode 100644 index 0000000000..1ec834aa43 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt @@ -0,0 +1,78 @@ +package com.tangem.tap.common.extensions + +import android.widget.ImageView +import android.widget.TextView +import com.squareup.picasso.Callback +import com.squareup.picasso.Picasso +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.IconsUtil +import com.tangem.blockchain.common.Token +import com.tangem.wallet.R + +fun Picasso.loadCurrenciesIcon( + imageView: ImageView, + textView: TextView, + token: Token? = null, + blockchain: Blockchain?, +) { + val blockchain = blockchain ?: Blockchain.Ethereum + + val url = if (token != null) { + IconsUtil.getTokenIconUri(blockchain, token) + } else { + IconsUtil.getBlockchainIconUri(blockchain) + } + + imageView.setImageDrawable(null) + imageView.colorFilter = null + textView.text = null + + if (url != null) { + this.load(url) + .placeholder(R.drawable.shape_circle) + ?.into(imageView, + object : Callback { + override fun onError(e: Exception?) { + setOfflineCurrencyImage(imageView, textView, token, blockchain) + } + + override fun onSuccess() { + } + }) + } else { + setOfflineCurrencyImage(imageView, textView, token, blockchain) + } +} + +private fun setOfflineCurrencyImage( + imageView: ImageView, + textView: TextView, + token: Token?, + blockchain: Blockchain, +) { + if (token != null) { + setTokenImage(imageView, textView, token) + } else { + setBlockchainImage(imageView, textView, blockchain) + } +} + +private fun setBlockchainImage( + imageView: ImageView, + textView: TextView, + blockchain: Blockchain +) { + imageView.setImageResource(blockchain.getIconRes()) + imageView.colorFilter = null + textView.text = null +} + +private fun setTokenImage( + imageView: ImageView, + textView: TextView, + token: Token +) { + imageView.setImageResource(R.drawable.shape_circle) + imageView.setColorFilter(token.getColor()) + textView.text = token.symbol.take(1) +} diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/adapters/CurrenciesAdapter.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/adapters/CurrenciesAdapter.kt index 9fe1ba05bd..0047481627 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/adapters/CurrenciesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/adapters/CurrenciesAdapter.kt @@ -7,7 +7,10 @@ import androidx.annotation.StringRes import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import com.squareup.picasso.Callback +import com.squareup.picasso.Picasso import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.IconsUtil import com.tangem.blockchain.common.Token import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.global.CryptoCurrencyName @@ -16,6 +19,7 @@ import com.tangem.tap.store import com.tangem.wallet.R import kotlinx.android.synthetic.main.item_currency_subtitle.view.* import kotlinx.android.synthetic.main.item_popular_token.view.* +import java.lang.Exception import java.util.* class CurrenciesAdapter : ListAdapter(DiffUtilCallback) { @@ -104,9 +108,11 @@ class CurrenciesAdapter : ListAdapter view.btn_add_token.show(!isAdded) view.btn_token_added.show(isAdded) - view.iv_currency.setImageResource(currency.blockchain.getIconRes()) - view.iv_currency.colorFilter = null - view.tv_token_letter.text = null + Picasso.get().loadCurrenciesIcon( + imageView = view.iv_currency, + textView = view.tv_token_letter, + blockchain = blockchain, token = null + ) view.btn_add_token.setOnClickListener { store.dispatch(WalletAction.MultiWallet.AddBlockchain(blockchain)) @@ -123,10 +129,11 @@ class CurrenciesAdapter : ListAdapter view.btn_add_token.show(!isAdded) view.btn_token_added.show(isAdded) - view.iv_currency.setImageResource(R.drawable.shape_circle) - view.iv_currency.setColorFilter(token.getColor()) - view.tv_token_letter.text = token.symbol.take(1) - + Picasso.get().loadCurrenciesIcon( + imageView = view.iv_currency, + textView = view.tv_token_letter, + token = token, blockchain = Blockchain.Ethereum + ) view.btn_add_token.setOnClickListener { store.dispatch(WalletAction.MultiWallet.AddToken(token)) view.btn_add_token.hide() @@ -152,7 +159,10 @@ sealed class CurrencyListItem { data class TitleListItem(@StringRes val titleResId: Int) : CurrencyListItem() companion object { - fun createListOfCurrencies(blockchains: List, tokens: List): List { + fun createListOfCurrencies( + blockchains: List, + tokens: List + ): List { val blockchainsTitle = R.string.add_tokens_subtitle_blockchains val tokensTitle = R.string.add_tokens_subtitle_tokens return listOf(TitleListItem(blockchainsTitle)) + diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index c14d364abf..c82c47f25f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -6,10 +6,14 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import com.squareup.picasso.Callback +import com.squareup.picasso.Picasso import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.IconsUtil import com.tangem.blockchain.common.Token import com.tangem.tap.common.extensions.getColor import com.tangem.tap.common.extensions.getIconRes +import com.tangem.tap.common.extensions.loadCurrenciesIcon import com.tangem.tap.common.extensions.show import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.WalletData @@ -17,6 +21,11 @@ import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.store import com.tangem.wallet.R import kotlinx.android.synthetic.main.item_currency_wallet.view.* +import kotlinx.android.synthetic.main.item_currency_wallet.view.iv_currency +import kotlinx.android.synthetic.main.item_currency_wallet.view.tv_currency_symbol +import kotlinx.android.synthetic.main.item_currency_wallet.view.tv_token_letter +import kotlinx.android.synthetic.main.item_popular_token.view.* +import java.lang.Exception import java.math.BigDecimal class WalletAdapter @@ -89,16 +98,15 @@ class WalletAdapter view.card_wallet.setOnClickListener { store.dispatch(WalletAction.MultiWallet.SelectWallet(wallet)) } - val blockchain = wallet.currencyData.currencySymbol?.let { Blockchain.fromCurrency(it) } - if (blockchain != null && blockchain != Blockchain.Unknown) { - view.tv_token_letter.text = null - view.iv_currency.colorFilter = null - view.iv_currency.setImageResource(blockchain.getIconRes()) - } else { - view.tv_token_letter.text = wallet.currencyData.currencySymbol?.take(1) - wallet.token?.getColor()?.let { view.iv_currency.setColorFilter(it) } - view.iv_currency.setImageResource(R.drawable.shape_circle) - } + val blockchain = wallet.blockchain + val token = wallet.token + + Picasso.get().loadCurrenciesIcon( + imageView = view.iv_currency, + textView = view.tv_token_letter, + token = token, blockchain = blockchain + ) + when (wallet.currencyData.status) { BalanceStatus.VerifiedOnline, BalanceStatus.SameCurrencyTransactionInProgress -> hideWarning() BalanceStatus.Loading -> { diff --git a/dependencies.gradle b/dependencies.gradle index f74991aa26..22dc84c906 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,4 +1,4 @@ ext.versions = [ - kotlin : '1.4.31', - build_gradle: '4.1.3', + kotlin : '1.5.0', + build_gradle: '4.2.0', ] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 385ee4fcc0..c6dab66ff6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip From d13df4aedc2bee6a74379da82c2a8c18fcc6d87e Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 May 2021 11:53:01 +0300 Subject: [PATCH 7/8] Updated on 2026-08-14 --- app/src/main/assets/erc20_tokens.json | 7 ++++ .../tangem/tap/common/extensions/Picasso.kt | 34 +++++++++++------- app/src/main/res/drawable-ldpi/ic_qcx.png | Bin 0 -> 7787 bytes 3 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/drawable-ldpi/ic_qcx.png diff --git a/app/src/main/assets/erc20_tokens.json b/app/src/main/assets/erc20_tokens.json index 9b29c198bb..5f2bfeb629 100644 --- a/app/src/main/assets/erc20_tokens.json +++ b/app/src/main/assets/erc20_tokens.json @@ -629,6 +629,13 @@ "name" : "QASH", "contractAddress" : "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6" }, + { + "decimalCount" : 8, + "symbol" : "QCX", + "name" : "QuickX Protocol", + "contractAddress" : "0xf9e5af7b42d31d51677c75bbbd37c1986ec79aee", + "customIcon": "qcx" + }, { "decimalCount" : 8, "symbol" : "QRL", diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt index 1ec834aa43..97a952841e 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt @@ -27,23 +27,31 @@ fun Picasso.loadCurrenciesIcon( imageView.colorFilter = null textView.text = null - if (url != null) { - this.load(url) - .placeholder(R.drawable.shape_circle) - ?.into(imageView, - object : Callback { - override fun onError(e: Exception?) { - setOfflineCurrencyImage(imageView, textView, token, blockchain) - } + when { + url != null -> { + this.load(url) + .placeholder(R.drawable.shape_circle) + ?.into(imageView, + object : Callback { + override fun onError(e: Exception?) { + setOfflineCurrencyImage(imageView, textView, token, blockchain) + } - override fun onSuccess() { - } - }) - } else { - setOfflineCurrencyImage(imageView, textView, token, blockchain) + override fun onSuccess() { + } + }) + } + token?.symbol == QCX -> { + this.load(R.drawable.ic_qcx)?.into(imageView) + } + else -> { + setOfflineCurrencyImage(imageView, textView, token, blockchain) + } } } +private const val QCX = "QCX" + private fun setOfflineCurrencyImage( imageView: ImageView, textView: TextView, diff --git a/app/src/main/res/drawable-ldpi/ic_qcx.png b/app/src/main/res/drawable-ldpi/ic_qcx.png new file mode 100644 index 0000000000000000000000000000000000000000..68f2ded28763116f2f73132925500ce772a0a649 GIT binary patch literal 7787 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 Date: Fri, 14 May 2021 15:52:17 +0300 Subject: [PATCH 8/8] Updated on 2026-08-14 --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6674f33d44..823fe723d5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,9 +75,9 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation 'com.tangem:blockchain:develop-5' - implementation 'com.tangem:core:develop-10' - implementation 'com.tangem:sdk:develop-10' + implementation 'com.tangem:blockchain:develop-8' + implementation 'com.tangem:core:develop-14' + implementation 'com.tangem:sdk:develop-14' // WebView implementation "androidx.browser:browser:1.3.0"