From f26d9adf4b67b2c6911f4c3204356d76f1fa24d4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 19:23:26 +0300 Subject: [PATCH 01/14] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/MainActivity.kt | 3 ++- buildSrc/src/main/java/Dependency.kt | 4 ++-- buildSrc/src/main/java/Versions.kt | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 61762924a3..af42736a87 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -12,6 +12,7 @@ import com.google.android.material.snackbar.Snackbar import com.tangem.TangemSdk import com.tangem.operations.backup.BackupService import com.tangem.tangem_sdk_new.extensions.init +import com.tangem.tangem_sdk_new.extensions.initWithBiometrics import com.tangem.tap.common.ActivityResultCallbackHolder import com.tangem.tap.common.DialogManager import com.tangem.tap.common.OnActivityResultCallback @@ -77,7 +78,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac systemActions() store.dispatch(NavigationAction.ActivityCreated(WeakReference(this))) - tangemSdk = TangemSdk.init(this, TangemSdkManager.config) + tangemSdk = TangemSdk.initWithBiometrics(this, TangemSdkManager.config) tangemSdkManager = TangemSdkManager(tangemSdk, this) appStateHolder.tangemSdkManager = tangemSdkManager backupService = BackupService.init(tangemSdk, this) diff --git a/buildSrc/src/main/java/Dependency.kt b/buildSrc/src/main/java/Dependency.kt index 54ee97cd6d..5e9f38e8c8 100644 --- a/buildSrc/src/main/java/Dependency.kt +++ b/buildSrc/src/main/java/Dependency.kt @@ -71,8 +71,8 @@ object Library { object Tangem { const val blockchain = "com.tangem:blockchain:" + Versions.tangemBlockchainSdk - const val cardAndroid = "com.tangem.tangem-sdk-kotlin:android:" + Versions.tangemCardSgk - const val cardCore = "com.tangem.tangem-sdk-kotlin:core:" + Versions.tangemCardSgk + const val cardAndroid = "com.tangem.tangem-sdk-kotlin:android:" + Versions.tangemCardSdk + const val cardCore = "com.tangem.tangem-sdk-kotlin:core:" + Versions.tangemCardSdk } object Test { diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index c0d9908ef0..1f85e4ecac 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -62,7 +62,7 @@ object Versions { const val tangemBlockchainSdk = "develop-152" // const val tangemBlockchainSdk = "0.0.1" - const val tangemCardSgk = "develop-179" + const val tangemCardSdk = "develop-186" // endregion Tangem // region Testing From ab8d1175d6dce909472f77ec554ca902880b0f4a Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Feb 2023 18:28:35 +0300 Subject: [PATCH 02/14] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/TapApplication.kt | 2 +- .../domain/configurable/config/ConfigManager.kt | 14 ++++++++++---- .../tap/domain/configurable/config/JsonModels.kt | 2 ++ buildSrc/src/main/java/Versions.kt | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index d2b413e412..d77a6e9c1b 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -76,7 +76,7 @@ private val walletStoresRepository by lazy { WalletStoresRepository.provideDefau private val walletManagersRepository by lazy { WalletManagersRepository.provideDefaultImplementation( walletManagerFactory = WalletManagerFactory( - blockchainSdkConfig = store.state.globalState.configManager + config = store.state.globalState.configManager ?.config ?.blockchainSdkConfig ?: BlockchainSdkConfig(), diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt index 989d16359e..3180ad0318 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt @@ -2,6 +2,8 @@ package com.tangem.tap.domain.configurable.config import com.tangem.blockchain.common.BlockchainSdkConfig import com.tangem.blockchain.common.BlockchairCredentials +import com.tangem.blockchain.common.GetBlockCredentials +import com.tangem.blockchain.common.NowNodeCredentials import com.tangem.blockchain.common.QuickNodeCredentials import com.tangem.tap.common.shop.shopify.ShopifyShop import com.tangem.tap.common.zendesk.ZendeskConfig @@ -91,14 +93,16 @@ class ConfigManager { authToken = values.blockchairAuthorizationToken, ), blockcypherTokens = values.blockcypherTokens, - quickNodeCredentials = QuickNodeCredentials( + quickNodeSolanaCredentials = QuickNodeCredentials( apiKey = values.quiknodeApiKey, subdomain = values.quiknodeSubdomain, ), - bscQuickNodeCredentials = QuickNodeCredentials( + quickNodeBscCredentials = QuickNodeCredentials( apiKey = values.bscQuiknodeApiKey, subdomain = values.bscQuiknodeSubdomain, ), + nowNodesCredentials = NowNodeCredentials(values.nowNodesApiKey), + getBlockCredentials = GetBlockCredentials(values.getBlockApiKey), infuraProjectId = values.infuraProjectId, tronGridApiKey = values.tronGridApiKey, saltPayAuthToken = values.saltPay.credentials.token, @@ -121,14 +125,16 @@ class ConfigManager { authToken = values.blockchairAuthorizationToken, ), blockcypherTokens = values.blockcypherTokens, - quickNodeCredentials = QuickNodeCredentials( + quickNodeSolanaCredentials = QuickNodeCredentials( apiKey = values.quiknodeApiKey, subdomain = values.quiknodeSubdomain, ), - bscQuickNodeCredentials = QuickNodeCredentials( + quickNodeBscCredentials = QuickNodeCredentials( apiKey = values.bscQuiknodeApiKey, subdomain = values.bscQuiknodeSubdomain, ), + nowNodesCredentials = NowNodeCredentials(values.nowNodesApiKey), + getBlockCredentials = GetBlockCredentials(values.getBlockApiKey), infuraProjectId = values.infuraProjectId, saltPayAuthToken = values.saltPay.credentials.token, ), diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt index 77a1f0d6cc..aa57ec09f7 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt @@ -27,6 +27,8 @@ class ConfigValueModel( val quiknodeApiKey: String, val bscQuiknodeSubdomain: String, val bscQuiknodeApiKey: String, + val nowNodesApiKey: String, + val getBlockApiKey: String, val blockcypherTokens: Set?, val infuraProjectId: String?, val appsFlyer: AppsFlyer, diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index c0d9908ef0..17acab7b21 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -59,7 +59,7 @@ object Versions { // endregion Other libraries // region Tangem - const val tangemBlockchainSdk = "develop-152" + const val tangemBlockchainSdk = "develop-155" // const val tangemBlockchainSdk = "0.0.1" const val tangemCardSgk = "develop-179" From 812b2f37b115256b56765a1f5920f3876009d40e Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Feb 2023 19:23:44 +0300 Subject: [PATCH 03/14] Updated on 2026-08-14 --- .../tangem/tap/domain/configurable/config/ConfigManager.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt index 3180ad0318..8a2a6032cc 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt @@ -101,7 +101,7 @@ class ConfigManager { apiKey = values.bscQuiknodeApiKey, subdomain = values.bscQuiknodeSubdomain, ), - nowNodesCredentials = NowNodeCredentials(values.nowNodesApiKey), + nowNodeCredentials = NowNodeCredentials(values.nowNodesApiKey), getBlockCredentials = GetBlockCredentials(values.getBlockApiKey), infuraProjectId = values.infuraProjectId, tronGridApiKey = values.tronGridApiKey, @@ -133,7 +133,7 @@ class ConfigManager { apiKey = values.bscQuiknodeApiKey, subdomain = values.bscQuiknodeSubdomain, ), - nowNodesCredentials = NowNodeCredentials(values.nowNodesApiKey), + nowNodeCredentials = NowNodeCredentials(values.nowNodesApiKey), getBlockCredentials = GetBlockCredentials(values.getBlockApiKey), infuraProjectId = values.infuraProjectId, saltPayAuthToken = values.saltPay.credentials.token, From c1a6c9757797fa5985834bbefd3a5520d762dd30 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Feb 2023 12:46:56 +0300 Subject: [PATCH 04/14] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 12 ++++++------ core/res/src/main/res/values-fr/strings.xml | 12 ++++++------ core/res/src/main/res/values-it/strings.xml | 12 ++++++------ core/res/src/main/res/values-ru/strings.xml | 10 +++++----- core/res/src/main/res/values/strings.xml | 12 ++++++------ 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 8eff587ac8..b51d54d8e1 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -151,7 +151,7 @@ Set PIN code for your SaltPay card Chat with support Please hold the card until the operation complete - To start the backup process you have to add Tangem card as your backup + To start the backup process you have to add the Tangem card as your backup No backup card Backup card ready Finalize the backup process by creating an access code @@ -351,7 +351,7 @@ Your card is activated and ready to be used Balance Send only %s (%s) from %s network to this address. Using other tokens and networks may result in loss of funds. - If the process of creating the wallet gets interrupted in any way, you\'ll have to start over. + If the process of creating the wallet gets interrupted in any way, you\'ll have to start over The twinning process is partly complete. You can\'t exit it now. OK, ich hab\'s! Getting started @@ -376,10 +376,10 @@ Protect Personalize Restore - You have to set up a single access code to protect all your wallets. - You can set an individual access code on each card later. - The access code can be restored with a linked card, don\'t keep all cards in one place. - Choose any word, phrase, or number you want as your access code. + You have to set up a single access code to protect all your wallets + You can set up an individual access code on each card later + The access code can be restored with a linked card, don\'t keep all cards in one place + Choose any word, phrase, or number you want as your access code Access code must be at least 4 characters long Entered access code didn\'t match the initial access code Create diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index f3004f001d..d9ecb258a9 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -151,7 +151,7 @@ Set PIN code for your SaltPay card Chat with support Please hold the card until the operation complete - To start the backup process you have to add Tangem card as your backup + To start the backup process you have to add the Tangem card as your backup No backup card Backup card ready Finalize the backup process by creating an access code @@ -351,7 +351,7 @@ Your card is activated and ready to be used Balance Send only %s (%s) from %s network to this address. Using other tokens and networks may result in loss of funds. - If the process of creating the wallet gets interrupted in any way, you\'ll have to start over. + If the process of creating the wallet gets interrupted in any way, you\'ll have to start over The twinning process is partly complete. You can\'t exit it now. Ok, je l\'ai! Getting started @@ -376,10 +376,10 @@ Protect Personalize Restore - You have to set up a single access code to protect all your wallets. - You can set an individual access code on each card later. - The access code can be restored with a linked card, don\'t keep all cards in one place. - Choose any word, phrase, or number you want as your access code. + You have to set up a single access code to protect all your wallets + You can set up an individual access code on each card later + The access code can be restored with a linked card, don\'t keep all cards in one place + Choose any word, phrase, or number you want as your access code Access code must be at least 4 characters long Entered access code didn\'t match the initial access code Create diff --git a/core/res/src/main/res/values-it/strings.xml b/core/res/src/main/res/values-it/strings.xml index d3906dabb8..24a93ecc47 100644 --- a/core/res/src/main/res/values-it/strings.xml +++ b/core/res/src/main/res/values-it/strings.xml @@ -151,7 +151,7 @@ Set PIN code for your SaltPay card Chat with support Please hold the card until the operation complete - To start the backup process you have to add Tangem card as your backup + To start the backup process you have to add the Tangem card as your backup No backup card Backup card ready Finalize the backup process by creating an access code @@ -351,7 +351,7 @@ Your card is activated and ready to be used Balance Send only %s (%s) from %s network to this address. Using other tokens and networks may result in loss of funds. - If the process of creating the wallet gets interrupted in any way, you\'ll have to start over. + If the process of creating the wallet gets interrupted in any way, you\'ll have to start over The twinning process is partly complete. You can\'t exit it now. Ok, ho capito! Getting started @@ -376,10 +376,10 @@ Protect Personalize Restore - You have to set up a single access code to protect all your wallets. - You can set an individual access code on each card later. - The access code can be restored with a linked card, don\'t keep all cards in one place. - Choose any word, phrase, or number you want as your access code. + You have to set up a single access code to protect all your wallets + You can set up an individual access code on each card later + The access code can be restored with a linked card, don\'t keep all cards in one place + Choose any word, phrase, or number you want as your access code Access code must be at least 4 characters long Entered access code didn\'t match the initial access code Create diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 3ecb8d910d..9e35a8bbff 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -351,7 +351,7 @@ Ваша карта активирована и готова к использованию Баланс Отправляйте только %s (%s) в сети %s на этот адрес. Использование другой сети может привести к утрате средств. - Если процесc создания кошелька каким-либо образом прервется, вам придется начинать сначала. + Если процесc создания кошелька каким-либо образом прервется, вам придется начинать сначала Процесс связывания карт частично завершен. Вы не можете выйти из него сейчас. Понятно! Подготовка @@ -376,10 +376,10 @@ Защита Персонализация Восстановление - Вам необходимо установить единый код доступа для защиты всех ваших карт. - Позже вы сможете установить индивидуальный код доступа для каждой карты. - Код доступа можно восстановить с помощью привязанной карты. Не храните все карты в одном месте. - Выберите любое слово, фразу или число в качестве кода доступа. + Вам необходимо установить единый код доступа для защиты всех ваших карт + Позже вы сможете установить индивидуальный код доступа для каждой карты + Код доступа можно восстановить с помощью привязанной карты. Не храните все карты в одном месте + Выберите любое слово, фразу или число в качестве кода доступа Код доступа должен состоять не менее чем из 4 символов. Введенные коды доступа не совпадают Создать diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 091568c2f0..a178187b22 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -151,7 +151,7 @@ Set PIN code for your SaltPay card Chat with support Please hold the card until the operation complete - To start the backup process you have to add Tangem card as your backup + To start the backup process you have to add the Tangem card as your backup No backup card Backup card ready Finalize the backup process by creating an access code @@ -351,7 +351,7 @@ Your card is activated and ready to be used Balance Send only %s (%s) from %s network to this address. Using other tokens and networks may result in loss of funds. - If the process of creating the wallet gets interrupted in any way, you\'ll have to start over. + If the process of creating the wallet gets interrupted in any way, you\'ll have to start over The twinning process is partly complete. You can\'t exit it now. Ok, Got it! Getting started @@ -376,10 +376,10 @@ Protect Personalize Restore - You have to set up a single access code to protect all your wallets. - You can set an individual access code on each card later. - The access code can be restored with a linked card, don\'t keep all cards in one place. - Choose any word, phrase, or number you want as your access code. + You have to set up a single access code to protect all your wallets + You can set up an individual access code on each card later + The access code can be restored with a linked card, don\'t keep all cards in one place + Choose any word, phrase, or number you want as your access code Access code must be at least 4 characters long Entered access code didn\'t match the initial access code Create From 76fa6f0779485bfdd1889231c5f6f76f4c06c828 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 21:22:15 +0300 Subject: [PATCH 05/14] Updated on 2026-08-14 --- .../products/wallet/ui/OnboardingWalletFragment.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index 04fc588577..2dfed0997d 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -98,7 +98,7 @@ class OnboardingWalletFragment : BaseFragment(R.layout.fragment_onboarding_walle cardsWidget.toFolded(false) if (viewBackupCount > backupCardsCounts) { - flCardsContainer.removeViewAt(viewBackupCount - 1) + flCardsContainer.removeViews(0, viewBackupCount - backupCardsCounts) } else { flCardsContainer.inflate(R.layout.view_onboarding_card, true) } @@ -108,7 +108,12 @@ class OnboardingWalletFragment : BaseFragment(R.layout.fragment_onboarding_walle } private fun createLeapfrogWidget(container: FrameLayout, deviceScaleFactor: Float): LeapfrogWidget { - val leapfrogCalculator = PropertyCalculator(yTranslationFactor = 25f * deviceScaleFactor) + val leapfrogCalculator = PropertyCalculator( + yTranslationFactor = when (container.childCount) { + 3 -> 25f + else -> 35f + } * deviceScaleFactor, + ) return LeapfrogWidget(container, leapfrogCalculator) } From 1bdcadf0648b4dded50a7375172db5552fd0588a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 21:24:16 +0300 Subject: [PATCH 06/14] Updated on 2026-08-14 --- .../products/wallet/saltPay/SaltPayActivationManager.kt | 4 ++-- .../products/wallet/saltPay/redux/OnboardingSaltPayState.kt | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt index 187425c2af..edcdeaf564 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt @@ -31,11 +31,12 @@ import java.math.BigDecimal class SaltPayActivationManager( val cardId: String, val cardPublicKey: ByteArray, - val walletPublicKey: ByteArray, private val kycProvider: KYCProvider, private val paymentologyService: PaymentologyApiService, private val gnosisRegistrator: GnosisRegistrator, ) { + + val walletPublicKey = gnosisRegistrator.walletManager.wallet.publicKey.seedKey val kycUrlProvider = KYCUrlProvider(walletPublicKey, kycProvider) private val approvalValue: BigDecimal = BigDecimal(2).pow(256).minus(BigDecimal.ONE) @@ -167,7 +168,6 @@ class SaltPayActivationManager( gnosisRegistrator = GnosisRegistrator.stub(), cardId = "", cardPublicKey = byteArrayOf(), - walletPublicKey = byteArrayOf(), ) } } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt index e1317622a4..a14ad10252 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt @@ -69,14 +69,10 @@ data class OnboardingSaltPayState( if (!scanResponse.isSaltPay()) { throw IllegalArgumentException("Can't initialize the OnboardingSaltPayMiddleware if card is not SalPay") } - val saltPaySingleWallet = scanResponse.card.wallets.firstOrNull().guard { - throw NullPointerException("SaltPay card must have one wallet at least") - } return SaltPayActivationManager( cardId = scanResponse.card.cardId, cardPublicKey = scanResponse.card.cardPublicKey, - walletPublicKey = saltPaySingleWallet.publicKey, kycProvider = kycProvider, paymentologyService = paymentologyService, gnosisRegistrator = gnosisRegistrator, From 7c882e6898b4e92258f15c0344c19ea906f45021 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 21:25:07 +0300 Subject: [PATCH 07/14] Updated on 2026-08-14 --- .../com/tangem/tap/domain/scanCard/ScanCardProcessor.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt index 452a7a57ff..6caafef969 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt @@ -196,9 +196,9 @@ object ScanCardProcessor { val isOnboardingCase = result.data if (isOnboardingCase) { onWalletNotCreated() - store.dispatchOnMain(GlobalAction.Onboarding.Start(scanResponse, canSkipBackup = false)) - store.dispatchOnMain(OnboardingSaltPayAction.SetDependencies(manager, config)) - store.dispatchOnMain(OnboardingSaltPayAction.Update) + store.dispatch(GlobalAction.Onboarding.Start(scanResponse, canSkipBackup = false)) + store.dispatch(OnboardingSaltPayAction.SetDependencies(manager, config)) + store.dispatch(OnboardingSaltPayAction.Update) navigateTo(AppScreen.OnboardingWallet) { onProgressStateChange(it) } } else { delay(DELAY_SDK_DIALOG_CLOSE) From 337a839644f6ac5004ffffe44621f022851ed171 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 23:42:40 +0300 Subject: [PATCH 08/14] Updated on 2026-08-14 --- .../products/wallet/saltPay/SaltPayActivationManager.kt | 9 ++++++++- .../wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt index edcdeaf564..57ebce4491 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt @@ -7,6 +7,7 @@ import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.BlockchainSdkError import com.tangem.blockchain.common.TransactionSigner import com.tangem.blockchain.extensions.successOr +import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.extensions.isZero import com.tangem.common.services.Result @@ -125,7 +126,13 @@ class SaltPayActivationManager( suspend fun claim(amountToClaim: BigDecimal, signer: TransactionSigner): Result { gnosisRegistrator.transferFrom(amountToClaim, signer).successOr { - return Result.Failure(SaltPayActivationError.ClaimTransactionFailed) + val userCancelledError = (it.error as? BlockchainSdkError.WrappedTangemError) + ?.tangemError as? TangemSdkError.UserCancelled + + return when (userCancelledError) { + null -> Result.Failure(SaltPayActivationError.ClaimTransactionFailed) + else -> Result.Failure(userCancelledError) + } } return Result.Success(Unit) } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt index b7bcb4761b..dfdfb619b5 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt @@ -4,6 +4,7 @@ import com.tangem.Message import com.tangem.blockchain.common.Amount import com.tangem.blockchain.extensions.successOr import com.tangem.common.Filter +import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.services.Result import com.tangem.core.analytics.Analytics @@ -200,7 +201,11 @@ private fun handleOnboardingSaltPayAction(anyAction: Action, appState: () -> App } state.saltPayManager.claim(amountToClaim.value!!, signer).successOr { dispatchOnMain(OnboardingSaltPayAction.SetStep(SaltPayActivationStep.Claim)) - onException(it.error) + if (it.error is TangemSdkError.UserCancelled) { + handleInProgress = false + } else { + onException(it.error) + } return@launch } @@ -279,6 +284,7 @@ suspend fun SaltPayActivationManager.update( val registrationResponse = checkRegistration().successOr { return it } val amountToClaim = getAmountToClaimIfNeeded(this, currentAmountToClaim) + dispatchOnMain(OnboardingSaltPayAction.SetAmountToClaim(amountToClaim)) val newStep = try { determineStep(currentStep, amountToClaim, registrationResponse) From 9072a0191777735f7fd870f467258ea622acef45 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Feb 2023 11:24:47 +0300 Subject: [PATCH 09/14] Updated on 2026-08-14 --- .../products/wallet/saltPay/ui/OnboardingSaltPayView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt index 569e87ee0f..84e012cad9 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt @@ -99,7 +99,7 @@ internal class OnboardingSaltPayView( } else { walletFragment.loadImageIntoImageView(state.onboardingSaltPayState.saltPayCardArtworkUrl, imvFrontCard) } - imvFirstBackupCard.load(R.drawable.card_placeholder_wallet) + imvFirstBackupCard.load(R.drawable.img_salt_pay_visa) // if (state.onboardingSaltPayState?.saltPayCardArtworkUrl == null) { // //if saltPay url not loaded -> load from resource From 4559200dc4f9117e3834184c12780c81fe0d0397 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 3 Feb 2023 21:19:21 +0300 Subject: [PATCH 10/14] Updated on 2026-08-14 --- .../products/wallet/saltPay/GnosisRegistrator.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt index 42c54a9395..93d229380f 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt @@ -21,6 +21,7 @@ import com.tangem.tap.domain.getFirstToken import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope +import timber.log.Timber import java.math.BigDecimal import java.math.BigInteger import java.util.concurrent.atomic.AtomicLong @@ -149,6 +150,12 @@ class GnosisRegistrator( } suspend fun transferFrom(amountToClaim: BigDecimal, signer: TransactionSigner): Result { + Timber.e(Throwable("transferFrom")) + if (walletManager.txCount == -1L) { + walletManager.safeUpdate().successOr { + return Result.Failure(BlockchainSdkError.WrappedThrowable(it.error)) + } + } val amount = Amount(token, amountToClaim) val feeAmount = walletManager.getFeeToTransferFrom(amount, addressTreasureSafe) .extractFeeAmount().successOr { return it } From 5b56260b0a3387a7d84e169ed9e86ccbb265b390 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Feb 2023 14:11:23 +0300 Subject: [PATCH 11/14] Updated on 2026-08-14 --- .../onboarding/products/wallet/saltPay/GnosisRegistrator.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt index 93d229380f..ddf80bdc07 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/GnosisRegistrator.kt @@ -21,7 +21,6 @@ import com.tangem.tap.domain.getFirstToken import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope -import timber.log.Timber import java.math.BigDecimal import java.math.BigInteger import java.util.concurrent.atomic.AtomicLong @@ -150,7 +149,6 @@ class GnosisRegistrator( } suspend fun transferFrom(amountToClaim: BigDecimal, signer: TransactionSigner): Result { - Timber.e(Throwable("transferFrom")) if (walletManager.txCount == -1L) { walletManager.safeUpdate().successOr { return Result.Failure(BlockchainSdkError.WrappedThrowable(it.error)) From 5aae4c795fb2590e06cb2b23133abc9d9368fcdc Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Feb 2023 15:12:03 +0300 Subject: [PATCH 12/14] Updated on 2026-08-14 --- core/res/src/main/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 9e35a8bbff..88d30642c1 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -160,7 +160,7 @@ Приложите Tangem карту Чат Запросить %s - Для начала работы просто запросите начисление wxDai на свой кошелек + Для начала работы просто запросите начисление wxDAI на свой кошелек Запросить Поздравляем! Ваша платежная крипто карта теперь активирована! Запрашивается From a0104c613f919e7a346db2869d57398d22f3ce11 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Feb 2023 19:30:26 +0300 Subject: [PATCH 13/14] Updated on 2026-08-14 --- .../tangem/tap/domain/model/builders/UserWalletIdBuilder.kt | 6 ++++++ .../products/wallet/saltPay/SaltPayActivationManager.kt | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/model/builders/UserWalletIdBuilder.kt b/app/src/main/java/com/tangem/tap/domain/model/builders/UserWalletIdBuilder.kt index ebe875ad66..6a3b71d604 100644 --- a/app/src/main/java/com/tangem/tap/domain/model/builders/UserWalletIdBuilder.kt +++ b/app/src/main/java/com/tangem/tap/domain/model/builders/UserWalletIdBuilder.kt @@ -63,6 +63,12 @@ class UserWalletIdBuilder private constructor( ) } + fun walletPublicKey(publicKey: ByteArray): UserWalletId { + return UserWalletIdBuilder( + publicKey = publicKey, + ).build()!! + } + private fun findPublicKey(wallets: List): ByteArray? { return wallets.firstOrNull() ?.publicKey diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt index 57ebce4491..ff6ec003d6 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt @@ -11,8 +11,6 @@ import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.extensions.isZero import com.tangem.common.services.Result -import com.tangem.domain.common.extensions.successOr -import com.tangem.domain.common.util.UserWalletId import com.tangem.datasource.api.paymentology.AttestationResponse import com.tangem.datasource.api.paymentology.PaymentologyApiService import com.tangem.datasource.api.paymentology.RegisterKYCRequest @@ -20,9 +18,11 @@ import com.tangem.datasource.api.paymentology.RegisterWalletRequest import com.tangem.datasource.api.paymentology.RegisterWalletResponse import com.tangem.datasource.api.paymentology.RegistrationResponse import com.tangem.datasource.api.paymentology.tryExtractError +import com.tangem.domain.common.extensions.successOr import com.tangem.operations.attestation.AttestWalletKeyResponse import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.domain.getFirstToken +import com.tangem.tap.domain.model.builders.UserWalletIdBuilder import com.tangem.tap.features.onboarding.products.wallet.saltPay.message.SaltPayActivationError import java.math.BigDecimal @@ -184,7 +184,7 @@ class KYCUrlProvider( kycProvider: KYCProvider, ) { - val kycRefId = UserWalletId(walletPublicKey).stringValue + val kycRefId = UserWalletIdBuilder.walletPublicKey(walletPublicKey).stringValue val requestUrl: String = makeWebRequestUrl(kycProvider) From 3aa8191ebbb4836fafddde0e898deae2db65e987 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Feb 2023 15:31:49 +0300 Subject: [PATCH 14/14] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/MainActivity.kt | 3 +-- buildSrc/src/main/java/Versions.kt | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index af42736a87..61762924a3 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -12,7 +12,6 @@ import com.google.android.material.snackbar.Snackbar import com.tangem.TangemSdk import com.tangem.operations.backup.BackupService import com.tangem.tangem_sdk_new.extensions.init -import com.tangem.tangem_sdk_new.extensions.initWithBiometrics import com.tangem.tap.common.ActivityResultCallbackHolder import com.tangem.tap.common.DialogManager import com.tangem.tap.common.OnActivityResultCallback @@ -78,7 +77,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac systemActions() store.dispatch(NavigationAction.ActivityCreated(WeakReference(this))) - tangemSdk = TangemSdk.initWithBiometrics(this, TangemSdkManager.config) + tangemSdk = TangemSdk.init(this, TangemSdkManager.config) tangemSdkManager = TangemSdkManager(tangemSdk, this) appStateHolder.tangemSdkManager = tangemSdkManager backupService = BackupService.init(tangemSdk, this) diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 7a7b4358da..3ea750baf4 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -59,10 +59,10 @@ object Versions { // endregion Other libraries // region Tangem - const val tangemBlockchainSdk = "develop-155" + const val tangemBlockchainSdk = "develop-152-hotfix-4.0.1-156" // const val tangemBlockchainSdk = "0.0.1" - const val tangemCardSdk = "develop-186" + const val tangemCardSdk = "develop-179-hotfix-4.0.1-189" // endregion Tangem // region Testing