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(