diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index a2fc843b9c..aaa1656036 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -39,6 +39,10 @@ "name": "HOT_WALLET_CREATION_RESTRICTION_ENABLED", "version": "5.32.0" }, + { + "name": "HOT_WALLET_VISIBLE", + "version": "undefined" + }, { "name": "TANGEM_PAY_ENABLED", "version": "5.31.0" diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 0a5f0530a8..913619547d 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -327,7 +327,8 @@ Jetzt OK Im Browser öffnen - Hauptkarte oder Ring + oder + Hauptkarte Primärring Passphrase Einfügen @@ -437,6 +438,7 @@ Dieser Mechanismus schützt vor Annäherungsangriffen auf eine Karte oder einen Ring. Er erzwingt eine Verzögerung zwischen dem Empfang und der Ausführung eines Befehls. Passcode Bevor du einen Befehl ausführst, der eine Änderung des Kartenstatus zur Folge hat, musst du den Passcode eingeben. + Upgrade auf Hardware-Wallet NFT Empfehlungsprogramm Flippe den Bildschirm deines Geräts nach unten, um Salden schnell ein- und auszublenden @@ -450,6 +452,7 @@ Signiert Gib uns eine Rückmeldung Details + Du kannst jeweils nur eine mobile Wallet haben. Sie kann zu einer Tangem-Wallet aufgerüstet oder zusammen mit einer neuen Wallet verwendet werden. Überprüfe deine Internetverbindung oder wechseln zu einem anderen Netzwerk Nutzungsbedingungen Standardadresse @@ -569,8 +572,8 @@ Um fortzufahren, erteile %1s Smart Contracts die Berechtigung, dein zu %2s verwenden. Erlaubnis erteilen Unbegrenzt - Dein Backup wird mit 2 oder 3 Tangem-Karten erstellt. Bewahre diese an separaten & sicheren Orten auf, um sie vor Verlust oder Beschädigung zu schützen – es ist keine Seed-Phrase erforderlich. - Backup mit mehreren Karten + Die Adressen werden direkt auf Deiner Tangem-Hardware-Wallet generiert – sofort einsatzbereit und vollständig geschützt. + Neue Adressen Tangem Wallet hinzufügen Dein privater Schlüssel wird direkt in der Tangem-Karte generiert und verlässt diese nie. Schlüsselgenerierung @@ -611,11 +614,15 @@ Wiederherstellungs-Phrase Um Deine Wallet mit einem Zugangscode zu sichern, schließe den Sicherungsvorgang ab. Um Deine Wallet auf Hardware umzustellen, erstelle vorher ein Backup. - Deine privaten Schlüssel sind sicher verschlüsselt und auf Deinem Telefon gespeichert. + Rüste Deine mobile Wallet auf eine Tangem-Hardware-Wallet um, um höchste Sicherheit zu gewährleisten. Importiere Deine Wallet oder übertrage Dein Guthaben auf eine neue Wallet. + Upgrade auf Cold Wallet + Deine privaten Schlüssel sind nur für die Tangem Hot-Wallet sicher verschlüsselt und auf Deinem Telefon gespeichert. Schlüssel werden in der App gespeichert Erstelle oder stelle Deine Wallet mithilfe einer Wiederherstellungsphrase wieder her – Deinem integrierten Backup. Sicherung der Seed-Phrase Mobile Wallet erstellen + Übertrage Deine mobile Wallet jederzeit und sicher auf eine Tangem-Karte oder einen Tangem-Ring. + Upgrade auf Hardware-Wallet Vorhandene Wallet importieren Diese Wiederherstellungsphrase wurde bereits importiert Mobile Wallet @@ -633,14 +640,14 @@ Mir ist bewusst, dass ich den Zugriff auf meine Wallet verlieren kann, wenn ich sie vor der Entfernung nicht gesichert habe. Mir ist bewusst, dass durch das Entfernen meiner Wallet diese nicht gelöscht, sondern lediglich von meinem Gerät entfernt wird. Upgrade - Es wird keine Seed-Phrase mehr benötigt – Deine Tangem-Karte oder Dein Tangem-Ring wird zu Deinem sicheren Backup. - Backup mit Tangem + Alle Deine Adressen und Guthaben bleiben beim Upgrade Deiner mobilen Wallet auf eine Tangem-Karte oder einen Tangem-Ring vollständig zugänglich. + Gleiche Adressen Ein Upgrade ist nicht möglich. Auf diesem Gerät ist bereits eine Wallet vorhanden. Wähle ein anderes Gerät. Dieses Gerät kann für das Upgrade nicht verwendet werden. Bei der Operation ist ein Fehler aufgetreten. Dein Geld bleibt während des gesamten Prozesses sicher und vollständig zugänglich Zugang zu Geldern - Die Daten Deiner Wallet werden aus der App gelöscht und auf Deinem Tangem-Gerät gespeichert + Nach dem Upgrade wird Deine mobile Wallet aus der App entfernt und auf Deine Tangem-Hardware-Wallet gespeichert. Deine Wiederherstellungsphrase bleibt erhalten. Allgemeine Sicherheit Die privaten Schlüssel werden von der App auf Ihr Tangem-Gerät übertragen. Schlüsselmigration @@ -1242,6 +1249,11 @@ Bereite das Scannen der Karte oder Ring vor, die du einrichten möchtest. Entferne diese Wallet Hiermit wird die Wallet aus der Anwendung entfernt. Die Wallet selbst kann wieder hinzugefügt werden. + Einfach zu bedienen + Schützt Deine Kryptowährungen und bewahrt diese offline auf. So schlank wie eine Kreditkarte, sicherer als ein Banktresor. + Keine Seed-Phrase + Erstklassige Hardware-Wallet + Tangem Cold Wallet Name Lass deinen Token für dich arbeiten Eine Netzwerkgebühr ist eine kleine Zahlung, die erforderlich ist, um Deine Transaktion auf der Blockchain zu verarbeiten und zu bestätigen. @@ -1542,6 +1554,8 @@ Tangem Pay ist vorübergehend nicht erreichbar. Tangem Pay Klicken Sie auf die Schaltfläche unten, um den Zugriff wiederherzustellen + Ihr USDC Polygon On-Chain-Guthaben unterscheidet sich von Ihrem Kartenguthaben und wird innerhalb von 2 Werktagen nach einem Kauf aktualisiert. Gelder aus erstatteten Käufen werden nicht auf Ihr On-Chain-Guthaben zurückerstattet und stehen nicht für Abhebungen zur Verfügung, bleiben aber auf Ihrem Kartenguthaben für Einkäufe verfügbar. + Bitte beachten Sie Ihr PIN-Code Das ist meine Wallet Guthaben versteckt @@ -1613,6 +1627,7 @@ Es ist ein Fehler aufgetreten. Fehlercode: %s. Bitte kontaktiere unseren Support. Verwende %s oder scanne eine Karte oder Ring, um Zugriff auf deine Wallet zu erhalten. Verbindung fehlgeschlagen: Diese dApp verwendet Wallet Connect Version 1.0, die nicht unterstützt wird. Bitte stelle sicher, dass die dApp Wallet Connect Version 2.0 unterstützt, um eine erfolgreiche Verbindung herzustellen. + Upgrade auf Hardware-Wallet Bleib auf dem Laufenden mit den neuesten Funktionen und Neuigkeiten Echtzeit-Warnungen für Transaktionen, Umtausch und wichtige Aktualisierungen. Transaktionswarnungen @@ -1982,6 +1997,7 @@ Schnelle Lieferung Mit einem Fingertipp starten Nahtlos und sicher + Keine Seed-Phrase Einfach zu bedienen Erstelle eine Hardware-Wallet mit Tangem. Schlank wie eine Bankkarte, sicher wie ein Banktresor. Erstelle oder importiere eine Software-Wallet diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index b15f9aba6a..a1571141cb 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -1554,6 +1554,8 @@ Tangem Pay temporalmente no disponible Tangem Pay Haga clic en el botón de abajo para restaurar el acceso + Tu saldo USDC Polygon on-chain difiere de tu saldo de tarjeta y se actualiza dentro de 2 días hábiles después de una compra. Los fondos de compras reembolsadas no se devolverán a tu saldo on-chain ni estarán disponibles para retiro, pero permanecerán en tu saldo de tarjeta para compras. + Tenga en cuenta Tu código PIN Esta es mi billetera Saldos ocultos diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index a1a06768bb..b5b5c350eb 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -326,6 +326,7 @@ Maintenant OK Ouvrir dans le navigateur + ou Carte principale Bague principale Passphrase @@ -434,6 +435,7 @@ 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. + Passez au hardware wallet NFT Programme de parrainage Retournez l\'écran de votre appareil vers le bas pour masquer et afficher rapidement les soldes @@ -447,6 +449,7 @@ Signé Envoyer un commentaire Détails + Vous ne pouvez avoir qu\'un seul portefeuille mobile à la fois. Il peut être mis à niveau vers un hardware wallet Tangem ou utilisé avec un nouveau hardware wallet. Vérifiez votre connexion Internet ou passez à un réseau différent Conditions d\'utilisation Adresse par défaut @@ -566,8 +569,8 @@ Pour continuer, accordez aux smart contracts de %1s l\'autorisation d\'utiliser votre %2s Donner l\'autorisation Illimité - Votre sauvegarde est créée à l\'aide de 2 ou 3 cartes Tangem. Conservez-les dans des endroits sûrs distincts afin de les protéger contre toute perte ou tout dommage. Aucune seed phrase n\'est nécessaire. - Sauvegarde avec plusieurs cartes + De nouvelles adresses seront générées pour vous dans votre hardware wallet, prêtes à l\'emploi et entièrement sécurisées. + Nouvelles adresses Ajouter le wallet Tangem Votre clé privée est générée directement dans la carte Tangem et ne la quitte jamais. Génération de clés @@ -608,11 +611,15 @@ Seed phrase Pour sécuriser votre wallet avec un code d\'accès, effectuez la procédure de sauvegarde. Pour passer à un portefeuille matériel, terminez le processus de sauvegarde. + Mettez à niveau votre portefeuille mobile vers un portefeuille matériel Tangem pour bénéficier d\'une sécurité maximale. Importez votre portefeuille ou transférez vos fonds vers un nouveau portefeuille. + Passez à un hardware wallet Vos clés privées sont cryptées et stockées en toute sécurité sur votre téléphone. Les clés privées restent sur votre appareil Créez ou restaurez votre portefeuille à l\'aide d\'une seed phrase. Sauvegarde de la seed phrase Créer un wallet mobile + Transférez votre portefeuille mobile vers une carte ou une bague Tangem à tout moment, en toute sécurité. + Passez à un hardware wallet Importer un portefeuille existant Cette seed phrase a déjà été importée. Wallet mobile @@ -630,14 +637,14 @@ Je comprends que si je n\'ai pas sauvegardé mon portefeuille avant de le supprimer, je perdrai l\'accès à celui-ci. Je comprends que le fait de supprimer mon portefeuille ne l\'efface pas, mais le supprime uniquement de mon appareil. Améliorer - Aucune seed phrase n\'est requise. Votre carte ou bague Tangem devient votre sauvegarde sécurisée. - Sauvegarde avec Tangem + Toutes vos adresses et tous vos soldes restent entièrement accessibles lorsque vous passez d\'un portefeuille mobile à une carte ou une bague Tangem. + Mêmes adresses Impossible de mettre à niveau. Un portefeuille existe déjà sur cet appareil. Choisissez un autre appareil. Celui-ci ne peut pas être utilisé pour la mise à niveau. Une erreur s\'est produite pendant l\'opération. Vos fonds restent en sécurité et entièrement accessibles pendant toute la durée du processus. Accès aux fonds - Les données de votre wallet seront effacées de l\'application et stockées sur votre hardware wallet. + Après la mise à niveau, votre portefeuille mobile sera supprimé de l\'application et stocké sur votre hardware wallet; votre seedphrase restera en votre possession. Sécurité générale Les clés privées seront transférées de l\'application vers votre hardware wallet Tangem. Migration des clés @@ -1238,6 +1245,11 @@ Scannez la carte/ bague que vous souhaitez configurer. Oublier le portefeuille Cela supprimera le portefeuille de l\'application. Le portefeuille lui-même peut être ajouté à nouveau. + Facile à utiliser + Gardez vos cryptomonnaies en sécurité et hors ligne. Aussi fin qu\'une carte de crédit, plus sûr qu\'un coffre-fort bancaire. + Pas de seedphrase + Le meilleur hardware wallet + Tangem Hardware Wallet Nom Faites travailler votre jeton pour vous Pour commencer à staker, votre compte TON doit être activé avec une transaction de 1 TON. Les fonds restent sur votre compte, car cette étape sert uniquement à l\'activer pour le staking. @@ -1535,6 +1547,8 @@ Tangem Pay est temporairement indisponible Tangem Pay Cliquez sur le bouton ci-dessous pour restaurer l\'accès + Votre solde USDC Polygon on-chain diffère de votre solde de carte et se met à jour dans les 2 jours ouvrables suivant un achat. Les fonds des achats remboursés ne seront pas retournés à votre solde on-chain ni disponibles pour un retrait, mais resteront sur votre solde de carte pour vos achats. + Veuillez noter Votre code PIN C\'est mon portefeuille Soldes masqués @@ -1605,6 +1619,7 @@ Nous avons rencontré une erreur. Code d\'erreur : %s. Veuillez contacter notre équipe de support. Utilisez %s ou scannez une carte/bague pour avoir accès à votre portefeuille Échec de la connexion : Cette dApp utilise Wallet Connect version1.0, qui n\'est pas prise en charge. Veuillez vous assurer que la dApp prend en charge Wallet Connect version2.0 pour réussir la connexion. + Passez à un hardware wallet Restez à jour avec les dernières fonctionnalités et actualités Alertes en temps réel pour les transactions, les échanges et les mises à jour importantes. Alertes de transaction @@ -1968,6 +1983,7 @@ Livraison rapide Commencez en un seul clic Sans faille et sécurisé + Pas de seedphrase Facile à utiliser Créez un harware wallet avec Tangem. Aussi fin qu\'une carte bancaire, aussi sûr qu\'un coffre-fort. Créer ou importer un portefeuille logiciel diff --git a/core/res/src/main/res/values-it/strings.xml b/core/res/src/main/res/values-it/strings.xml index cfa982d89a..0c8bcde7ac 100644 --- a/core/res/src/main/res/values-it/strings.xml +++ b/core/res/src/main/res/values-it/strings.xml @@ -174,6 +174,8 @@ Tangem Pay è temporaneamente non disponibile Tangem Pay Fare clic sul pulsante in basso per ripristinare l\'accesso + Il tuo saldo USDC Polygon on-chain differisce dal saldo della carta e si aggiorna entro 2 giorni lavorativi dopo un acquisto. I fondi degli acquisti rimborsati non verranno restituiti al tuo saldo on-chain né saranno disponibili per il prelievo, ma rimarranno sul saldo della tua carta per gli acquisti. + Attenzione Il tuo codice PIN Tangem Twin Imposta un codice di 4 cifre.\nVerrà utilizzato per i pagamenti. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 565f5cf8f8..619641f86b 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -367,6 +367,7 @@ 対応ネットワーク スワップ Tangem + Tangem Wallet 利用規約 利用規約 宛先 @@ -1547,7 +1548,7 @@ Tangem Payは現在一時的に利用できません。 Tangem Pay 下のボタンをクリックしてアクセスを復元してください - 現在引き出せるのは、保留中の取引分を差し引いたオンチェーンアドレス上のUSDC(Polygon)のみです。以前に返金や購入のキャンセルを行った場合、暗号資産アカウントの残高は2営業日以内に更新されます。 + USDC Polygonのオンチェーン残高はカード残高とは異なり、購入後2営業日以内に更新されます。返金された購入資金はオンチェーン残高に戻らず、出金もできませんが、カード残高に残り、購入に使用できます。 ご注意ください PINコード これは私のウォレットです diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index ef16028c2d..3968ee7d53 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -133,9 +133,9 @@ Эти слова невозможно восстановить, если они будут потеряны. Храните их в надёжном месте. Бэкап завершен Ваша фраза восстановления — фиксированный набор из %s случайных слов для доступа и восстановления кошелька. - Эти слова невозможно восстановить, если они будут потеряны. Храните их в безопасности. + Если вы потеряете эту фразу, восстановить её будет невозможно. Храните её в полной безопасности. Храните в безопасности - Сохраните эти %s слов в безопасном месте и никому их не сообщайте. + Сохраните эти %s слов в надежном месте, к которому только вы имеете доступ, и никому их не показывайте. Восстановление невозможно Фраза восстановления Никому не сообщайте эти слова. Tangem никогда не будет их спрашивать. Ниже приведены %s слов вашей фразы восстановления кошелька. Используйте их, чтобы восстановить кошелёк в случае потери устройства. @@ -384,7 +384,7 @@ Поддерживаемые сети Обменять Tangem - Tangem Кошелек + Tangem Wallet условия участия Условиями использования На @@ -466,7 +466,7 @@ Подписано Отправить отзыв Подробности - Одновременно у вас может быть только один мобильный кошелек. Его можно апгрейдить до Tangem cold wallet или использовать вместе с новым холодным кошельком. + У вас может быть только один мобильный кошелек. Вы можете апгрейдить его до аппаратного кошелька Tangem или добавить новый аппаратный кошелек. Проверьте подключение с интернетом или переключитесь на другую сеть Условия использования Основной адрес @@ -586,7 +586,7 @@ Чтобы продолжить, вам нужно разрешить смарт-контракту %1s использовать ваш %2s Дать разрешение Безлимитно - Новые адреса будут сгенерированы прямо в вашем аппаратном кошельке, готовы к использованию и полностью защищены. + Адреса будут сгенерированы прямо в аппаратном кошельке Tangem — готовы к использованию и полностью защищены Новые адреса Добавить кошелек Tangem Ваш приватный ключ будет сгенерирован на карте Tangem и никогда не покинет её. @@ -629,13 +629,13 @@ Фраза восстановления Чтобы защитить ваш кошелёк с помощью кода доступа, сначала завершите резервное копирование. Чтобы улучшить кошелёк до аппаратного, сначала создайте резервную копию. - Перенесите свой мобильный кошелек на аппаратный кошелек Tangem для максимальной безопасности. Импортируйте существующий кошелек или переведите средства на новый. + Сделайте апгрейд до аппаратного кошелька Tangem для максимальной безопасности.\nИмпортируйте существующий кошелек или создайте новый. Апгрейд до холодного кошелька - Ваши приватные ключи надёжно зашифрованы и хранятся на вашем телефоне + Ваши приватные ключи надёжно зашифрованы и хранятся на вашем телефоне. Ключи хранятся в приложении Создайте или импортируйте кошелёк с помощью вашей фразы восстановления. Резервная копия - Создать мобильный кошелек + Мобильный кошелек Перенесите свой мобильный кошелек на Tangem-карту или кольцо в любое время. Апгрейд до аппаратного кошелька Импортировать существующий @@ -662,15 +662,15 @@ Во время операции произошла ошибка. Ваши средства остаются в безопасности и полностью доступны в процессе. Доступ к средствам - После апгрейда ваш мобильный кошелек будет удалён из приложения и сохранён на аппаратном кошельке; фраза восстановления остаётся у вас. + После апгрейда мобильный кошелек удаляется из приложения, ключи сохраняются в вашем аппаратном кошельке Tangem. Seed-фраза остаётся у вас. Общая безопасность - Приватные ключи будут перемещены из приложения в вашу Tangem карту или кольцо + Приватные ключи будут перемещены на вашу Tangem-карту или кольцо. Миграция ключей Сканировать устройство Начать апгрейд Вы собираетесь перейти на устройство Tangem, где ваши активы будут в безопасности в холодном хранилище. Tangem Wallet - Обновиться до аппаратного кошелька + Апгрейд до аппаратного кошелька Храните свою криптовалюту в безопасности с помощью первоклассного аппаратного кошелька Tangem. Сделать апгрейд кошелька до аппаратной версии. Эта информация была сгенерирована ИИ.\nНажмите здесь, если обнаружили ошибку. @@ -1028,6 +1028,7 @@ Восстановление кода доступа Идентичные карты Код доступа + У вас может быть только один мобильный кошелек. Вы можете апгрейдить его до аппаратного кошелька Tangem или добавить новый аппаратный кошелек. Все предложения Доступно с %s Tangem предоставляет доступ к покупке через сторонних провайдеров в соответствии с их правилами @@ -1291,7 +1292,7 @@ Прост в использовании Хранит вашу криптовалюту в безопасности и офлайн. Тонкий, как кредитная карта, надежнее банковского сейфа. Без seed-фразы - Лучший в своём классе аппаратный кошелек + Лучший в своём классе Холодный кошелек Tangem Имя Заставьте ваш токен работать @@ -1593,6 +1594,8 @@ Tangem Pay временно недоступен Tangem Pay Нажмите на кнопку ниже, чтобы восстановить доступ + Баланс ончейн-адреса (USDC Polygon) обновляется в течение 2 рабочих дней после покупки. При возвратах покупок средства не возвращаются на ончейн-баланс и недоступны для вывода, но отображаются на карте и могут быть использованы для покупок. + Обратите внимание Ваш PIN-код Это мой кошелек Балансы скрыты @@ -1675,7 +1678,7 @@ Хотите использовать Push-уведомления? Включите push-уведомления, и мы мгновенно сообщим вам, когда поступят средства. Не пропустите транзакцию - Добавить новый кошелек + Добавить кошелек Если вы удалите этот кошелёк без резервной копии, вы навсегда потеряете доступ к своим средствам. Вы уверены, что хотите забыть этот кошелек? Произошла ошибка, пожалуйста, отсканируйте свою карту или кольцо для входа @@ -1970,9 +1973,9 @@ URI уже используется WalletConnect Подозрительная транзакция - Уже есть Tangem кошелек? + Уже есть кошелек Tangem? Тысячи активов - Лучший в своём классе аппаратный кошелёк + Лучший в своём классе Быстрая доставка Начните в один клик Просто и надёжно diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 5954c2933e..fb203cd320 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -382,6 +382,7 @@ Підтримувані мережі Обмін Tangem + Tangem Wallet умови участі Умовами використання До @@ -623,7 +624,7 @@ Ключі зберігаються у застосунку Створіть або відновіть свій гаманець за допомогою вашої фрази відновлення. Резервна копія - Створити мобільний гаманець + Мобільний гаманець Імпортувати існуючий гаманець Ця фраза відновлення вже була імпортована Мобільний гаманець @@ -1569,6 +1570,8 @@ Tangem Pay тимчасово недоступний Tangem Pay Натисніть кнопку нижче, щоб відновити доступ + Ваш ончейн-баланс USDC Polygon відрізняється від балансу картки та оновлюється протягом 2 робочих днів після покупки. Кошти з повернених покупок не будуть повернуті на ваш ончейн-баланс і не будуть доступні для виведення, але залишаться на балансі картки для покупок. + Зверніть увагу Ваш PIN-код Це мій гаманець Баланси приховано @@ -1650,7 +1653,7 @@ Бажаєте використовувати Push-повідомлення? Увімкніть push-сповіщення, щоб отримувати повідомлення, коли кошти надходять на ваш гаманець. Не пропустіть транзакцію - Додати новий гаманець + Додати гаманець Якщо ви видалите цей гаманець без резервної копії, ви назавжди втратите доступ до своїх коштів. Ви впевнені, що хочете видалити цей гаманець? Сталася помилка, будь ласка, відскануйте свою картку або кільце, для входу diff --git a/core/res/src/main/res/values-zh-rTW/strings.xml b/core/res/src/main/res/values-zh-rTW/strings.xml index 393b0cadb9..ad66420637 100644 --- a/core/res/src/main/res/values-zh-rTW/strings.xml +++ b/core/res/src/main/res/values-zh-rTW/strings.xml @@ -416,6 +416,8 @@ Tangem Pay暂时不可用 Tangem Pay 點擊下方按鈕以恢復存取權限 + 您的 USDC Polygon 鏈上餘額與卡片餘額不同,並在購買後 2 個工作日內更新。退款交易的資金不會返回到您的鏈上餘額或可供提現,但會保留在您的卡片餘額中用於購買。 + 請注意 您的PIN码 隱藏 您即將在主屏幕上隱藏此代幣。您可以隨時通過管理代幣頁面將其添加回來。 diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index f7732464c2..234bdd266d 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -131,9 +131,9 @@ These words cannot be recovered if lost. Store them securely. Backup completed Your secret recovery phrase is a set of %s random words for accessing and recovering your wallet. - These words cannot be recovered if lost. Keep them safe. + If you lose this phrase, it cannot be recovered. Keep it completely secure. Keep it safe - Save these %s words in a secure location and never share them with anyone. + Save these %s words in a secure place that only you can access, and never share them with anyone. No recovery possible Recovery phrase The %s words below are your wallet\'s recovery phrase. Never share these words with anyone. Tangem will never ask you for them. Use them to restore your wallet if you lose your device. @@ -453,7 +453,7 @@ Signed Send feedback Details - You can have only one mobile wallet at a time. It can be upgraded to a Tangem cold wallet or used alongside a new cold wallet. + You can only have one mobile wallet. Upgrade it to Tangem hardware wallet, or add a new hardware wallet. Check your internet connection or switch to a different network Terms of service Default Address @@ -576,7 +576,7 @@ To continue, grant %1s smart contracts permission to use your %2s Give Permission Unlimited - New addresses will be generated for you inside your hardware wallet, ready for use and fully secure. + Addresses are generated directly on your Tangem hardware wallet — ready to use and fully protected. New Addresses Add Tangem Wallet Your private key will be generated directly inside the Tangem card and will never leave it. @@ -652,7 +652,7 @@ An error occurred during the operation. Your funds remain safe and fully accessible during the process Access to funds - After upgrading, your mobile wallet will be removed from the app and stored on your hardware wallet; your recovery phrase stays with you. + After upgrading, your mobile wallet is removed from the app and stored on your Tangem hardware wallet. Your recovery phrase stays with you. General security Private keys will be moved from the app to your Tangem hardware wallet Key migration @@ -1000,7 +1000,7 @@ Access code restore Identical cards Access code - You can have either a mobile wallet or a hardware wallet at one time. Upgrade your wallet or delete it from the app to start using a Tangem cold wallet. + You can only have one mobile wallet. Upgrade it to Tangem hardware wallet, or add a new hardware wallet. All offers Available with %s Providers facilitate transactions @@ -1568,7 +1568,7 @@ Tangem Pay is temporarily unreachable Tangem Pay Click the button below to restore access - You can only withdraw USDC (Polygon) currently available on your on‑chain address balance, taking into account pending transactions. If you previously made a refund or cancelled a purchase, your crypto account balance will update within 2 business days. + Your on-chain USDC Polygon balance differs from your card balance and updates within 2 business days after a purchase. Funds from refunded purchases won’t be returned your on-chain balance or be available for withdrawal, but will stay on your card balance for purchases. Please note Your PIN code This is my wallet diff --git a/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt b/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt index ed640bfe95..b668562534 100644 --- a/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt +++ b/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt @@ -10,7 +10,6 @@ import com.tangem.data.txhistory.repository.paging.TxHistoryPagingSource import com.tangem.datasource.local.txhistory.TxHistoryItemsStore import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.models.network.Network import com.tangem.domain.models.network.TxInfo import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId @@ -75,28 +74,18 @@ class DefaultTxHistoryRepository( return pager.flow } - @Deprecated("Replace with getTxExploreUrl [UserWalletId, Network] instead") - override fun getTxExploreUrl(txHash: String, networkId: Network.ID): String { - val blockchain = networkId.toBlockchain() - return when (val txExploreState = blockchain.getExploreTxUrl(txHash)) { + override fun getTxExploreUrl(txHash: String, currency: CryptoCurrency): String { + val blockchain = currency.network.id.toBlockchain() + val txExploreState = when (currency) { + is CryptoCurrency.Token -> blockchain.getTokenExplorerTxUrl(txHash) + else -> blockchain.getExploreTxUrl(txHash) + } + return when (txExploreState) { is TxExploreState.Url -> txExploreState.url is TxExploreState.Unsupported -> "" } } - override suspend fun getTxExploreUrl(userWalletId: UserWalletId, network: Network): String { - val blockchain = network.toBlockchain() - val walletManager = walletManagersFacade.getOrCreateWalletManager( - userWalletId = userWalletId, - network = network, - ) - val lastTxHash = walletManager?.wallet?.recentTransactions?.last()?.hash.orEmpty() - return when (val txExploreState = blockchain.getExploreTxUrl(lastTxHash)) { - is TxExploreState.Url -> txExploreState.url - else -> "" - } - } - override suspend fun getFixedSizeTxHistoryItems( userWalletId: UserWalletId, currency: CryptoCurrency, diff --git a/domain/txhistory/build.gradle.kts b/domain/txhistory/build.gradle.kts index 5654e0148d..4e4655573b 100644 --- a/domain/txhistory/build.gradle.kts +++ b/domain/txhistory/build.gradle.kts @@ -1,6 +1,8 @@ plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) + alias(deps.plugins.kotlin.kapt) + alias(deps.plugins.hilt.android) id("configuration") } @@ -23,4 +25,8 @@ dependencies { implementation(deps.androidx.paging.runtime) api(projects.core.pagination) + + /** DI */ + implementation(deps.hilt.android) + kapt(deps.hilt.kapt) } \ No newline at end of file diff --git a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/repository/TxHistoryRepository.kt b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/repository/TxHistoryRepository.kt index d040f021e3..8c32f37312 100644 --- a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/repository/TxHistoryRepository.kt +++ b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/repository/TxHistoryRepository.kt @@ -2,7 +2,6 @@ package com.tangem.domain.txhistory.repository import androidx.paging.PagingData import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.models.network.Network import com.tangem.domain.models.network.TxInfo import com.tangem.domain.txhistory.models.TxHistoryListError import com.tangem.domain.txhistory.models.TxHistoryStateError @@ -22,10 +21,7 @@ interface TxHistoryRepository { refresh: Boolean, ): Flow> - fun getTxExploreUrl(txHash: String, networkId: Network.ID): String - - /** Get transaction url in explorer via last transaction from wallet's recentTransactions list */ - suspend fun getTxExploreUrl(userWalletId: UserWalletId, network: Network): String + fun getTxExploreUrl(txHash: String, currency: CryptoCurrency): String @Throws(TxHistoryListError::class) suspend fun getFixedSizeTxHistoryItems( diff --git a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/usecase/GetExplorerTransactionUrlUseCase.kt b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/usecase/GetExplorerTransactionUrlUseCase.kt index a9a2f27737..27520c8d46 100644 --- a/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/usecase/GetExplorerTransactionUrlUseCase.kt +++ b/domain/txhistory/src/main/kotlin/com/tangem/domain/txhistory/usecase/GetExplorerTransactionUrlUseCase.kt @@ -3,14 +3,13 @@ package com.tangem.domain.txhistory.usecase import arrow.core.Either import arrow.core.raise.catch import arrow.core.raise.either -import com.tangem.domain.models.network.Network +import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.txhistory.models.TxStatusError import com.tangem.domain.txhistory.repository.TxHistoryRepository -class GetExplorerTransactionUrlUseCase( - private val repository: TxHistoryRepository, -) { - operator fun invoke(txHash: String, networkId: Network.ID): Either { +class GetExplorerTransactionUrlUseCase(private val repository: TxHistoryRepository) { + + operator fun invoke(txHash: String, currency: CryptoCurrency): Either { return either { catch( block = { @@ -18,7 +17,7 @@ class GetExplorerTransactionUrlUseCase( raise(TxStatusError.EmptyUrlError) } - repository.getTxExploreUrl(txHash, networkId).ifEmpty { + repository.getTxExploreUrl(txHash, currency).ifEmpty { raise(TxStatusError.EmptyUrlError) } }, diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index e03d928530..0824032547 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -87,7 +87,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.ERROR_CODE to errorCode, AnalyticsParam.ERROR_DESCRIPTION to errorMessage, ), - ), AppsFlyerIncludedEvent + ) class SessionDisconnected(dAppMetaData: WcAppMetaData) : WcAnalyticEvents( event = "dApp Disconnected", @@ -146,7 +146,7 @@ sealed class WcAnalyticEvents( AnalyticsParam.BLOCKCHAIN to network.name, AnalyticsParam.TYPE to securityStatus.toAnalyticVerificationStatus(), ), - ) + ), AppsFlyerIncludedEvent class SignatureRequestFailed( rawRequest: WcSdkSessionRequest, diff --git a/features/create-wallet-start/impl/build.gradle.kts b/features/create-wallet-start/impl/build.gradle.kts index 8552f7b7d9..987ab1a58b 100644 --- a/features/create-wallet-start/impl/build.gradle.kts +++ b/features/create-wallet-start/impl/build.gradle.kts @@ -14,6 +14,7 @@ android { dependencies { /** Api */ implementation(projects.features.createWalletStart.api) + implementation(projects.features.hotWallet.api) /** Project - Domain */ implementation(projects.domain.card) diff --git a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/CreateWalletStartModel.kt b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/CreateWalletStartModel.kt index 2183fc05a0..0760ef5917 100644 --- a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/CreateWalletStartModel.kt +++ b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/CreateWalletStartModel.kt @@ -32,6 +32,7 @@ import com.tangem.domain.wallets.builder.ColdUserWalletBuilder import com.tangem.domain.wallets.usecase.GenerateBuyTangemCardLinkUseCase import com.tangem.domain.wallets.usecase.SaveWalletUseCase import com.tangem.features.createwalletstart.entity.CreateWalletStartUM +import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.delay @@ -63,6 +64,7 @@ internal class CreateWalletStartModel @Inject constructor( private val urlOpener: UrlOpener, private val trackingContextProxy: TrackingContextProxy, private val analyticsEventHandler: AnalyticsEventHandler, + private val hotWalletFeatureToggles: HotWalletFeatureToggles, ) : Model() { private val params = paramsContainer.require() @@ -97,6 +99,7 @@ internal class CreateWalletStartModel @Inject constructor( onBackClick = { router.pop() }, onScanClick = ::onScanClick, isScanInProgress = false, + isHotWalletOptionVisible = hotWalletFeatureToggles.isHotWalletVisible, ) CreateWalletStartComponent.Mode.HotWallet -> CreateWalletStartUM( title = resourceReference(R.string.hw_mobile_wallet), diff --git a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/entity/CreateWalletStartUM.kt b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/entity/CreateWalletStartUM.kt index bce2d230b2..babf146ab3 100644 --- a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/entity/CreateWalletStartUM.kt +++ b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/entity/CreateWalletStartUM.kt @@ -17,6 +17,7 @@ internal data class CreateWalletStartUM( val otherMethodClick: () -> Unit, val onScanClick: () -> Unit, val onBackClick: () -> Unit, + val isHotWalletOptionVisible: Boolean = true, ) { data class FeatureItem( val iconResId: Int, diff --git a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/ui/CreateWalletStartContent.kt b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/ui/CreateWalletStartContent.kt index e113e454a5..d88ad17317 100644 --- a/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/ui/CreateWalletStartContent.kt +++ b/features/create-wallet-start/impl/src/main/kotlin/com/tangem/features/createwalletstart/ui/CreateWalletStartContent.kt @@ -165,70 +165,74 @@ internal fun CreateWalletStartContent(state: CreateWalletStartUM, modifier: Modi text = state.primaryButtonText.resolveReference(), onClick = state.onPrimaryButtonClick, ) - Row( - modifier = Modifier - .padding( - start = 16.dp, - top = 24.dp, - end = 16.dp, - ), - horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - DashedGradientLine( + if (state.isHotWalletOptionVisible) { + Row( modifier = Modifier - .weight(1f) - .height(16.dp), - ) - Text( - text = stringResourceSafe(R.string.common_or), - style = TangemTheme.typography.caption1, - color = TangemTheme.colors.text.secondary, - textAlign = TextAlign.Center, - ) - DashedGradientLine( - modifier = Modifier - .weight(1f) - .height(16.dp) - .scale(scaleX = -1f, scaleY = 1f), - ) - } - if (state.otherMethodDescription != null) { - Text( - modifier = Modifier - .fillMaxWidth() .padding( start = 16.dp, - top = 16.dp, + top = 24.dp, end = 16.dp, ), - text = state.otherMethodDescription.resolveReference(), - style = TangemTheme.typography.subtitle2, - color = TangemTheme.colors.text.tertiary, - textAlign = TextAlign.Center, - ) + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + DashedGradientLine( + modifier = Modifier + .weight(1f) + .height(16.dp), + ) + Text( + text = stringResourceSafe(R.string.common_or), + style = TangemTheme.typography.caption1, + color = TangemTheme.colors.text.secondary, + textAlign = TextAlign.Center, + ) + DashedGradientLine( + modifier = Modifier + .weight(1f) + .height(16.dp) + .scale(scaleX = -1f, scaleY = 1f), + ) + } } - Row( - modifier = Modifier - .wrapContentWidth() - .clickable { state.otherMethodClick() } - .padding( - horizontal = 16.dp, - vertical = 12.dp, - ), - horizontalArrangement = Arrangement.Center, - ) { - Text( - text = state.otherMethodTitle.resolveReference(), - style = TangemTheme.typography.subtitle1, - color = TangemTheme.colors.text.primary1, - textAlign = TextAlign.Center, - ) - Icon( - painter = painterResource(id = R.drawable.ic_chevron_right_18x24), - tint = TangemTheme.colors.icon.primary1, - contentDescription = null, - ) + if (state.isHotWalletOptionVisible) { + if (state.otherMethodDescription != null) { + Text( + modifier = Modifier + .fillMaxWidth() + .padding( + start = 16.dp, + top = 16.dp, + end = 16.dp, + ), + text = state.otherMethodDescription.resolveReference(), + style = TangemTheme.typography.subtitle2, + color = TangemTheme.colors.text.tertiary, + textAlign = TextAlign.Center, + ) + } + Row( + modifier = Modifier + .wrapContentWidth() + .clickable { state.otherMethodClick() } + .padding( + horizontal = 16.dp, + vertical = 12.dp, + ), + horizontalArrangement = Arrangement.Center, + ) { + Text( + text = state.otherMethodTitle.resolveReference(), + style = TangemTheme.typography.subtitle1, + color = TangemTheme.colors.text.primary1, + textAlign = TextAlign.Center, + ) + Icon( + painter = painterResource(id = R.drawable.ic_chevron_right_18x24), + tint = TangemTheme.colors.icon.primary1, + contentDescription = null, + ) + } } }, minImageHeight = 160.dp, diff --git a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt b/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt index 45c7cd73ca..3373105976 100644 --- a/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt +++ b/features/details/impl/src/main/kotlin/com/tangem/features/details/component/preview/PreviewDetailsComponent.kt @@ -23,6 +23,7 @@ internal class PreviewDetailsComponent : DetailsComponent { hotWalletFeatureToggles = object : HotWalletFeatureToggles { override val isHotWalletEnabled: Boolean = true override val isWalletCreationRestrictionEnabled: Boolean = true + override val isHotWalletVisible: Boolean = true }, ).buildAll( isWalletConnectAvailable = true, diff --git a/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt b/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt index c0526863e1..02cc6b1973 100644 --- a/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt +++ b/features/hot-wallet/api/src/main/kotlin/com/tangem/features/hotwallet/HotWalletFeatureToggles.kt @@ -3,4 +3,5 @@ package com.tangem.features.hotwallet interface HotWalletFeatureToggles { val isHotWalletEnabled: Boolean val isWalletCreationRestrictionEnabled: Boolean + val isHotWalletVisible: Boolean } \ No newline at end of file diff --git a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt index b635ab78db..9659ed2c61 100644 --- a/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt +++ b/features/hot-wallet/impl/src/main/kotlin/com/tangem/features/hotwallet/DefaultHotWalletFeatureToggles.kt @@ -10,4 +10,6 @@ internal class DefaultHotWalletFeatureToggles( override val isWalletCreationRestrictionEnabled: Boolean get() = isHotWalletEnabled && featureTogglesManager.isFeatureEnabled(name = "HOT_WALLET_CREATION_RESTRICTION_ENABLED") + override val isHotWalletVisible: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "HOT_WALLET_VISIBLE") } \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt index 2479812b57..45bea2d435 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt @@ -482,7 +482,7 @@ internal class SendConfirmModel @Inject constructor( private fun updateTransactionStatus(txData: TransactionData.Uncompiled, txHash: String) { val txUrl = getExplorerTransactionUrlUseCase( txHash = txHash.ifEmpty { txData.hash.orEmpty() }, - networkId = cryptoCurrency.network.id, + currency = cryptoCurrency, ).getOrNull().orEmpty() _uiState.update(SendConfirmSentStateTransformer(txData, txUrl)) } diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt index 1b926b4ea2..62ee3117f2 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt @@ -334,7 +334,7 @@ internal class NFTSendConfirmModel @Inject constructor( private fun updateTransactionStatus(txData: TransactionData.Uncompiled) { val txUrl = getExplorerTransactionUrlUseCase( txHash = txData.hash.orEmpty(), - networkId = cryptoCurrency.network.id, + currency = cryptoCurrency, ).getOrElse { "" } _uiState.update(NFTSendConfirmSentStateTransformer(txData, txUrl)) } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/P2PEthPoolTransactionSender.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/P2PEthPoolTransactionSender.kt index 672f9ea61c..c0235b3a91 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/P2PEthPoolTransactionSender.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/P2PEthPoolTransactionSender.kt @@ -76,7 +76,7 @@ internal class P2PEthPoolTransactionSender @AssistedInject constructor( ifRight = { broadcastResult -> val txUrl = getExplorerTransactionUrlUseCase( txHash = broadcastResult.hash, - networkId = cryptoCurrencyStatus.currency.network.id, + currency = cryptoCurrencyStatus.currency, ).getOrNull().orEmpty() balanceUpdater.updateAfterTransaction() diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakeKitTransactionSender.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakeKitTransactionSender.kt index f1b004afe8..c0e37364e6 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakeKitTransactionSender.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakeKitTransactionSender.kt @@ -261,7 +261,7 @@ internal class StakeKitTransactionSender @AssistedInject constructor( val txUrl = getExplorerTransactionUrlUseCase( txHash = transactionHashes.last(), - networkId = cryptoCurrencyStatus.currency.network.id, + currency = cryptoCurrencyStatus.currency, ).getOrNull().orEmpty() balanceUpdater.updateAfterTransaction() diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/confirm/model/SendWithSwapConfirmModel.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/confirm/model/SendWithSwapConfirmModel.kt index 47225aeb2e..d2d3497c2f 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/confirm/model/SendWithSwapConfirmModel.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/confirm/model/SendWithSwapConfirmModel.kt @@ -329,7 +329,7 @@ internal class SendWithSwapConfirmModel @Inject constructor( onSendSuccess = { txHash, timestamp, data -> val txUrl = getExplorerTransactionUrlUseCase( txHash = txHash, - networkId = primaryCurrencyStatus.currency.network.id, + currency = primaryCurrencyStatus.currency, ).getOrNull().orEmpty() sendSuccessAnalytics() uiState.transformerUpdate( diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index 42b072c45d..9a4b5d8027 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -975,7 +975,7 @@ internal class SwapModel @Inject constructor( ) val url = getExplorerTransactionUrlUseCase( txHash = swapTransactionState.txHash, - networkId = fromCurrency.currency.network.id, + currency = fromCurrency.currency, ).getOrElse { Timber.i("tx hash explore not supported") "" diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt index d31e72f0a4..d2f9137ae1 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt @@ -289,18 +289,9 @@ internal class TangemPayDetailsModel @Inject constructor( .getOrNull() } if (currency != null) { - router.push( - AppRoute.Swap( - currencyFrom = currency, - userWalletId = params.userWalletId, - isInitialReverseOrder = false, - screenSource = AnalyticsParam.ScreensSources.TangemPay.value, - tangemPayInput = AppRoute.Swap.TangemPayInput( - cryptoAmount = currentBalance.availableForWithdrawal, - fiatAmount = currentBalance.availableForWithdrawal, - depositAddress = depositAddress, - isWithdrawal = true, - ), + uiMessageSender.send( + message = TangemPayMessagesFactory.createWithdrawWarning( + onGotItClick = { onConfirmWithdrawal(currency, currentBalance, depositAddress) }, ), ) } else { @@ -311,6 +302,27 @@ internal class TangemPayDetailsModel @Inject constructor( } } + private fun onConfirmWithdrawal( + currency: CryptoCurrency, + currentBalance: TangemPayCardBalance, + depositAddress: String, + ) { + router.push( + AppRoute.Swap( + currencyFrom = currency, + userWalletId = params.userWalletId, + isInitialReverseOrder = false, + screenSource = AnalyticsParam.ScreensSources.TangemPay.value, + tangemPayInput = AppRoute.Swap.TangemPayInput( + cryptoAmount = currentBalance.availableForWithdrawal, + fiatAmount = currentBalance.availableForWithdrawal, + depositAddress = depositAddress, + isWithdrawal = true, + ), + ), + ) + } + private fun fetchBalance(): Job { return modelScope.launch { val result = try { diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt index 81a80c81fe..0aff2907e9 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt @@ -94,4 +94,23 @@ internal object TangemPayMessagesFactory { } } } + + fun createWithdrawWarning(onGotItClick: () -> Unit): BottomSheetMessageV2 { + return bottomSheetMessage { + infoBlock { + icon(R.drawable.img_attention_20) { + backgroundType = MessageBottomSheetUMV2.Icon.BackgroundType.Attention + } + title = TextReference.Res(R.string.tangempay_withdrawal_note_title) + body = TextReference.Res(R.string.tangempay_withdrawal_note_description) + } + primaryButton { + text = resourceReference(R.string.common_got_it) + onClick { + onGotItClick() + closeBs() + } + } + } + } } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index ba5ee42ad8..6a929eb75f 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -831,7 +831,7 @@ internal class TokenDetailsModel @Inject constructor( override fun onTransactionClick(txHash: String) { getExplorerTransactionUrlUseCase( txHash = txHash, - networkId = cryptoCurrency.network.id, + currency = cryptoCurrency, ).fold( ifLeft = { Timber.e(it.toString()) }, ifRight = { router.openUrl(url = it) }, diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt index b5586fdb53..d587d9b46c 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/model/TxHistoryModel.kt @@ -221,7 +221,7 @@ internal class TxHistoryModel @Inject constructor( override fun openTxInExplorer(txHash: String) { getExplorerTransactionUrlUseCase( txHash = txHash, - networkId = params.currency.network.id, + currency = params.currency, ).fold( ifLeft = { Timber.e(it.toString()) }, ifRight = { urlOpener.openUrl(url = it) }, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt index 18c1ae190b..57040c28d4 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/TangemPayClickIntents.kt @@ -246,7 +246,6 @@ internal class TangemPayClickIntentsImplementor @Inject constructor( router.openTangemPayOnboarding(mode = AppRoute.TangemPayOnboarding.Mode.FromBannerOnMain(userWalletId)) } else { stateHolder.update(transformer = TangemPayHideOnboardingStateTransformer(userWalletId)) - tangemPayMainScreenCustomerInfoUseCase.fetch(userWalletId) } } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletContentClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletContentClickIntents.kt index b3f825d821..b9373e40e8 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletContentClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletContentClickIntents.kt @@ -297,11 +297,13 @@ internal class WalletContentClickIntentsImplementor @Inject constructor( ?.currency ?: return@launch - getExplorerTransactionUrlUseCase(txHash = txHash, networkId = currency.network.id) - .fold( - ifLeft = { Timber.e(it.toString()) }, - ifRight = { router.openUrl(url = it) }, - ) + getExplorerTransactionUrlUseCase( + txHash = txHash, + currency = currency, + ).fold( + ifLeft = { Timber.e(it.toString()) }, + ifRight = { router.openUrl(url = it) }, + ) } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/Wallet2CobrandImage.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/Wallet2CobrandImage.kt index bda79ff305..27856a0954 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/Wallet2CobrandImage.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/Wallet2CobrandImage.kt @@ -305,7 +305,7 @@ internal enum class Wallet2CobrandImage( USA( cards2ResId = R.drawable.ill_usa_card2_120_106, cards3ResId = R.drawable.ill_usa_card3_120_106, - batchIds = setOf("AF91", "AF990017"), + batchIds = setOf("AF91", "AF990017", "AF990056"), ), VeChain( @@ -384,6 +384,12 @@ internal enum class Wallet2CobrandImage( HyperBlue( cards2ResId = R.drawable.ill_hyperblue_card2_120_106, cards3ResId = R.drawable.ill_hyperblue_card3_120_106, - batchIds = setOf("AF990026", "AF990027", "AF990028"), + batchIds = setOf("AF990026", "AF990027", "AF990028", "AF990050", "AF990051", "AF990052"), + ), + + Lunar( + cards2ResId = R.drawable.ill_lunar_card2_120_106, + cards3ResId = R.drawable.ill_lunar_card3_120_106, + batchIds = setOf("AF990057", "AF990058", "AF990059"), ), } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayOnboardingBanner.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayOnboardingBanner.kt index 62e59a5eed..d345eede90 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayOnboardingBanner.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/visa/TangemPayOnboardingBanner.kt @@ -51,15 +51,28 @@ internal fun TangemPayOnboardingBanner(state: TangemPayState.OnboardingBanner, m ) { val (image, text, close) = createRefs() + Image( + painter = painterResource(R.drawable.ic_close_24), + contentDescription = null, + modifier = Modifier + .size(16.dp) + .clickable(onClick = state.closeOnClick) + .constrainAs(close) { + top.linkTo(parent.top, margin = 16.dp) + end.linkTo(parent.end, margin = 16.dp) + }, + colorFilter = ColorFilter.tint(TangemTheme.colors.icon.inactive), + ) + Column( modifier = Modifier .constrainAs(text) { top.linkTo(parent.top) start.linkTo(image.end, margin = 12.dp) - end.linkTo(parent.end) + end.linkTo(close.start, margin = 12.dp) width = Dimension.fillToConstraints } - .padding(top = 16.dp, end = 16.dp, bottom = 16.dp), + .padding(top = 16.dp, bottom = 16.dp), ) { Text( text = stringResourceSafe(R.string.tangempay_onboarding_banner_title), @@ -80,26 +93,13 @@ internal fun TangemPayOnboardingBanner(state: TangemPayState.OnboardingBanner, m painter = painterResource(R.drawable.img_tangem_pay_onboarding_banner), contentDescription = null, modifier = Modifier + .padding(top = 8.dp, start = 24.dp) .constrainAs(image) { start.linkTo(parent.start) top.linkTo(text.top) bottom.linkTo(text.bottom) height = Dimension.fillToConstraints - } - .padding(top = 8.dp, start = 24.dp), - ) - - Image( - painter = painterResource(R.drawable.ic_close_24), - contentDescription = null, - modifier = Modifier - .size(16.dp) - .clickable(onClick = state.closeOnClick) - .constrainAs(close) { - top.linkTo(parent.top, margin = 16.dp) - end.linkTo(parent.end, margin = 16.dp) }, - colorFilter = ColorFilter.tint(TangemTheme.colors.icon.inactive), ) } } diff --git a/features/wallet/impl/src/main/res/drawable/ill_lunar_card2_120_106.webp b/features/wallet/impl/src/main/res/drawable/ill_lunar_card2_120_106.webp new file mode 100644 index 0000000000..b550f44d65 Binary files /dev/null and b/features/wallet/impl/src/main/res/drawable/ill_lunar_card2_120_106.webp differ diff --git a/features/wallet/impl/src/main/res/drawable/ill_lunar_card3_120_106.webp b/features/wallet/impl/src/main/res/drawable/ill_lunar_card3_120_106.webp new file mode 100644 index 0000000000..0782bfc629 Binary files /dev/null and b/features/wallet/impl/src/main/res/drawable/ill_lunar_card3_120_106.webp differ diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index d9fd4bc8f9..c2e88984ac 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,7 +5,7 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "develop-1383" +tangemBlockchainSdk = "develop-1387" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-573" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^