Updated on 2026-08-14

This commit is contained in:
Tangem 2025-08-06 14:40:09 +03:00
commit 5d368c413e
23 changed files with 147 additions and 340 deletions

View file

@ -126,6 +126,7 @@
<string name="common_approval">Genehmigung</string>
<string name="common_approve">Genehmigen</string>
<string name="common_attention">Achtung</string>
<string name="common_available_networks">Verfügbare Netzwerke</string>
<string name="common_backup">Sicherungskopie</string>
<string name="common_balance">Bilanz: %s</string>
<string name="common_balance_title">Saldo</string>
@ -140,6 +141,7 @@
<string name="common_choose_action">Aktion wählen</string>
<string name="common_choose_network">Netzwerk auswählen</string>
<string name="common_choose_token">Token auswählen</string>
<string name="common_choose_wallet">Wallet auswählen</string>
<string name="common_claim">Beanspruchen</string>
<string name="common_claim_rewards">Stakingbelohnungen beanspruchen</string>
<string name="common_close">Schließen</string>
@ -201,6 +203,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">Nein</string>
<string name="common_no_address">Keine Adresse</string>
<string name="common_not_added">Nicht hinzugefügt</string>
<string name="common_now">Jetzt</string>
<string name="common_ok">OK</string>
<string name="common_open_in_browser">Im Browser öffnen</string>
@ -476,14 +479,12 @@
<string name="manage_tokens_toast_portfolio_updated">Dein Portfolio wurde aktualisiert</string>
<string name="manage_tokens_unavailable_description">Der ausgewählte Token ist derzeit nicht für Aktionen innerhalb der Krypto-Wallet verfügbar. Aber keine Sorge, du kannst dein Interesse bekunden, indem du den Token hochstufen.</string>
<string name="manage_tokens_unavailable_vote">Hochstimmen</string>
<string name="manage_tokens_wallet_selector_title">Wallet auswählen</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Das Wallet unterstützt nicht mehr als ein Netzwerk</string>
<string name="markets_add_to_my_portfolio_description">Um dieses Asset zu kaufen, zu tauschen oder zu erhalten, füge diesen Deinem Portfolio hinzu</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Dieses Asset wird derzeit in der Wallet nicht unterstützt.</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Dieses Asset ist für dieses Wallet nicht verfügbar</string>
<string name="markets_add_token">Hinzufügen</string>
<string name="markets_apy_placeholder">APY %s</string>
<string name="markets_available_networks">Verfügbare Netzwerke</string>
<string name="markets_common_my_portfolio">Mein Portfolio</string>
<string name="markets_common_title">Markt</string>
<string name="markets_generate_addresses_notification">Um Adressen für ausgewählte Netzwerke zu generieren, musst du eine Tangem-Karte oder Ring scannen</string>
@ -617,7 +618,6 @@
<string name="nft_receive_title">NFT erhalten</string>
<string name="nft_receive_unavailable_asset_warning_message">Du hast dieses Netzwerk noch nicht hinzugefügt. Um NFTs zu erhalten, füge es Deinem Portfolio hinzu.</string>
<string name="nft_receive_unavailable_asset_warning_title">Netzwerk nicht hinzugefügt</string>
<string name="nft_receive_unavailable_section_title">Nicht hinzugefügt</string>
<string name="nft_receive_unsupported_types">Nicht unterstützte NFT-Arten</string>
<string name="nft_receive_unsupported_types_description">cNFTs und pNFTs werden derzeit nicht unterstützt. Bitte sende diese nicht an Deine Wallet.</string>
<string name="nft_send">NFT senden</string>

View file

@ -115,6 +115,7 @@
<string name="common_approval">Aprobación</string>
<string name="common_approve">Aprobar</string>
<string name="common_attention">Atención</string>
<string name="common_available_networks">Redes disponibles</string>
<string name="common_balance">Saldo: %s</string>
<string name="common_balance_title">Saldo</string>
<string name="common_biometric_authentication">autenticación biométrica</string>
@ -128,6 +129,7 @@
<string name="common_choose_action">Elige una acción</string>
<string name="common_choose_network">Elegir red</string>
<string name="common_choose_token">Elige token</string>
<string name="common_choose_wallet">Elegir wallet</string>
<string name="common_claim">Reclamar</string>
<string name="common_claim_rewards">Reclame recompensas</string>
<string name="common_close">Cerrar</string>
@ -188,6 +190,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">No</string>
<string name="common_no_address">Ninguna dirección</string>
<string name="common_not_added">No aregada</string>
<string name="common_now">Ahora</string>
<string name="common_ok">OK</string>
<string name="common_open_in_browser">Abrir en el navegador</string>
@ -448,14 +451,12 @@
<string name="manage_tokens_toast_portfolio_updated">Su portafolio ha sido actualizada</string>
<string name="manage_tokens_unavailable_description">El token seleccionado no está disponible actualmente para acciones dentro de la billetera cripto. Pero no se preocupa, puede expresar su interés votando a favor.</string>
<string name="manage_tokens_unavailable_vote">Votar a favor</string>
<string name="manage_tokens_wallet_selector_title">Elegir wallet</string>
<string name="manage_tokens_wallet_support_only_one_network_title">La billetera no admite más de una red</string>
<string name="markets_add_to_my_portfolio_description">Para comprar, intercambiar o recibir este activo, agréguelo a su portafolio</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Este activo no está disponible en la billetera</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Este activo no está disponible para esta billetera</string>
<string name="markets_add_token">Añadir</string>
<string name="markets_apy_placeholder">APY %s</string>
<string name="markets_available_networks">Redes disponibles</string>
<string name="markets_common_my_portfolio">Mi portafolio</string>
<string name="markets_common_title">Mercado</string>
<string name="markets_generate_addresses_notification">Para generar direcciones para las redes seleccionadas, debe escanear su tarjeta Tangem</string>
@ -589,7 +590,6 @@
<string name="nft_receive_title">Recibir NFT</string>
<string name="nft_receive_unavailable_asset_warning_message">Todavía no ha agregado esta red. Para recibir NFTs, añádala a su portafolio.</string>
<string name="nft_receive_unavailable_asset_warning_title">Red no agregada</string>
<string name="nft_receive_unavailable_section_title">No aregada</string>
<string name="nft_receive_unsupported_types">Tipos de NFT no compatibles</string>
<string name="nft_receive_unsupported_types_description">cNFT y pNFT aún no son compatibles. Por favor, no los envíes a tu billetera.</string>
<string name="nft_send">Enviar NFT</string>

View file

@ -105,6 +105,7 @@
<string name="common_approval">Approbation</string>
<string name="common_approve">Approuver</string>
<string name="common_attention">Attention</string>
<string name="common_available_networks">Réseaux disponibles</string>
<string name="common_balance">Solde : %s</string>
<string name="common_balance_title">Solde</string>
<string name="common_biometric_authentication">authentification biométrique</string>
@ -118,6 +119,7 @@
<string name="common_choose_action">Choisissez une action</string>
<string name="common_choose_network">Choisissez le réseau</string>
<string name="common_choose_token">Choisir le jeton</string>
<string name="common_choose_wallet">Choisissez un portefeuille</string>
<string name="common_claim">Réclamer</string>
<string name="common_claim_rewards">Réclamez des récompenses</string>
<string name="common_close">Fermer</string>
@ -175,6 +177,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">Non</string>
<string name="common_no_address">Aucune adresse</string>
<string name="common_not_added">Non ajouté</string>
<string name="common_now">Maintenant</string>
<string name="common_ok">OK</string>
<string name="common_open_in_browser">Ouvrir dans le navigateur</string>
@ -434,14 +437,12 @@
<string name="manage_tokens_toast_portfolio_updated">Votre portfolio a été mis à jour</string>
<string name="manage_tokens_unavailable_description">Le jeton sélectionné n\'est actuellement pas disponible pour des actions dans le portefeuille crypto. Mais ne vous inquiétez pas, vous pouvez exprimer votre intérêt en votant positivement.</string>
<string name="manage_tokens_unavailable_vote">Vote positif</string>
<string name="manage_tokens_wallet_selector_title">Choisissez un portefeuille</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Le portefeuille ne prend pas en charge plus d\'un réseau</string>
<string name="markets_add_to_my_portfolio_description">Pour acheter, échanger ou recevoir cet actif, ajoutez-le à votre portefeuille</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Cet actif n\'est pas pris en charge dans le portefeuille</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Cet actif n\'est pas disponible pour ce portefeuille</string>
<string name="markets_add_token">Ajoutez un jeton</string>
<string name="markets_apy_placeholder">APY %s</string>
<string name="markets_available_networks">Réseaux disponibles</string>
<string name="markets_common_my_portfolio">Mon portfolio</string>
<string name="markets_common_title">Marché</string>
<string name="markets_generate_addresses_notification">Pour générer des adresses pour les réseaux sélectionnés, vous devez scanner votre carte Tangem</string>
@ -575,7 +576,6 @@
<string name="nft_receive_title">Recevoir des NFT</string>
<string name="nft_receive_unavailable_asset_warning_message">Vous n\'avez pas encore ajouté ce réseau. Pour recevoir des NFT, ajoutez-le à votre portefeuille.</string>
<string name="nft_receive_unavailable_asset_warning_title">Réseau non ajouté</string>
<string name="nft_receive_unavailable_section_title">Non ajouté</string>
<string name="nft_receive_unsupported_types">Types de NFT non pris en charge</string>
<string name="nft_receive_unsupported_types_description">Les cNFT et les pNFT ne sont pas encore pris en charge</string>
<string name="nft_send">Envoyer un NFT</string>

View file

@ -145,6 +145,7 @@
<string name="common_approval">承認</string>
<string name="common_approve">承認</string>
<string name="common_attention">注意</string>
<string name="common_available_networks">利用可能なネットワーク</string>
<string name="common_backup">バックアップ</string>
<string name="common_balance">残高: %s</string>
<string name="common_balance_title">残高</string>
@ -159,6 +160,7 @@
<string name="common_choose_action">アクションを選択</string>
<string name="common_choose_network">ネットワークを選択</string>
<string name="common_choose_token">トークンを選択</string>
<string name="common_choose_wallet">ウォレットを選択</string>
<string name="common_claim">請求</string>
<string name="common_claim_rewards">報酬を受け取る</string>
<string name="common_close">閉じる</string>
@ -218,6 +220,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">いいえ</string>
<string name="common_no_address">アドレスがありません</string>
<string name="common_not_added">未追加</string>
<string name="common_now"></string>
<string name="common_ok">わかりました</string>
<string name="common_open_in_browser">ブラウザで開く</string>
@ -329,6 +332,9 @@
<string name="details_title">詳細</string>
<string name="disclaimer_error_loading">インターネット接続を確認するか、別のネットワークに切り替えてください。</string>
<string name="disclaimer_title">利用規約</string>
<string name="domain_receive_assets_onboarding_description">他のネットワークで資産を送金すると、永久に失われます。</string>
<string name="domain_receive_assets_onboarding_network_name">%sネットワーク</string>
<string name="domain_receive_assets_onboarding_title">下記のみを使用して資金を送金する</string>
<string name="error_wrong_wallet_tapped">別のウォレットのカードまたはリングを使用しました。このウォレットにリンクしているカードまたはリングをタップしてください。</string>
<string name="eth_gas_required_exceeds_allowance">取引に必要な資金が不足しています。アカウントに入金してください。</string>
<string name="exchange_tokens_available_tokens_header">マイトークン</string>
@ -494,14 +500,12 @@
<string name="manage_tokens_toast_portfolio_updated">ポートフォリオが更新されました</string>
<string name="manage_tokens_unavailable_description">選択したトークンは現在、暗号資産ウォレット内でのアクションには利用できません。しかし、心配しないでください。賛成票を投じることで関心を表明できます。</string>
<string name="manage_tokens_unavailable_vote">賛成票を投じる</string>
<string name="manage_tokens_wallet_selector_title">ウォレットを選択</string>
<string name="manage_tokens_wallet_support_only_one_network_title">ウォレットは複数のネットワークをサポートしていません。</string>
<string name="markets_add_to_my_portfolio_description">このアセットを購入・交換・受け取るには、ポートフォリオに追加してください。</string>
<string name="markets_add_to_my_portfolio_unavailable_description">このアセットは現在ウォレットで利用できません</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">このアセットはこのウォレットでは使用できません。</string>
<string name="markets_add_token">追加</string>
<string name="markets_apy_placeholder">APY %s</string>
<string name="markets_available_networks">利用可能なネットワーク</string>
<string name="markets_common_my_portfolio">私のポートフォリオ</string>
<string name="markets_common_title">マーケット</string>
<string name="markets_generate_addresses_notification">選択したネットワークのアドレスを生成するには、Tangemウォレットカードまたはリングをスキャンする必要があります。</string>
@ -632,7 +636,6 @@
<string name="nft_receive_title">NFTを受け取る</string>
<string name="nft_receive_unavailable_asset_warning_message">このネットワークはまだ追加されていません。NFTを受け取るには、ポートフォリオに追加してください。</string>
<string name="nft_receive_unavailable_asset_warning_title">ネットワークが追加されていません</string>
<string name="nft_receive_unavailable_section_title">未追加</string>
<string name="nft_receive_unsupported_types">サポートされていないNFTタイプ</string>
<string name="nft_receive_unsupported_types_description">cNFTとpNFTはまだサポートされていません。ウォレットに送信しないでください。</string>
<string name="nft_send">NFTを送信する</string>
@ -1426,6 +1429,7 @@
<string name="wc_common_networks">ネットワーク</string>
<string name="wc_common_unlimited">無制限</string>
<string name="wc_common_wallet">ウォレット</string>
<string name="wc_connected_app_title">接続されたアプリ</string>
<string name="wc_connected_networks">接続されたネットワーク</string>
<string name="wc_connection_reqeust_can_view_balance">ウォレットの残高とアクティビティを表示する</string>
<string name="wc_connection_reqeust_cant_sign">通知なしに取引に署名する</string>
@ -1456,6 +1460,8 @@
<string name="wc_request_from">リクエスト元</string>
<string name="wc_send_anyway">とにかく送金</string>
<string name="wc_signature_type">署名タイプ</string>
<string name="wc_specify_networks_subtitle">dApp接続には、少なくとも1つのネットワークが必要です</string>
<string name="wc_specify_networks_title">選択したネットワークを指定する</string>
<string name="wc_transaction_info_to_title">宛先</string>
<string name="wc_transaction_request">取引リクエスト</string>
<string name="wc_transaction_request_title">取引リクエスト</string>

View file

@ -102,6 +102,7 @@
<string name="common_approval">Одобрение</string>
<string name="common_approve">Подтвердить</string>
<string name="common_attention">Внимание</string>
<string name="common_available_networks">Доступные сети</string>
<string name="common_balance">Баланс: %s</string>
<string name="common_balance_title">Баланс</string>
<string name="common_biometric_authentication">биометрическую аутентификацию</string>
@ -115,6 +116,7 @@
<string name="common_choose_action">Выберите действие</string>
<string name="common_choose_network">Выберите сеть</string>
<string name="common_choose_token">Выберите токен</string>
<string name="common_choose_wallet">Выберите кошелек</string>
<string name="common_claim">Получить</string>
<string name="common_claim_rewards">Вывести награду</string>
<string name="common_close">Закрыть</string>
@ -174,6 +176,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">Нет</string>
<string name="common_no_address">Нет адреса</string>
<string name="common_not_added">Не добавлено</string>
<string name="common_now">Сейчас</string>
<string name="common_ok">OK</string>
<string name="common_open_in_browser">Открыть в браузере</string>
@ -427,13 +430,11 @@
<string name="manage_tokens_toast_portfolio_updated">Ваш портфель был обновлен</string>
<string name="manage_tokens_unavailable_description">Выбранный токен не доступен в кошельке на данный момент. Но не переживайте, вы можете выразить свой интерес проголосовав за его добавление.</string>
<string name="manage_tokens_unavailable_vote">Голосовать</string>
<string name="manage_tokens_wallet_selector_title">Выберите кошелек</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Кошелёк не поддерживает более одной сети</string>
<string name="markets_add_to_my_portfolio_description">Чтобы купить, обменять или получить данный токен, вам нужно добавить его к себе в портфель</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Этот актив в настоящее время не поддерживается в кошельке</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Этот токен не доступен для данного кошелька</string>
<string name="markets_add_token">Добавить</string>
<string name="markets_available_networks">Доступные сети</string>
<string name="markets_common_my_portfolio">Мой портфель</string>
<string name="markets_common_title">Рынок</string>
<string name="markets_generate_addresses_notification">Чтобы создать адреса для выбранных сетей, отсканируйте вашу карту или кольцо Tangem кошелька</string>
@ -573,7 +574,6 @@
<string name="nft_receive_title">Получить NFT</string>
<string name="nft_receive_unavailable_asset_warning_message">Вы ещё не добавили эту сеть. Чтобы получать NFT, добавьте её в ваш портфель.</string>
<string name="nft_receive_unavailable_asset_warning_title">Сеть не добавлена</string>
<string name="nft_receive_unavailable_section_title">Не добавлено</string>
<string name="nft_receive_unsupported_types">Неподдерживаемый тип NFT</string>
<string name="nft_receive_unsupported_types_description">cNFT и pNFT не поддерживаются. Пожалуйста, не отправляйте их на свой кошелёк.</string>
<string name="nft_send">Отправить NFT</string>
@ -1281,7 +1281,7 @@
<string name="warning_token_balance_not_updated">Возможно, баланс устарел. Обновите страницу.</string>
<string name="warning_token_required_min_coin_reserve">Недостаточно %1$s. Пополните свой счет %2$s для выполнения ассоциации токена</string>
<string name="warning_token_trustline_button_title">Открыть Trustline</string>
<string name="warning_token_trustline_subtitle">Согласно правилам сети, чтобы пополнить этот токен, необходимо сначала открыть Trustline — это позволит вашему кошельку принимать и хранить этот актив.</string>
<string name="warning_token_trustline_subtitle">Чтобы получить этот токен, необходимо включить Trustline. Сеть требует резерв %1$s %2$s.</string>
<string name="warning_token_trustline_title">Требуется трастлайн</string>
<string name="wc_alert_audit_malicious_domain">Вредоносный домен</string>
<string name="wc_alert_audit_unknown_domain">Неизвестный домен</string>

View file

@ -102,6 +102,7 @@
<string name="common_approval">Затвердження</string>
<string name="common_approve">Підтвердити</string>
<string name="common_attention">Увага</string>
<string name="common_available_networks">Доступні мережі</string>
<string name="common_balance">Баланс: %s</string>
<string name="common_balance_title">Баланс</string>
<string name="common_biometric_authentication">біометричну автентифікацію</string>
@ -114,6 +115,7 @@
<string name="common_change">Змінити</string>
<string name="common_choose_action">Виберіть дію</string>
<string name="common_choose_token">Оберіть токен</string>
<string name="common_choose_wallet">Оберіть гаманець</string>
<string name="common_claim">Отримати</string>
<string name="common_claim_rewards">Отримати винагороди</string>
<string name="common_close">Закрити</string>
@ -173,6 +175,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">Ні</string>
<string name="common_no_address">Немає адреси</string>
<string name="common_not_added">Не додано</string>
<string name="common_now">Зараз</string>
<string name="common_ok">ОК</string>
<string name="common_open_in_browser">Відкрити в браузері</string>
@ -426,13 +429,11 @@
<string name="manage_tokens_toast_portfolio_updated">Ваше портфоліо оновлено</string>
<string name="manage_tokens_unavailable_description">Обраний токен наразі недоступний для дій у криптогаманці. Але не хвилюйтеся, ви можете висловити свою зацікавленість, проголосувавши за його інтеграцію.</string>
<string name="manage_tokens_unavailable_vote">Проголосувати</string>
<string name="manage_tokens_wallet_selector_title">Оберіть гаманець</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Гаманець не підтримує більше однієї мережі</string>
<string name="markets_add_to_my_portfolio_description">Щоб купити, обміняти або отримати цей актив, додайте його до свого портфоліо</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Цей актив наразі не підтримується в гаманці</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Цей токен недоступний для цього гаманця</string>
<string name="markets_add_token">Додати</string>
<string name="markets_available_networks">Доступні мережі</string>
<string name="markets_common_my_portfolio">Моє портфоліо</string>
<string name="markets_common_title">Маркет</string>
<string name="markets_generate_addresses_notification">Щоб згенерувати адреси для обраних мереж, відскануйте вашу картку або кільце Tangem гаманця</string>
@ -572,7 +573,6 @@
<string name="nft_receive_title">Отримати NFT</string>
<string name="nft_receive_unavailable_asset_warning_message">Ви ще не додали цю мережу. Щоб отримувати NFT, додайте її до свого портфоліо.</string>
<string name="nft_receive_unavailable_asset_warning_title">Мережу не додано</string>
<string name="nft_receive_unavailable_section_title">Не додано</string>
<string name="nft_receive_unsupported_types">Непідтримувані типи NFT</string>
<string name="nft_receive_unsupported_types_description">cNFT і pNFT наразі не підтримуються. Будь ласка, не надсилайте їх на свій гаманець.</string>
<string name="nft_send">Надіслати NFT</string>
@ -1280,7 +1280,7 @@
<string name="warning_token_balance_not_updated">Баланс може бути застарілим. Оновіть сторінку.</string>
<string name="warning_token_required_min_coin_reserve">Недостатньо %1$s. Поповніть свій рахунок %2$s, щоб прив’язати цей токен.</string>
<string name="warning_token_trustline_button_title">Відкрити Trustline</string>
<string name="warning_token_trustline_subtitle">Відповідно до правил мережі, щоб поповнити цей токен, спочатку потрібно відкрити Trustline — це дозволить вашому гаманцю приймати та зберігати цей актив.</string>
<string name="warning_token_trustline_subtitle">Щоб отримати цей токен, потрібно увімкнути Trustline. Мережа вимагає резерв %1$s %2$s.</string>
<string name="warning_token_trustline_title">Відкрийте Trustline</string>
<string name="wc_alert_session_disconnected_description">Будь ласка, поверніться до браузеру і повторно підключіться через WalletConnect.</string>
<string name="wc_alert_wrong_card_description">Обрана не вірна картка або кільце</string>

View file

@ -149,6 +149,7 @@
<string name="common_approval">Approval</string>
<string name="common_approve">Approve</string>
<string name="common_attention">Attention</string>
<string name="common_available_networks">Available networks</string>
<string name="common_backup">Backup</string>
<string name="common_balance">Balance: %s</string>
<string name="common_balance_title">Balance</string>
@ -163,6 +164,7 @@
<string name="common_choose_action">Choose action</string>
<string name="common_choose_network">Choose network</string>
<string name="common_choose_token">Choose token</string>
<string name="common_choose_wallet">Choose wallet</string>
<string name="common_claim">Claim</string>
<string name="common_claim_rewards">Claim rewards</string>
<string name="common_close">Close</string>
@ -224,6 +226,7 @@
<string name="common_nft">NFT</string>
<string name="common_no">No</string>
<string name="common_no_address">No address</string>
<string name="common_not_added">Not Added</string>
<string name="common_now">Now</string>
<string name="common_ok">OK</string>
<string name="common_open_in_browser">Open in Browser</string>
@ -239,6 +242,7 @@
<string name="common_reject">Reject</string>
<string name="common_reload">Reload</string>
<string name="common_rename">Rename</string>
<string name="common_required">Required</string>
<string name="common_save">Save</string>
<string name="common_save_changes">Save changes</string>
<string name="common_search">Search</string>
@ -336,6 +340,9 @@
<string name="details_title">Details</string>
<string name="disclaimer_error_loading">Check your internet connection or switch to a different network</string>
<string name="disclaimer_title">Terms of service</string>
<string name="domain_receive_assets_onboarding_description">Sending assets in other networks will result in permanent loss.</string>
<string name="domain_receive_assets_onboarding_network_name">%s network</string>
<string name="domain_receive_assets_onboarding_title">Send funds using only</string>
<string name="error_wrong_wallet_tapped">You have used a card or ring from another wallet. Tap the card or ring associated with this wallet</string>
<string name="eth_gas_required_exceeds_allowance">Not enough funds for the transaction. Please top up your account.</string>
<string name="exchange_tokens_available_tokens_header">My tokens</string>
@ -506,14 +513,12 @@
<string name="manage_tokens_toast_portfolio_updated">Your portfolio has been updated</string>
<string name="manage_tokens_unavailable_description">The selected token is currently unavailable for actions within the crypto wallet. But worry not, you can express your interest by upvoting it.</string>
<string name="manage_tokens_unavailable_vote">Upvote</string>
<string name="manage_tokens_wallet_selector_title">Choose wallet</string>
<string name="manage_tokens_wallet_support_only_one_network_title">The wallet doesn\'t support more than one network</string>
<string name="markets_add_to_my_portfolio_description">To buy, exchange, or receive this asset, add it to your portfolio</string>
<string name="markets_add_to_my_portfolio_unavailable_description">This asset is currently not supported in the wallet</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">This asset is not available for this wallet</string>
<string name="markets_add_token">Add</string>
<string name="markets_apy_placeholder">APY %s</string>
<string name="markets_available_networks">Available networks</string>
<string name="markets_common_my_portfolio">My portfolio</string>
<string name="markets_common_title">Market</string>
<string name="markets_generate_addresses_notification">To generate addresses for selected networks, you must scan your Tangem Wallet card or ring</string>
@ -647,7 +652,6 @@
<string name="nft_receive_title">Receive NFT</string>
<string name="nft_receive_unavailable_asset_warning_message">You haven\'t added this network yet. To receive NFTs, add it to your portfolio.</string>
<string name="nft_receive_unavailable_asset_warning_title">Network not added</string>
<string name="nft_receive_unavailable_section_title">Not Added</string>
<string name="nft_receive_unsupported_types">Unsupported NFT types</string>
<string name="nft_receive_unsupported_types_description">cNFTs and pNFTs are not supported yet. Please don\'t send them to your wallet.</string>
<string name="nft_send">Send NFT</string>
@ -1367,9 +1371,11 @@
<string name="wallet_promo_banner_title">Discover Tangem Wallet</string>
<string name="wallet_settings_access_code_description">Secret code to protect this wallet. Used for login and signatures.</string>
<string name="wallet_settings_access_code_title">Set/Change Access Code</string>
<string name="wallet_settings_change_access_code_title">Change Access Code</string>
<string name="wallet_settings_push_notifications_description">Stay notified on wallet incoming transactions and Tangem updates.</string>
<string name="wallet_settings_push_notifications_huawei_warning">Push notifications may currently not work on Huawei devices. We\'re actively working on a solution and will release a fix in an upcoming update. Thank you for your understanding!</string>
<string name="wallet_settings_push_notifications_title">Transaction Notifications</string>
<string name="wallet_settings_set_access_code_title">Set Access Code</string>
<string name="wallet_settings_title">Wallet settings</string>
<string name="wallet_title">Tangem</string>
<string name="warning_access_denied_message">Use %s or scan a card/ring to unlock access to your wallet</string>
@ -1487,6 +1493,7 @@
<string name="wc_alert_verified_domain_title">Verified domain</string>
<string name="wc_alert_wrong_card_description">Wrong card or ring selected in the App</string>
<string name="wc_alert_wrong_card_title">We\'ve got some kind of problem</string>
<string name="wc_all_dapps_disconnected">All dApps disconnected</string>
<string name="wc_allow_to_spend">Allow to spend</string>
<string name="wc_common_address">Address</string>
<string name="wc_common_connect">Connect</string>
@ -1495,7 +1502,9 @@
<string name="wc_common_networks">Networks</string>
<string name="wc_common_unlimited">Unlimited</string>
<string name="wc_common_wallet">Wallet</string>
<string name="wc_connected_app_title">Connected App</string>
<string name="wc_connected_networks">Connected networks</string>
<string name="wc_connected_to">Connected to %1$s</string>
<string name="wc_connection_reqeust_can_view_balance">View your wallet balance and activity</string>
<string name="wc_connection_reqeust_cant_sign">Sign transactions without your notice</string>
<string name="wc_connection_reqeust_request_approval">Request approval for transactions</string>
@ -1506,6 +1515,7 @@
<string name="wc_contents">Contents</string>
<string name="wc_copy_data_button_text">Copy data</string>
<string name="wc_custom_allowance_title">Custom allowance</string>
<string name="wc_dapp_disconnected">dApp disconnected</string>
<string name="wc_disconnect_all">Disconnect all</string>
<string name="wc_disconnect_all_alert_desc">Text about discnected all dApps</string>
<string name="wc_disconnect_all_alert_title">Disconect All dApps</string>
@ -1513,6 +1523,8 @@
<string name="wc_estimated_wallet_changes_not_simulated">The transaction couldn\'t be simulated. Please proceed with caution.</string>
<string name="wc_estimation_is_not_supported">Estimation is not supported for %s</string>
<string name="wc_fee_suggested">Suggested by %s</string>
<string name="wc_insufficient_warning_subtitle">Top up your balance to cover the network fee</string>
<string name="wc_insufficient_warning_title">Insufficient %1$s</string>
<string name="wc_malicious_transaction">Malicious transaction</string>
<string name="wc_missing_required_network_description">Add the %s network to your portfolio for this wallet</string>
<string name="wc_missing_required_network_title">The wallet has no required networks</string>
@ -1525,6 +1537,9 @@
<string name="wc_request_from">Request from</string>
<string name="wc_send_anyway">Send anyway</string>
<string name="wc_signature_type">Signature Type</string>
<string name="wc_specify_networks_subtitle">At least one network is required for dApp connection</string>
<string name="wc_specify_networks_title">Specify selected networks</string>
<string name="wc_successfully_signed">Successfully signed</string>
<string name="wc_transaction_info_to_title">To</string>
<string name="wc_transaction_request">Transaction request</string>
<string name="wc_transaction_request_title">Transaction request</string>

View file

@ -36,7 +36,7 @@ internal fun WalletSelectorBottomSheet(config: TangemBottomSheetConfig) {
addBottomInsets = false,
title = { content ->
TangemTopAppBar(
title = resourceReference(R.string.manage_tokens_wallet_selector_title),
title = resourceReference(R.string.common_choose_wallet),
titleAlignment = Alignment.CenterHorizontally,
startButton = TopAppBarButtonUM.Back(content.onBack),
height = TangemTopAppBarHeight.BOTTOM_SHEET,

View file

@ -58,7 +58,7 @@ internal fun NFTReceiveNetworksContent(state: NFTReceiveUM.Networks.Content, mod
item(
key = "not_available_title",
) {
Title(resourceReference(R.string.nft_receive_unavailable_section_title))
Title(resourceReference(R.string.common_not_added))
}
networks(state.unavailableItems)
}

View file

@ -33,38 +33,10 @@ internal class AlertsComponent(
internal sealed class AlertType : TangemBottomSheetConfigContent {
abstract val onDismiss: () -> Unit
@Serializable
data class VerifiedDomain(val appName: String, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class UnknownDomain(val onConnect: () -> Unit, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class UnsafeDomain(val onConnect: () -> Unit, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class UnsupportedNetworks(val appName: String, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class UnsupportedMethod(override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class WcDisconnected(override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class UnknownError(val errorCode: Int, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class WrongCardSelected(override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class ConnectionTimeout(val onTryAgain: () -> Unit, override val onDismiss: () -> Unit) : AlertType()
@Serializable
data class MaliciousTransaction(
val descriptionMessage: String,
val onConnect: () -> Unit,
override val onDismiss: () -> Unit,
) : AlertType()
}
}

View file

@ -37,7 +37,7 @@ import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetWi
import com.tangem.core.ui.components.notifications.Notification
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -98,7 +98,7 @@ private fun WcSelectNetworksBS(
containerColor = TangemTheme.colors.background.tertiary,
title = {
TangemModalBottomSheetTitle(
title = stringReference("Choose networks"),
title = resourceReference(R.string.common_choose_network),
startIconRes = R.drawable.ic_back_24,
onStartClick = onBack,
)
@ -114,7 +114,7 @@ private fun WcSelectNetworksBS(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
text = "Done",
text = stringResourceSafe(R.string.common_done),
onClick = state.onDone,
enabled = state.doneButtonEnabled,
)
@ -181,7 +181,7 @@ private fun AvailableNetworksBlock(
Column(modifier = modifier) {
Text(
modifier = Modifier.padding(top = 12.dp, bottom = 4.dp, start = 12.dp, end = 12.dp),
text = "Available networks",
text = stringResourceSafe(R.string.common_available_networks),
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.tertiary,
)
@ -203,7 +203,7 @@ private fun NotAddedBlock(notAdded: ImmutableList<WcNetworkInfoItem>, modifier:
Column(modifier = modifier) {
Text(
modifier = Modifier.padding(top = 12.dp, bottom = 4.dp, start = 12.dp, end = 12.dp),
text = "Not Added",
text = stringResourceSafe(R.string.common_not_added),
style = TangemTheme.typography.subtitle2,
color = TangemTheme.colors.text.tertiary,
)
@ -255,7 +255,7 @@ private fun NetworkItems(networkItem: WcNetworkInfoItem, modifier: Modifier = Mo
}
}
is WcNetworkInfoItem.Required -> Text(
text = "Required",
text = stringResourceSafe(R.string.common_required),
style = TangemTheme.typography.body2,
color = TangemTheme.colors.text.tertiary,
)

View file

@ -28,6 +28,7 @@ import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheet
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetTitle
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.res.TangemTheme
@ -91,7 +92,7 @@ private fun WcSelectWalletModalBS(
containerColor = TangemTheme.colors.background.primary,
title = {
TangemModalBottomSheetTitle(
title = stringReference("Choose wallet"),
title = resourceReference(R.string.common_choose_wallet),
startIconRes = R.drawable.ic_back_24,
onStartClick = onBack,
)
@ -145,77 +146,62 @@ private fun WcSelectWalletContent(
@Preview(showBackground = true, device = Devices.PIXEL_7_PRO)
@Preview(showBackground = true, device = Devices.PIXEL_7_PRO, uiMode = Configuration.UI_MODE_NIGHT_YES)
private fun WcSelectWalletContent_Preview() {
val wallets = persistentListOf(
UserWalletItemUM(
id = UserWalletId("user_wallet_1".encodeToByteArray()),
name = stringReference("Tangem 2.0"),
information = getInformation(42),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_2".encodeToByteArray()),
name = stringReference("Tangem White"),
information = getInformation(24),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_3".encodeToByteArray()),
name = stringReference("Bitcoin"),
information = getInformation(1),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = getInformation(21),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = UserWalletItemUM.Information.Loading,
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = UserWalletItemUM.Information.Failed,
balance = UserWalletItemUM.Balance.Loaded("1 496,34 $", isFlickering = false),
isEnabled = true,
onClick = {},
),
)
TangemThemePreview {
TangemModalBottomSheet<TangemBottomSheetConfigContent.Empty>(
containerColor = TangemTheme.colors.background.primary,
config = TangemBottomSheetConfig(
isShown = true,
onDismissRequest = {},
content = TangemBottomSheetConfigContent.Empty,
),
title = {
TangemModalBottomSheetTitle(
title = stringReference("Choose wallet"),
onEndClick = {},
endIconRes = R.drawable.ic_close_24,
)
},
content = {
WcSelectWalletContent(
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 16.dp),
selectedWalletId = UserWalletId("user_wallet_1".encodeToByteArray()),
wallets = persistentListOf(
UserWalletItemUM(
id = UserWalletId("user_wallet_1".encodeToByteArray()),
name = stringReference("Tangem 2.0"),
information = getInformation(42),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_2".encodeToByteArray()),
name = stringReference("Tangem White"),
information = getInformation(24),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_3".encodeToByteArray()),
name = stringReference("Bitcoin"),
information = getInformation(1),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = getInformation(21),
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = UserWalletItemUM.Information.Loading,
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
UserWalletItemUM(
id = UserWalletId("user_wallet_4".encodeToByteArray()),
name = stringReference("Tangem 1.0"),
information = UserWalletItemUM.Information.Failed,
balance = UserWalletItemUM.Balance.Loaded("1 496,34 \$", isFlickering = false),
isEnabled = true,
onClick = {},
),
),
)
},
WcSelectWalletModalBS(
wallets = wallets,
selectedWalletId = wallets.first().id,
onBack = {},
onDismiss = {},
)
}
}

View file

@ -7,9 +7,9 @@ import com.domain.blockaid.models.dapp.CheckDAppResult
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.iconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.domain.walletconnect.model.WcSession
@ -23,6 +23,7 @@ import com.tangem.features.walletconnect.connections.entity.WcPrimaryButtonConfi
import com.tangem.features.walletconnect.connections.entity.WcAppInfoSecurityNotification
import com.tangem.features.walletconnect.connections.model.transformers.WcAppSubtitleConverter
import com.tangem.features.walletconnect.connections.routes.ConnectedAppInfoRoutes
import com.tangem.features.walletconnect.impl.R
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.MutableStateFlow
@ -35,7 +36,6 @@ import javax.inject.Inject
@Stable
@ModelScoped
internal class WcConnectedAppInfoModel @Inject constructor(
private val router: Router,
private val wcSessionsUseCase: WcSessionsUseCase,
private val messageSender: UiMessageSender,
private val disconnectUseCase: WcDisconnectUseCase,
@ -121,7 +121,7 @@ internal class WcConnectedAppInfoModel @Inject constructor(
}
modelScope.launch {
disconnectUseCase.disconnect(session)
messageSender.send(SnackbarMessage(message = stringReference("dApp disconnected")))
messageSender.send(SnackbarMessage(message = resourceReference(R.string.wc_dapp_disconnected)))
dismiss()
}
}

View file

@ -13,7 +13,6 @@ import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.components.appbar.models.TopAppBarButtonUM
import com.tangem.core.ui.components.dropdownmenu.TangemDropdownMenuItem
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.DialogMessage
import com.tangem.core.ui.message.EventMessageAction
import com.tangem.core.ui.message.SnackbarMessage
@ -50,7 +49,7 @@ internal class WcConnectionsModel @Inject constructor(
private val wcDisconnectUseCase: WcDisconnectUseCase,
private val wcPairService: WcPairService,
override val dispatchers: CoroutineDispatcherProvider,
private val analytics: AnalyticsEventHandler,
analytics: AnalyticsEventHandler,
paramsContainer: ParamsContainer,
) : Model() {
@ -127,7 +126,7 @@ internal class WcConnectionsModel @Inject constructor(
private fun disconnectAllSessions() {
modelScope.launch {
wcDisconnectUseCase.disconnectAll()
uiMessageSender.send(SnackbarMessage(message = stringReference("All dApps disconnected")))
uiMessageSender.send(SnackbarMessage(message = resourceReference(R.string.wc_all_dapps_disconnected)))
}
}

View file

@ -11,7 +11,9 @@ import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.core.ui.message.ToastMessage
import com.tangem.domain.models.network.Network
@ -30,6 +32,7 @@ import com.tangem.features.walletconnect.connections.entity.WcAppInfoUM
import com.tangem.features.walletconnect.connections.entity.WcPrimaryButtonConfig
import com.tangem.features.walletconnect.connections.model.transformers.*
import com.tangem.features.walletconnect.connections.routes.WcAppInfoRoutes
import com.tangem.features.walletconnect.impl.R
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.*
import javax.inject.Inject
@ -199,9 +202,13 @@ internal class WcPairModel @Inject constructor(
}
private fun processSuccessfullyConnected(session: WcSession) {
// TODO: [REDACTED_JIRA] localization
messageSender.send(
SnackbarMessage(message = stringReference("Connected to ${session.sdkModel.appMetaData.name}")),
SnackbarMessage(
message = resourceReference(
id = R.string.wc_connected_to,
formatArgs = wrappedList(session.sdkModel.appMetaData.name),
),
),
)
}

View file

@ -3,7 +3,6 @@ package com.tangem.features.walletconnect.connections.model.transformers
import com.tangem.domain.models.network.Network
import com.tangem.utils.converter.Converter
@Suppress("DestructuringDeclarationWithTooManyEntries")
internal object WcConnectButtonAvailabilityConverter : Converter<WcConnectButtonAvailabilityConverter.Input, Boolean> {
override fun convert(value: Input): Boolean {

View file

@ -7,7 +7,6 @@ import com.tangem.features.walletconnect.connections.entity.WcNetworksInfo
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList
@Suppress("DestructuringDeclarationWithTooManyEntries")
internal object WcNetworksInfoConverter : Converter<WcNetworksInfoConverter.Input, WcNetworksInfo> {
override fun convert(value: Input): WcNetworksInfo {
val missing = value.missingNetworks

View file

@ -6,7 +6,6 @@ import androidx.annotation.StringRes
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -23,7 +22,6 @@ import androidx.compose.ui.unit.dp
import com.tangem.core.ui.R
import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.components.SecondaryButton
import com.tangem.core.ui.components.SecondaryButtonIconEnd
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheet
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetTitle
@ -77,7 +75,6 @@ private fun ContentContainer(alert: AlertsComponent.AlertType, modifier: Modifie
.padding(top = TangemTheme.dimens.spacing8),
alert = alert,
)
AlertAudit(alert, modifier = Modifier.padding(top = TangemTheme.dimens.spacing16))
}
}
@ -90,71 +87,12 @@ private fun ButtonsContainer(alert: AlertsComponent.AlertType, modifier: Modifie
) {
val buttonsModifier = Modifier.fillMaxWidth()
when (alert) {
is AlertsComponent.AlertType.UnsafeDomain -> {
PrimaryButton(
modifier = buttonsModifier,
text = stringResourceSafe(R.string.common_cancel),
onClick = alert.onDismiss,
)
SecondaryButton(
modifier = buttonsModifier,
onClick = alert.onConnect,
text = stringResourceSafe(R.string.wc_alert_connect_anyway),
)
}
is AlertsComponent.AlertType.MaliciousTransaction -> {
PrimaryButton(
modifier = buttonsModifier,
text = stringResourceSafe(R.string.common_cancel),
onClick = alert.onDismiss,
)
SecondaryButtonIconEnd(
modifier = buttonsModifier,
onClick = alert.onConnect,
iconResId = R.drawable.ic_tangem_24,
text = stringResourceSafe(R.string.wc_alert_connect_anyway),
)
}
is AlertsComponent.AlertType.UnknownDomain -> {
PrimaryButton(
modifier = buttonsModifier,
text = stringResourceSafe(R.string.common_cancel),
onClick = alert.onDismiss,
)
SecondaryButton(
modifier = buttonsModifier,
onClick = alert.onConnect,
text = stringResourceSafe(R.string.wc_alert_connect_anyway),
)
}
is AlertsComponent.AlertType.VerifiedDomain -> SecondaryButton(
modifier = buttonsModifier,
text = stringResourceSafe(R.string.common_done),
onClick = alert.onDismiss,
)
is AlertsComponent.AlertType.ConnectionTimeout -> {
PrimaryButton(
modifier = buttonsModifier,
onClick = alert.onTryAgain,
text = stringResourceSafe(R.string.alert_button_try_again),
)
SecondaryButton(
modifier = buttonsModifier,
onClick = alert.onDismiss,
text = stringResourceSafe(R.string.balance_hidden_got_it_button),
)
}
is AlertsComponent.AlertType.WrongCardSelected,
is AlertsComponent.AlertType.UnknownError,
is AlertsComponent.AlertType.UnsupportedMethod,
-> SecondaryButton(
is AlertsComponent.AlertType.UnsupportedMethod -> SecondaryButton(
modifier = buttonsModifier,
onClick = alert.onDismiss,
text = stringResourceSafe(R.string.balance_hidden_got_it_button),
)
is AlertsComponent.AlertType.WcDisconnected,
is AlertsComponent.AlertType.UnsupportedNetworks,
-> PrimaryButton(
is AlertsComponent.AlertType.WcDisconnected -> PrimaryButton(
modifier = buttonsModifier,
onClick = alert.onDismiss,
text = stringResourceSafe(R.string.balance_hidden_got_it_button),
@ -166,49 +104,17 @@ private fun ButtonsContainer(alert: AlertsComponent.AlertType, modifier: Modifie
@Composable
private fun AlertIcon(alert: AlertsComponent.AlertType, modifier: Modifier = Modifier) {
val color = when (alert) {
is AlertsComponent.AlertType.VerifiedDomain -> TangemTheme.colors.icon.accent
is AlertsComponent.AlertType.WcDisconnected,
is AlertsComponent.AlertType.ConnectionTimeout,
is AlertsComponent.AlertType.UnsupportedNetworks,
-> TangemTheme.colors.icon.informative
is AlertsComponent.AlertType.WrongCardSelected,
is AlertsComponent.AlertType.UnknownDomain,
is AlertsComponent.AlertType.UnknownError,
is AlertsComponent.AlertType.UnsupportedMethod,
-> TangemTheme.colors.icon.attention
is AlertsComponent.AlertType.MaliciousTransaction,
is AlertsComponent.AlertType.UnsafeDomain,
-> TangemTheme.colors.icon.warning
is AlertsComponent.AlertType.WcDisconnected -> TangemTheme.colors.icon.informative
is AlertsComponent.AlertType.UnsupportedMethod -> TangemTheme.colors.icon.attention
}
@DrawableRes val drawableId = when (alert) {
is AlertsComponent.AlertType.WcDisconnected,
is AlertsComponent.AlertType.ConnectionTimeout,
-> R.drawable.ic_wallet_connect_24
is AlertsComponent.AlertType.MaliciousTransaction -> R.drawable.img_knight_shield_32
is AlertsComponent.AlertType.UnknownDomain,
is AlertsComponent.AlertType.UnsafeDomain,
-> R.drawable.img_knight_shield_32
is AlertsComponent.AlertType.UnsupportedNetworks -> R.drawable.ic_network_new_24
is AlertsComponent.AlertType.WrongCardSelected,
is AlertsComponent.AlertType.UnknownError,
is AlertsComponent.AlertType.UnsupportedMethod,
-> R.drawable.img_attention_20
is AlertsComponent.AlertType.VerifiedDomain -> R.drawable.img_approvale2_20
is AlertsComponent.AlertType.WcDisconnected -> R.drawable.ic_wallet_connect_24
is AlertsComponent.AlertType.UnsupportedMethod -> R.drawable.img_attention_20
}
val iconTint = when (alert) {
is AlertsComponent.AlertType.UnknownDomain,
is AlertsComponent.AlertType.UnsafeDomain,
is AlertsComponent.AlertType.MaliciousTransaction,
is AlertsComponent.AlertType.UnsupportedNetworks,
is AlertsComponent.AlertType.ConnectionTimeout,
is AlertsComponent.AlertType.WcDisconnected,
-> color
is AlertsComponent.AlertType.VerifiedDomain,
is AlertsComponent.AlertType.UnknownError,
is AlertsComponent.AlertType.WrongCardSelected,
is AlertsComponent.AlertType.UnsupportedMethod,
-> Color.Unspecified
is AlertsComponent.AlertType.WcDisconnected -> color
is AlertsComponent.AlertType.UnsupportedMethod -> Color.Unspecified
}
Box(
modifier = modifier
@ -230,16 +136,7 @@ private fun AlertIcon(alert: AlertsComponent.AlertType, modifier: Modifier = Mod
@Composable
private fun AlertContentTitle(alert: AlertsComponent.AlertType, modifier: Modifier = Modifier) {
@StringRes val titleRes: Int = when (alert) {
is AlertsComponent.AlertType.UnknownDomain,
is AlertsComponent.AlertType.UnsafeDomain,
is AlertsComponent.AlertType.MaliciousTransaction,
-> R.string.security_alert_title
is AlertsComponent.AlertType.ConnectionTimeout -> R.string.wc_alert_connection_timeout_title
is AlertsComponent.AlertType.UnknownError -> R.string.wc_alert_unknown_error_title
is AlertsComponent.AlertType.UnsupportedNetworks -> R.string.wc_alert_unsupported_networks_title
is AlertsComponent.AlertType.VerifiedDomain -> R.string.wc_alert_verified_domain_title
is AlertsComponent.AlertType.WcDisconnected -> R.string.wc_alert_session_disconnected_title
is AlertsComponent.AlertType.WrongCardSelected -> R.string.wc_alert_wrong_card_title
is AlertsComponent.AlertType.UnsupportedMethod -> R.string.wc_alert_unsupported_method_title
}
Text(
@ -254,29 +151,9 @@ private fun AlertContentTitle(alert: AlertsComponent.AlertType, modifier: Modifi
@Composable
private fun AlertContentDescription(alert: AlertsComponent.AlertType, modifier: Modifier = Modifier) {
val message = when (alert) {
is AlertsComponent.AlertType.ConnectionTimeout -> stringResourceSafe(
R.string.wc_alert_connection_timeout_description,
)
is AlertsComponent.AlertType.MaliciousTransaction -> alert.descriptionMessage
is AlertsComponent.AlertType.UnknownDomain,
is AlertsComponent.AlertType.UnsafeDomain,
-> stringResourceSafe(R.string.wc_alert_domain_issues_description)
is AlertsComponent.AlertType.UnknownError -> stringResourceSafe(
R.string.wc_alert_unknown_error_description,
alert.errorCode,
)
is AlertsComponent.AlertType.UnsupportedNetworks -> stringResourceSafe(
R.string.wc_alert_unsupported_networks_description,
alert.appName,
)
is AlertsComponent.AlertType.VerifiedDomain -> stringResourceSafe(
R.string.wc_alert_verified_domain_description,
alert.appName,
)
is AlertsComponent.AlertType.WcDisconnected -> stringResourceSafe(
R.string.wc_alert_session_disconnected_description,
)
is AlertsComponent.AlertType.WrongCardSelected -> stringResourceSafe(R.string.wc_alert_wrong_card_description)
is AlertsComponent.AlertType.UnsupportedMethod -> stringResourceSafe(
R.string.wc_alert_unsupported_method_description,
)
@ -290,44 +167,6 @@ private fun AlertContentDescription(alert: AlertsComponent.AlertType, modifier:
)
}
@Composable
private fun AlertAudit(alert: AlertsComponent.AlertType, modifier: Modifier = Modifier) {
when (alert) {
is AlertsComponent.AlertType.UnknownDomain -> Text(
modifier = modifier
.background(
shape = RoundedCornerShape(TangemTheme.dimens.radius16),
color = TangemTheme.colors.text.primary1.copy(alpha = 0.1F),
)
.padding(vertical = TangemTheme.dimens.spacing4, horizontal = TangemTheme.dimens.spacing12),
text = stringResourceSafe(R.string.wc_alert_audit_unknown_domain),
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.text.primary1,
)
is AlertsComponent.AlertType.UnsafeDomain -> Text(
modifier = Modifier
.padding(top = TangemTheme.dimens.spacing16)
.background(
shape = RoundedCornerShape(TangemTheme.dimens.radius16),
color = TangemTheme.colors.text.warning.copy(alpha = 0.1F),
)
.padding(vertical = TangemTheme.dimens.spacing4, horizontal = TangemTheme.dimens.spacing12),
text = stringResourceSafe(R.string.wc_alert_audit_unknown_domain),
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.text.warning,
)
is AlertsComponent.AlertType.ConnectionTimeout,
is AlertsComponent.AlertType.MaliciousTransaction,
is AlertsComponent.AlertType.UnknownError,
is AlertsComponent.AlertType.UnsupportedNetworks,
is AlertsComponent.AlertType.VerifiedDomain,
is AlertsComponent.AlertType.WcDisconnected,
is AlertsComponent.AlertType.WrongCardSelected,
is AlertsComponent.AlertType.UnsupportedMethod,
-> Unit
}
}
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
@ -347,19 +186,7 @@ private fun AlertsModalBottomSheet_Preview(
private class AlertTypesProvider : CollectionPreviewParameterProvider<AlertsComponent.AlertType>(
collection = listOf(
AlertsComponent.AlertType.VerifiedDomain(appName = "React App", onDismiss = {}),
AlertsComponent.AlertType.UnknownDomain(onConnect = {}, onDismiss = {}),
AlertsComponent.AlertType.UnsafeDomain(onConnect = {}, onDismiss = {}),
AlertsComponent.AlertType.MaliciousTransaction(
descriptionMessage = "The transaction approves erc20 tokens to a known malicious address",
onConnect = {},
onDismiss = {},
),
AlertsComponent.AlertType.UnsupportedNetworks(appName = "React App", onDismiss = {}),
AlertsComponent.AlertType.WcDisconnected(onDismiss = {}),
AlertsComponent.AlertType.UnknownError(errorCode = 8005, onDismiss = {}),
AlertsComponent.AlertType.WrongCardSelected(onDismiss = {}),
AlertsComponent.AlertType.ConnectionTimeout(onTryAgain = {}, onDismiss = {}),
AlertsComponent.AlertType.UnsupportedMethod(onDismiss = {}),
),
)

View file

@ -35,7 +35,10 @@ import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetTi
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetWithFooter
import com.tangem.core.ui.components.notifications.Notification
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.extensions.clickableSingle
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -286,9 +289,8 @@ private fun WcAppInfoSecondBlock(state: WcAppInfoUM.Content, modifier: Modifier
Notification(
config = NotificationConfig(
iconResId = R.drawable.ic_alert_circle_24,
// TODO: [REDACTED_JIRA] localization
title = stringReference("Specify selected networks"),
subtitle = stringReference("At least one network is required for dApp connection"),
title = resourceReference(R.string.wc_specify_networks_title),
subtitle = resourceReference(R.string.wc_specify_networks_subtitle),
),
iconTint = TangemTheme.colors.icon.attention,
containerColor = TangemTheme.colors.background.action,

View file

@ -23,7 +23,6 @@ import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheet
import com.tangem.core.ui.components.bottomsheets.modal.TangemModalBottomSheetTitle
import com.tangem.core.ui.components.notifications.Notification
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.res.TangemColorPalette
@ -48,7 +47,7 @@ internal fun WcConnectedAppInfoBS(state: WcConnectedAppInfoUM) {
containerColor = TangemTheme.colors.background.tertiary,
title = {
TangemModalBottomSheetTitle(
title = stringReference("Connected App"), // TODO: [REDACTED_JIRA]
title = resourceReference(R.string.wc_connected_app_title),
subtitle = state.connectingTime?.let { timestamp ->
resourceReference(
R.string.send_date_format,

View file

@ -1,6 +0,0 @@
package com.tangem.features.walletconnect.transaction.entity.blockaid
internal data class TransactionCheckResultsUM(
val estimatedWalletChanges: WcEstimatedWalletChangesUM,
val notificationText: String? = null,
)

View file

@ -2,8 +2,9 @@ package com.tangem.features.walletconnect.transaction.entity.common
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.message.ToastMessage
import com.tangem.features.walletconnect.impl.R
import kotlinx.coroutines.flow.StateFlow
internal interface WcCommonTransactionModel {
@ -16,8 +17,7 @@ internal interface WcCommonTransactionModel {
fun popBack()
// TODO: [REDACTED_JIRA]
fun showSuccessSignMessage(message: TextReference = stringReference("Successfully signed")) {
fun showSuccessSignMessage(message: TextReference = resourceReference(R.string.wc_successfully_signed)) {
messageSender.send(ToastMessage(message = message))
}
}

View file

@ -4,7 +4,7 @@ import com.tangem.blockchain.common.transaction.TransactionFee
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.subcomponents.feeSelector.utils.FeeCalculationUtils
@ -29,10 +29,12 @@ internal class WcNotificationsFactory @Inject constructor() {
cryptoCurrencyStatus: CryptoCurrencyStatus,
feeSelectorUM: FeeSelectorUM?,
): NotificationUM.Info? {
// TODO: [REDACTED_TASK_KEY] localization
return NotificationUM.Info(
title = stringReference("Insufficient ${cryptoCurrencyStatus.currency.name}"),
subtitle = stringReference("Top up your balance to cover the network fee"),
title = resourceReference(
id = R.string.wc_insufficient_warning_title,
formatArgs = wrappedList(cryptoCurrencyStatus.currency.name),
),
subtitle = resourceReference(R.string.wc_insufficient_warning_subtitle),
).takeIf { isFeeExceedsBalance(cryptoCurrencyStatus = cryptoCurrencyStatus, feeSelectorUM = feeSelectorUM) }
}