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/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..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 @@ -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, ), + nowNodeCredentials = 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, ), + nowNodeCredentials = 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/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/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) 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..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 @@ -149,6 +149,11 @@ class GnosisRegistrator( } suspend fun transferFrom(amountToClaim: BigDecimal, signer: TransactionSigner): Result { + 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 } 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..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 @@ -7,11 +7,10 @@ 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 -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 @@ -19,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 @@ -31,11 +32,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) @@ -124,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) } @@ -167,7 +175,6 @@ class SaltPayActivationManager( gnosisRegistrator = GnosisRegistrator.stub(), cardId = "", cardPublicKey = byteArrayOf(), - walletPublicKey = byteArrayOf(), ) } } @@ -177,7 +184,7 @@ class KYCUrlProvider( kycProvider: KYCProvider, ) { - val kycRefId = UserWalletId(walletPublicKey).stringValue + val kycRefId = UserWalletIdBuilder.walletPublicKey(walletPublicKey).stringValue val requestUrl: String = makeWebRequestUrl(kycProvider) 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) 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, 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 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) } 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..7a7b4358da 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-152" + const val tangemBlockchainSdk = "develop-155" // const val tangemBlockchainSdk = "0.0.1" - const val tangemCardSgk = "develop-179" + const val tangemCardSdk = "develop-186" // endregion Tangem // region Testing 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..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 на свой кошелек Запросить Поздравляем! Ваша платежная крипто карта теперь активирована! Запрашивается @@ -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