From 21be815a0326f084c8e720243a8a00c8777b99f4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 27 Nov 2025 12:26:54 +0200 Subject: [PATCH 1/3] Updated on 2026-08-14 --- core/res/src/main/res/values-ja/strings.xml | 5 +++++ core/res/src/main/res/values/strings.xml | 14 ++++++++++++ .../res/drawable/img_black_friday_promo.webp | Bin 0 -> 18400 bytes .../data/promo/DefaultPromoRepository.kt | 15 +++++++++++++ .../tangem/domain/promo/models/PromoBanner.kt | 1 + .../promo/ShouldShowPromoWalletUseCase.kt | 1 + .../model/analytics/PromoAnalyticsEvent.kt | 1 + .../intents/WalletWarningsClickIntents.kt | 20 ++++++++++++++++++ .../utils/WalletWarningsAnalyticsSender.kt | 4 ++++ .../domain/GetMultiWalletWarningsFactory.kt | 19 ++++++++++++++++- .../wallet/state/model/WalletNotification.kt | 17 +++++++++++++++ .../components/common/WalletNotifications.kt | 1 + 12 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 core/ui/src/main/res/drawable/img_black_friday_promo.webp diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index a6478e3318..4df1c486bf 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -1420,9 +1420,14 @@ あなたの住所や資産を開示することなく、個別の支払い用アカウントが作成されます。 他に類を見ないプライバシー 無料のTangem Payカードを数分でゲットしましょう + 支払いアカウント + 支払いアカウントの同期が必要です 技術的な問題を修正しています。後でもう一度お試しください。 サービスは一時的に利用できません + 現在サービスに接続できません。後ほどもう一度お試しください。 + Tangem Payは一時的に利用できません Tangem Pay + カードまたはリングを使用して、支払いアカウントへのアクセスを復元してください。 これは私のウォレットです 残高非表示 残高表示 diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 5971b8288b..74afe57a95 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -139,10 +139,17 @@ Balances are hidden According to the blockchain developers, Kaspa tokens are currently in beta. Stay tuned for updates! Beta Mode + Biometrics are turned off on your device, so you can’t use them to unlock your wallets. Enable biometrics in your device settings to use this method again. + Biometric authentication disabled Please scan the card or ring + You’ve reached the limit of biometric attempts. Please unlock your wallet with a device tap or enter your access code. + Biometric authentication locked Please try again in 30 seconds or scan the card or ring + Biometric login is temporarily locked. Please try again in 30 seconds, or unlock your wallet with a device tap or access code. Too many attempts You have disabled biometric authentication on your phone and will not be able to save wallets in the app. To save wallets, please enable the biometric authentication function in your phone settings. + Biometrics on your device have been updated. Please select your wallet and enter its access code to enable biometric login again. + Attention required An error occurred while processing your promo code. Please try again later. Activation error Your promo code was successfully activated. The reward will be credited to your Bitcoin account within 14 days. @@ -835,6 +842,8 @@ Destination account is not active. Send %s or more to activate the account. To create account send funds to this address The destination account does not have a trustline for the asset being sent. + Plus rewards in BTC per set.\nHurry up! + Black Friday: up to 25% OFF Join Now Share your code - earn 5 USDT per sale. Your friend gets 10% OFF. Get REWARDS for every friend! @@ -1445,9 +1454,14 @@ A separate payment account will be created without disclosing your addresses and assets Unrivaled privacy Get your free Tangem Pay Card in minutes + Payment account + Payment account sync needed We’re fixing a technical issue. Please try again later. Service temporarily unavailable + The service is currently unreachable. Please try again later. + Tangem Pay is temporarily unavailable Tangem Pay + Use your card or ring to restore access to your payment account This is my wallet Balances hidden Balances shown diff --git a/core/ui/src/main/res/drawable/img_black_friday_promo.webp b/core/ui/src/main/res/drawable/img_black_friday_promo.webp new file mode 100644 index 0000000000000000000000000000000000000000..18ad8343592e71f7e1b3a68e21dc0f3af194e11e GIT binary patch literal 18400 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 H00000Z$U7a literal 0 HcmV?d00001 diff --git a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt index a0dada9a61..bfdffde151 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt @@ -54,6 +54,11 @@ internal class DefaultPromoRepository( PromoId.VisaPresale -> { val isActive = getVisaPromoBanner()?.isActive ?: false + isActive && shouldShow + } + PromoId.BlackFriday -> { + val isActive = getBlackFridayPromoBanner()?.isActive ?: false + isActive && shouldShow } } @@ -65,6 +70,7 @@ internal class DefaultPromoRepository( PromoId.Referral -> flowOf(false) PromoId.Sepa -> flowOf(false) PromoId.VisaPresale -> flowOf(false) + PromoId.BlackFriday -> flowOf(false) } } @@ -148,9 +154,18 @@ internal class DefaultPromoRepository( }.getOrNull() } + private suspend fun getBlackFridayPromoBanner(): PromoBanner? { + return runCatching(dispatchers.io) { + promoBannerConverter.convert( + tangemApi.getPromoBanner(BLACK_FRIDAY_NAME).getOrThrow(), + ) + }.getOrNull() + } + private companion object { const val SEPA_NAME = "sepa" const val VISA_NAME = "visa-waitlist" + const val BLACK_FRIDAY_NAME = "black-friday" const val STORIES_LOAD_DELAY = 1000L } } \ No newline at end of file diff --git a/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt index 452445b991..764871ed95 100644 --- a/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt +++ b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt @@ -29,4 +29,5 @@ enum class PromoId { Referral, Sepa, VisaPresale, + BlackFriday, } \ No newline at end of file diff --git a/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt index 396e1d8e90..d5b48a464e 100644 --- a/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt @@ -31,6 +31,7 @@ class ShouldShowPromoWalletUseCase( return when (promoId) { PromoId.Referral, PromoId.VisaPresale, + PromoId.BlackFriday, -> true PromoId.Sepa -> { val walletFirstUsageDate = settingsRepository.getWalletFirstUsageDate() diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt index 1dcd4490f4..4056e2bdae 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt @@ -58,5 +58,6 @@ sealed class PromoAnalyticsEvent( enum class Program(val programName: String) { Empty("Empty"), Sepa("Sepa"), + BlackFriday("Black Friday"), } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt index 945d0dff0c..3db9bd5d2c 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt @@ -335,6 +335,11 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor( action = PromotionBannerClicked.BannerAction.Closed, ) PromoId.VisaPresale -> PromoAnalyticsEvent.VisaWaitlistPromoDismiss + PromoId.BlackFriday -> PromotionBannerClicked( + source = AnalyticsParam.ScreensSources.Main, + program = Program.BlackFriday, + action = PromotionBannerClicked.BannerAction.Closed, + ) }, ) @@ -372,6 +377,16 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor( analyticsEventHandler.send(PromoAnalyticsEvent.VisaWaitlistPromoJoin) urlOpener.openUrl(VISA_PROMO_LINK) } + PromoId.BlackFriday -> { + analyticsEventHandler.send( + PromotionBannerClicked( + source = AnalyticsParam.ScreensSources.Main, + program = Program.BlackFriday, + action = PromotionBannerClicked.BannerAction.Clicked, + ), + ) + urlOpener.openUrl(BLACK_FRIDAY_PROMO_LINK) + } } } @@ -587,5 +602,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor( const val VISA_PROMO_LINK = "https://tangem.com/en/cardwaitlist/?utm_source=tangem-app-banner" + "&utm_medium=banner" + "&utm_campaign=tangempaywaitlist" + const val BLACK_FRIDAY_PROMO_LINK = "https://tangem.com/en/pricing/" + + "?promocode=BF2025" + + "&utm_source=tangem-app-banner" + + "&utm_medium=banner" + + "&utm_campaign=BlackFriday2025" } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt index 1f136f0dc3..9a99c824ef 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt @@ -58,6 +58,10 @@ internal class WalletWarningsAnalyticsSender @Inject constructor( source = AnalyticsParam.ScreensSources.Main, program = Program.Sepa, ) + is WalletNotification.BlackFridayPromo -> PromoAnalyticsEvent.NoticePromotionBanner( + source = AnalyticsParam.ScreensSources.Main, + program = Program.BlackFriday, + ) is WalletNotification.ReferralPromo -> MainScreen.ReferralPromo is WalletNotification.VisaPresalePromo -> PromoAnalyticsEvent.VisaWaitlistPromo is WalletNotification.UnlockWallets -> null // See [SelectedWalletAnalyticsSender] diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt index e21b971fe1..7699a9346e 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt @@ -97,6 +97,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( seedPhraseNotificationUseCase(userWalletId = userWallet.walletId), shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.VisaPresale), shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.Sepa), + shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.BlackFriday), notificationsRepository.getShouldShowNotification(NotificationId.EnablePushesReminderNotification.key), ) { array -> array } .combine(tokenListFlow()) { array, any: Any -> arrayOf(any).plus(elements = array) } @@ -109,7 +110,8 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( val seedPhraseIssueStatus = array[3] as SeedPhraseNotificationsStatus val shouldShowVisaPromo = array[4] as Boolean val shouldShowSepaBanner = array[5] as Boolean - val shouldShowEnablePushesReminderNotification = array[6] as Boolean + val shouldShowBlackFridayPromo = array[6] as Boolean + val shouldShowEnablePushesReminderNotification = array[7] as Boolean buildList { addUsedOutdatedDataNotification(totalFiatBalance) @@ -118,6 +120,8 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( addFinishWalletActivationNotification(userWallet, totalFiatBalance, clickIntents) + addBlackFridayPromoNotification(clickIntents, shouldShowBlackFridayPromo) + addVisaPresalePromoNotification(clickIntents, shouldShowVisaPromo) addSepaPromoNotification(userWallet, clickIntents, shouldShowSepaBanner) @@ -286,6 +290,19 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( ) } + private fun MutableList.addBlackFridayPromoNotification( + clickIntents: WalletClickIntents, + shouldShowPromo: Boolean, + ) { + addIf( + element = WalletNotification.BlackFridayPromo( + onCloseClick = { clickIntents.onClosePromoClick(promoId = PromoId.BlackFriday) }, + onClick = { clickIntents.onPromoClick(promoId = PromoId.BlackFriday) }, + ), + condition = shouldShowPromo, + ) + } + private suspend fun MutableList.addSepaPromoNotification( userWallet: UserWallet, clickIntents: WalletClickIntents, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt index 62e29d2cac..b035f46c10 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt @@ -332,6 +332,23 @@ sealed class WalletNotification(val config: NotificationConfig) { ), ) + data class BlackFridayPromo( + val onCloseClick: () -> Unit, + val onClick: () -> Unit, + ) : WalletNotification( + config = NotificationConfig( + title = resourceReference(R.string.notification_black_friday_title), + subtitle = resourceReference(R.string.notification_black_friday_text), + iconResId = R.drawable.img_black_friday_promo, + onCloseClick = onCloseClick, + buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig( + text = resourceReference(R.string.common_claim), + onClick = onClick, + ), + iconSize = 54.dp, + ), + ) + data class PushNotifications( val onCloseClick: () -> Unit, val onEnabledClick: () -> Unit, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletNotifications.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletNotifications.kt index 172ab84fbe..785eebe9c6 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletNotifications.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletNotifications.kt @@ -52,6 +52,7 @@ internal fun LazyListScope.notifications(configs: ImmutableList TangemTheme.colors.text.attention else -> null }, + subtitleColor = TangemTheme.colors.text.secondary, ) } } From 83c0ca6b6374af647e62e8a109a63db107e1abdb Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 28 Nov 2025 03:34:01 +0200 Subject: [PATCH 2/3] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 2 +- core/res/src/main/res/values-es/strings.xml | 2 ++ core/res/src/main/res/values-fr/strings.xml | 4 +++- core/res/src/main/res/values-ja/strings.xml | 13 +++++++++++-- core/res/src/main/res/values-ru/strings.xml | 2 ++ core/res/src/main/res/values/strings.xml | 4 ++-- .../tokens/model/analytics/PromoAnalyticsEvent.kt | 14 +++++++------- 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 79198ec916..bb6de8a19b 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -54,7 +54,7 @@ Bist Du sicher, dass Du das neue Konto verwerfen willst? Bist Du sicher, dass Du die Bearbeitungen verwerfen willst? Nicht gespeicherte Änderungen - Einige benutzerdefinierte Token wurden von „%1$s\" Zu \"%2$sda ihre Herleitung zu diesem Konto gehört. + Einige benutzerdefinierte Token wurden von “%1$s” Zu “%2$s” da ihre Herleitung zu diesem Konto gehört. Einige benutzerdefinierte Token wurden verschoben. Du kannst Deinen Token nicht finden? Gehe zum Bereich „Markt“ auf der Hauptseite und fügen diesen zum kaufen im Portfolio hinzu. Du kannst Deinen Token nicht finden? Gehe zum Bereich „Markt“ auf der Hauptseite und fügen diesen zum verkaufen im Portfolio hinzu. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index a944d94513..039fe17b62 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -652,6 +652,8 @@ La cuenta de destino no está activa. Envíe %s o más para activar la cuenta. Para crear una cuenta, envíe fondos a esta dirección La cuenta de destino no tiene una Trustline (línea de confianza) para el activo que se envía. + Obtén $10 en BTC con cada billetera \n ¡Date prisa! + Black Friday: hasta 30% DESCUENTO Únase ahora Comparta su código y gane 5 USDT por venta. Su amigo obtiene un 10% de descuento. ¡Obtenga RECOMPENSAS por cada amigo! diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 6b9fd987ef..34d5e51c71 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -625,6 +625,8 @@ Le compte de destination est inactif. Envoyez %s ou plus pour activer le compte. Pour créer un compte, envoyez des fonds à cette adresse Le compte destinataire n\'a pas de Trustline pour l\'actif envoyé qu\'il tente d\'envoyer. + Obtenez 10 $ en BTC avec chaque wallet\nDépêchez-vous ! + Black Friday : jusqu\'à 30% de réduction Rejoignez maintenant Partagez votre code et gagnez 5 USDT par vente. Votre ami bénéficie de 10 % de réduction. Recevez des RÉCOMPENSES pour chaque ami ! @@ -1386,7 +1388,7 @@ Code d\'erreur : %s. Si le problème persiste, n\'hésitez pas à contacter notre service d\'assistance. Si le problème persiste, n’hésitez pas à contacter notre support. Nous avons rencontré une erreur inconnue. - Le portefeuille Tangem ne prend actuellement pas en charge %ss + Le portefeuille Tangem ne prend actuellement pas en charge %s dApp non prise en charge Code d\'erreur : 8 005. Si le problème persiste, n\'hésitez pas à contacter notre support. Nous avons rencontré une erreur inconnue diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 4df1c486bf..84d5b13938 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -138,10 +138,17 @@ 残高は非表示 ブロックチェーン開発者によると、Kaspaトークンは現在ベータ版です。アップデートをお楽しみに! ベータモード + デバイスで生体認証がオフになっているため、ウォレットのロック解除に使用できません。\n生体認証を再度利用するには、デバイスの設定で有効にしてください。 + 生体認証が無効になっています カードまたはリングをスキャンしてください + 生体認証の試行回数が上限に達しました。端末タップまたはアクセスコードでウォレットを解除してください。 + 生体認証がロックされています 30秒後に再試行するか、カードまたはリングをスキャンしてください + 生体認証ログインは一時的にロックされています。30秒後にもう一度お試しいただくか、端末タップまたはアクセスコードでウォレットを解除してください。 試行回数が多すぎます お使いの携帯電話で生体認証が無効になっているため、アプリにウォレットを保存できません。ウォレットを保存するには、携帯電話の設定で生体認証機能を有効にしてください。 + デバイスの生体認証が更新されました。再び生体認証ログインを有効にするため、ウォレットを選び、アクセスコードを入力してください。 + 対応が必要です プロモーションコードの処理中にエラーが発生しました。しばらくしてからもう一度お試しください。 アクティベーションエラー プロモーションコードが正常に有効化されました。報酬は14日以内にビットコインアカウントに入金されます。 @@ -818,6 +825,8 @@ 送信先アカウントが有効ではありません。%s 以上を送信してアカウントを有効にしてください。 アカウントを作成するには、このアドレスに資金を送金してください 送信先アカウントには、送金されるアセットのトラストラインがありません。 + ウォレットごとに$10相当のBTCをプレゼント\nお早めに! + ブラックフライデー:最大30% オフ 今すぐ参加 コードを共有すると、販売ごとに5 USDTを獲得できます。お友達は10%割引になります。 友達への紹介で報酬を獲得しよう! @@ -1177,7 +1186,7 @@ ステーキング金額は %s 以上である必要があります ネットワークルールにより、ステーキング金額は%1$s TRX に切り上げられます。 ネットワークルールにより、ステーキング解除の量は%1$s TRX に切り上げられます。 - APR %1$s% + APR %1$s%% ステーキング解除分を請求する ステーキングアカウント手数料 ステーキングアカウントとは、ステーキングされたSOLが保管される特別なアカウントです。トークンをバリデーターに委任し、取引の検証に参加して報酬を受け取る際に作成されます。ステーキングアカウントの作成には少額の手数料がかかりますが、ステーキング完了後に返金されます。 @@ -1869,7 +1878,7 @@ 今後の追加入金ごとにおおよそのネットワーク手数料%1$s ( %2$s ) が差し引かれ、 %3$s ( %4$s ) の制限を超えることはありません。 ネットワーク手数料が上限を超えた場合、手数料が下がるまで取引は成立しません。この制限は後で変更できます。 最大手数料 - 最小金額は現在のネットワーク手数料に基づいて計算され、入金額の4% 、つまり最小の%1$s ( %2$s ) を超えないようにします。 + 最小金額は現在のネットワーク手数料に基づいて計算され、入金額の4%% 、つまり最小の%1$s ( %2$s ) を超えないようにします。 最低入金額 入金手数料ポリシー Tangemは、生成された利息に対して15%サービス手数料も徴収します。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 3d1a09fd10..6288a0dc4c 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -831,6 +831,8 @@ Аккаунт получателя не активирован. Отправьте %s или более для активации аккаунта. Для создания аккаунта отправьте средства на этот адрес Аккаунт получателя не содержит трастлайна для отправляемого актива. + Получите $10 в BTC за каждый кошелёк\nПоторопитесь! + Чёрная пятница: скидки до 30% Присоединиться Поделись промокодом — заработай 5 USDT с каждой покупки. Твои друзья получат скидку 10% на карту Tangem! Получай бонусы за каждого друга! diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 74afe57a95..3d616fb516 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -842,8 +842,8 @@ Destination account is not active. Send %s or more to activate the account. To create account send funds to this address The destination account does not have a trustline for the asset being sent. - Plus rewards in BTC per set.\nHurry up! - Black Friday: up to 25% OFF + Get $10 in BTC with every wallet\nHurry! + Black Friday: up to 30% OFF Join Now Share your code - earn 5 USDT per sale. Your friend gets 10% OFF. Get REWARDS for every friend! diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt index 4056e2bdae..e0c863bf61 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt @@ -7,9 +7,9 @@ sealed class PromoAnalyticsEvent( event: String, params: Map = mapOf(), ) : AnalyticsEvent(category = "Promotion", event = event, params = params) { - class NoticePromotionBanner( - source: AnalyticsParam.ScreensSources, - program: Program, + data class NoticePromotionBanner( + private val source: AnalyticsParam.ScreensSources, + private val program: Program, ) : PromoAnalyticsEvent( event = "Notice - Promotion Banner", params = mapOf( @@ -18,10 +18,10 @@ sealed class PromoAnalyticsEvent( ), ) - class PromotionBannerClicked( - source: AnalyticsParam.ScreensSources, - program: Program, - action: BannerAction, + data class PromotionBannerClicked( + private val source: AnalyticsParam.ScreensSources, + private val program: Program, + private val action: BannerAction, ) : PromoAnalyticsEvent( event = "Promo Banner Clicked", params = mapOf( From 740b0a8613f2f5aa813d831670d89b6ce6411a44 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 28 Nov 2025 01:34:21 +0000 Subject: [PATCH 3/3] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 98c8350883..ba49247a88 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,13 +5,13 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.30-1307" +tangemBlockchainSdk = "develop-1309" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.30-567" +tangemCardSdk = "develop-568" #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 ^ -tangemHotSdk = "develop-528" +tangemHotSdk = "develop-531" #tangemHotSdk = "0.0.1" # Keep it! - used for local builds ^