diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config
index 4272136431..16c0de5855 160000
--- a/app/src/main/assets/tangem-app-config
+++ b/app/src/main/assets/tangem-app-config
@@ -1 +1 @@
-Subproject commit 4272136431c3629230803e70c4d2cf412365418d
+Subproject commit 16c0de5855d0a75e285a9c84e616dd020f7da4d1
diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml
index 6960013a5c..cec83f8e76 100644
--- a/core/res/src/main/res/values-de/strings.xml
+++ b/core/res/src/main/res/values-de/strings.xml
@@ -760,6 +760,8 @@
Krypto kaufen
Profitiere von **0 % Gebühren** beim Kauf von Kryptowährungen per SEPA-Überweisung.
Krypto mit SEPA kaufen
+ Trage dich in die Warteliste ein und erhalte eine Zahlungskarte, die es so noch nie gab.
+ Tangem Visa Card
Du musst einen einzigen Zugangscode einrichten, um alle deine Geräte zu schützen
Schützen
Du kannst später auf jeder Karte oder Ring einen individuellen Zugangscode einrichten
diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml
index 1a93e0147b..a9f9168d50 100644
--- a/core/res/src/main/res/values-es/strings.xml
+++ b/core/res/src/main/res/values-es/strings.xml
@@ -653,6 +653,8 @@
Comprar cripto
Disfrute de unas comisiones del **0%** al comprar criptomonedas mediante transferencias SEPA.
Comprar criptomonedas con SEPA
+ Únete a la lista de espera y consigue una tarjeta de pago como ninguna otra.
+ Tangem Visa Card
Configure un código de acceso único para proteger todos sus dispositivos.
Proteger
Puede configurar un código de acceso individual en cada tarjeta más adelante
diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml
index 8c6ab60718..ef9f1f5500 100644
--- a/core/res/src/main/res/values-fr/strings.xml
+++ b/core/res/src/main/res/values-fr/strings.xml
@@ -626,6 +626,8 @@
Acheter crypto
Profitez de **0% de frais** lors de l\'achat de cryptomonnaies via des virements SEPA.
Acheter des cryptomonnaies avec SEPA
+ Rejoignez la liste d’attente et obtenez une carte de paiement pas comme les autres.
+ Tangem Visa Card
Vous devez définir un seul code d\'accès pour protéger tous vos appareils.
Protéger
Vous pourrez définir un code d\'accès individuel sur chaque carte plus tard
@@ -1523,9 +1525,11 @@
Les frais de réseau seront déduits du montant que vous retirez.
Rendement annuel brut (APY)
APY
+ Les intérêts sont cumulés automatiquement.
Les intérêts sont cumulés automatiquement.
Mode de rendement
Traitement de votre dépôt
+ Mode Rendement
Automatique
Déposez %1$s %2$s pour couvrir les frais de réseau liés aux transactions.
Impossible de couvrir les frais %s
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index 481e539277..393f0891ea 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -701,6 +701,8 @@
Купить криптовалюту
Наслаждайтесь **нулевой комиссией** при покупке криптовалюты через SEPA-переводы.
Покупайте крипту через SEPA
+ Присоединяйтесь к списку ожидания и получите уникальную платёжную карту, не похожую ни на одну другую.
+ Tangem Visa Card
Установите единый код доступа для защиты всех ваших карт или колец
Защита
Установите индивидуальный код доступа для каждой карты или кольца позже.
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 6812790144..936f193cce 100644
--- a/core/res/src/main/res/values-uk-rUA/strings.xml
+++ b/core/res/src/main/res/values-uk-rUA/strings.xml
@@ -629,6 +629,8 @@
Купити криптовалюту
Насолоджуйтесь **нульовою комісією** при купівлі криптовалюти через перекази SEPA.
Купуйте криптовалюту через SEPA
+ Приєднуйтесь до списку очікування та отримайте унікальну платіжну картку, якої ще не було.
+ Tangem Visa Card
Налаштуйте єдиний код доступу для захисту всіх ваших карток або кілець
Захист
Встановіть індивідуальний код доступу для кожної картки або кільця пізніше.
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 51c96443a0..8b5e486e5f 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -30,6 +30,7 @@
Archive account
Archive
You are archiving this account, but you can always get it back.
+ Archiving...
Account
Account saved
Account for rewards
@@ -431,6 +432,7 @@
WalletConnect error
You have used a card or ring from another wallet. Tap the card or ring associated with this wallet
Not enough funds for the transaction. Please top up your account.
+ Swap any asset in your portfolio for this token
My tokens
You haven\'t added any tokens yet. Add tokens via Market to swap
Cannot be swapped for %s
@@ -795,6 +797,8 @@
Buy crypto
Enjoy **0% fees** when purchasing crypto via SEPA transfers.
Buy Crypto with SEPA
+ Join the waitlist and get a payment card unlike any other
+ Tangem Visa Card
Set up a single access code to protect all your devices.
Protect
Set an individual access code for each card or ring later.
@@ -1338,6 +1342,15 @@
Failed to load data. Try again later.
Freeze Card
Hide
+ Open Google Wallet
+ Set up Tangem Pay in a few taps and start paying with Google Pay.
+ Add your card to Google Pay
+ Open Google Wallet
+ Tap “Add a card”
+ Enter the card details manually
+ Verify card using the OTP sent to your device.
+ All set! Your card is ready to use.
+ Add card to Google Pay
Technical issues detected. Please try again later or contact support.
Receive unavailable now
Reveal
@@ -1859,7 +1872,7 @@
Send, swap, or sell your funds instantly, anytime you want.
Access your funds anytime
How it works?
- Aave is a decentralized protocol managing over $61 billion in total value.
+ Aave is a decentralized protocol managing over $61 billion in total value.
Decentralized and self-custodial
By using this service, you agree with provider\n%1$s and %2$s
Connect Aave
diff --git a/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp b/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp
new file mode 100644
index 0000000000..6da4590058
Binary files /dev/null and b/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp differ
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 09b1d25af8..a0dada9a61 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
@@ -18,13 +18,13 @@ import com.tangem.domain.promo.models.PromoId
import com.tangem.domain.promo.models.StoryContent
import com.tangem.feature.referral.domain.ReferralRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
+import com.tangem.utils.coroutines.runCatching
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeoutOrNull
-import com.tangem.utils.coroutines.runCatching
internal class DefaultPromoRepository(
private val tangemApi: TangemTechApi,
@@ -49,6 +49,11 @@ internal class DefaultPromoRepository(
PromoId.Sepa -> {
val isActive = getSepaPromoBanner()?.isActive ?: false
+ isActive && shouldShow
+ }
+ PromoId.VisaPresale -> {
+ val isActive = getVisaPromoBanner()?.isActive ?: false
+
isActive && shouldShow
}
}
@@ -59,6 +64,7 @@ internal class DefaultPromoRepository(
return when (promoId) {
PromoId.Referral -> flowOf(false)
PromoId.Sepa -> flowOf(false)
+ PromoId.VisaPresale -> flowOf(false)
}
}
@@ -134,8 +140,17 @@ internal class DefaultPromoRepository(
}.getOrNull()
}
+ private suspend fun getVisaPromoBanner(): PromoBanner? {
+ return runCatching(dispatchers.io) {
+ promoBannerConverter.convert(
+ tangemApi.getPromoBanner(VISA_NAME).getOrThrow(),
+ )
+ }.getOrNull()
+ }
+
private companion object {
const val SEPA_NAME = "sepa"
+ const val VISA_NAME = "visa-waitlist"
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 7605016350..452445b991 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
@@ -28,4 +28,5 @@ data class PromoBanner(
enum class PromoId {
Referral,
Sepa,
+ VisaPresale,
}
\ 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 0fd7070d88..396e1d8e90 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
@@ -29,7 +29,9 @@ class ShouldShowPromoWalletUseCase(
if (!isReady) return false
return when (promoId) {
- PromoId.Referral -> true
+ PromoId.Referral,
+ PromoId.VisaPresale,
+ -> true
PromoId.Sepa -> {
val walletFirstUsageDate = settingsRepository.getWalletFirstUsageDate()
if (walletFirstUsageDate == 0L) return false
@@ -39,6 +41,7 @@ class ShouldShowPromoWalletUseCase(
}
}
}
+
suspend fun neverToShow(promoId: PromoId) = promoRepository.setNeverToShowWalletPromo(promoId)
private companion object {
diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt
similarity index 68%
rename from domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt
rename to domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt
index f460d229ff..1dcd4490f4 100644
--- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt
+++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt
@@ -3,14 +3,14 @@ package com.tangem.domain.tokens.model.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
-sealed class TokenSwapPromoAnalyticsEvent(
+sealed class PromoAnalyticsEvent(
event: String,
params: Map = mapOf(),
) : AnalyticsEvent(category = "Promotion", event = event, params = params) {
class NoticePromotionBanner(
source: AnalyticsParam.ScreensSources,
program: Program,
- ) : TokenSwapPromoAnalyticsEvent(
+ ) : PromoAnalyticsEvent(
event = "Notice - Promotion Banner",
params = mapOf(
AnalyticsParam.SOURCE to source.value,
@@ -22,7 +22,7 @@ sealed class TokenSwapPromoAnalyticsEvent(
source: AnalyticsParam.ScreensSources,
program: Program,
action: BannerAction,
- ) : TokenSwapPromoAnalyticsEvent(
+ ) : PromoAnalyticsEvent(
event = "Promo Banner Clicked",
params = mapOf(
AnalyticsParam.SOURCE to source.value,
@@ -36,6 +36,24 @@ sealed class TokenSwapPromoAnalyticsEvent(
}
}
+ // region visa waitlist promo
+ data object VisaWaitlistPromo : PromoAnalyticsEvent(event = "Visa Waitlist")
+
+ data object VisaWaitlistPromoJoin : PromoAnalyticsEvent(
+ event = "Button - Join Now",
+ params = mapOf(
+ "Program Name" to "Visa Waitlist",
+ ),
+ )
+
+ data object VisaWaitlistPromoDismiss : PromoAnalyticsEvent(
+ event = "Button - Close",
+ params = mapOf(
+ "Program Name" to "Visa Waitlist",
+ ),
+ )
+ //endregion
+
// Use it on new promo action
enum class Program(val programName: String) {
Empty("Empty"),
diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt
index ad3fcd0c4e..3bef7418c8 100644
--- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt
+++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt
@@ -4,7 +4,7 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.domain.models.currency.CryptoCurrency
-import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsState
import com.tangem.feature.tokendetails.presentation.tokendetails.state.components.TokenDetailsNotification
import com.tangem.features.yield.supply.api.analytics.YieldSupplyAnalytics
@@ -38,8 +38,8 @@ internal class TokenDetailsNotificationsAnalyticsSender(
-> TokenDetailsAnalyticsEvent.Notice.NotEnoughFee(
currency = cryptoCurrency,
)
- is TokenDetailsNotification.SwapPromo -> TokenSwapPromoAnalyticsEvent.NoticePromotionBanner(
- program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
+ is TokenDetailsNotification.SwapPromo -> PromoAnalyticsEvent.NoticePromotionBanner(
+ program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
source = AnalyticsParam.ScreensSources.Token,
)
is TokenDetailsNotification.KaspaIncompleteTransactionWarning -> TokenDetailsAnalyticsEvent.Notice.Reveal(
diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
index 46d7427763..f89bc25347 100644
--- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
+++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
@@ -847,10 +847,10 @@ internal class TokenDetailsModel @Inject constructor(
modelScope.launch(dispatchers.main) {
shouldShowPromoTokenUseCase.neverToShow(promoId)
analyticsEventsHandler.send(
- TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
+ PromoAnalyticsEvent.PromotionBannerClicked(
source = AnalyticsParam.ScreensSources.Token,
- program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
- action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
+ program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
+ action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
),
)
}
@@ -860,10 +860,10 @@ internal class TokenDetailsModel @Inject constructor(
modelScope.launch(dispatchers.main) {
shouldShowPromoTokenUseCase.neverToShow(promoId)
analyticsEventsHandler.send(
- TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
+ PromoAnalyticsEvent.PromotionBannerClicked(
source = AnalyticsParam.ScreensSources.Token,
- program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
- action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
+ program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
+ action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
),
)
}
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 739be22276..945d0dff0c 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
@@ -33,7 +33,9 @@ import com.tangem.domain.settings.NeverToSuggestRateAppUseCase
import com.tangem.domain.settings.RemindToRateAppLaterUseCase
import com.tangem.domain.staking.StakingIdFactory
import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher
-import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.Program
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.PromotionBannerClicked
import com.tangem.domain.wallets.legacy.UserWalletsListManager.Lockable.UnlockType
import com.tangem.domain.wallets.models.UnlockWalletsError
import com.tangem.domain.wallets.usecase.*
@@ -327,11 +329,12 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
analyticsEventHandler.send(
when (promoId) {
PromoId.Referral -> MainScreen.ReferralPromoButtonDismiss
- PromoId.Sepa -> TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
+ PromoId.Sepa -> PromotionBannerClicked(
source = AnalyticsParam.ScreensSources.Main,
- program = TokenSwapPromoAnalyticsEvent.Program.Sepa,
- action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
+ program = Program.Sepa,
+ action = PromotionBannerClicked.BannerAction.Closed,
)
+ PromoId.VisaPresale -> PromoAnalyticsEvent.VisaWaitlistPromoDismiss
},
)
@@ -349,10 +352,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
}
PromoId.Sepa -> {
analyticsEventHandler.send(
- TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
+ PromotionBannerClicked(
source = AnalyticsParam.ScreensSources.Main,
- program = TokenSwapPromoAnalyticsEvent.Program.Sepa,
- action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
+ program = Program.Sepa,
+ action = PromotionBannerClicked.BannerAction.Clicked,
),
)
cryptoCurrency ?: return
@@ -365,6 +368,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
),
)
}
+ PromoId.VisaPresale -> {
+ analyticsEventHandler.send(PromoAnalyticsEvent.VisaWaitlistPromoJoin)
+ urlOpener.openUrl(VISA_PROMO_LINK)
+ }
}
}
@@ -575,4 +582,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
}
}
}
+
+ private companion object {
+ const val VISA_PROMO_LINK = "https://tangem.com/en/cardwaitlist/?utm_source=tangem-app-banner" +
+ "&utm_medium=banner" +
+ "&utm_campaign=tangempaywaitlist"
+ }
}
\ 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 9eaaa739ba..1f136f0dc3 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
@@ -4,8 +4,8 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.decompose.di.ModelScoped
-import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent.*
-import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent.Program
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
+import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.Program
import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent
import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent.MainScreen
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification
@@ -50,15 +50,16 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
is WalletNotification.RateApp -> MainScreen.HowDoYouLikeTangem
is WalletNotification.Critical.BackupError -> MainScreen.BackupError
is WalletNotification.NoteMigration -> MainScreen.NotePromo
- is WalletNotification.SwapPromo -> NoticePromotionBanner(
+ is WalletNotification.SwapPromo -> PromoAnalyticsEvent.NoticePromotionBanner(
source = AnalyticsParam.ScreensSources.Main,
program = Program.Empty, // Use it on new promo action
)
- is WalletNotification.Sepa -> NoticePromotionBanner(
+ is WalletNotification.Sepa -> PromoAnalyticsEvent.NoticePromotionBanner(
source = AnalyticsParam.ScreensSources.Main,
program = Program.Sepa,
)
is WalletNotification.ReferralPromo -> MainScreen.ReferralPromo
+ is WalletNotification.VisaPresalePromo -> PromoAnalyticsEvent.VisaWaitlistPromo
is WalletNotification.UnlockWallets -> null // See [SelectedWalletAnalyticsSender]
is WalletNotification.Informational.NoAccount,
is WalletNotification.Warning.LowSignatures,
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 be35057603..108d706b1d 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,7 +97,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
isReadyToShowRateAppUseCase(),
isNeedToBackupUseCase(userWallet.walletId),
seedPhraseNotificationUseCase(userWalletId = userWallet.walletId),
- shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.Referral),
+ shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.VisaPresale),
shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.Sepa),
notificationsRepository.getShouldShowNotification(NotificationId.EnablePushesReminderNotification.key),
) { array -> array }
@@ -109,7 +109,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
val isReadyToShowRating = array[1] as Boolean
val isNeedToBackup = array[2] as Boolean
val seedPhraseIssueStatus = array[3] as SeedPhraseNotificationsStatus
- val shouldShowReferralPromo = array[4] as Boolean
+ val shouldShowVisaPromo = array[4] as Boolean
val shouldShowSepaBanner = array[5] as Boolean
val shouldShowEnablePushesReminderNotification = array[6] as Boolean
@@ -120,7 +120,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
addFinishWalletActivationNotification(userWallet, totalFiatBalance, clickIntents)
- addReferralPromoNotification(cardTypesResolver, clickIntents, shouldShowReferralPromo)
+ addVisaPresalePromoNotification(clickIntents, shouldShowVisaPromo)
addSepaPromoNotification(userWallet, clickIntents, shouldShowSepaBanner)
@@ -274,17 +274,16 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
.map(CryptoCurrencyStatus::currency)
}
- private fun MutableList.addReferralPromoNotification(
- cardTypesResolver: CardTypesResolver?,
+ private fun MutableList.addVisaPresalePromoNotification(
clickIntents: WalletClickIntents,
shouldShowPromo: Boolean,
) {
addIf(
- element = WalletNotification.ReferralPromo(
- onCloseClick = { clickIntents.onClosePromoClick(promoId = PromoId.Referral) },
- onClick = { clickIntents.onPromoClick(promoId = PromoId.Referral) },
+ element = WalletNotification.VisaPresalePromo(
+ onCloseClick = { clickIntents.onClosePromoClick(promoId = PromoId.VisaPresale) },
+ onClick = { clickIntents.onPromoClick(promoId = PromoId.VisaPresale) },
),
- condition = shouldShowPromo && (cardTypesResolver == null || cardTypesResolver.isTangemWallet()),
+ condition = shouldShowPromo,
)
}
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 1479c155dd..62e29d2cac 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
@@ -298,6 +298,23 @@ sealed class WalletNotification(val config: NotificationConfig) {
),
)
+ data class VisaPresalePromo(
+ val onCloseClick: () -> Unit,
+ val onClick: () -> Unit,
+ ) : WalletNotification(
+ config = NotificationConfig(
+ title = resourceReference(R.string.notification_visa_waitlist_promo_title),
+ subtitle = resourceReference(R.string.notification_visa_waitlist_promo_text),
+ iconResId = R.drawable.img_visa_waitlist_promo,
+ onCloseClick = onCloseClick,
+ buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig(
+ text = resourceReference(R.string.notification_referral_promo_button),
+ onClick = onClick,
+ ),
+ iconSize = 54.dp,
+ ),
+ )
+
data class Sepa(
val onCloseClick: () -> Unit,
val onClick: () -> Unit,
diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml
index d3e4e9688c..96290bd78f 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.30-1293"
+tangemBlockchainSdk = "releases-5.30-1298"
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds
tangemCardSdk = "releases-5.30-567"
#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt
index 35b1248da3..f41adae599 100644
--- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt
+++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt
@@ -26,5 +26,5 @@ internal enum class ProviderTypeIdMapping(val id: String, val providerType: Prov
KoinosPro(id = "koinospro", providerType = ProviderType.Koinos.KoinosPro),
AlephiumTangem(id = "tangemAlephium", providerType = ProviderType.Alephium.Tangem),
Blink(id = "blink", providerType = ProviderType.Blink),
- Tatum(id = "tatum", providerType = ProviderType.Kusama.Tatum),
+ Tatum(id = "tatum", providerType = ProviderType.PolkadotLike.Tatum),
}
\ No newline at end of file