Updated on 2026-08-14

This commit is contained in:
Tangem 2023-12-15 15:06:07 +03:00
parent ab4f446b4d
commit cfd9da0f4b
7 changed files with 31 additions and 21 deletions

View file

@ -32,6 +32,11 @@ class AppPreferencesStore(
return edit { transform(it) }
}
/** Get data [T] by [key]. If data is not found, it returns [default] */
inline fun <reified T> MutablePreferences.getOrDefault(key: Preferences.Key<T>, default: T): T {
return this[key] ?: default
}
/**
* Get nullable data [T] by string [key] from [MutablePreferences]
*

View file

@ -45,7 +45,7 @@ object PreferencesKeys {
val IS_WALLET_SWAP_PROMO_SHOW_KEY by lazy { booleanPreferencesKey(name = "isWalletSwapPromoShown") }
val IS_TOKEN_SWAP_PROMO_SHOW_KEY by lazy { booleanPreferencesKey(name = "isTokenSwapPromoShown") }
val IS_TOKEN_SWAP_PROMO_SHOW_KEY by lazy { stringSetPreferencesKey(name = "isTokenSwapPromoShown") }
}
/** Preferences keys set that should be migrated from "PreferencesDataSource" to a new DataStore<Preferences> */

View file

@ -21,9 +21,9 @@ class DefaultSwapPromoRepository(
.map { it && checkPromoPeriod() }
}
override fun isReadyToShowToken(): Flow<Boolean> {
return appPreferencesStore.get(IS_TOKEN_SWAP_PROMO_SHOW_KEY, true)
.map { it && checkPromoPeriod() }
override fun isReadyToShowToken(userWalletId: String, currencyId: String): Flow<Boolean> {
return appPreferencesStore.get(IS_TOKEN_SWAP_PROMO_SHOW_KEY, emptySet())
.map { !it.contains(userWalletId + currencyId) && checkPromoPeriod() }
}
override suspend fun setNeverToShowWallet() {
@ -33,11 +33,14 @@ class DefaultSwapPromoRepository(
)
}
override suspend fun setNeverToShowToken() {
appPreferencesStore.store(
key = IS_TOKEN_SWAP_PROMO_SHOW_KEY,
value = false,
)
override suspend fun setNeverToShowToken(userWalletId: String, currencyId: String) {
appPreferencesStore.editData { mutablePreferences ->
val storesCurrencies = mutablePreferences.getOrDefault(IS_TOKEN_SWAP_PROMO_SHOW_KEY, emptySet())
mutablePreferences.set(
key = IS_TOKEN_SWAP_PROMO_SHOW_KEY,
value = storesCurrencies.toMutableSet().apply { add(userWalletId + currencyId) },
)
}
}
private fun checkPromoPeriod(): Boolean {

View file

@ -5,7 +5,9 @@ import kotlinx.coroutines.flow.Flow
class ShouldShowSwapPromoTokenUseCase(private val swapPromoRepository: SwapPromoRepository) {
operator fun invoke(): Flow<Boolean> = swapPromoRepository.isReadyToShowToken()
operator fun invoke(userWalletId: String, currencyId: String): Flow<Boolean> =
swapPromoRepository.isReadyToShowToken(userWalletId, currencyId)
suspend fun neverToShow() = swapPromoRepository.setNeverToShowToken()
suspend fun neverToShow(userWalletId: String, currencyId: String) =
swapPromoRepository.setNeverToShowToken(userWalletId, currencyId)
}

View file

@ -5,9 +5,9 @@ import kotlinx.coroutines.flow.Flow
interface SwapPromoRepository {
fun isReadyToShowWallet(): Flow<Boolean>
fun isReadyToShowToken(): Flow<Boolean>
fun isReadyToShowToken(userWalletId: String, currencyId: String): Flow<Boolean>
suspend fun setNeverToShowWallet()
suspend fun setNeverToShowToken()
suspend fun setNeverToShowToken(userWalletId: String, currencyId: String)
}

View file

@ -57,7 +57,7 @@ class GetCurrencyWarningsUseCase(
operations.getCurrenciesStatusesFlow().conflate(),
flowOf(walletManagersFacade.getRentInfo(userWalletId, currency.network)),
flowOf(walletManagersFacade.getExistentialDeposit(userWalletId, currency.network)),
showSwapPromoTokenUseCase().conflate(),
showSwapPromoTokenUseCase(userWalletId.stringValue, currency.id.value).conflate(),
) { coinRelatedWarnings, cryptoStatuses, maybeRentWarning, maybeEdWarning, shouldShowSwapPromo ->
setOfNotNull(
getSwapPromoNotificationWarning(
@ -116,11 +116,8 @@ class GetCurrencyWarningsUseCase(
}
availablePair
.any {
(
it.currency.network.backendId == pair.to.network ||
it.currency.network.backendId == pair.from.network
) &&
!it.value.amount.isNullOrZero()
it.currency.network.backendId == pair.to.network ||
it.currency.network.backendId == pair.from.network
}
}
if (isExchangeable) {

View file

@ -560,14 +560,17 @@ internal class TokenDetailsViewModel @Inject constructor(
override fun onSwapPromoDismiss() {
viewModelScope.launch(dispatchers.main) {
shouldShowSwapPromoTokenUseCase.neverToShow()
shouldShowSwapPromoTokenUseCase.neverToShow(userWalletId.stringValue, cryptoCurrency.id.value)
analyticsEventsHandler.send(TokenSwapPromoAnalyticsEvent.Close)
}
}
override fun onSwapPromoClick() {
viewModelScope.launch(dispatchers.main) {
shouldShowSwapPromoTokenUseCase.neverToShow(userWalletId.stringValue, cryptoCurrency.id.value)
analyticsEventsHandler.send(TokenSwapPromoAnalyticsEvent.Exchange(cryptoCurrency.symbol))
}
onSwapClick()
analyticsEventsHandler.send(TokenSwapPromoAnalyticsEvent.Exchange(cryptoCurrency.symbol))
}
private companion object {