From 961481e879565fd7837fd35e6a7e5ddd80c194d9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Jun 2025 21:04:39 +0300 Subject: [PATCH 01/10] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 292e53e595..b741e3bfec 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 = "releases-5.25.0-1099" +tangemBlockchainSdk = "releases-5.25.0-1100" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "releases-5.25.0-486" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 745c9c6cd1fc830430a31f5452cc45da80a978b9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 11:46:58 +0300 Subject: [PATCH 02/10] Updated on 2026-08-14 --- .../impl/presentation/state/utils/StakingPendingActionUtils.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt index 19258f08e2..c6249834ec 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt @@ -8,6 +8,7 @@ import com.tangem.domain.staking.model.stakekit.action.StakingActionType import com.tangem.features.staking.impl.presentation.state.BalanceState import com.tangem.lib.crypto.BlockchainUtils.isBSC import com.tangem.lib.crypto.BlockchainUtils.isCardano +import com.tangem.lib.crypto.BlockchainUtils.isCosmos import com.tangem.lib.crypto.BlockchainUtils.isSolana import com.tangem.lib.crypto.BlockchainUtils.isTron import kotlinx.collections.immutable.ImmutableList @@ -67,5 +68,5 @@ internal fun isCompositePendingActions(networkId: String, pendingActions: Immuta } private fun isStubUnstakeAction(networkId: String): Boolean { - return isBSC(networkId) || isCardano(networkId) + return isBSC(networkId) || isCardano(networkId) || isCosmos(networkId) } \ No newline at end of file From 1c6dbbe90e8808bc773ea8dd89fc283e7e495d0c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 15:08:06 +0500 Subject: [PATCH 03/10] Updated on 2026-08-14 --- .../tangem/features/nft/details/model/NFTDetailsModel.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/model/NFTDetailsModel.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/model/NFTDetailsModel.kt index f20a708479..966c793b66 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/model/NFTDetailsModel.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/model/NFTDetailsModel.kt @@ -9,11 +9,13 @@ 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.navigation.url.UrlOpener import com.tangem.core.ui.clipboard.ClipboardManager 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.message.SnackbarMessage import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.nft.FetchNFTCollectionAssetsUseCase @@ -52,6 +54,7 @@ internal class NFTDetailsModel @Inject constructor( private val fetchNFTCollectionAssetsUseCase: FetchNFTCollectionAssetsUseCase, private val fetchNFTPriceUseCase: FetchNFTPriceUseCase, private val clipboardManager: ClipboardManager, + private val uiMessageSender: UiMessageSender, paramsContainer: ParamsContainer, ) : Model() { @@ -215,5 +218,8 @@ internal class NFTDetailsModel @Inject constructor( is NFTAsset.Identifier.Unknown -> return } clipboardManager.setText(text = addressToCopy, isSensitive = false) + uiMessageSender.send( + message = SnackbarMessage(message = resourceReference(R.string.wallet_notification_address_copied)), + ) } } \ No newline at end of file From 88190ba9a63c78b8d81fc7a7187199e3fb903071 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 13:26:47 +0300 Subject: [PATCH 04/10] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 10 ++- core/res/src/main/res/values-ja/strings.xml | 80 +++++++++++++++++++-- core/res/src/main/res/values-ru/strings.xml | 9 ++- core/res/src/main/res/values/strings.xml | 77 +++++++++++++++++++- 4 files changed, 164 insertions(+), 12 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 24c3cc5827..1432eaaaa2 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -574,7 +574,7 @@ Netzwerk nicht hinzugefügt Nicht hinzugefügt Nicht unterstützte NFT-Arten - cNFTs und pNFTs werden noch nicht unterstützt + cNFTs und pNFTs werden derzeit nicht unterstützt. Bitte sende diese nicht an Deine Wallet. NFT senden Eigenschaften Unbetitelte Sammlung @@ -821,6 +821,7 @@ Überprüfe deine Netzwerkverbindung Informationen zur Netzwerkgebühr nicht erreichbar Von + Von %s Grenzwert Gasgebühr Dies ist die maximale Gasgebühr, die für den Abschluss einer Transaktion oder eines Vertrags ausgegeben wird. Ein Gaslimit verhindert unerwartete oder unbegrenzte Gebühren bei der Ausführung einer Transaktion. Gaspreis @@ -828,6 +829,7 @@ Max Höchstbetrag Gebühr bis zu + Memo: %s Ungültiges Memo Abdeckung der Netzgebühren Nonce @@ -878,6 +880,7 @@ Die Netzwerkgebühr wird durch die Nutzung von %1$s Energieträgern gedeckt. Die Netzwerkgebühr wird durch den Verbrauch von %1$s Energie reduziert inklusive einer Netzgebühr von %1$s + Zur Adresse Die Transaktion wurde erfolgreich signiert und an den Blockchain-Knoten gesendet. Die Walletbilanz wird aktualisiert %1$s ist ein Vermögenswert im Tron-Netzwerk. Um die Gebühr zu berechnen und eine Transaktion durchzuführen, musst du etwas Tron (TRX) auf deinem Konto einzahlen. Der Betrag geht über die Bilanz hinaus @@ -887,6 +890,7 @@ Die Gebühr geht über die Bilanz hinaus Der Gesamtbetrag geht über die Bilanz hinaus Sende uns ein Token, und wir konvertieren es unterwegs. Dein Empfänger erhält genau das, was er braucht – nahtlos. + Wird an den Empfänger gesendet Senden mit Swap Transaktion gesendet Bereite das Scannen der Karte oder Ring vor, die du einrichten möchtest. @@ -1299,8 +1303,8 @@ Der Kontostand ist möglicherweise veraltet. Aktualisiere bittre die Seite. Nicht genug %1$s. Lade Dein XLM-Konto auf, um dieses Token zu verknüpfen Trustline aktivieren - Um dieses Token zu erhalten, muss eine Trustline aktiviert sein. Das Netzwerk benötigt eine Reserve von %1$s %2$s. - Trustline erforderlich + Um dieses Token zu erhalten, muss eine Trustline aktiviert sein. Das Netzwerk benötigt eine Reserve von %1$s %2$s. + Trustline erforderlich Unbekannte Domäne Trotzdem verbinden Zeitüberschreitungsfehler. Bitte versuche es später erneut. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 722f628412..06b321ef1a 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1,5 +1,14 @@ + アクセスコードがないとウォレットは保護されません。 + とにかくスキップ + アクセスコードが設定されていません + アクセスコードを入力 + 続行するには、以前に入力したコードを確認してください + アクセスコードを再入力 + ウォレットのロックを解除するには、 %s桁のアクセスコードを設定します。 + アクセスコードの作成 + アクセスコード トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して買付できるようにします。 トークンが見つかりませんか?メインページのマーケットセクションに移動し、ポートフォリオに追加して売却できるようにします。 売却 @@ -49,6 +58,17 @@ システムのデフォルト テーマ アプリ設定 + ウォレットのバックアップが正常に完了しました。 + バックアップが完了しました + シークレットリカバリーフレーズは、ウォレットへのアクセスと復元のために使用される%sのランダムな単語のセットです。 + これらの単語は紛失した場合、復元できません。必ず安全な場所に保管してください。 + 安全に保管してください + これらの%s個の単語をパスワードマネージャーなどの安全な場所に保存し、決して他の人と共有しないでください。 + 復元は不可能です + リカバリーフレーズ + これらの%s語を順番に書き留めて、安全かつプライベートに保管してください。 + ウォレットと、リカバリーフレーズのセキュリティとバックアップの全責任は、Tangemではなくユーザーにあります。 + リカバリーフレーズ 残高を表示または非表示にするには、デバイスの画面を下向きにするか、設定でオフにしてください。 今後表示しない わかりました @@ -101,6 +121,7 @@ 承認 承認 注意 + バックアップ 残高: %s 残高 生体認証 @@ -117,10 +138,12 @@ 請求 報酬を受け取る 閉じる + 近日公開 確認 Tangemサポートへ問い合わせる Visaサポートへ問い合わせる 続ける + 変換する コピー アドレスをコピー 作成 @@ -150,6 +173,7 @@ 遅い 速度と料金 終了 + 無料 アドレスを同期する プロバイダーへ移動 トークンへ移動 @@ -202,6 +226,7 @@ もっと見る 署名 署名して送信 + スキップ ステーキング ステーキング 始める @@ -222,6 +247,7 @@ アクセスできません ステーキング解除 %1$sの制限により、1つのトランザクションに収まるUTXOは%2$d個のみです。つまり、 %3$s以下しか送信できません。量を減らす必要があります。 + 値がコピーされました はい @@ -377,10 +403,19 @@ 許可を与える 無制限 既存のウォレットを追加 + 新しいウォレットを作成する Tangemを注文 Tangemをスキャン %sへ %sネットワーク + バックアップへ移動 + アクセスコードを使用してウォレットを保護するには、まずバックアップを完了してください。 + まずバックアップを完了する + 受信取引の通知を受け取る + 鍵はアプリに保存されます + 最新の機能とニュースをお届けします + シードフレーズのバックアップ + モバイルウォレットを作成する この情報はAIで生成されました。 \nエラーが見つかった場合は、ここをタップしてください。 アクセスコードを変更するには、上図のようにカードまたはリングをタップし、操作が終了するまで取り外さないでください。 パスコードを変更するには、上記のようにカードをタップし、操作が終了するまで取り外さないでください。 @@ -565,7 +600,7 @@ ネットワークが追加されていません 未追加 サポートされていないNFTタイプ - cNFTとpNFTはまだサポートされていません + cNFTとpNFTはまだサポートされていません。ウォレットに送信しないでください。 NFTを送信する 特徴 無題のコレクション @@ -621,6 +656,7 @@ 秘密鍵を非公開で生成する カードは有効化され、使用可能になりました 成功! + ウォレットの設定が完了し、使用できるようになりました。 この場合は、最初からやり直す必要があります。 アクティベーション処理を途中で終了しますか? スタート @@ -783,7 +819,9 @@ 推奨手数料を下回る手数料が指定されたため、取引に遅れが生じる可能性があります。続行しますか? 理由: %1$s \nコード: %2$s 取引は完了していません + 別のトークンに変換する 金額 + 受取人に送信されます 取引手数料は、vByteフィールドのSatoshiの値を調整して設定できます。 取引にかかる手数料です。自由に設定できます。 最大手数料 @@ -807,6 +845,7 @@ ネットワーク接続を確認してください ネットワーク手数料についての情報にアクセスできません より + %sから ガス上限 これは、取引または契約を完了するために使用されるガスの最大額です。ガス上限を設定することで、取引実行時に予期せぬ請求や無制限の請求を防ぐことができます。 ガス代 @@ -814,6 +853,7 @@ 最大 最大金額 最大手数料 + メモ: %s 無効なメモ ネットワーク手数料のカバー ナンス @@ -827,6 +867,7 @@ カスタム手数料が高くなっています %1$sネットワークの特殊性により、残高全体を転送する場合の手数料は高くなります。手数料を削減するには、 %2$sを残します。 手数料が高くなっています + 受取人の口座が有効化されていません。最低送金額はレント免除残高%1$s以上である必要があります。 口座残高はレンタル料金より低くすることはできません。残高を少なくとも%1$sに維持するか、すべての資金を引き出してください。 手数料が送金金額を超えており、マイナスの値になってしまいます。 無効な金額 @@ -845,7 +886,7 @@ 最近の取引 受取人 有効なアドレスではありません - トークンを失わないように、受信ウォレットアドレスが%sネットワーク上にあることを確認してください。 + トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください %s に送信 %sネットワークアドレスを確認してください。エラーが発生すると転送が失われる可能性があります。 送金先 @@ -864,6 +905,7 @@ ネットワーク手数料は%1$sエネルギーを使用してカバーされます %1$sエネルギーを使用するとネットワーク手数料が減額されます ネットワーク手数料%1$sを含む + アドレスへ 取引は正常に署名され、ブロックチェーンノードに送信されました。ウォレットの残高はしばらくして更新されます。 %1$sはTronネットワークのアセットです。手数料を計算して取引を行うには、アカウントにTron(TRX)を入金する必要があります。 金額が残高を超えています @@ -873,6 +915,8 @@ 手数料が残高を超えています 合計金額が残高を超えています トークンを送信すれば、送信中に変換されます。受信者は必要なものをシームレスに受け取ります。 + 受信者に送信されます + 受取金額 スワップして送信 取引が送信されました 設定したいカードまたはリングをスキャンするために準備してください。 @@ -1028,6 +1072,7 @@ 破格のレート 手間がかからず直感的に操作でき、数回タップするだけでトークンを交換できます。 とにかく便利 + プロバイダー経由のスワップ この金額には以下が含まれます:\n- サービスプロバイダーの手数料\n- 取引所からユーザーのアドレスに%s を送り返すためのネットワーク手数料。 金額には以下が含まれます: \n • サービス プロバイダーの手数料\n • 取引所からユーザーのアドレスに%1$sを送金するためのネットワーク手数料。 \n\nプロバイダーのスリッページは最大%2$sです この金額には、サービスプロバイダーの手数料が含まれています。 @@ -1178,6 +1223,27 @@ dAppsに接続する WalletConnect 接続には数秒かかる場合があります + %sから + Tangemウォレットを購入 — 暗号資産をオフラインで安全に保管できる物理カードです。 + ハードウェアウォレット + 数秒でスマートフォンに安全なウォレットが作成されます。 + モバイルウォレット + 何を選ぶべき? + すでにTangemウォレットをお持ちですか? + 今すぐスキャン + ウォレットの作成方法を選択してください + Tangemウォレットを購入しますか? + 今すぐ購入 + 既存のウォレットを追加 + 暗号資産をオフラインで安全に保管する物理カード。 + Tangemウォレットをスキャンする + ウォレットを復元するためのシードフレーズ + ウォレットをインポート + リカバリーフレーズをインポートする + ウォレットのバックアップが正常に完了しました。 + ウォレットをインポート + インポート完了 + ウォレットをインポート %s市場価格 直近24時間 %sネットワーク @@ -1186,6 +1252,8 @@ 今すぐ10 % オフで購入 1.3万種類以上の暗号資産にアクセス。ワンタップで買付、売却、スワップ、ステーキングが可能です。\nバックアップ用に最大3枚のカードを連携できます。 Tangemウォレットを見る + このウォレットを保護するためのシークレットコードです。ログインと署名に使用されます。 + アクセスコードの設定 / 変更 ウォレットの受信取引とTangemの更新について通知を受け取る。 取引通知 ウォレット設定 @@ -1274,13 +1342,17 @@ 下にスワイプして更新するか、後でもう一度お試しください。 一部のネットワークにアクセスできません 一部のトークン残高を更新できませんでした + トラストラインを有効にする + %sが足りません。このトークンを関連付けるには、XLMアカウントに資金を追加してください。 + このトークンを受け取るには、トラストラインを有効にする必要があります。ネットワークには 0.5 XLMの準備金が必要です。 + トラストラインが必要 これはテストネットカードです。取引処理はできませんので、テストおよび開発目的でのみご利用ください。 テスト目的のみ 残高が古い可能性があります。ページを更新してください。 %1$sが足りません。このトークンを関連付けるには、XLMアカウントにチャージしてください。 トラストラインを有効にする - このトークンを受け取るには、トラストラインを有効にする必要があります。ネットワークには%1$s %2$s予備金が必要です。 - トラストラインが必要 + このトークンを受け取るには、トラストラインを有効にする必要があります。ネットワークには%1$s %2$s予備金が必要です。 + トラストラインが必要 不明なドメイン とにかく接続する タイムアウトエラーが発生しました。しばらくしてからもう一度お試しください。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 6be2e1fb65..4c4ce1336a 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -223,6 +223,7 @@ Недоступно Завершить стейкинг Из-за ограничений %1$s в одну транзакцию может поместиться только %2$d UTXO. Это означает, что вы можете отправить только %3$s или меньше. Вам нужно уменьшить сумму. + Значение скопировано неделю с Да @@ -843,6 +844,7 @@ Установлена высокая комиссия Ввиду особенности сети %1$s комиссия при переводе всего баланса выше. Для того, чтобы снизить комиссию Вы можете оставить %2$s. Комиссия повышена + Аккаунт получателя не активирован. Минимальная сумма перевода должна быть не меньше баланса, необходимого для покрытия арендной платы: %1$s. Баланс вашего счета не может быть ниже арендной платы. Пожалуйста, оставьте на счете не менее %1$s или выведите все средства. Включенная комиссия превышает сумму перевода, что приводит к отрицательному значению Недопустимая сумма @@ -1259,12 +1261,15 @@ Свайпните вниз для обновления или попробуйте позже. Некоторые сети недоступны Некоторые балансы токенов не удалось обновить + Открыть Trustline + Чтобы получить этот токен, необходимо открыть Trustline. Сеть удержит резерв в размере 0.5 XLM. + Откройте Trustline Это Testnet карта. Он не может обрабатывать транзакции и используется только в целях тестирования и разработки. Только для целей тестирования Возможно, баланс устарел. Обновите страницу. Открыть Trustline - Согласно правилам сети, чтобы пополнить этот токен, необходимо сначала открыть Trustline — это позволит вашему кошельку принимать и хранить этот актив. - Откройте Trustline + Согласно правилам сети, чтобы пополнить этот токен, необходимо сначала открыть Trustline — это позволит вашему кошельку принимать и хранить этот актив. + Откройте Trustline Пожалуйста, вернитесь в браузер и выполните повторное подключение через WalletConnect. Выбрана не верная карта или кольцо Адрес diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 59973b51ac..84a38d2d72 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1,5 +1,14 @@ + Your wallet won’t be protected without an Access Code. + Skip anyway + Access Code not set + Enter Access Code + Confirm your previously entered code to continue + Re-enter Access Code + Set a %s-digit Access Code to unlock your wallet. + Create Access Code + Access code Can’t find your token? Go to the Market section on the main page and add it to your portfolio for purchase Can’t find your token? Go to the Market section on the main page and add it to your portfolio for selling. Sell @@ -49,6 +58,17 @@ System default Theme App settings + You successfully backed up your wallet. + Backup Completed + Your Secret Recovery Phrase is a fixed set of %s random words used to access and recover your wallet. + These words can’t be recovered if lost. Make sure to keep it somewhere secure. + Keep It Safe + Save these %s words in a secure location, such as a password manager, and never share them with anyone. + No Recovery Possible + Recovery phrase + Write down these %s words in order and keep them safe and private + Full responsibility for the security and backup of the wallet and recovery phrase lies with the user, not with Tangem. + Recovery phrase To hide or show your balances, simply flip your device screen down, or switch it off in Settings Don\'t show again Got it @@ -103,6 +123,7 @@ Approval Approve Attention + Backup Balance: %s Balance biometric authentication @@ -119,10 +140,12 @@ Claim Claim rewards Close + Coming Soon Confirm Contact Tangem Support Contact Visa Support Continue + Convert Copy Copy address Create @@ -154,6 +177,7 @@ Slow Speed and fee Finish + Free Synchronize addresses Go to provider Go to token @@ -206,6 +230,7 @@ Show more Sign Sign and send + Skip Stake Staking Start @@ -227,6 +252,7 @@ Unreachable Unstake Due to %1$s limitations only %2$d UTXOs can fit in a single transaction. This means you can only send %3$s or less. You need to reduce the amount. + Value copied week with Yes @@ -387,6 +413,14 @@ Scan Tangem to %s On %s network + Go to backup + To secure your wallet with a Access Code, complete the backup first. + Finish Backup First + Get notified of incoming transactions + Keys are stored in the app + Stay up to date with the latest features and news + Seed phrase backup + Create Mobile Wallet This information was generated with AI.\nTap here, if you find any errors. To change the access code tap the card or ring as shown above and do not remove until the end of the operation To change the passcode tap the card as shown above and do not remove until the end of the operation @@ -632,6 +666,7 @@ Generate keys privately Your card is activated and ready to be used Success! + Your wallet is set up and ready to use! In this case, you will need to start from the beginning. Do you want to exit the activation process? Getting started @@ -798,7 +833,9 @@ You specified a commission below the recommended amount, which could cause a delay in your transaction. Continue? Reason: %1$s\nCode: %2$s The transaction is not completed + Convert to another token Amount + Will be sent to recipient You can set your transaction fee by adjusting the value in the Satoshi per vByte field. The fee that will be charged for your transaction. You can set your own value. Max fee @@ -822,6 +859,7 @@ Check your network connection Network fee info unreachable From + From %s Gas limit This is the maximum amount of gas that will be spent to complete a transaction or contract. A gas limit prevents unexpected or unlimited charges when executing a transaction. Gas price @@ -829,6 +867,7 @@ Max Maximum amount Fee up to + Memo: %s Invalid Memo Network fee coverage Nonce @@ -842,6 +881,7 @@ Custom fee is high Due to the peculiarities of the %1$s network, the fee for transferring the entire balance is higher. To reduce the commission, you can leave %2$s. The fee is higher + The recipient account is not activated. The minimum transfer amount must be equal to or greater than the rent-exempt balance: %1$s. Your account balance cannot be lower than the rent fee. Please maintain at least %1$s on your account or withdraw all funds. The included commission exceeds the transfer amount, leading to a negative value Invalid amount @@ -860,7 +900,7 @@ Recent Recipient Not a valid address - Ensure the receiving wallet address is on the %s network to avoid losing your tokens + Ensure the receiving wallet address is on **the %s network** to avoid losing your tokens send to %s Ensure you %s network address, as errors may result in lost transfers Send to @@ -879,6 +919,7 @@ network fee will be covered by using %1$s energy network fee will be reduced by spending %1$s energy including a network fee of %1$s + To address Transaction has been successfully signed and sent to the blockchain node. Wallet balance will be updated in a while %1$s is an asset in the Tron network. To calculate the fee and make a transaction you need to deposit some Tron (TRX) in your account. Amount exceeds balance @@ -888,6 +929,8 @@ Fee exceeds balance Total amount exceeds balance Send any token, and we’ll convert it on the way. Your recipient gets exactly what they need—seamlessly. + Will be sent a recipient + Amount to receive Send with swap Transaction sent Prepare to scan card or ring you want to set up. @@ -1043,6 +1086,7 @@ Unbeatable Rates Hassle-free and intuitive, allowing you to swap tokens in just a few taps Simply Convenient + Swap via provider The amount includes:\n• service provider\'s fee\n• network fee for sending %s from the exchange back to the user\'s address. The amount includes:\n• service provider\'s fee\n• network fee for sending %1$s from the exchange back to the user\'s address. \n\nProvider slippage is up to %2$s The amount includes the service provider\'s fee. @@ -1242,6 +1286,27 @@ Connect to dApps WalletConnect Connecting may take a few seconds + From %s + Buy Tangem Wallet — physical cards that securely store your crypto offline. + Hardware Wallet + A secure wallet is created on your phone in seconds. + Mobile Wallet + What to choose? + Do you already have Tangem Wallet? + Scan Now + Choose how you want to create your wallet + Want to purchase a Tangem Wallet? + Buy Now + Add existing wallet + Physical cards that securely store your crypto offline. + Scan a Tangem Wallet + Your seed phrase to recover your wallet + Import wallet + Import a recovery phrase + You successfully backed up your wallet. + Import wallet + Import Completed + Import wallet %s Market Price last 24h %s network @@ -1250,6 +1315,8 @@ Get now with 10% off Access 13,000+ cryptocurrencies. Buy, sell, swap, and stake with a single tap.\nLink up to three cards for a backup. Discover Tangem Wallet + Secret code to protect this wallet. Used for login and signatures. + Set/Change Access Code Stay notified on wallet incoming transactions and Tangem updates. Transaction Notifications Wallet settings @@ -1339,13 +1406,17 @@ Swipe down to refresh or try again later. Some networks are unreachable Some token balances could not be updated + Enable Trustline + Not enough %s. Top up your XLM account to associate this token + A Trustline must be enabled to receive this token. The network requires a 0.5 XLM reserve. + Trustline Required This is a Testnet card. It cannot process transactions and should only be used for testing and development purposes. For testing purposes only Balance may be outdated. Refresh the page. Not enough %1$s. Top up your XLM account to associate this token Enable Trustline - A Trustline must be enabled to receive this token. The network requires a %1$s %2$s reserve. - Trustline Required + A Trustline must be enabled to receive this token. The network requires a %1$s %2$s reserve. + Trustline Required Unknown domain Connect anyway Timeout error. Please, try again later. From 6890c6ad568d6b4a7e20ecdf8558c4f92a89bc7a Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 22:28:52 +0500 Subject: [PATCH 05/10] Updated on 2026-08-14 --- .../tangem/features/nft/collections/ui/NFTCollectionAsset.kt | 5 +++-- .../features/nft/collections/ui/NFTCollectionsEmpty.kt | 5 +++-- .../com/tangem/features/nft/details/ui/NFTDetailsLogo.kt | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionAsset.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionAsset.kt index b63ed4ff63..5ab67a6d96 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionAsset.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionAsset.kt @@ -1,12 +1,12 @@ package com.tangem.features.nft.collections.ui import android.content.res.Configuration -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -76,10 +76,11 @@ private fun Placeholder(modifier: Modifier = Modifier) { .background(TangemTheme.colors.field.focused), contentAlignment = Alignment.Center, ) { - Image( + Icon( modifier = Modifier.size(TangemTheme.dimens.size52), painter = painterResource(R.drawable.ic_nft_placeholder_120), contentDescription = null, + tint = TangemTheme.colors.icon.primary1, ) } } diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionsEmpty.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionsEmpty.kt index f72e7db861..7e2c62d33b 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionsEmpty.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/collections/ui/NFTCollectionsEmpty.kt @@ -1,10 +1,10 @@ package com.tangem.features.nft.collections.ui import android.content.res.Configuration -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -33,9 +33,10 @@ internal fun NFTCollectionsEmpty(state: NFTCollectionsUM.Empty, modifier: Modifi .align(Alignment.Center), horizontalAlignment = Alignment.CenterHorizontally, ) { - Image( + Icon( painter = painterResource(R.drawable.ic_nft_placeholder_add_76), contentDescription = null, + tint = TangemTheme.colors.icon.inactive, ) Text( modifier = Modifier.padding(top = TangemTheme.dimens.spacing24), diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsLogo.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsLogo.kt index 2d7851550f..465271494a 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsLogo.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsLogo.kt @@ -1,12 +1,12 @@ package com.tangem.features.nft.details.ui import android.content.res.Configuration -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size +import androidx.compose.material.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -63,10 +63,11 @@ private fun Placeholder(modifier: Modifier = Modifier) { .background(TangemTheme.colors.field.focused), contentAlignment = Alignment.Center, ) { - Image( + Icon( modifier = Modifier.size(TangemTheme.dimens.size120), painter = painterResource(R.drawable.ic_nft_placeholder_120), contentDescription = null, + tint = TangemTheme.colors.icon.primary1, ) } } From 218f6f83b734106506c6fd60df69afe6eabbd870 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 22:29:31 +0500 Subject: [PATCH 06/10] Updated on 2026-08-14 --- .../features/nft/details/ui/NFTDetailsInfoGroup.kt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsInfoGroup.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsInfoGroup.kt index 5eac67fcd6..ed26f43de8 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsInfoGroup.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/details/ui/NFTDetailsInfoGroup.kt @@ -186,30 +186,22 @@ private fun Rarity(state: NFTAssetUM.Rarity, modifier: Modifier = Modifier) { .weight(1f) .padding( horizontal = TangemTheme.dimens.spacing6, - ) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null, - onClick = state.onLabelClick, ), title = resourceReference(R.string.nft_details_rarity_label), value = stringReference(state.label), showInfoButton = true, + onBlockClick = state.onLabelClick, ) NFTDetailsGroupBlock( modifier = Modifier .weight(1f) .padding( horizontal = TangemTheme.dimens.spacing6, - ) - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null, - onClick = state.onRankClick, ), title = resourceReference(R.string.nft_details_rarity_rank), value = stringReference(state.rank), showInfoButton = true, + onBlockClick = state.onRankClick, ) } } From 1d930e2fa58618b01af5f0f18fb4967105b86b45 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 30 Jun 2025 20:16:54 +0300 Subject: [PATCH 07/10] Updated on 2026-08-14 --- .idea/dictionaries/romanpotapov.xml | 9 --- .../repository/DefaultCurrenciesRepository.kt | 70 +++++++++++-------- 2 files changed, 41 insertions(+), 38 deletions(-) delete mode 100644 .idea/dictionaries/romanpotapov.xml diff --git a/.idea/dictionaries/romanpotapov.xml b/.idea/dictionaries/romanpotapov.xml deleted file mode 100644 index 9973a9778a..0000000000 --- a/.idea/dictionaries/romanpotapov.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - blockchain - passcode - tangem - - - \ No newline at end of file diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index ce4c171722..82139c298f 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -28,11 +28,7 @@ import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.tokens.model.FeePaidCurrency import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.walletmanager.WalletManagersFacade -import com.tangem.domain.wallets.models.UserWallet -import com.tangem.domain.wallets.models.UserWalletId -import com.tangem.domain.wallets.models.isLocked -import com.tangem.domain.wallets.models.isMultiCurrency -import com.tangem.domain.wallets.models.requireColdWallet +import com.tangem.domain.wallets.models.* import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.* import kotlinx.coroutines.flow.* @@ -502,36 +498,14 @@ internal class DefaultCurrenciesRepository( currencyRawId: CryptoCurrency.RawID, ): Flow>> { return userWalletsStore.userWallets.flatMapLatest { userWallets -> + userWallets.filter { it.isMultiCurrency } .forEach { fetchTokensIfCacheExpired(userWallet = it, refresh = false) } val userWalletsWithCurrencies = userWallets .filterNot(UserWallet::isLocked) .map { userWallet -> - if (userWallet.isMultiCurrency) { - getSavedUserTokensResponse(userWallet.walletId).map { storedTokens -> - val filterResponse = storedTokens.tokens.filter { - getL2CompatibilityTokenComparison(it, currencyRawId.value) - } - - responseCurrenciesFactory.createCurrencies( - response = storedTokens.copy(tokens = filterResponse), - scanResponse = userWallet.requireColdWallet().scanResponse, - ) - } - } else { - flow { - val currency = getSingleCurrencyWalletPrimaryCurrency(userWalletId = userWallet.walletId) - - val currencies = if (currency.id.rawCurrencyId == currencyRawId) { - listOf(currency) - } else { - emptyList() - } - - emit(currencies) - } - }.map { userWallet to it } + getCurrenciesForWallet(userWallet, currencyRawId).map { userWallet to it } } combine(userWalletsWithCurrencies) { it.toMap() } @@ -539,6 +513,44 @@ internal class DefaultCurrenciesRepository( } } + private suspend fun getCurrenciesForWallet( + userWallet: UserWallet, + currencyRawId: CryptoCurrency.RawID, + ): Flow> { + userWallet.requireColdWallet() // TODO [REDACTED_TASK_KEY] + return when { + userWallet.isMultiCurrency -> { + getSavedUserTokensResponse(userWallet.walletId).map { storedTokens -> + val filterResponse = storedTokens.tokens.filter { + getL2CompatibilityTokenComparison(it, currencyRawId.value) + } + + responseCurrenciesFactory.createCurrencies( + response = storedTokens.copy(tokens = filterResponse), + scanResponse = userWallet.requireColdWallet().scanResponse, + ) + } + } + else -> { + val currencies = if (userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken()) { + getSingleCurrencyWalletWithCardCurrencies(userWallet.walletId) + } else { + val currency = + getSingleCurrencyWalletPrimaryCurrency(userWalletId = userWallet.walletId) + + if (currency.id.rawCurrencyId == currencyRawId) { + listOf(currency) + } else { + emptyList() + } + } + flow { + emit(currencies) + } + } + } + } + override fun isNetworkFeeZero(userWalletId: UserWalletId, network: Network): Boolean { val blockchain = Blockchain.fromNetworkId(network.backendId) return blockchain?.isNetworkFeeZero() ?: false From f9ab1f339b0931c0879278cf94117dd4430df46c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Jul 2025 14:05:02 +0500 Subject: [PATCH 08/10] Updated on 2026-08-14 --- .../main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt b/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt index fd2e23dced..6887f4016e 100644 --- a/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt +++ b/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt @@ -95,7 +95,7 @@ internal class DefaultNFTRepository @Inject constructor( val salePrice = sdkPrice?.let { val convertedPrice = salePriceConverter.convert(sdkPrice) convertedPrice.copy( - value = convertedPrice.value.movePointLeft(nftCurrency.decimals), + value = convertedPrice.value, decimals = nftCurrency.decimals, symbol = nftCurrency.symbol, ) @@ -459,7 +459,7 @@ internal class DefaultNFTRepository @Inject constructor( val nftCurrency = getNFTCurrency(network) NFTSalePrice.Value( assetId = assetId, - value = price.value.movePointLeft(nftCurrency.decimals), + value = price.value, fiatValue = null, symbol = nftCurrency.symbol, decimals = nftCurrency.decimals, From 04654c54fe77c16163e5ba4243398cccb0199110 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Jul 2025 09:18:52 +0000 Subject: [PATCH 09/10] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index b741e3bfec..e18a2ec5cf 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,9 +5,9 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.25.0-1100" +tangemBlockchainSdk = "develop-1097" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.25.0-486" +tangemCardSdk = "develop-484" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From aba2e58b63a31dbd9a6ef1dee36ec62f3abec3f2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 2 Jul 2025 13:41:40 +0300 Subject: [PATCH 10/10] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index e18a2ec5cf..f79fb54f49 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-1097" +tangemBlockchainSdk = "develop-1102" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-484" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^