From a5a34fe32729952e766b4a315f27634f7a590b86 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 10 Feb 2022 18:12:59 +0300 Subject: [PATCH 01/12] Updated on 2026-08-14 --- .../tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index 9f6185f5a3..e56b4d9ce6 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -49,7 +49,8 @@ class WalletConnectSdkHelper { wallet.amounts[AmountType.Coin]?.value ?: return null val gas = transaction.gas?.hexToBigDecimal() - ?: transaction.gasLimit?.hexToBigDecimal() ?: return null + ?: transaction.gasLimit?.hexToBigDecimal() + ?: BigDecimal(300000) //Set high gasLimit if not provided val decimals = wallet.blockchain.decimals() From c05cab67947fd092affee46e01df4faf17ea1d0c Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 11 Feb 2022 10:57:38 +0300 Subject: [PATCH 02/12] Updated on 2026-08-14 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 222ad32676..70f6e3df99 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,7 +77,7 @@ 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-61' + implementation 'com.tangem:blockchain:develop-64' implementation 'com.tangem.tangem-sdk-kotlin:core:develop-131' implementation 'com.tangem.tangem-sdk-kotlin:android:develop-131' From 8efd82ba6b7cefd1fc878dfe8208c0bffbbf75c7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 11 Feb 2022 10:58:03 +0300 Subject: [PATCH 03/12] Updated on 2026-08-14 --- .../tangem/tap/domain/tokens/CurrenciesRepository.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt b/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt index b34b228860..f56e6f7bc8 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt @@ -156,11 +156,21 @@ class CurrenciesRepository(val context: Application) { cardFirmware: FirmwareVersion, isTestNet: Boolean = false ): List { - return if (cardFirmware < FirmwareVersion.MultiWalletAvailable) { + val blockchains = if (cardFirmware < FirmwareVersion.MultiWalletAvailable) { Blockchain.secp256k1Blockchains(isTestNet) } else { Blockchain.secp256k1Blockchains(isTestNet) + Blockchain.ed25519OnlyBlockchains(isTestNet) } + return excludeUnsupportedBlockchains(blockchains) + } + + //TODO: move to the App settings + private fun excludeUnsupportedBlockchains(blockchains: List): List { + return blockchains.toMutableList().apply { + removeAll(listOf( + Blockchain.Fantom, Blockchain.FantomTestnet + )) + } } companion object { From e39c8488092c0268fa1bf4386fa20bb44ba37087 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Feb 2022 18:05:50 +0300 Subject: [PATCH 04/12] Updated on 2026-08-14 --- .../features/tokens/ui/AddTokensFragment.kt | 3 +- .../main/res/layout/fragment_add_tokens.xml | 4 +- .../res/layout/fragment_details_confirm.xml | 2 +- .../main/res/layout/item_popular_token.xml | 2 +- app/src/main/res/values-fr/strings.xml | 56 +-- app/src/main/res/values-ru/strings.xml | 367 ++++++++++++++++++ app/src/main/res/values/strings.xml | 8 +- .../main/res/values/strings_untranslated.xml | 29 +- 8 files changed, 420 insertions(+), 51 deletions(-) create mode 100644 app/src/main/res/values-ru/strings.xml diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt index 178d8d514f..6a2559848e 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt @@ -11,6 +11,7 @@ import androidx.appcompat.widget.SearchView import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import androidx.transition.TransitionInflater +import com.tangem.tap.common.extensions.getString import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.tokens.redux.TokensAction import com.tangem.tap.features.tokens.redux.TokensState @@ -96,7 +97,7 @@ class AddTokensFragment : Fragment(R.layout.fragment_add_tokens), val menuItem = menu.findItem(R.id.menu_search) val searchView: SearchView = menuItem.actionView as SearchView - searchView.queryHint = "Type here to search" + searchView.queryHint = searchView.getString(R.string.add_token_search_hint) searchView.maxWidth = android.R.attr.width searchView.inputtedTextAsFlow() .debounce(400) diff --git a/app/src/main/res/layout/fragment_add_tokens.xml b/app/src/main/res/layout/fragment_add_tokens.xml index 4d25c3cf14..3475557484 100644 --- a/app/src/main/res/layout/fragment_add_tokens.xml +++ b/app/src/main/res/layout/fragment_add_tokens.xml @@ -21,7 +21,7 @@ android:layout_height="?attr/actionBarSize" app:menu="@menu/popular_tokens" app:navigationIcon="@drawable/ic_baseline_arrow_back_24" - app:title="Add tokens" /> + app:title="@string/add_tokens_title" /> @@ -51,7 +51,7 @@ android:layout_marginBottom="16dp" android:enabled="false" android:gravity="center" - android:text="Save changes" + android:text="@string/common_save_changes" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> diff --git a/app/src/main/res/layout/fragment_details_confirm.xml b/app/src/main/res/layout/fragment_details_confirm.xml index 2a6933b594..9067b72d9e 100644 --- a/app/src/main/res/layout/fragment_details_confirm.xml +++ b/app/src/main/res/layout/fragment_details_confirm.xml @@ -45,7 +45,7 @@ android:id="@+id/tv_warning" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Warning" + android:text="@string/common_warning" android:textAllCaps="true" android:textSize="32sp" android:layout_marginTop="32dp" diff --git a/app/src/main/res/layout/item_popular_token.xml b/app/src/main/res/layout/item_popular_token.xml index 3f03f0279f..6b8ad727ed 100644 --- a/app/src/main/res/layout/item_popular_token.xml +++ b/app/src/main/res/layout/item_popular_token.xml @@ -79,7 +79,7 @@ Annuler J\'accepte - L’accès à la caméra est refusé - Vous n\'avez pas octroyé l’accès à votre caméra, veuillez modifier vos paramètres de confidentialité + L\'accès à la caméra est refusé + Vous n\'avez pas octroyé l\'accès à votre caméra, veuillez modifier vos paramètres de confidentialité Paramètres Bienvenue à Tangem. Avez-vous une de nos cartes Encore une fois, bienvenue dans Tangem. \nScannez votre carte pour commencer. @@ -29,7 +29,7 @@ Solde confirmé Solde est en cours de téléchargement … Blockchain est inaccessible - Compte n’est pas créé + Compte n\'est pas créé Téléchargez %s +%s pour créer un compte Carte vide Créez un portefeuille pour commencer à utiliser votre carte Tangem @@ -37,7 +37,7 @@ Votre carte Tangem a été créée pour fonctionner avec une autre application. Regardez le nom et les instructions sur votre carte et installez l\'application pertinente Transaction en cours… Envoi\u0020 - jusqu’à %s + jusqu\'à %s Réception \u0020 de %s Explorer l\'adresse @@ -80,7 +80,7 @@ Emetteur Signé %s hashes - Monnaie de l’application + Monnaie de l\'application Paramètres Carte Valider la carte @@ -93,9 +93,9 @@ Ce mécanisme protège contre les attaques sans contact sur la carte. Il y a un délai entre la réception et l\'exécution de la commande. Après la première transaction signée, ce téléphone sera associé à la carte et les transactions seront signées immédiatement. Mot de passe Avant d\'exécuter une commande qui modifie l\'état de la carte, vous devrez entrer un mot de passe. - Code d’accès + Code d\'accès Vous devrez entrer le mot de passe correct avant de scanner la carte - Vous pouvez rencontrer des problèmes NFC avec certains iPhone 7/7 + lors de l’extraction + Vous pouvez rencontrer des problèmes NFC avec certains iPhone 7/7 + lors de l\'extraction Cette carte a déjà été rechargée et a signé des transactions avant. Envisagez la possibilité de retirer tous les fonds immédiatement si vous avez reçu cette carte d\'une source non fiable. Attention Cette carte n\'est pas conçue pour fonctionner avec Tangem @@ -105,7 +105,7 @@ Appuyez votre carte au téléphone comme indiqué ci-dessus Touchez, pour annuler un portefeuille Touchez, pour créer un portefeuille - Touchez, pour modifier le code d’accès + Touchez, pour modifier le code d\'accès Touchez, pour modifier le mot de passe PayString incorrect @@ -115,44 +115,44 @@ Avertissement   \n\n1.Application Tangem (Logiciel)   -\n\nLe logiciel est destiné à l\’utilisation exclusivement avec les e-portefeuilles Tangem (Cartes) à l\’aide de l\’interface NFC. Le logiciel NE réalise pas ce qui suit : +\n\nLe logiciel est destiné à l\'utilisation exclusivement avec les e-portefeuilles Tangem (Cartes) à l\'aide de l\'interface NFC. Le logiciel NE réalise pas ce qui suit :   -\n\na. Génération, stockage, transmission ou octroi d\’accès aux clés privées (confidentiels) de chiffrement des blockchain-portefeuilles, qui contiennent les avoirs numériques, y compris la crypto-monnaie. -\n\nb. Génération, stockage, transmission ou octroi d\’accès aux clés confidentielles, aux mots de passe, phrases secrètes, phrases de restitution, qui pourront être utilisées pour la restitution ou pour le clonage des clés privées (confidentiels) de chiffrement des blockchain-portefeuilles, contenant les avoirs numériques, y compris la crypto-monnaie. -\n\nc. Prestation des services de bourse, de commerce, d\’investissement du nom de Tangem AG. +\n\na. Génération, stockage, transmission ou octroi d\'accès aux clés privées (confidentiels) de chiffrement des blockchain-portefeuilles, qui contiennent les avoirs numériques, y compris la crypto-monnaie. +\n\nb. Génération, stockage, transmission ou octroi d\'accès aux clés confidentielles, aux mots de passe, phrases secrètes, phrases de restitution, qui pourront être utilisées pour la restitution ou pour le clonage des clés privées (confidentiels) de chiffrement des blockchain-portefeuilles, contenant les avoirs numériques, y compris la crypto-monnaie. +\n\nc. Prestation des services de bourse, de commerce, d\'investissement du nom de Tangem AG.     -\n\n2. Risques, liés avec l\’utilisation du logiciel +\n\n2. Risques, liés avec l\'utilisation du logiciel   -\n\nTangem n\’assume aucune responsabilité pour tous les dommages, préjudice ou prétentions, qui peuvent survenir comme résultat des évènements, se rapportant à une de cinq catégories suivantes : +\n\nTangem n\'assume aucune responsabilité pour tous les dommages, préjudice ou prétentions, qui peuvent survenir comme résultat des évènements, se rapportant à une de cinq catégories suivantes :     -\n\na. Les erreurs, commises par l\’utilisateur de tout logiciel ou service liés avec la crypto-monnaie, par exemple, les mots de passe oubliés, les paiements envoyés aux adresses incorrectes, et élimination occasionnelle des blockchain-portefeuilles sur les Cartes. -\n\nb. Les problèmes du Logiciel et/ou de tout progiciel ou service liés avec blockchain ou avec la crypto-monnaie, par exemple, les fichiers endommagés, les transaction créées d\’une manière incorrecte, les bibliothèques cryptographiques non sécurisées, les logiciels malveillants. -\n\nc. Les défaillances techniques du hardware de l\’utilisateur, y compris les Cartes, de tout logiciel ou service liés avec la crypto-monnaie, par exemple, la perte des données à cause des périphériques défectives ou endommagées de stockage. -\n\nd. Les problèmes de la sécurité, subis par l\’utilisateur de tout logiciel ou service liés avec la crypto-monnaie, par exemple, l\’accès non autorisé aux portefeuilles et/ou comptes des utilisateurs. -\n\ne. Les actions ou l\’inaction des tierces personnes et/ou les évènements subis par les tierces personnes, par exemple, la faillite du prestataire de services, les attaques sur la sécurité informatique des prestataires de services et la fraude commise par des tierces personnes. +\n\na. Les erreurs, commises par l\'utilisateur de tout logiciel ou service liés avec la crypto-monnaie, par exemple, les mots de passe oubliés, les paiements envoyés aux adresses incorrectes, et élimination occasionnelle des blockchain-portefeuilles sur les Cartes. +\n\nb. Les problèmes du Logiciel et/ou de tout progiciel ou service liés avec blockchain ou avec la crypto-monnaie, par exemple, les fichiers endommagés, les transaction créées d\'une manière incorrecte, les bibliothèques cryptographiques non sécurisées, les logiciels malveillants. +\n\nc. Les défaillances techniques du hardware de l\'utilisateur, y compris les Cartes, de tout logiciel ou service liés avec la crypto-monnaie, par exemple, la perte des données à cause des périphériques défectives ou endommagées de stockage. +\n\nd. Les problèmes de la sécurité, subis par l\'utilisateur de tout logiciel ou service liés avec la crypto-monnaie, par exemple, l\'accès non autorisé aux portefeuilles et/ou comptes des utilisateurs. +\n\ne. Les actions ou l\'inaction des tierces personnes et/ou les évènements subis par les tierces personnes, par exemple, la faillite du prestataire de services, les attaques sur la sécurité informatique des prestataires de services et la fraude commise par des tierces personnes.   -\n\n3.  Risques commerciales et d\’investissement +\n\n3.  Risques commerciales et d\'investissement   -\n\nToute échange de crypto-monnaie ou d\’autres avoirs numériques implique les risques importants. Toute transaction liée avec la monnaie implique les risques, qui incluent, entre autres, la possibilité de modification des conditions économiques, qui peuvent influencer d\’une manière significative le prix ou la disponibilité de la monnaie. Les investissements dans les spéculations boursières avec les crypto-monnaies peuvent aussi être exposés aux montées et chutes en flèche lors des fluctuations des valeurs marchandes correspondants. C\'est pour cette raison, que lors de la spéculation sur tels marchés, il est conseillé d\’utiliser seulement le capital-risque. +\n\nToute échange de crypto-monnaie ou d\'autres avoirs numériques implique les risques importants. Toute transaction liée avec la monnaie implique les risques, qui incluent, entre autres, la possibilité de modification des conditions économiques, qui peuvent influencer d\'une manière significative le prix ou la disponibilité de la monnaie. Les investissements dans les spéculations boursières avec les crypto-monnaies peuvent aussi être exposés aux montées et chutes en flèche lors des fluctuations des valeurs marchandes correspondants. C\'est pour cette raison, que lors de la spéculation sur tels marchés, il est conseillé d\'utiliser seulement le capital-risque.   \n\n4. Risques de commerce électronique   -\n\nAvant de passer aux transactions en utilisant le système électronique, Vous devez prendre connaissance, d\’une manière bien attentive, des règles et des dispositions stipulées par les bourses qui offrent ce système, et/ou les listes des titres de placement que vous voulez négocier. Le commerce en ligne possède le risque inaliénable lié avec la vitesse de réponse du système et avec le temps d\’accès qui peuvent varier en fonction des conditions de marché, du rendement du système et d\’autres facteurs. Avant de commencer les négoces, vous devez comprendre ces risques aussi que les risques supplémentaires. +\n\nAvant de passer aux transactions en utilisant le système électronique, Vous devez prendre connaissance, d\'une manière bien attentive, des règles et des dispositions stipulées par les bourses qui offrent ce système, et/ou les listes des titres de placement que vous voulez négocier. Le commerce en ligne possède le risque inaliénable lié avec la vitesse de réponse du système et avec le temps d\'accès qui peuvent varier en fonction des conditions de marché, du rendement du système et d\'autres facteurs. Avant de commencer les négoces, vous devez comprendre ces risques aussi que les risques supplémentaires.   \n\n5. Respect des obligations fiscales   -\n\nLes utilisateurs du Logiciel assument toute la responsabilité pour définir, quels impôts sont appliqués à leurs transactions avec la crypto-monnaie, au cas où il y a de tels impôts. Les propriétaires et les participants à l\’élaboration du Logiciel n\’assument pas la responsabilité pour la définition des impôts qui sont appliqués aux transactions avec la crypto-monnaie. +\n\nLes utilisateurs du Logiciel assument toute la responsabilité pour définir, quels impôts sont appliqués à leurs transactions avec la crypto-monnaie, au cas où il y a de tels impôts. Les propriétaires et les participants à l\'élaboration du Logiciel n\'assument pas la responsabilité pour la définition des impôts qui sont appliqués aux transactions avec la crypto-monnaie.   \n\n6. Absence de garanties 
 -\n\nLe logiciel est concédé sous les conditions « tel quel », sans aucune garantie à l\’égard du Logiciel et/ou de tout le contenu, données, matériaux et/ou services, présentes dans ce Logiciel. +\n\nLe logiciel est concédé sous les conditions « tel quel », sans aucune garantie à l\'égard du Logiciel et/ou de tout le contenu, données, matériaux et/ou services, présentes dans ce Logiciel.   \n\n7. Restriction de la responsabilité   -\n\nSauf disposition contraire prévue par la législation, les propriétaires et les participants à l\’élaboration du Logiciel n\’assument pas la responsabilité pour aucun dommage, y compris l\’indisponibilité, la perte de profit ou la perte des données, qui surviennent comme résultat de l\’utilisation ou bien qui sont liés d\’une certaine manière avec l\’utilisation du Logiciel. Les propriétaires et les participants à l\’élaboration du Logiciel n\’assument pas la responsabilité pour les actions, les résolutions ou pour une autre conduite que vous manifestez ou pas par l\’intermédiaire du Logiciel. +\n\nSauf disposition contraire prévue par la législation, les propriétaires et les participants à l\'élaboration du Logiciel n\'assument pas la responsabilité pour aucun dommage, y compris l\'indisponibilité, la perte de profit ou la perte des données, qui surviennent comme résultat de l\'utilisation ou bien qui sont liés d\'une certaine manière avec l\'utilisation du Logiciel. Les propriétaires et les participants à l\'élaboration du Logiciel n\'assument pas la responsabilité pour les actions, les résolutions ou pour une autre conduite que vous manifestez ou pas par l\'intermédiaire du Logiciel.     \n\n8. Dernière modification @@ -171,14 +171,14 @@ Avertissement PayString non pris en charge par la blockchain PayString non enregistré La demande de PayString a échoué - L’adresse est la même que celle de votre portefeuille + L\'adresse est la même que celle de votre portefeuille Solde insuffisant Erreur interne de la blockchain Commission non valide Le montant minimal est de %ы Le reste est trop petit - L’adresse a été copiée avec succès - Saisissez d’abord le PayString requis + L\'adresse a été copiée avec succès + Saisissez d\'abord le PayString requis Posez pour scanner Posez la carte Votre solde sur ce portefeuille n\'est pas nul, ou vous avez des transactions non confirmées. Impossible de supprimer la fonction du portefeuille diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000000..73b2017b6e --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,367 @@ + + + Tangem + Нет + Сохранить изменения + Предупреждение + Повторить попытку + Готово + Отмена + Принять + %s + Доступ к камере запрещен + Вы не предоставили доступ к своей камере, измените настройки конфиденциальности. + Настройки + Добро пожаловать в Tangem.\nУ вас есть одна из наших карт? + Добро пожаловать обратно в Тангем. \nОтсканируйте карту, чтобы начать. + Магазин + Приготовьтесь приложить свою\nкарту к задней панели\nтелефона. + Нажмите на + Сканировать карту + Да! Отсканировать + Сканировать + Отправить + Создать кошелек + Tangem + Выбрите опцию + Токен + Токены + Подтвержденный баланс + Загрузка баланса… + Блокчейн недоступен + Аккаунт не создан + Загрузите %1$s+ %2$s для создания учетной записи + Карта пуста + Создайте кошелек, чтобы начать пользоваться картой Tangem + Эта карта не поддерживается + Ваша карта Tangem предназначена для работы с другим приложением. Пожалуйста, ознакомьтесь с названием и инструкциями на вашей карте и установите правильное приложение. + Транзакция в процессе… + до %s + от %s + Получение\u0020 + Отправка\u0020 + Посмотреть адрес + Создать PayString + %s кошелек + Создать PayString + Карта: %s + PayString имя + $payid.tangem.com + Создать + Ваша PayString — это уникальная для вас информация, такая как номер телефона, электронная почта или ABN. + PayString успешно создан и скопирован в буфер обмена + Ошибка при создании PayString + Такой PayString уже существует. Попробуйте другой. + Адрес или PayString + Адрес + Отправить + Комиссия сети + Сумма + Комиссия + Всего + Максимальная сумма + Неверный адрес + Недопустимая сумма + Сумма превышает баланс + Общая сумма превышает баланс + Комиссия превышает баланс + Низкий + Нормальный + Приоритетный + Включить коммисию + %1$s %2$s будет отправлено + ≈ %1$s (включая комиссию: %2$s) + %1$s %2$s и %3$s %4$s будут отправлены + Баланс: %1$s %2$s + Транзакция успешно подписана и отправлена в блокчейн. Баланс кошелька будет обновлен через некоторое время + Подробности + ID карты + Эмитент + Подписано + %s хэшей + Валюта приложения + Настройки + Карта + Подтвердить карту + Управление безопасностью + Удалить кошелек + Это действие необратимо. Если после удаления кошелька кто-то отправит на него средства, то вы не сможете их вывести. + Если вы забудете код, вы потеряете возможность использовать карту. Невозможно восстановить или изменить код, если вы его потеряете. + Управление безопасностью + Приложите и удерживайте + Этот механизм защищает карту от бесконтактной атаки. Это обеспечит задержку между приемом и выполнением команды. После первой подписанной транзакции этот телефон будет привязан к карте, и транзакции будут подписаны без задержки. + Пароль + Перед выполнением любой команды, влекущей за собой изменение состояния карты, вам необходимо будет ввести пароль. + Код доступа + Перед сканированием карты вам нужно будет ввести правильный код доступа. + У вас могут возникнуть проблемы с NFC на некоторых iPhone 7/7+ во время извлечения. + Эта карта уже пополнялась и подписывала транзакции в прошлом. Рассмотрите возможность немедленного снятия всех средств, если вы получили эту карту из ненадежного источника. + Предупреждение + Эта карта не предназначена для работы с этим приложением + Карта, которую вы отсканировали, является картой для разработчиков. Не принимайте ее в качестве оплаты. + Карты Tangem, выпущенные до сентября 2019 года, в настоящее время не могут быть извлечены с помощью iPhone. Мы усердно работаем с Apple, чтобы сделать это возможным в будущих версиях iOS. + Нажмите, чтобы подписать + Приложите карту к телефону, как показано выше. + Приложите, чтобы удалить кошелек + Приложите, чтобы создать кошелек + Приложите, чтобы изменить код доступа + Приложите, чтобы изменить пароль + Неверный PayString + Условия использования + Не удалось получить комиссию + Целевая учетная запись не создана. Сумма для отправки должна быть %1$s %2$s + плата за создание или больше + Нет соединения с интернетом + Неизвестная ошибка + Ошибка проверки PayString + PayString не поддерживается блокчейном + PayString не зарегистрирован + Не удалось выполнить запрос PayString + Адрес совпадает с адресом кошелька + Недостаточный баланс + Внутренняя ошибка блокчейна + Неверная комиссия + Минимальная сумма: %s + Сдача слишком мала + Для создания учетной записи отправьте 1+ XLM на этот адрес + Адрес скопирован в буфер обмена + Сначала введите желаемую PayString + Приложите, чтобы отсканировать + Приложите карту + Ваш баланс на этом кошельке не равен нулю, или у вас есть неподтвержденные транзакции + Это текущая активная опция + Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ + Уменьшить на %s XTZ + Нет, отправить все + Ошибка сканирования карты. Попробуй снова + Купить + Продать + Торговать + По умолчанию + Совместимость + Устаревший + Создать кошелек Близнец + Создать кошелек Близнец + Сгенерируйте ключи кошелька на обеих картах, чтобы начать использовать свои Близнецы. + Тангем Твин + Один кошелек. Две карты. + Этот, который вы держите в руках, и другой с номером #%s. + Карта %1d из %2d + Пересоздать кошелек Близнец + Условия использования карты + Tangem Близнец + Это действие необратимо. У вас не будет доступа к старому кошельку. + Приложите карту #%s Близнец + Подготовка карты + Создание кошелька + Процедура создания кошелька состоит из трех шагов. Вы должны пройти его до конца, иначе вам придется начинать сначала. + Сканировать карту #%s + Вы уже начали процесс пересоздания кошелька Близнец. Если вы прервете его, вы не сможете использовать свои карты, пока не запустите его снова и не завершите пересоздание кошелька. + Вы приложиле ту же карту. Чтобы создать Близнец-кошелек, вам нужно приложить вторую Близнец-карту. + Адрес Близнец успешно создан + Начать + Назад + Добавить + Удалить + Поиск + Памятка + Тег назначения + Недопустимый тег назначения. Он не будет добавлен в транзакцию + Недопустимый идентификатор памятки. Он не будет добавлен в транзакцию + Приложение + Отправить отзыв + Успешно отправлено + Спасибо за ваш отзыв + Ваши предложения отправлены + Спасибо за ваш отзыв. Мы ответим как можно скорее + Не удалось отправить электронное письмо + Причина: %s + Не могу отправить транзакцию + Причина: %s. Хотите отправить отзыв? + У вас возникли трудности со сканированием вашей карты? + Пожалуйста, попробуйте приложить карту точно так, как показано на анимации, или обратитесь в поддержку. + Я в порядке + Попробуйте снова + Обратиться в поддержку + Отправить отзыв + Очень круто! + Может быть лучше + Один вопрос + Вам нравится приложение Tangem? + Все поля обязательны к заполнению + Токенов пока нет + Добавленные токены + Удалить токен %s + Вы уверены, что хотите удалить этот токен? + Добавить токены + Добавить токен + Начните поиск + Управление токенами + Добавить пользовательский + Пользовательские токены + Популярные токены + Добавить пользовательский токен + Пожалуйста заполните все поля + Введенное число не является допустимым десятичным числом + Имя + Символ токена + Адрес контракта + Десятичные + бывший. USD Coin + бывший. USDC + Добавлен + Удалить токен + Значок токена + Блокчейн + Управление токенами + Блокчейны + Ethereum токены + Binance Smart Chain токены + Binance Chain токены + Avalanche C-Chain токены + Polygon токены + Копировать + Поделиться + + Добавить токены + Пожалуйста, дождитесь завершения транзакции, чтобы иметь возможность отправить средства + Проверка подлинности не удалась + Эта карта может быть производственным образцом или подделкой. + Важная информация о безопасности \u26A0 + Эта карта ранее подписывала транзакции + Узнать подробнее + Я понял + На этой карте доступно только %s подписей. Вы должны вывести все свои средства. + Отключить + Подписать + Подписать и отправить + Отклонить + Это тестовая карта. Не принимайте ее в качестве оплаты. Она должна использоваться только в целях тестирования и разработки. + Вы хотите купить или продать криптовалюту? + К сожалению, текущая версия приложения не готова к работе с этой картой, проверьте наличие обновлений. + Добро пожаловать в Tangem + Самый безопасный способ покупать, использовать и\n хранить криптовалюту + Получить новую карту + Активация карты + Как это работает? + Получить криптовалюту + Создать кошелек + Давайте сгенерируем все ключи на вашей карте и создадим безопасный кошелек + Создать кошелек + Пополните свой кошелек + Чтобы начать, просто пополните карту на любую сумму + Чтобы начать, просто пополните кошелек более чем на %s %s. + Купить криптовалюту + Показать адрес кошелька + Отсканируйте адрес, чтобы пополнить кошелек + Успешно! + Ваша криптокарта активирована и готова к использованию + Продолжить + Баланс + Отправляйте только %s (%s) на этот адрес. Отправка любой другой валюты приведет к ее безвозвратной потере. + Отправляйте только %s (%s) из сети %s на этот адрес. Отправка любой другой валюты приведет к ее безвозвратной потере. + Если процесс повторного создания кошелька каким-либо образом прервется, вам придется начать все сначала. + Процесс создания дубликата частично завершен. Вы не можете выйти из него сейчас. + Внутренняя ошибка: не удается создать менеджер кошельков + Блокчейн недоступен. Попробуй позже + Хорошо, понял! + Успешно! + Начнем + Выполнить резервное копирование + Получить резервную карту + Оставить на потом + Завершить процесс резервного копирования + + Добавить резервную карту + Сканировать карту #%d + Сканировать основную карту + Добавить больше карт + Сделайте резервную копию вашего кошелька + Нет резервных карт + Подготовьте свою карту + Добавлена одна резервная карта + Добавлены две резервные карты + Резервная карта #%d + Вы можете сделать до двух резервных копий своих ключей. + Чтобы начать процесс резервного копирования, добавьте еще максимум 2 карты + Подготовьте основную карту с номером %s + Подготовьте основную карту + Вы можете добавить еще одну карту или завершить процесс резервного копирования + Добавлено максимальное количество карт. + Если процесс резервного копирования будет прерван каким-либо образом, вам придется начать все сначала. + Вы добавили одну резервную карту. Когда процесс резервного копирования будет завершен, вы не сможете добавить больше карт. Если у вас есть еще одна карта, добавьте ее в резервную копию, в противном случае вы можете купить ее в магазине. Хотите продолжить процесс резервного копирования? + Создать код доступа + Введите код доступа повторно + Защитить + Персонализировать + Восстановить + Вам необходимо установить единый код доступа для защиты всех ваших кошельков. + Позже вы сможете установить индивидуальный код доступа для каждой карты. + Код доступа можно восстановить с помощью привязанной карты, не храните все карты в одном месте. + Выберите любое слово, фразу или номер в качестве кода доступа. + Код доступа должен состоять не менее чем из 4 символов. + Введенный код доступа не соответствует исходному коду доступа + Создать + Подтвердить + Вы создали 2 резервные карты, и теперь эти карты готовы к использованию. + Создание резервной копии + Процесс резервного копирования частично завершен. Вы не можете выйти из него сейчас. + Резервный кошелек + Идентичные карты + Код доступа + Восстановление кода доступа + Вы можете сделать до двух резервных копий карты Tangem Wallet. + Все резервные карты могут использоваться как полнофункциональные с одинаковыми ключами. + Вы сможете установить код доступа для защиты своих кошельков. + Код доступа можно восстановить с помощью одной из резервных карт. + Ваша карта Tangem Wallet настроена и готова к использованию. + Вы создали 1 резервную карту, и теперь эта карта готова к использованию. + Основная карта + Я понимаю + Статус резервного копирования + Активный. Количество резервных карт: %d + Связано. Количество резервных карт: %d + Нет резервной копии + Создать резервную копию + У вас есть прерванное резервное копирование. Вы хотите возобновить? + Да, возобновить + Отказаться + Это необратимое действие + Если сейчас отменить резервное копирование, то придется вернуть карты до заводских настроек, чтобы начать заново + Возобновить резервное копирование + Отказаться + Основная карта + Сканировать основную карту + Перейти к моему кошельку + Карта %1s из %2s + Отправка %s + Подготовьте резервную карту с номером %s + Подготовьте основную карту с номером %s + Сброс до заводских настроек + Это действие необратимо. Если после сброса карты кто-то отправит на нее средства, то вы не сможете их вывести. + Код доступа доступен только для карт с резервной копией. + Сеть Solana взымает арендную плату в размере %s каждые 2 дня. Аккаунты, которые не могут позволить себе арендную плату, удаляются из сети. Пополните свой счет более чем на %s, чтобы использовать его бесплатно. + %1s (%2s) + Эта карта не является запиской на предъявителя. В настоящее время мы не можем сопоставить количество подписей на карте с информацией в блокчейне. Это нормально, но в редких случаях может означать, что предыдущий владелец скрывает автономную подпись, что является проблемой безопасности.\n\nНе принимайте эту карту в качестве физического платежа от кого-то, кому вы не доверяете.\n\nЭто совершенно безопасно. во всех остальных отношениях.\n\nTangem — единственный аппаратный кошелек, предлагающий защиту от подсчета подписей. + Wallet Connect + Запрос на создание транзакции для %2s\n%3s\n\nСумма: %4s\nКомиссия: %5s\nВсего: %6s\nБаланс: %7s + Запрос на запуск сеанса для карты с идентификатором %1s\nдля %2s\n\nURL: %3s + Сеансы подключения кошелька + Сеанс WalletConnect открыт с %s + Упс. Нет сессий. + Нет открытых сессий WalletConnect + Открытая сессия + Карта: %s + Коснитесь карты, чтобы привязать ее к кошельку. + Не удается отправить транзакцию. Недостаточно средств. + Просьба подписать сообщение\nкартой %s\n\n + Сообщение для %s:\n%s + Буфер обмена содержит код WalletConnect. Использовать скопированное значение или отсканировать QR-код + Вставить из буфера обмена + Сканировать новый код + Эту карту нельзя использовать для установки сеанса WalletConnect. + Операция не может быть завершена + Операция не может быть завершена. \n\nВы уже установили сеанс WalletConnect с этими параметрами. + Не удалось установить сеанс WalletConnect: ошибка времени выполнения. Пожалуйста, повторите попытку позже. + Транзакция BNB успешно подписана и отправлена в DApp. + DApp %s, запрашивает\nподпись транзакции BNB с\nкартой: %s\n\n%s + Сведения о транзакции:\nОт: %s\nКому: %s\nСумма: %s + Торговый ордер на %s\nЦена: %s\nСумма к получению: %s\nСумма к оплате: %s + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8830f8137..c3e70dee2f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -110,8 +110,8 @@ This card has been already topped up and signed transactions in the past. Consider immediate withdrawal of all funds if you have received this card from an untrusted source. Warning This card is not designed to work with this app - The card you scanned is a development card. Don’t accept it as a payment - Tangem cards manufactured before September 2019 cannot currently be extracted with an iPhone. We’re working hard with Apple to make it possible in future versions of iOS. + The card you scanned is a development card. Don\'t accept it as a payment + Tangem cards manufactured before September 2019 cannot currently be extracted with an iPhone. We\'re working hard with Apple to make it possible in future versions of iOS. Tap to sign Tap the card to your phone as shown above @@ -122,7 +122,7 @@ Invalid PayString - Legal Disclaimer + Legal Disclaimer \n \n1. Tangem application (Software) \n @@ -144,7 +144,7 @@ \n \nc) Technical failures in the hardware of the user, including Cards, of any cryptocurrency-related software or service, e.g., data loss due to a faulty or damaged storage device. \n - \nd) Security problems experienced by the user of any cryptocurrency-related software or service, e.g., unauthorized access to users’ wallets and/or accounts. + \nd) Security problems experienced by the user of any cryptocurrency-related software or service, e.g., unauthorized access to users\' wallets and/or accounts. \n \ne) Actions or inactions of third parties and/or events experienced by third parties, e.g., bankruptcy of service providers, information security attacks on service providers, and fraud conducted by third parties. \n diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index bfe549e0f7..0c5924012b 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -54,7 +54,7 @@ Thank your for your feedback. We will response as soon as possible Failed to send email Reason: %s - Can’t send a transaction + Can\'t send a transaction Reason: %s. Do you want to send feedback? Are you having difficulty scanning your card? Please try to tap the card exactly as shown in the animation or request support. @@ -115,9 +115,9 @@ Important security information \u26A0 This card has signed transactions in the past Learn more - This card is not a bearer note. We can’t currently match the signature count on the card with the information on the blockchain. This is normal but in rare cases can mean a previous holder is holding back an offline signature, which is a security concern. - \n\nDo not accept this card as physical payment from someone you don’t trust. - \n\nIt’s perfectly safe in all other respects. + This card is not a bearer note. We can\'t currently match the signature count on the card with the information on the blockchain. This is normal but in rare cases can mean a previous holder is holding back an offline signature, which is a security concern. + \n\nDo not accept this card as physical payment from someone you don\'t trust. + \n\nIt\'s perfectly safe in all other respects. \n\nTangem is the only hardware wallet to offer signature count protection. I understand @@ -162,7 +162,7 @@ Clipboard contain WalletConnect code. Use copied value or scan QR-code Paste from clipboard Scan new code - This card can’t be used to establish WalletConnect session + This card can\'t be used to establish WalletConnect session The operation couldn\'t be completed The operation couldn\'t be completed. \n\nYou have already established a WalletConnect session with this parameters. Failed to establish WalletConnect session: timeout error. Please, try again later. @@ -184,14 +184,14 @@ Receive crypto Create a wallet - Let’s generate all the keys on your card and create a secure wallet + Let\'s generate all the keys on your card and create a secure wallet Create wallet Top up your wallet To get started, simply top up the card with any amount To get started, simply top up the wallet with more than %s %s. Buy crypto - Show the wallet’s address + Show the wallet\'s address Scan the address to top up your wallet Success! @@ -201,8 +201,8 @@ Send only %s (%s) to this address. Sending any other currency will result in its irreversible loss. Send only %s (%s) from %s network to this address. Sending any other currency will result in its irreversible loss. - If the process of re-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. + If the process of re-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. Internal error: can\'t create wallet manager @@ -235,9 +235,9 @@ Prepare the primary card You can add one more card or finalize the backup process Max number of cards added. Finalize the backup process - If the process of backup gets interrupted in any way you’ll have to start over + If the process of backup gets interrupted in any way you\'ll have to start over - You’ve added one backup card. When backup process is finished you can’t add more backup cards. If you have one more card, add it in backup, otherwise you can buy it in shop. Do you like to continue backup process? + You\'ve added one backup card. When backup process is finished you can\'t add more backup cards. If you have one more card, add it in backup, otherwise you can buy it in shop. Do you like to continue backup process? Create Access Code Re-enter your Access Code @@ -246,7 +246,7 @@ Restore You have to setup a single access code to protect all yor 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 at one place. + The access code can be restored with a linked card, don\'t keep all cards at 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 initial access code @@ -255,7 +255,7 @@ Submit You have created 2 backup cards, and now these cards are ready for use. Creating a backup - The backup process is partly complete. You can’t exit it now. + The backup process is partly complete. You can\'t exit it now. Backup wallet Identical cards @@ -313,8 +313,9 @@ Price: %s\n Amount to receive: %s\n Amount to pay: %s - Solana network charges a rent of %s every 2 days. Accounts that can’t afford the rent are purged from the network. Deposit your account with more than %s to use it for free. + Solana network charges a rent of %s every 2 days. Accounts that can\'t afford the rent are purged from the network. Deposit your account with more than %s to use it for free. %1s (%2s) + Type here to search From 0755c923c884f5e011cb06056ed896fc155140d0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Feb 2022 19:32:07 +0300 Subject: [PATCH 05/12] Updated on 2026-08-14 --- .../com/tangem/tap/common/extensions/UI.kt | 13 +++- .../tangem/tap/common/extensions/ViewGroup.kt | 4 ++ .../AddressInfoBottomSheetDialog.kt | 2 +- .../wallet/ui/WalletDetailsFragment.kt | 4 +- .../layout/dialog_onboarding_address_info.xml | 2 +- .../layout/layout_balance_wallet_details.xml | 11 ++- .../main/res/layout/layout_wallet_details.xml | 72 +++++++------------ 7 files changed, 48 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt index e468ec2203..182461aa4c 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt @@ -68,9 +68,16 @@ fun View.hide(invokeBeforeStateChanged: (() -> Unit)? = null) { this.visibility = View.GONE } -fun View.makeInvisible() { - if (this.visibility == View.INVISIBLE) return - this.visibility = View.INVISIBLE +fun View.invisible(invisible: Boolean = true, invokeBeforeStateChanged: (() -> Unit)? = null) { + if (invisible) { + if (this.visibility == View.INVISIBLE) return + + invokeBeforeStateChanged?.invoke() + this.visibility = View.INVISIBLE + } else { + this.show(invokeBeforeStateChanged) + } + } fun Context.dpToPixels(dp: Int): Int = diff --git a/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt b/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt index 81be964cb1..50c90e1133 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt @@ -29,6 +29,10 @@ fun ViewGroup.beginDelayedTransition(transition: Transition = AutoTransition()) TransitionManager.beginDelayedTransition(this, transition) } +fun View.beginDelayedTransition(transition: Transition = AutoTransition()) { + (this as? ViewGroup)?.beginDelayedTransition(transition) +} + fun ChipGroup.fitChipsByGroupWidth() { val layoutStateHandler = GlobalLayoutStateHandler(this) layoutStateHandler.onStateChanged = stateHandler@{ diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt index c747e1a745..882158b731 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt @@ -45,7 +45,7 @@ class AddressInfoBottomSheetDialog( btn_fl_share.setOnClickListener { store.dispatchShare(data.shareUrl) } - tv_recieve_message.text = getQRReceiveMessage(tv_recieve_message.context, stateDialog.currency) + tv_receive_message.text = getQRReceiveMessage(tv_receive_message.context, stateDialog.currency) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index bfd6057d73..f1d99a3053 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -23,8 +23,6 @@ import com.tangem.tap.features.wallet.ui.dialogs.AmountToSendDialog import com.tangem.tap.store import com.tangem.wallet.R import kotlinx.android.synthetic.main.fragment_wallet_details.* -import kotlinx.android.synthetic.main.item_currency_wallet.view.* -import kotlinx.android.synthetic.main.item_popular_token.view.* import kotlinx.android.synthetic.main.layout_balance_error.* import kotlinx.android.synthetic.main.layout_balance_wallet_details.* import kotlinx.android.synthetic.main.layout_wallet_details.* @@ -197,7 +195,7 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), StoreS requireContext())) } iv_qr_code.setImageBitmap(state.walletAddresses.selectedAddress.shareUrl.toQrCode()) - tv_recieve_message.text = getQRReceiveMessage(tv_recieve_message.context, state.currency) + tv_receive_message.text = getQRReceiveMessage(tv_receive_message.context, state.currency) } } diff --git a/app/src/main/res/layout/dialog_onboarding_address_info.xml b/app/src/main/res/layout/dialog_onboarding_address_info.xml index 55617e452f..ca04440067 100644 --- a/app/src/main/res/layout/dialog_onboarding_address_info.xml +++ b/app/src/main/res/layout/dialog_onboarding_address_info.xml @@ -24,7 +24,7 @@ app:layout_constraintTop_toBottomOf="@+id/pseudo_toolbar" /> + android:layout_height="120dp"> + tools:src="@drawable/shape_circle" /> + tools:text="J" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/layout_wallet_details.xml b/app/src/main/res/layout/layout_wallet_details.xml index 2532441b29..8e33a5cead 100644 --- a/app/src/main/res/layout/layout_wallet_details.xml +++ b/app/src/main/res/layout/layout_wallet_details.xml @@ -71,19 +71,15 @@ - + app:layout_constraintGuide_percent="0.40" /> + tools:text="139mrsJgyWnJjkljlkhiuojlkljkjljljlkjlkfsdkdsjflsdkjflsdkjfffffffljlkjkljlkjlkjkljky9BV" /> - - - - + app:iconEndPadding="0dp" + app:iconStartPadding="12dp" + app:layout_constraintEnd_toStartOf="@+id/btn_share" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/iv_qr_code" /> + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toEndOf="@+id/btn_copy" + app:layout_constraintTop_toTopOf="@+id/btn_copy" /> From 7f42ec7cdc2f14bc888cae86d53902302599ad09 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Feb 2022 19:34:28 +0300 Subject: [PATCH 06/12] Updated on 2026-08-14 --- app/src/main/res/layout/layout_wallet_short_buttons.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/layout/layout_wallet_short_buttons.xml b/app/src/main/res/layout/layout_wallet_short_buttons.xml index 61217164ee..09318739b7 100644 --- a/app/src/main/res/layout/layout_wallet_short_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_short_buttons.xml @@ -15,7 +15,9 @@ android:layout_marginBottom="33dp" android:drawableTop="@drawable/ic_group_1243" android:gravity="bottom|center_horizontal" + android:paddingStart="0dp" android:paddingTop="7dp" + android:paddingEnd="0dp" android:text="@string/wallet_button_scan" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/btn_trade" From 8bc52e75b884b8c56809f73e6e31cf18616c412b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 14 Feb 2022 20:15:19 +0300 Subject: [PATCH 07/12] Updated on 2026-08-14 --- .../details/ui/DetailsConfirmFragment.kt | 2 +- .../features/details/ui/DetailsFragment.kt | 2 +- app/src/main/res/layout/fragment_details.xml | 53 +++++++++++-------- .../res/layout/fragment_details_security.xml | 3 +- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsConfirmFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsConfirmFragment.kt index 8e6dc116d8..07d0ea9b41 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsConfirmFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsConfirmFragment.kt @@ -68,7 +68,7 @@ class DetailsConfirmFragment : Fragment(R.layout.fragment_details_confirm), } ConfirmScreenState.LongTap, ConfirmScreenState.AccessCode, ConfirmScreenState.PassCode -> { - toolbar.title = getString(R.string.details_row_title_manage_security) + toolbar.title = getString(R.string.details_manage_security_title) tv_warning_description.text = getString(R.string.details_security_management_warning) btn_confirm.text = getString(R.string.common_save_changes) btn_confirm.setCompoundDrawablesRelativeWithIntrinsicBounds( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index acb76789ba..8651dbd9d3 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -125,7 +125,7 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber - - - + app:layout_constraintTop_toBottomOf="@+id/tv_signed_hashes_title"> + + + + + + app:layout_constraintTop_toBottomOf="@id/ll_manage_security" /> + app:title="@string/details_manage_security_title" /> + Date: Mon, 14 Feb 2022 20:19:47 +0300 Subject: [PATCH 08/12] Updated on 2026-08-14 --- app/src/main/res/layout/fragment_details_confirm.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/fragment_details_confirm.xml b/app/src/main/res/layout/fragment_details_confirm.xml index 9067b72d9e..83bbae68c9 100644 --- a/app/src/main/res/layout/fragment_details_confirm.xml +++ b/app/src/main/res/layout/fragment_details_confirm.xml @@ -80,11 +80,11 @@ android:id="@+id/btn_confirm" style="@style/TapBlackButton" android:layout_width="0dp" - android:layout_height="48dp" + android:layout_height="wrap_content" android:layout_marginStart="7dp" android:layout_marginTop="30dp" android:layout_marginEnd="16dp" - tools:text="@string/common_save" + tools:text="@string/details_row_title_reset_factory_settings" tools:icon="@drawable/ic_send" app:layout_constraintStart_toEndOf="@+id/guideline" app:layout_constraintEnd_toEndOf="parent" From 7eeb4f58a74e23884c20ce8f39b4146009e6ac03 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 15 Feb 2022 17:00:44 +0300 Subject: [PATCH 09/12] Updated on 2026-08-14 --- app/src/main/res/values-ru/strings.xml | 58 +++++++++++++------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 73b2017b6e..9fcac4fdc8 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -12,7 +12,7 @@ Доступ к камере запрещен Вы не предоставили доступ к своей камере, измените настройки конфиденциальности. Настройки - Добро пожаловать в Tangem.\nУ вас есть одна из наших карт? + Добро пожаловать в Tangem.\nУ Вас есть одна из наших карт? Добро пожаловать обратно в Тангем. \nОтсканируйте карту, чтобы начать. Магазин Приготовьтесь приложить свою\nкарту к задней панели\nтелефона. @@ -85,20 +85,20 @@ Подтвердить карту Управление безопасностью Удалить кошелек - Это действие необратимо. Если после удаления кошелька кто-то отправит на него средства, то вы не сможете их вывести. - Если вы забудете код, вы потеряете возможность использовать карту. Невозможно восстановить или изменить код, если вы его потеряете. + Это действие необратимо. Если после удаления кошелька кто-то отправит на него средства, то Вы не сможете их вывести. + Если вы забудете код, Вы потеряете возможность использовать карту. Невозможно восстановить или изменить код, если вы его потеряете. Управление безопасностью - Приложите и удерживайте + Длительное удержание Этот механизм защищает карту от бесконтактной атаки. Это обеспечит задержку между приемом и выполнением команды. После первой подписанной транзакции этот телефон будет привязан к карте, и транзакции будут подписаны без задержки. Пароль Перед выполнением любой команды, влекущей за собой изменение состояния карты, вам необходимо будет ввести пароль. Код доступа Перед сканированием карты вам нужно будет ввести правильный код доступа. - У вас могут возникнуть проблемы с NFC на некоторых iPhone 7/7+ во время извлечения. - Эта карта уже пополнялась и подписывала транзакции в прошлом. Рассмотрите возможность немедленного снятия всех средств, если вы получили эту карту из ненадежного источника. + У Вас могут возникнуть проблемы с NFC на некоторых iPhone 7/7+ во время извлечения. + Эта карта уже пополнялась и подписывала транзакции в прошлом. Рассмотрите возможность немедленного снятия всех средств, если Вы получили эту карту из ненадежного источника. Предупреждение Эта карта не предназначена для работы с этим приложением - Карта, которую вы отсканировали, является картой для разработчиков. Не принимайте ее в качестве оплаты. + Карта, которую Вы отсканировали, является картой для разработчиков. Не принимайте ее в качестве оплаты. Карты Tangem, выпущенные до сентября 2019 года, в настоящее время не могут быть извлечены с помощью iPhone. Мы усердно работаем с Apple, чтобы сделать это возможным в будущих версиях iOS. Нажмите, чтобы подписать Приложите карту к телефону, как показано выше. @@ -127,7 +127,7 @@ Сначала введите желаемую PayString Приложите, чтобы отсканировать Приложите карту - Ваш баланс на этом кошельке не равен нулю, или у вас есть неподтвержденные транзакции + Ваш баланс на этом кошельке не равен нулю, или у Вас есть неподтвержденные транзакции Это текущая активная опция Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ Уменьшить на %s XTZ @@ -139,25 +139,25 @@ По умолчанию Совместимость Устаревший - Создать кошелек Близнец - Создать кошелек Близнец - Сгенерируйте ключи кошелька на обеих картах, чтобы начать использовать свои Близнецы. - Тангем Твин + Создать кошелек + Создать кошелек + Сгенерируйте ключи кошелька на обеих картах, чтобы начать использовать свои Twin карты. + Tangem Twin Один кошелек. Две карты. - Этот, который вы держите в руках, и другой с номером #%s. + Одна, которую Вы держите в руках, и вторая карта с номером #%s. Карта %1d из %2d - Пересоздать кошелек Близнец + Пересоздать Twin кошелек Условия использования карты - Tangem Близнец - Это действие необратимо. У вас не будет доступа к старому кошельку. - Приложите карту #%s Близнец + Tangem Twin + Это действие необратимо. У Вас не будет доступа к старому кошельку. + Приложите Twin карту #%s Подготовка карты Создание кошелька Процедура создания кошелька состоит из трех шагов. Вы должны пройти его до конца, иначе вам придется начинать сначала. Сканировать карту #%s - Вы уже начали процесс пересоздания кошелька Близнец. Если вы прервете его, вы не сможете использовать свои карты, пока не запустите его снова и не завершите пересоздание кошелька. - Вы приложиле ту же карту. Чтобы создать Близнец-кошелек, вам нужно приложить вторую Близнец-карту. - Адрес Близнец успешно создан + Вы уже начали процесс пересоздания кошелька. Если Вы прервете его, вы не сможете использовать свои карты, пока не запустите его снова и не завершите пересоздание кошелька. + Вы приложили ту же карту. Чтобы создать кошелек, вам нужно приложить другу Twin карту. + Адрес кошелька успешно создан Начать Назад Добавить @@ -177,9 +177,9 @@ Причина: %s Не могу отправить транзакцию Причина: %s. Хотите отправить отзыв? - У вас возникли трудности со сканированием вашей карты? + У Вас возникли трудности со сканированием вашей карты? Пожалуйста, попробуйте приложить карту точно так, как показано на анимации, или обратитесь в поддержку. - Я в порядке + Отмена Попробуйте снова Обратиться в поддержку Отправить отзыв @@ -259,7 +259,7 @@ Отправляйте только %s (%s) на этот адрес. Отправка любой другой валюты приведет к ее безвозвратной потере. Отправляйте только %s (%s) из сети %s на этот адрес. Отправка любой другой валюты приведет к ее безвозвратной потере. Если процесс повторного создания кошелька каким-либо образом прервется, вам придется начать все сначала. - Процесс создания дубликата частично завершен. Вы не можете выйти из него сейчас. + Процесс связывания карт частично завершен. Вы не можете выйти из него сейчас. Внутренняя ошибка: не удается создать менеджер кошельков Блокчейн недоступен. Попробуй позже Хорошо, понял! @@ -279,21 +279,21 @@ Добавлена одна резервная карта Добавлены две резервные карты Резервная карта #%d - Вы можете сделать до двух резервных копий своих ключей. + Вы можете привязать до трех карт к одному кошельку. Чтобы начать процесс резервного копирования, добавьте еще максимум 2 карты Подготовьте основную карту с номером %s Подготовьте основную карту Вы можете добавить еще одну карту или завершить процесс резервного копирования Добавлено максимальное количество карт. Если процесс резервного копирования будет прерван каким-либо образом, вам придется начать все сначала. - Вы добавили одну резервную карту. Когда процесс резервного копирования будет завершен, вы не сможете добавить больше карт. Если у вас есть еще одна карта, добавьте ее в резервную копию, в противном случае вы можете купить ее в магазине. Хотите продолжить процесс резервного копирования? + Вы добавили одну резервную карту. После того, как процесс будет завершен, Вы больше не сможете добавить карт. Если у Вас есть еще одна карта, добавьте ее в резервную копию. Хотите продолжить? Создать код доступа Введите код доступа повторно Защитить Персонализировать Восстановить Вам необходимо установить единый код доступа для защиты всех ваших кошельков. - Позже вы сможете установить индивидуальный код доступа для каждой карты. + Позже Вы сможете установить индивидуальный код доступа для каждой карты. Код доступа можно восстановить с помощью привязанной карты, не храните все карты в одном месте. Выберите любое слово, фразу или номер в качестве кода доступа. Код доступа должен состоять не менее чем из 4 символов. @@ -320,7 +320,7 @@ Связано. Количество резервных карт: %d Нет резервной копии Создать резервную копию - У вас есть прерванное резервное копирование. Вы хотите возобновить? + У Вас есть прерванное резервное копирование. Хотите возобновить? Да, возобновить Отказаться Это необратимое действие @@ -335,11 +335,11 @@ Подготовьте резервную карту с номером %s Подготовьте основную карту с номером %s Сброс до заводских настроек - Это действие необратимо. Если после сброса карты кто-то отправит на нее средства, то вы не сможете их вывести. + Это действие необратимо. Если после сброса карты кто-то отправит на нее средства, то Вы не сможете их вывести. Код доступа доступен только для карт с резервной копией. Сеть Solana взымает арендную плату в размере %s каждые 2 дня. Аккаунты, которые не могут позволить себе арендную плату, удаляются из сети. Пополните свой счет более чем на %s, чтобы использовать его бесплатно. %1s (%2s) - Эта карта не является запиской на предъявителя. В настоящее время мы не можем сопоставить количество подписей на карте с информацией в блокчейне. Это нормально, но в редких случаях может означать, что предыдущий владелец скрывает автономную подпись, что является проблемой безопасности.\n\nНе принимайте эту карту в качестве физического платежа от кого-то, кому вы не доверяете.\n\nЭто совершенно безопасно. во всех остальных отношениях.\n\nTangem — единственный аппаратный кошелек, предлагающий защиту от подсчета подписей. + Эта карта не является векселем на предъявителя. В настоящее время мы не можем сопоставить количество подписей на карте с информацией в блокчейне. Это нормально, но в редких случаях может означать, что предыдущий владелец скрывает автономную подпись, что является проблемой безопасности.\n\nНе принимайте эту карту в качестве физического платежа от кого-то, кому Вы не доверяете.\n\nВо всех остальных отношениях - это совершенно безопасно.\n\nTangem — единственный аппаратный кошелек, предлагающий защиту от подсчета подписей. Wallet Connect Запрос на создание транзакции для %2s\n%3s\n\nСумма: %4s\nКомиссия: %5s\nВсего: %6s\nБаланс: %7s Запрос на запуск сеанса для карты с идентификатором %1s\nдля %2s\n\nURL: %3s From 37dff1e07b6ff30cd40c2818b60f8234dddb9c44 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 15 Feb 2022 17:01:06 +0300 Subject: [PATCH 10/12] Updated on 2026-08-14 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 70f6e3df99..845687d9d8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -78,8 +78,8 @@ dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation 'com.tangem:blockchain:develop-64' - implementation 'com.tangem.tangem-sdk-kotlin:core:develop-131' - implementation 'com.tangem.tangem-sdk-kotlin:android:develop-131' + implementation 'com.tangem.tangem-sdk-kotlin:core:develop-132' + implementation 'com.tangem.tangem-sdk-kotlin:android:develop-132' // WebView implementation "androidx.browser:browser:1.3.0" From 63a8b990c19638c2b56a19e78d9e171893936f4c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 15 Feb 2022 17:38:14 +0300 Subject: [PATCH 11/12] Updated on 2026-08-14 --- .../tap/features/feedback/FeedbackManager.kt | 99 ++++++++++--------- app/src/main/res/values-ru/strings.xml | 12 +++ .../main/res/values/strings_untranslated.xml | 13 +++ 3 files changed, 80 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt index 6da60e3904..34f6cc4807 100644 --- a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt +++ b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt @@ -11,6 +11,9 @@ import com.tangem.common.card.Card import com.tangem.tap.common.extensions.sendEmail import com.tangem.tap.common.extensions.stripZeroPlainString import com.tangem.tap.domain.TapWorkarounds +import com.tangem.tap.features.feedback.EmailData.Companion.appendBlankLine +import com.tangem.tap.features.feedback.EmailData.Companion.appendDelimiter +import com.tangem.wallet.R import timber.log.Timber import java.io.File import java.io.FileWriter @@ -40,7 +43,8 @@ class FeedbackManager( val fileLog = if (emailData is ScanFailsEmail) createLogFile() else null activity.sendEmail( email = getSupportEmail(), - subject = emailData.subject, message = emailData.joinTogether(infoHolder, emailData !is ScanFailsEmail), + subject = activity.getString(emailData.subjectResId), + message = emailData.joinTogether(activity, infoHolder), file = fileLog, onFail = onFail ) @@ -142,7 +146,7 @@ class AdditionalEmailInfo { cardFirmwareVersion = card.firmwareVersion.stringValue cardIssuer = card.issuer.name signedHashesCount = card.wallets - .joinToString(";") { "${it.curve?.curve} - ${it.totalSignedHashes}" } + .joinToString(";") { "${it.curve?.curve} - ${it.totalSignedHashes}" } } fun setWalletsInfo(walletManagers: List) { @@ -201,43 +205,40 @@ class AdditionalEmailInfo { } interface EmailData { - val subject: String - val mainMessage: String + val subjectResId: Int + val mainMessageResId: Int + + fun getDataCollectionMessageResId(): Int = R.string.feedback_data_collection_message fun prepare(infoHolder: AdditionalEmailInfo) {} - fun appendDelimiter(builder: StringBuilder) { - builder.append("----------\n") - } - - fun appendBlankLine(builder: StringBuilder) { - builder.append("\n") - } - fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String - fun joinTogether(infoHolder: AdditionalEmailInfo, allowToErasePhoneInfo: Boolean): String { - val allowToErasePhoneInfoDisclaimer = if (allowToErasePhoneInfo) { - "Following information is optional. You can erase it if you don’t want to share it.\n\n" - } else { - "" - } - return "$mainMessage\n\n\n\n" + - allowToErasePhoneInfoDisclaimer + - createOptionalMessage(infoHolder) + fun joinTogether(context: Context, infoHolder: AdditionalEmailInfo): String { + return StringBuilder().apply { + append(context.getString(mainMessageResId)) + append("\n\n\n\n") + append(context.getString(getDataCollectionMessageResId())) + append(createOptionalMessage(infoHolder)) + }.toString() + } + + companion object { + internal fun StringBuilder.appendDelimiter() = append("----------\n") + internal fun StringBuilder.appendBlankLine() = append("\n") } } class RateCanBeBetterEmail : EmailData { - override val subject: String = "My suggestions" - override val mainMessage: String = "Tell us what functions you are missing, and we will try to help you." + override val subjectResId: Int = R.string.feedback_subject_rate_negative + override val mainMessageResId: Int = R.string.feedback_preface_rate_negative override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String { val walletInfo = infoHolder.walletsInfo[0] return StringBuilder().apply { appendKeyValue("Card ID", infoHolder.cardId) appendKeyValue("Blockchain", walletInfo.blockchain.fullName) - appendBlankLine(this) + appendBlankLine() appendKeyValue("Phone model", infoHolder.phoneModel) appendKeyValue("OS version", infoHolder.osVersion) appendKeyValue("App version", infoHolder.appVersion) @@ -246,11 +247,21 @@ class RateCanBeBetterEmail : EmailData { } class ScanFailsEmail : EmailData { - override val subject: String = "Can’t scan a card" - override val mainMessage: String = "Please tell us what card do you have?" + + override val subjectResId: Int = R.string.feedback_subject_scan_failed + override val mainMessageResId: Int = R.string.feedback_preface_scan_failed + + override fun joinTogether(context: Context, infoHolder: AdditionalEmailInfo): String { + return StringBuilder().apply { + append(context.getString(mainMessageResId)) + append("\n\n\n\n") + append(createOptionalMessage(infoHolder)) + }.toString() + } + override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String { return StringBuilder().apply { - appendBlankLine(this) + appendBlankLine() appendKeyValue("Phone model", infoHolder.phoneModel) appendKeyValue("OS version", infoHolder.osVersion) appendKeyValue("App version", infoHolder.appVersion) @@ -259,8 +270,8 @@ class ScanFailsEmail : EmailData { } class SendTransactionFailedEmail(private val error: String) : EmailData { - override val subject: String = "Can’t send a transaction" - override val mainMessage: String = "Please tell us more about your issue. Every small detail can help." + override val subjectResId: Int = R.string.feedback_subject_tx_failed + override val mainMessageResId: Int = R.string.feedback_preface_tx_failed override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String { val walletInfo = infoHolder.onSendErrorWalletInfo ?: AdditionalEmailInfo.EmailWalletInfo() @@ -268,17 +279,17 @@ class SendTransactionFailedEmail(private val error: String) : EmailData { appendKeyValue("Card ID", infoHolder.cardId) appendKeyValue("Firmware version", infoHolder.cardFirmwareVersion) appendKeyValue("Signed hashes", infoHolder.signedHashesCount) - appendDelimiter(this) + appendDelimiter() appendKeyValue("Blockchain", walletInfo.blockchain.fullName) appendKeyValue("Host", walletInfo.host) appendKeyValue("Token", infoHolder.token) appendKeyValue("Error", error) - appendDelimiter(this) + appendDelimiter() appendKeyValue("Source address", walletInfo.address) appendKeyValue("Destination address", infoHolder.destinationAddress) appendKeyValue("Amount", infoHolder.amount) appendKeyValue("Fee", infoHolder.fee) - appendBlankLine(this) + appendBlankLine() appendKeyValue("Phone model", infoHolder.phoneModel) appendKeyValue("OS version", infoHolder.osVersion) appendKeyValue("App version", infoHolder.appVersion) @@ -288,16 +299,16 @@ class SendTransactionFailedEmail(private val error: String) : EmailData { } class FeedbackEmail : EmailData { - override val subject: String + override val subjectResId: Int get() = if (isS2CCard) s2cSubject else tangemSubject - override val mainMessage: String + override val mainMessageResId: Int get() = if (isS2CCard) s2cMainMessage else tangemMainMessage - private val tangemSubject = "Tangem feedback" - private val tangemMainMessage = "Hi support team," + private val tangemSubject: Int = R.string.feedback_subject_support_tangem + private val tangemMainMessage: Int = R.string.feedback_preface_support - private val s2cSubject = "Feedback" - private val s2cMainMessage = "Hi support team," + private val s2cSubject: Int = R.string.feedback_subject_support + private val s2cMainMessage: Int = R.string.feedback_preface_support private var isS2CCard = false @@ -312,26 +323,26 @@ class FeedbackEmail : EmailData { builder.appendKeyValue("Signed hashes", infoHolder.signedHashesCount) infoHolder.walletsInfo.forEach { - appendDelimiter(builder) + builder.appendDelimiter() builder.appendKeyValue("Blockchain", it.blockchain.fullName) builder.appendKeyValue("Host", it.host) builder.appendKeyValue("Wallet address", it.address) builder.appendKeyValue("Explorer link", it.explorerLink) } - appendBlankLine(builder) + builder.appendBlankLine() infoHolder.tokens.forEach { tokens -> - appendDelimiter(builder) + builder.appendDelimiter() builder.appendKeyValue("Blockchain", tokens.key.fullName) builder.appendKeyValue("Tokens", tokens.value.map { "${it.name} - ${it.symbol}" }.toString()) } - appendDelimiter(builder) - appendBlankLine(builder) - + builder.appendDelimiter() + builder.appendBlankLine() // appendKeyValue("Outputs count", infoHolder.outputsCount) builder.appendKeyValue("Phone model", infoHolder.phoneModel) builder.appendKeyValue("OS version", infoHolder.osVersion) builder.appendKeyValue("App version", infoHolder.appVersion) + return builder.toString() } } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9fcac4fdc8..9581d6c26c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -364,4 +364,16 @@ DApp %s, запрашивает\nподпись транзакции BNB с\nкартой: %s\n\n%s Сведения о транзакции:\nОт: %s\nКому: %s\nСумма: %s Торговый ордер на %s\nЦена: %s\nСумма к получению: %s\nСумма к оплате: %s + Мои предложения + Не могу отсканировать карту + Не могу отправить транзакцию + Не могу протолкнуть транзакцию + Обращение в поддержку Tangem + Обращение в поддержку + Расскажите, каких функций Вам не хватает, и мы постараемся Вам помочь. + Скажите, пожалуйста, какая у Вас карта? + Пожалуйста, расскажите нам больше о Вашей проблеме. Каждая маленькая деталь может помочь. + Привет, команда поддержки, + Пожалуйста, расскажите нам больше о Вашей проблеме. Каждая деталь может быть полезной + Информация ниже не является обязательной. Вы можете стереть её, если хотите. \ No newline at end of file diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 0c5924012b..f746827108 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -318,4 +318,17 @@ Amount to pay: %s %1s (%2s) Type here to search + My suggestions + Can\'t scan a card + Can\'t send a transaction + Can\'t push a transaction + Tangem feedback + Feedback + Tell us what functions you are missing, and we will try to help you. + Please tell us what card do you have? + Please tell us more about your issue. Every small detail can help. + Hi support team, + Please tell us more about your issue. Every small detail can help. + Following information is optional. You can erase it if you don’t want to share it. + From 3431a0c70f5520fa93669ec38a260c769a6dc657 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 23 Feb 2022 11:15:06 +0300 Subject: [PATCH 12/12] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 4280329669..180252680e 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 42803296690ad6914ec2c59c5fdc3f0fb30f8afc +Subproject commit 180252680e80b88f8fec9add783207d41d30e4e3