diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt index e786b22f21..6d392c4e90 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/OnrampStoreModule.kt @@ -11,6 +11,10 @@ import com.tangem.datasource.local.onramp.paymentmethods.DefaultOnrampPaymentMet import com.tangem.datasource.local.onramp.paymentmethods.OnrampPaymentMethodsStore import com.tangem.datasource.local.onramp.quotes.DefaultOnrampQuotesStore import com.tangem.datasource.local.onramp.quotes.OnrampQuotesStore +import com.tangem.datasource.local.onramp.sepa.DefaultOnrampCurrentCountryByIPStore +import com.tangem.datasource.local.onramp.sepa.DefaultOnrampSepaAvailabilityStore +import com.tangem.datasource.local.onramp.sepa.OnrampCurrentCountryByIPStore +import com.tangem.datasource.local.onramp.sepa.OnrampSepaAvailabilityStore import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -50,4 +54,16 @@ internal object OnrampStoreModule { fun provideOnrampCurrencies(): OnrampCurrenciesStore { return DefaultOnrampCurrenciesStore(dataStore = RuntimeDataStore()) } + + @Provides + @Singleton + fun provideOnrampSepaAvailableStore(): OnrampSepaAvailabilityStore { + return DefaultOnrampSepaAvailabilityStore(dataStore = RuntimeDataStore()) + } + + @Provides + @Singleton + fun provideOnrampCurrentCountryByIPStore(): OnrampCurrentCountryByIPStore { + return DefaultOnrampCurrentCountryByIPStore(dataStore = RuntimeDataStore()) + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampCurrentCountryByIPStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampCurrentCountryByIPStore.kt new file mode 100644 index 0000000000..a2530e4208 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampCurrentCountryByIPStore.kt @@ -0,0 +1,22 @@ +package com.tangem.datasource.local.onramp.sepa + +import com.tangem.datasource.local.datastore.core.StringKeyDataStore +import com.tangem.datasource.local.datastore.core.StringKeyDataStoreDecorator +import com.tangem.domain.onramp.model.OnrampCountry + +internal class DefaultOnrampCurrentCountryByIPStore( + val dataStore: StringKeyDataStore, +) : OnrampCurrentCountryByIPStore, StringKeyDataStoreDecorator( + wrappedDataStore = dataStore, +) { + + override suspend fun getSyncOrNull(): OnrampCountry? { + return getSyncOrNull(Unit) + } + + override suspend fun store(value: OnrampCountry) { + return store(Unit, value) + } + + override fun provideStringKey(key: Unit) = "KEY" +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampSepaAvailabilityStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampSepaAvailabilityStore.kt new file mode 100644 index 0000000000..9e8c14dff4 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/DefaultOnrampSepaAvailabilityStore.kt @@ -0,0 +1,20 @@ +package com.tangem.datasource.local.onramp.sepa + +import com.tangem.datasource.local.datastore.core.StringKeyDataStore +import com.tangem.datasource.local.datastore.core.StringKeyDataStoreDecorator + +internal class DefaultOnrampSepaAvailabilityStore( + val dataStore: StringKeyDataStore, +) : OnrampSepaAvailabilityStore, StringKeyDataStoreDecorator( + wrappedDataStore = dataStore, +) { + override fun provideStringKey(key: OnrampSepaAvailabilityStoreKey) = with(key) { + buildString { + append(userWallet.walletId.toString()) + append("_") + append(country.code) + append("_") + append(cryptoCurrency.id.value) + } + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampCurrentCountryByIPStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampCurrentCountryByIPStore.kt new file mode 100644 index 0000000000..cf05f2046d --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampCurrentCountryByIPStore.kt @@ -0,0 +1,9 @@ +package com.tangem.datasource.local.onramp.sepa + +import com.tangem.domain.onramp.model.OnrampCountry + +interface OnrampCurrentCountryByIPStore { + suspend fun getSyncOrNull(): OnrampCountry? + suspend fun store(value: OnrampCountry) + suspend fun clear() +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStore.kt new file mode 100644 index 0000000000..6ae1bd2af0 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStore.kt @@ -0,0 +1,10 @@ +package com.tangem.datasource.local.onramp.sepa + +import kotlinx.coroutines.flow.Flow + +interface OnrampSepaAvailabilityStore { + suspend fun getSyncOrNull(key: OnrampSepaAvailabilityStoreKey): Boolean? + fun get(key: OnrampSepaAvailabilityStoreKey): Flow + suspend fun store(key: OnrampSepaAvailabilityStoreKey, value: Boolean) + suspend fun clear() +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStoreKey.kt b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStoreKey.kt new file mode 100644 index 0000000000..301c4e83ef --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/onramp/sepa/OnrampSepaAvailabilityStoreKey.kt @@ -0,0 +1,11 @@ +package com.tangem.datasource.local.onramp.sepa + +import com.tangem.domain.models.currency.CryptoCurrency +import com.tangem.domain.models.wallet.UserWallet +import com.tangem.domain.onramp.model.OnrampCountry + +data class OnrampSepaAvailabilityStoreKey( + val userWallet: UserWallet, + val country: OnrampCountry, + val cryptoCurrency: CryptoCurrency, +) \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/notifications/Notification.kt b/core/ui/src/main/java/com/tangem/core/ui/components/notifications/Notification.kt index 93f5aefdf0..50f8841ef5 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/notifications/Notification.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/notifications/Notification.kt @@ -27,10 +27,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp import com.tangem.core.ui.R import com.tangem.core.ui.components.* import com.tangem.core.ui.components.buttons.common.TangemButtonSize import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.resolveAnnotatedReference import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.res.TangemTheme @@ -216,7 +218,7 @@ internal fun TextsBlock( SpacerH(height = TangemTheme.dimens.spacing2) } - val subtitleText = subtitle.resolveReference() + val subtitleText = subtitle.resolveAnnotatedReference() if (subtitleText.isNotEmpty()) { Text( text = subtitleText, @@ -459,5 +461,15 @@ private class NotificationConfigProvider : CollectionPreviewParameterProvider { - return Either.catch { repository.getDefaultCountrySync() ?: repository.getCountryByIp(userWallet) } + return Either.catch { + repository.getDefaultCountrySync() ?: repository.getCountryByIp( + userWallet = userWallet, + fromCache = true, + ) + } .mapLeft(errorResolver::resolve) } } \ No newline at end of file diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampSepaAvailableUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampSepaAvailableUseCase.kt index ad7c22bfaa..6fd0b223d9 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampSepaAvailableUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampSepaAvailableUseCase.kt @@ -6,7 +6,6 @@ import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.onramp.repositories.OnrampRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.onramp.model.OnrampCountry -import com.tangem.domain.onramp.model.OnrampCurrency class OnrampSepaAvailableUseCase( private val repository: OnrampRepository, @@ -14,7 +13,6 @@ class OnrampSepaAvailableUseCase( suspend operator fun invoke( userWallet: UserWallet, - currency: OnrampCurrency, country: OnrampCountry, cryptoCurrency: CryptoCurrency, ): Boolean { @@ -25,7 +23,6 @@ class OnrampSepaAvailableUseCase( return Either.catch { repository.hasSepaMethod( userWallet = userWallet, - currency = currency, country = country, cryptoCurrency = cryptoCurrency, ) diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt index 2dad8a9e87..268ade4d37 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt @@ -13,14 +13,9 @@ interface OnrampRepository { fun getCurrencies(): Flow> fun getCountries(): Flow> suspend fun getCountriesSync(): List? - suspend fun getCountryByIp(userWallet: UserWallet): OnrampCountry + suspend fun getCountryByIp(userWallet: UserWallet, fromCache: Boolean = false): OnrampCountry suspend fun getStatus(userWallet: UserWallet, txId: String): OnrampStatus - suspend fun hasSepaMethod( - userWallet: UserWallet, - currency: OnrampCurrency, - country: OnrampCountry, - cryptoCurrency: CryptoCurrency, - ): Boolean + suspend fun hasSepaMethod(userWallet: UserWallet, country: OnrampCountry, cryptoCurrency: CryptoCurrency): Boolean suspend fun fetchCurrencies(userWallet: UserWallet) suspend fun fetchCountries(userWallet: UserWallet): List suspend fun fetchPaymentMethodsIfAbsent(userWallet: UserWallet) 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 14395672c1..7de4aeda99 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 @@ -254,7 +254,6 @@ internal class GetMultiWalletWarningsFactory @Inject constructor( val isSepaAvailable = onrampSepaAvailableUseCase( userWallet = userWallet, country = country, - currency = country.defaultCurrency, cryptoCurrency = bitcoinCurrency, )