From 3e9f54f2dbd4ce46abd9800a8c86bc640511a08d Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 18 May 2026 12:41:33 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 2 ++ core/res/src/main/res/values-de/strings.xml | 7 +++++-- core/res/src/main/res/values-ja/strings.xml | 21 +++++++++++++++++++ .../src/main/res/values-pt-rBR/strings.xml | 4 ++-- core/res/src/main/res/values-ru/strings.xml | 2 ++ .../src/main/res/values-uk-rUA/strings.xml | 2 ++ core/res/src/main/res/values/strings.xml | 5 +++++ .../push-notifications/impl/build.gradle.kts | 1 + ...ltPushNotificationsBottomSheetComponent.kt | 1 + .../impl/DefaultPushNotificationsComponent.kt | 1 + .../impl/model/PushNotificationsModel.kt | 5 +++++ .../ui/PushNotificationsBottomSheet.kt | 17 +++++++++++++-- .../ui/PushNotificationsScreen.kt | 16 ++++++++++++-- 13 files changed, 76 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 78e6b5ccde..7abfebef75 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -263,6 +263,8 @@ dependencies { implementation(projects.features.disclaimer.impl) implementation(projects.features.pushNotifications.api) implementation(projects.features.pushNotifications.impl) + implementation(projects.features.pushNotificationSettings.api) + implementation(projects.features.pushNotificationSettings.impl) implementation(projects.features.walletSettings.api) implementation(projects.features.walletSettings.impl) implementation(projects.features.markets.api) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index e27a94b926..f8b409fae1 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -180,8 +180,8 @@ %d Geräte - Token - Tokens + %d Token + %d Tokens Bitte setze das nächste Gerät zurück, um fortzufahren. Wallet zurückgesetzt @@ -1464,6 +1464,7 @@ Der Zeitraum, den du nach der Beantragung der Abhebung von Geldern aus dem Staking warten musst, bevor die Token verfügbar werden. Aufwärmphase Die zugewiesene Zeit für die Aktivierung der Teilnahme am Staking. + Staking aktiviert Zurzeit sind keine Validierer verfügbar. Bitte versuche es später noch einmal. Staking nicht verfügbar Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Du die Verwendung Deines Tokens für das Staking genehmigst. @@ -1707,6 +1708,7 @@ Karte neu ausstellen Es sind nur Buchstaben und Zahlen erlaubt Ungültige Zeichen + Kartenname Aufdecken Details anzeigen Tausche beliebige Vermögenswerte in Deinem Portfolio für deine Karte. @@ -1793,6 +1795,7 @@ Daten können derzeit nicht angezeigt werden, Kartenzahlungen funktionieren jedoch weiterhin. Satz \nPIN-Code Karte deaktiviert + Ersetzen deine Karte Sitzung abgelaufen Zugang wiederherstellen Nutzen Sie USDC für alltägliche Zahlungen diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 895db3c711..788f5e8064 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -422,6 +422,7 @@ 取引 送金 送金済み + しばらくしてからもう一度お試しください データを読み込めません… わかりました 理解して続行 @@ -1439,6 +1440,7 @@ ステーキングから資金の引き出しを要求した後、トークンが利用可能になるまでの待機期間。 ウォームアップ期間 ステーキングへの参加を有効にするために割り当てられた時間。 + ステーキングが有効です 現在、利用可能なバリデーターは見つかりません。しばらくしてからもう一度お試しください。 ステーキングは利用できません ネットワークは、ステーキングのためにトークンの使用を承認していることを確認するために、トークン承認手数料を請求します。 @@ -1549,6 +1551,7 @@ 続行するには少なくとも%1$sの受信取引が必要です 残高不足 承認すると、このスマートコントラクトが今後の取引でトークンを利用できるようになります。 + 詳細モード 固定レート ネットワークは、あなたがトークンのスワップを承認していることを確認するために、トークン承認手数料を請求します。 スワップ中 @@ -1557,6 +1560,7 @@ 他のものをお探しですか?\n検索してみるか、別の暗号資産をチェックしてみましょう! どのトークンでも検索できます。まだ一覧に表示されていないものでも検索可能です。 必要なものは検索して見つけましょう。 + シンプルモード 24時間体制のサポートであらゆる問題に対応します。 いつもここに 複数の信頼できるプロバイダーが一箇所に集結。ウォレット内で様々な暗号資産を簡単に交換できます。 @@ -1680,6 +1684,7 @@ カードを交換する 英字と数字のみ使用できます 無効な文字が含まれています + カード名 表示 詳細を表示 ポートフォリオ内のあらゆる資産をカードと交換 @@ -1703,6 +1708,9 @@ 1日の上限を設定しました 1日の利用限度額 カード設定 + + %d枚のカード + PINコードを変更 忘れた場合はアプリに戻って確認できます。 %s 〜 %sの範囲で上限を設定 @@ -1717,8 +1725,15 @@ 無料のTangem Visaバーチャルカードを入手 Tangem Payを入手 サポートへ移動 + 新しいカード情報が生成されます。 + 発行手数料 + 発行手数料を支払うため、決済口座にUSDCを入金してください + 手数料を支払えません + 追加カードを発行しますか? + カードを発行 通常は最大で15分ほどかかります Tangemカードのセットアップ + 新しいデジタルカードを発行中 カードを発行しています カードは通常、5分以内に自動で発行されます。手動での審査が必要な稀な場合は、最大48時間かかることがあります。 Tangem Pay @@ -1735,6 +1750,8 @@ KYCブロックを非表示 申し訳ございませんが、 本人確認ができませんでした。 + 最大3枚までカードを保有できます。新しいカードを追加するには、いずれかのカードを削除してください。 + カード発行枚数の上限に達しました 無料のTangem Visaバーチャルカードを入手 日常の支払いにUSDCを利用 カードをGET @@ -1766,6 +1783,7 @@ 現在、データを表示できませんが、カードでのお支払いは引き続きご利用いただけます。 \nPINコードの設定 カード無効化済み + カードを交換中 セッションの有効期限が切れました セッションを更新 日常の支払いにUSDCを利用 @@ -2113,6 +2131,9 @@ カードまたはリングを使って、%dネットワークのアドレスを取得します + + アドレスを同期して、%dネットワークのアドレスを取得します + 一部のアドレスが見つかりません 現在、ネットワークにアクセスできません。しばらくしてからもう一度お試しください。 ネットワークにアクセスできません diff --git a/core/res/src/main/res/values-pt-rBR/strings.xml b/core/res/src/main/res/values-pt-rBR/strings.xml index 66bede2b43..9d7f86e8d9 100644 --- a/core/res/src/main/res/values-pt-rBR/strings.xml +++ b/core/res/src/main/res/values-pt-rBR/strings.xml @@ -180,8 +180,8 @@ %d dispositivos - token - tokens + %d token + %d tokens Reinicie o próximo dispositivo para continuar. Reiniciar Carteira diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 39a182aab0..1be1c77fac 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -689,6 +689,8 @@ Хранит вашу криптовалюту в безопасности и офлайн. Тонкая, как банковская карта — надёжнее банковского хранилища. Если вы это сделаете, придётся начать заново. Восстановить существующий кошелёк через резервную копию Google Drive + Мы работаем над резервным копированием в Google Drive, чтобы сделать восстановление кошелька еще проще. + Резервное копирование в Google Drive скоро появится Google Drive бэкап Создайте новый защищённый кошелёк и переведите свои средства для максимальной защиты. Создать новый кошелек diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index ed08a77c16..bdee745543 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -646,6 +646,8 @@ Зберігає ваші криптовалюти в безпеці та в режимі офлайн. Тонкий, як кредитна картка, безпечніший за банківське сховище. Якщо ви це зробите, доведеться почати спочатку. Відновлення існуючого гаманця за допомогою резервної копії Google Диску + Ми працюємо над резервним копіюванням у Google Drive, щоб зробити відновлення гаманця ще простішим. + Резервне копіювання в Google Drive незабаром з\'явиться Google Диск бекап Створіть новий захищений гаманець і переведіть свої кошти для додаткового захисту. Створити новий гаманець diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index af2b7a4290..e240ebd44f 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -433,6 +433,7 @@ Transactions Transfer Transferred + Please try again later. Unable to load data… I understand I understand, continue @@ -1756,6 +1757,7 @@ Deposit USDC to payment account to cover the issuing fee Unable to cover fee Issue an additional card? + Issue card It usually takes up to 15 minutes Setting up your Tangem Card Issuing a new digital card @@ -1808,6 +1810,7 @@ Unable to display details. However, card payments are still working. Set \nPIN code Card deactivated + Replacing your card Session expired Renew session Use USDC for everyday payments @@ -1915,7 +1918,9 @@ Get notified of incoming transactions Be the first to know about new promotions Early access to fresh features and exclusive offers. + Price change alerts, product news, and exclusive offers Feature and News Updates + Offers & Updates Would you like to use\nPush-notifications? Enable push notifications to receive alerts when funds arrive in your wallet. Don\'t Miss a Transaction diff --git a/features/push-notifications/impl/build.gradle.kts b/features/push-notifications/impl/build.gradle.kts index 1765878318..9fd7bd7369 100644 --- a/features/push-notifications/impl/build.gradle.kts +++ b/features/push-notifications/impl/build.gradle.kts @@ -44,6 +44,7 @@ dependencies { /** Feature modules */ implementation(projects.features.pushNotifications.api) + implementation(projects.features.pushNotificationSettings.api) /** DI */ implementation(deps.hilt.android) diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsBottomSheetComponent.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsBottomSheetComponent.kt index 2862913418..a7c89f1af4 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsBottomSheetComponent.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsBottomSheetComponent.kt @@ -48,6 +48,7 @@ internal class DefaultPushNotificationsBottomSheetComponent @AssistedInject cons config = bottomSheetConfig, ) { PushNotificationsContent( + isPushNotificationSettingsEnabled = model.isPushNotificationSettingsEnabled, onAllowClick = model::onAllowClick, onLaterClick = model::onLaterClick, onAllowPermission = model::onAllowPermission, diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsComponent.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsComponent.kt index 3eb2a6fdc9..4c25edc1aa 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsComponent.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/DefaultPushNotificationsComponent.kt @@ -31,6 +31,7 @@ internal class DefaultPushNotificationsComponent @AssistedInject constructor( NavigationBar3ButtonsScrim() PushNotificationsScreen( + isPushNotificationSettingsEnabled = model.isPushNotificationSettingsEnabled, onAllowClick = model::onAllowClick, onLaterClick = model::onLaterClick, onAllowPermission = model::onAllowPermission, diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt index 8e955454ce..99af1aa487 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/model/PushNotificationsModel.kt @@ -14,6 +14,7 @@ import com.tangem.domain.settings.NeverToInitiallyAskPermissionUseCase import com.tangem.features.pushnotifications.api.PushNotificationsParams import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION +import com.tangem.features.pushnotificationsettings.PushNotificationSettingsFeatureToggles import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.launch import javax.inject.Inject @@ -29,9 +30,13 @@ internal class PushNotificationsModel @Inject constructor( private val appRouter: AppRouter, private val analyticHandler: AnalyticsEventHandler, private val notificationsRepository: NotificationsRepository, + private val pushNotificationSettingsFeatureToggles: PushNotificationSettingsFeatureToggles, ) : Model(), PushNotificationsClickIntents { val params: PushNotificationsParams = paramsContainer.require() + + val isPushNotificationSettingsEnabled: Boolean + get() = pushNotificationSettingsFeatureToggles.isPushNotificationSettingsEnabled val source = when (params.source) { AppRoute.PushNotification.Source.Stories -> AnalyticsParam.ScreensSources.Stories AppRoute.PushNotification.Source.Main -> AnalyticsParam.ScreensSources.Main diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsBottomSheet.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsBottomSheet.kt index ce560cf41e..0f04425e5b 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsBottomSheet.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsBottomSheet.kt @@ -40,6 +40,7 @@ internal fun PushNotificationsBottomSheet(config: TangemBottomSheetConfig, conte @Composable internal fun PushNotificationsContent( + isPushNotificationSettingsEnabled: Boolean, onAllowClick: () -> Unit, onLaterClick: () -> Unit, onAllowPermission: () -> Unit, @@ -51,6 +52,17 @@ internal fun PushNotificationsContent( permission = PUSH_PERMISSION, ) + val argumentTwoTitleRes = if (isPushNotificationSettingsEnabled) { + R.string.user_push_notification_agreement_argument_two_title_v2 + } else { + R.string.user_push_notification_agreement_argument_two_title + } + val argumentTwoSubtitleRes = if (isPushNotificationSettingsEnabled) { + R.string.user_push_notification_agreement_argument_two_subtitle_v2 + } else { + R.string.user_push_notification_agreement_argument_two_subtitle + } + Column(modifier = Modifier.background(TangemTheme.colors.background.primary)) { ShowcaseContent( headerIconRes = R.drawable.ic_notification_56, @@ -63,8 +75,8 @@ internal fun PushNotificationsContent( ), ShowcaseItemModel( iconRes = R.drawable.ic_stars_24, - title = resourceReference(R.string.user_push_notification_agreement_argument_two_title), - subTitle = resourceReference(R.string.user_push_notification_agreement_argument_two_subtitle), + title = resourceReference(argumentTwoTitleRes), + subTitle = resourceReference(argumentTwoSubtitleRes), ), ), modifier = Modifier.padding(top = TangemTheme.dimens.spacing40), @@ -95,6 +107,7 @@ private fun Preview_PushNotificationsBottomSheet() { ), ) { PushNotificationsContent( + isPushNotificationSettingsEnabled = false, onAllowClick = {}, onLaterClick = {}, onAllowPermission = {}, diff --git a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt index 9cda2da392..9a53b58aea 100644 --- a/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt +++ b/features/push-notifications/impl/src/main/java/com/tangem/features/pushnotifications/impl/presentation/ui/PushNotificationsScreen.kt @@ -14,6 +14,7 @@ import kotlinx.collections.immutable.persistentListOf @Composable internal fun PushNotificationsScreen( + isPushNotificationSettingsEnabled: Boolean, onAllowClick: () -> Unit, onLaterClick: () -> Unit, onAllowPermission: () -> Unit, @@ -25,6 +26,17 @@ internal fun PushNotificationsScreen( permission = PUSH_PERMISSION, ) + val argumentTwoTitleRes = if (isPushNotificationSettingsEnabled) { + R.string.user_push_notification_agreement_argument_two_title_v2 + } else { + R.string.user_push_notification_agreement_argument_two_title + } + val argumentTwoSubtitleRes = if (isPushNotificationSettingsEnabled) { + R.string.user_push_notification_agreement_argument_two_subtitle_v2 + } else { + R.string.user_push_notification_agreement_argument_two_subtitle + } + Showcase( headerIconRes = R.drawable.ic_notification_56, headerText = resourceReference(R.string.user_push_notification_agreement_header), @@ -36,8 +48,8 @@ internal fun PushNotificationsScreen( ), ShowcaseItemModel( iconRes = R.drawable.ic_stars_24, - title = resourceReference(R.string.user_push_notification_agreement_argument_two_title), - subTitle = resourceReference(R.string.user_push_notification_agreement_argument_two_subtitle), + title = resourceReference(argumentTwoTitleRes), + subTitle = resourceReference(argumentTwoSubtitleRes), ), ), primaryButton = ShowcaseButtonModel(