From c1a6c9757797fa5985834bbefd3a5520d762dd30 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Feb 2023 12:46:56 +0300 Subject: [PATCH 1/7] 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 2/7] 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 3/7] 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 4/7] 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 5/7] 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 6/7] 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 7/7] 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 }