Updated on 2026-08-14

This commit is contained in:
Tangem 2025-09-03 16:21:48 +04:00
parent 38572c0a4e
commit e323c7cc4a
24 changed files with 27 additions and 134 deletions

View file

@ -149,7 +149,6 @@ dependencies {
implementation(projects.domain.quotes) implementation(projects.domain.quotes)
implementation(projects.domain.notifications) implementation(projects.domain.notifications)
implementation(projects.domain.notifications.models) implementation(projects.domain.notifications.models)
implementation(projects.domain.notifications.toggles)
implementation(projects.domain.swap.models) implementation(projects.domain.swap.models)
implementation(projects.domain.swap) implementation(projects.domain.swap)
implementation(projects.domain.walletManager) implementation(projects.domain.walletManager)

View file

@ -1,11 +1,8 @@
package com.tangem.tap.di.domain package com.tangem.tap.di.domain
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.domain.notifications.* import com.tangem.domain.notifications.*
import com.tangem.domain.notifications.repository.NotificationsRepository import com.tangem.domain.notifications.repository.NotificationsRepository
import com.tangem.domain.notifications.repository.PushNotificationsRepository import com.tangem.domain.notifications.repository.PushNotificationsRepository
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.tap.domain.notifications.DefaultNotificationsFeatureToggles
import com.tangem.utils.notifications.PushNotificationsTokenProvider import com.tangem.utils.notifications.PushNotificationsTokenProvider
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -79,12 +76,6 @@ internal object NotificationsDomainModule {
) )
} }
@Provides
@Singleton
fun provideNotificationsFeatureToggles(featureTogglesManager: FeatureTogglesManager): NotificationsFeatureToggles {
return DefaultNotificationsFeatureToggles(featureTogglesManager = featureTogglesManager)
}
@Provides @Provides
@Singleton @Singleton
fun provideGetNetworksAvailableForNotifications( fun provideGetNetworksAvailableForNotifications(

View file

@ -1,11 +0,0 @@
package com.tangem.tap.domain.notifications
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
internal class DefaultNotificationsFeatureToggles(
private val featureTogglesManager: FeatureTogglesManager,
) : NotificationsFeatureToggles {
override val isNotificationsEnabled: Boolean
get() = featureTogglesManager.isFeatureEnabled("PUSH_NOTIFICATIONS_ENABLED")
}

View file

@ -28,7 +28,6 @@ import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.notifications.GetApplicationIdUseCase import com.tangem.domain.notifications.GetApplicationIdUseCase
import com.tangem.domain.notifications.SendPushTokenUseCase import com.tangem.domain.notifications.SendPushTokenUseCase
import com.tangem.domain.notifications.models.ApplicationId import com.tangem.domain.notifications.models.ApplicationId
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.onboarding.repository.OnboardingRepository import com.tangem.domain.onboarding.repository.OnboardingRepository
import com.tangem.domain.onramp.FetchHotCryptoUseCase import com.tangem.domain.onramp.FetchHotCryptoUseCase
import com.tangem.domain.promo.GetStoryContentUseCase import com.tangem.domain.promo.GetStoryContentUseCase
@ -80,7 +79,6 @@ internal class MainViewModel @Inject constructor(
private val imagePreloader: ImagePreloader, private val imagePreloader: ImagePreloader,
private val fetchHotCryptoUseCase: FetchHotCryptoUseCase, private val fetchHotCryptoUseCase: FetchHotCryptoUseCase,
private val onboardingRepository: OnboardingRepository, private val onboardingRepository: OnboardingRepository,
private val notificationsToggles: NotificationsFeatureToggles,
private val getApplicationIdUseCase: GetApplicationIdUseCase, private val getApplicationIdUseCase: GetApplicationIdUseCase,
private val subscribeOnWalletsUseCase: GetSavedWalletsCountUseCase, private val subscribeOnWalletsUseCase: GetSavedWalletsCountUseCase,
private val associateWalletsWithApplicationIdUseCase: AssociateWalletsWithApplicationIdUseCase, private val associateWalletsWithApplicationIdUseCase: AssociateWalletsWithApplicationIdUseCase,
@ -415,18 +413,20 @@ internal class MainViewModel @Inject constructor(
} }
private suspend fun initPushNotifications() { private suspend fun initPushNotifications() {
if (notificationsToggles.isNotificationsEnabled) { getApplicationIdUseCase()
getApplicationIdUseCase().onRight { applicationId -> .onRight { applicationId ->
sendPushTokenUseCase(applicationId = applicationId) sendPushTokenUseCase(applicationId = applicationId)
associateWalletsWithApplicationId(applicationId = applicationId) associateWalletsWithApplicationId(applicationId = applicationId)
updateRemoteWalletsInfoUseCase(applicationId = applicationId) updateRemoteWalletsInfoUseCase(applicationId = applicationId)
}.onLeft { Timber.e(it.toString()) }
} }
.onLeft(Timber::e)
} }
private fun associateWalletsWithApplicationId(applicationId: ApplicationId) { private fun associateWalletsWithApplicationId(applicationId: ApplicationId) {
subscribeOnWalletsUseCase().onEach { wallets -> subscribeOnWalletsUseCase()
.onEach { wallets ->
associateWalletsWithApplicationIdUseCase(applicationId, wallets) associateWalletsWithApplicationIdUseCase(applicationId, wallets)
}.launchIn(viewModelScope) }
.launchIn(viewModelScope)
} }
} }

View file

@ -23,10 +23,6 @@
"name": "WALLET_CONNECT_REDESIGN_ENABLED", "name": "WALLET_CONNECT_REDESIGN_ENABLED",
"version": "5.27.0" "version": "5.27.0"
}, },
{
"name": "PUSH_NOTIFICATIONS_ENABLED",
"version": "5.26.2"
},
{ {
"name": "USEDESK_ENABLED", "name": "USEDESK_ENABLED",
"version": "undefined" "version": "undefined"

View file

@ -25,7 +25,6 @@ dependencies {
implementation(projects.domain.models) implementation(projects.domain.models)
implementation(projects.domain.tokens.models) implementation(projects.domain.tokens.models)
implementation(projects.domain.wallets.models) implementation(projects.domain.wallets.models)
implementation(projects.domain.notifications.toggles)
implementation(projects.domain.networks) implementation(projects.domain.networks)
implementation(projects.domain.wallets) implementation(projects.domain.wallets)

View file

@ -5,7 +5,6 @@ import com.tangem.domain.models.network.NetworkStatus
import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.networks.multi.MultiNetworkStatusProducer import com.tangem.domain.networks.multi.MultiNetworkStatusProducer
import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.repository.WalletsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
@ -15,17 +14,12 @@ import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
class UserTokensResponseAddressesEnricher @Inject constructor( class UserTokensResponseAddressesEnricher @Inject constructor(
private val notificationsFeatureToggles: NotificationsFeatureToggles,
private val walletsRepository: WalletsRepository, private val walletsRepository: WalletsRepository,
private val dispatchers: CoroutineDispatcherProvider, private val dispatchers: CoroutineDispatcherProvider,
private val multiNetworkStatusSupplier: MultiNetworkStatusSupplier, private val multiNetworkStatusSupplier: MultiNetworkStatusSupplier,
) { ) {
suspend operator fun invoke(userWalletId: UserWalletId, response: UserTokensResponse): UserTokensResponse { suspend operator fun invoke(userWalletId: UserWalletId, response: UserTokensResponse): UserTokensResponse {
if (!notificationsFeatureToggles.isNotificationsEnabled) {
return response
}
val isNotificationsEnabled = walletsRepository.isNotificationsEnabled(userWalletId) val isNotificationsEnabled = walletsRepository.isNotificationsEnabled(userWalletId)
return withContext(dispatchers.default) { return withContext(dispatchers.default) {

View file

@ -9,7 +9,6 @@ import com.tangem.datasource.local.token.UserTokensResponseStore
import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.demo.models.DemoConfig
import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.repository.WalletsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module import dagger.Module
@ -42,13 +41,11 @@ internal object DataCommonModule {
@Provides @Provides
@Singleton @Singleton
fun provideUserTokensEncricher( fun provideUserTokensEncricher(
notificationsFeatureToggles: NotificationsFeatureToggles,
walletsRepository: WalletsRepository, walletsRepository: WalletsRepository,
multiNetworkStatusSupplier: MultiNetworkStatusSupplier, multiNetworkStatusSupplier: MultiNetworkStatusSupplier,
dispatchers: CoroutineDispatcherProvider, dispatchers: CoroutineDispatcherProvider,
): UserTokensResponseAddressesEnricher { ): UserTokensResponseAddressesEnricher {
return UserTokensResponseAddressesEnricher( return UserTokensResponseAddressesEnricher(
notificationsFeatureToggles = notificationsFeatureToggles,
walletsRepository = walletsRepository, walletsRepository = walletsRepository,
multiNetworkStatusSupplier = multiNetworkStatusSupplier, multiNetworkStatusSupplier = multiNetworkStatusSupplier,
dispatchers = dispatchers, dispatchers = dispatchers,

View file

@ -7,7 +7,6 @@ import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.models.network.NetworkStatus import com.tangem.domain.models.network.NetworkStatus
import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.repository.WalletsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider
@ -23,7 +22,6 @@ import org.junit.Test
class UserTokensResponseAddressesEnricherTest { class UserTokensResponseAddressesEnricherTest {
private lateinit var notificationsFeatureToggles: NotificationsFeatureToggles
private lateinit var walletsRepository: WalletsRepository private lateinit var walletsRepository: WalletsRepository
private val dispatchers: CoroutineDispatcherProvider = TestingCoroutineDispatcherProvider() private val dispatchers: CoroutineDispatcherProvider = TestingCoroutineDispatcherProvider()
private lateinit var multiNetworkStatusSupplier: MultiNetworkStatusSupplier private lateinit var multiNetworkStatusSupplier: MultiNetworkStatusSupplier
@ -31,12 +29,10 @@ class UserTokensResponseAddressesEnricherTest {
@Before @Before
fun setup() { fun setup() {
notificationsFeatureToggles = mockk()
walletsRepository = mockk() walletsRepository = mockk()
multiNetworkStatusSupplier = mockk() multiNetworkStatusSupplier = mockk()
enricher = UserTokensResponseAddressesEnricher( enricher = UserTokensResponseAddressesEnricher(
notificationsFeatureToggles = notificationsFeatureToggles,
walletsRepository = walletsRepository, walletsRepository = walletsRepository,
dispatchers = dispatchers, dispatchers = dispatchers,
multiNetworkStatusSupplier = multiNetworkStatusSupplier, multiNetworkStatusSupplier = multiNetworkStatusSupplier,
@ -54,7 +50,6 @@ class UserTokensResponseAddressesEnricherTest {
val userWalletId = UserWalletId("1234567890abcdef") val userWalletId = UserWalletId("1234567890abcdef")
val token = createToken() val token = createToken()
val response = createUserTokensResponse(tokens = listOf(token)) val response = createUserTokensResponse(tokens = listOf(token))
every { notificationsFeatureToggles.isNotificationsEnabled } returns false
// WHEN // WHEN
val result = enricher(userWalletId, response) val result = enricher(userWalletId, response)
@ -70,7 +65,6 @@ class UserTokensResponseAddressesEnricherTest {
val userWalletId = UserWalletId("1234567890abcdef") val userWalletId = UserWalletId("1234567890abcdef")
val token = createToken() val token = createToken()
val response = createUserTokensResponse(tokens = listOf(token)) val response = createUserTokensResponse(tokens = listOf(token))
every { notificationsFeatureToggles.isNotificationsEnabled } returns true
coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns false coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns false
coEvery { coEvery {
multiNetworkStatusSupplier.invoke(any()) multiNetworkStatusSupplier.invoke(any())
@ -110,7 +104,6 @@ class UserTokensResponseAddressesEnricherTest {
val response = createUserTokensResponse(tokens = listOf(token)) val response = createUserTokensResponse(tokens = listOf(token))
val addresses = listOf("0x123", "0x456") val addresses = listOf("0x123", "0x456")
every { notificationsFeatureToggles.isNotificationsEnabled } returns true
coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns true coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns true
coEvery { coEvery {
multiNetworkStatusSupplier.invoke(any()) multiNetworkStatusSupplier.invoke(any())
@ -152,7 +145,6 @@ class UserTokensResponseAddressesEnricherTest {
val token = createToken() val token = createToken()
val response = createUserTokensResponse(tokens = listOf(token)) val response = createUserTokensResponse(tokens = listOf(token))
every { notificationsFeatureToggles.isNotificationsEnabled } returns true
coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns true coEvery { walletsRepository.isNotificationsEnabled(userWalletId) } returns true
coEvery { coEvery {
multiNetworkStatusSupplier.invoke(any()) multiNetworkStatusSupplier.invoke(any())

View file

@ -1 +0,0 @@
/build

View file

@ -1,4 +0,0 @@
plugins {
alias(deps.plugins.kotlin.jvm)
id("configuration")
}

View file

@ -1,5 +0,0 @@
package com.tangem.domain.notifications.toggles
interface NotificationsFeatureToggles {
val isNotificationsEnabled: Boolean
}

View file

@ -40,7 +40,6 @@ dependencies {
/** Domain module */ /** Domain module */
implementation(projects.domain.settings) implementation(projects.domain.settings)
implementation(projects.domain.notifications.toggles)
implementation(projects.domain.notifications) implementation(projects.domain.notifications)
/** Feature modules */ /** Feature modules */

View file

@ -1,8 +1,6 @@
package com.tangem.features.pushnotifications.impl package com.tangem.features.pushnotifications.impl
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel import com.tangem.core.decompose.model.getOrCreateModel
@ -38,7 +36,6 @@ internal class DefaultPushNotificationsBottomSheetComponent @AssistedInject cons
@Composable @Composable
override fun BottomSheet() { override fun BottomSheet() {
val state by model.state.collectAsState()
val bottomSheetConfig = remember(key1 = this) { val bottomSheetConfig = remember(key1 = this) {
TangemBottomSheetConfig( TangemBottomSheetConfig(
isShown = true, isShown = true,
@ -55,7 +52,6 @@ internal class DefaultPushNotificationsBottomSheetComponent @AssistedInject cons
onLaterClick = model::onLaterClick, onLaterClick = model::onLaterClick,
onAllowPermission = model::onAllowPermission, onAllowPermission = model::onAllowPermission,
onDenyPermission = model::onDenyPermission, onDenyPermission = model::onDenyPermission,
showNotificationsInfo = state.showInfoAboutNotifications,
) )
} }
} }

View file

@ -2,8 +2,6 @@ package com.tangem.features.pushnotifications.impl
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.context.AppComponentContext
@ -28,15 +26,15 @@ internal class DefaultPushNotificationsComponent @AssistedInject constructor(
@Composable @Composable
override fun Content(modifier: Modifier) { override fun Content(modifier: Modifier) {
val activity = LocalContext.current.findActivity() val activity = LocalContext.current.findActivity()
val state by model.state.collectAsState()
BackHandler(onBack = { activity.finish() }) BackHandler(onBack = { activity.finish() })
NavigationBar3ButtonsScrim() NavigationBar3ButtonsScrim()
PushNotificationsScreen( PushNotificationsScreen(
onAllowClick = model::onAllowClick, onAllowClick = model::onAllowClick,
onLaterClick = model::onLaterClick, onLaterClick = model::onLaterClick,
onAllowPermission = model::onAllowPermission, onAllowPermission = model::onAllowPermission,
onDenyPermission = model::onDenyPermission, onDenyPermission = model::onDenyPermission,
showNotificationsInfo = state.showInfoAboutNotifications,
) )
} }

View file

@ -9,16 +9,12 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.domain.notifications.repository.NotificationsRepository import com.tangem.domain.notifications.repository.NotificationsRepository
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.settings.NeverRequestPermissionUseCase import com.tangem.domain.settings.NeverRequestPermissionUseCase
import com.tangem.domain.settings.NeverToInitiallyAskPermissionUseCase import com.tangem.domain.settings.NeverToInitiallyAskPermissionUseCase
import com.tangem.features.pushnotifications.api.PushNotificationsParams import com.tangem.features.pushnotifications.api.PushNotificationsParams
import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents
import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION
import com.tangem.features.pushnotifications.impl.presentation.state.PushNotificationsUM
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@ -32,7 +28,6 @@ internal class PushNotificationsModel @Inject constructor(
private val neverToInitiallyAskPermissionUseCase: NeverToInitiallyAskPermissionUseCase, private val neverToInitiallyAskPermissionUseCase: NeverToInitiallyAskPermissionUseCase,
private val appRouter: AppRouter, private val appRouter: AppRouter,
private val analyticHandler: AnalyticsEventHandler, private val analyticHandler: AnalyticsEventHandler,
private val notificationsFeatureToggles: NotificationsFeatureToggles,
private val notificationsRepository: NotificationsRepository, private val notificationsRepository: NotificationsRepository,
) : Model(), PushNotificationsClickIntents { ) : Model(), PushNotificationsClickIntents {
@ -43,33 +38,22 @@ internal class PushNotificationsModel @Inject constructor(
AppRoute.PushNotification.Source.Onboarding -> AnalyticsParam.ScreensSources.Onboarding AppRoute.PushNotification.Source.Onboarding -> AnalyticsParam.ScreensSources.Onboarding
} }
private val _state = MutableStateFlow(
PushNotificationsUM(
showInfoAboutNotifications = notificationsFeatureToggles.isNotificationsEnabled,
),
)
init { init {
analyticHandler.send(PushNotificationAnalyticEvents.NotificationsScreenOpened(source)) analyticHandler.send(PushNotificationAnalyticEvents.NotificationsScreenOpened(source))
} }
val state = _state.asStateFlow()
override fun onAllowClick() { override fun onAllowClick() {
if (notificationsFeatureToggles.isNotificationsEnabled) {
modelScope.launch { modelScope.launch {
notificationsRepository.setUserAllowToSubscribeOnPushNotifications(true) notificationsRepository.setUserAllowToSubscribeOnPushNotifications(true)
} }
}
analyticHandler.send(PushNotificationAnalyticEvents.ButtonAllow(source)) analyticHandler.send(PushNotificationAnalyticEvents.ButtonAllow(source))
} }
override fun onLaterClick() { override fun onLaterClick() {
if (notificationsFeatureToggles.isNotificationsEnabled) {
modelScope.launch { modelScope.launch {
notificationsRepository.setUserAllowToSubscribeOnPushNotifications(false) notificationsRepository.setUserAllowToSubscribeOnPushNotifications(false)
} }
}
analyticHandler.send(PushNotificationAnalyticEvents.ButtonLater(source)) analyticHandler.send(PushNotificationAnalyticEvents.ButtonLater(source))
modelScope.launch { modelScope.launch {
neverRequestPermissionUseCase(PUSH_PERMISSION) neverRequestPermissionUseCase(PUSH_PERMISSION)

View file

@ -1,5 +0,0 @@
package com.tangem.features.pushnotifications.impl.presentation.state
data class PushNotificationsUM(
val showInfoAboutNotifications: Boolean = false,
)

View file

@ -44,7 +44,6 @@ internal fun PushNotificationsContent(
onLaterClick: () -> Unit, onLaterClick: () -> Unit,
onAllowPermission: () -> Unit, onAllowPermission: () -> Unit,
onDenyPermission: () -> Unit, onDenyPermission: () -> Unit,
showNotificationsInfo: Boolean,
) { ) {
val requestPushPermission = requestPermission( val requestPushPermission = requestPermission(
onAllow = onAllowPermission, onAllow = onAllowPermission,
@ -65,18 +64,11 @@ internal fun PushNotificationsContent(
R.drawable.ic_storefront_24, R.drawable.ic_storefront_24,
resourceReference(R.string.user_push_notification_agreement_argument_two), resourceReference(R.string.user_push_notification_agreement_argument_two),
), ),
).let { baseItems ->
if (showNotificationsInfo) {
baseItems.add(
ShowcaseItemModel( ShowcaseItemModel(
R.drawable.ic_notifications_24, R.drawable.ic_notifications_24,
resourceReference(R.string.user_push_notification_agreement_argument_three), resourceReference(R.string.user_push_notification_agreement_argument_three),
), ),
) ),
} else {
baseItems
}
},
modifier = Modifier.padding(top = TangemTheme.dimens.spacing40), modifier = Modifier.padding(top = TangemTheme.dimens.spacing40),
) )
SpacerH28() SpacerH28()
@ -111,7 +103,6 @@ private fun Preview_PushNotificationsBottomSheet() {
onLaterClick = {}, onLaterClick = {},
onAllowPermission = {}, onAllowPermission = {},
onDenyPermission = {}, onDenyPermission = {},
showNotificationsInfo = true,
) )
} }
} }

View file

@ -18,7 +18,6 @@ internal fun PushNotificationsScreen(
onLaterClick: () -> Unit, onLaterClick: () -> Unit,
onAllowPermission: () -> Unit, onAllowPermission: () -> Unit,
onDenyPermission: () -> Unit, onDenyPermission: () -> Unit,
showNotificationsInfo: Boolean,
) { ) {
val requestPushPermission = requestPermission( val requestPushPermission = requestPermission(
onAllow = onAllowPermission, onAllow = onAllowPermission,
@ -38,18 +37,11 @@ internal fun PushNotificationsScreen(
R.drawable.ic_storefront_24, R.drawable.ic_storefront_24,
resourceReference(R.string.user_push_notification_agreement_argument_two), resourceReference(R.string.user_push_notification_agreement_argument_two),
), ),
).let { baseItems ->
if (showNotificationsInfo) {
baseItems.add(
ShowcaseItemModel( ShowcaseItemModel(
R.drawable.ic_notifications_24, R.drawable.ic_notifications_24,
resourceReference(R.string.user_push_notification_agreement_argument_three), resourceReference(R.string.user_push_notification_agreement_argument_three),
), ),
) ),
} else {
baseItems
}
},
primaryButton = ShowcaseButtonModel( primaryButton = ShowcaseButtonModel(
buttonText = resourceReference(R.string.common_allow), buttonText = resourceReference(R.string.common_allow),
onClick = { onClick = {

View file

@ -41,7 +41,6 @@ dependencies {
implementation(projects.domain.demo) implementation(projects.domain.demo)
implementation(projects.domain.nft) implementation(projects.domain.nft)
implementation(projects.domain.settings) implementation(projects.domain.settings)
implementation(projects.domain.notifications.toggles)
implementation(projects.domain.notifications.models) implementation(projects.domain.notifications.models)
implementation(projects.domain.notifications) implementation(projects.domain.notifications)

View file

@ -32,7 +32,6 @@ import com.tangem.domain.nft.EnableWalletNFTUseCase
import com.tangem.domain.nft.GetWalletNFTEnabledUseCase import com.tangem.domain.nft.GetWalletNFTEnabledUseCase
import com.tangem.domain.notifications.GetIsHuaweiDeviceWithoutGoogleServicesUseCase import com.tangem.domain.notifications.GetIsHuaweiDeviceWithoutGoogleServicesUseCase
import com.tangem.domain.notifications.repository.NotificationsRepository import com.tangem.domain.notifications.repository.NotificationsRepository
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.settings.repositories.PermissionRepository import com.tangem.domain.settings.repositories.PermissionRepository
import com.tangem.domain.wallets.usecase.* import com.tangem.domain.wallets.usecase.*
import com.tangem.feature.walletsettings.analytics.Settings import com.tangem.feature.walletsettings.analytics.Settings
@ -73,7 +72,6 @@ internal class WalletSettingsModel @Inject constructor(
getWalletNFTEnabledUseCase: GetWalletNFTEnabledUseCase, getWalletNFTEnabledUseCase: GetWalletNFTEnabledUseCase,
private val enableWalletNFTUseCase: EnableWalletNFTUseCase, private val enableWalletNFTUseCase: EnableWalletNFTUseCase,
private val disableWalletNFTUseCase: DisableWalletNFTUseCase, private val disableWalletNFTUseCase: DisableWalletNFTUseCase,
private val notificationsToggles: NotificationsFeatureToggles,
getWalletNotificationsEnabledUseCase: GetWalletNotificationsEnabledUseCase, getWalletNotificationsEnabledUseCase: GetWalletNotificationsEnabledUseCase,
private val setNotificationsEnabledUseCase: SetNotificationsEnabledUseCase, private val setNotificationsEnabledUseCase: SetNotificationsEnabledUseCase,
private val settingsManager: SettingsManager, private val settingsManager: SettingsManager,
@ -130,8 +128,7 @@ internal class WalletSettingsModel @Inject constructor(
is UserWallet.Hot -> wallet.backedUp is UserWallet.Hot -> wallet.backedUp
is UserWallet.Cold -> true is UserWallet.Cold -> true
} }
val isNeedShowNotifications = notificationsToggles.isNotificationsEnabled && val isNeedShowNotifications = !getIsHuaweiDeviceWithoutGoogleServicesUseCase()
!getIsHuaweiDeviceWithoutGoogleServicesUseCase()
state.update { value -> state.update { value ->
value.copy( value.copy(
items = buildItems( items = buildItems(

View file

@ -95,7 +95,6 @@ dependencies {
implementation(projects.domain.wallets) implementation(projects.domain.wallets)
implementation(projects.domain.wallets.models) implementation(projects.domain.wallets.models)
implementation(projects.domain.notifications) implementation(projects.domain.notifications)
implementation(projects.domain.notifications.toggles)
implementation(projects.domain.transaction) implementation(projects.domain.transaction)
/** Feature Apis */ /** Feature Apis */

View file

@ -17,7 +17,6 @@ import com.tangem.domain.models.wallet.isMultiCurrency
import com.tangem.domain.nft.ObserveAndClearNFTCacheIfNeedUseCase import com.tangem.domain.nft.ObserveAndClearNFTCacheIfNeedUseCase
import com.tangem.domain.notifications.GetIsHuaweiDeviceWithoutGoogleServicesUseCase import com.tangem.domain.notifications.GetIsHuaweiDeviceWithoutGoogleServicesUseCase
import com.tangem.domain.notifications.repository.NotificationsRepository import com.tangem.domain.notifications.repository.NotificationsRepository
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
import com.tangem.domain.settings.* import com.tangem.domain.settings.*
import com.tangem.domain.tokens.RefreshMultiCurrencyWalletQuotesUseCase import com.tangem.domain.tokens.RefreshMultiCurrencyWalletQuotesUseCase
import com.tangem.domain.wallets.usecase.* import com.tangem.domain.wallets.usecase.*
@ -79,7 +78,6 @@ internal class WalletModel @Inject constructor(
private val notificationsRepository: NotificationsRepository, private val notificationsRepository: NotificationsRepository,
private val getWalletsListForEnablingUseCase: GetWalletsForAutomaticallyPushEnablingUseCase, private val getWalletsListForEnablingUseCase: GetWalletsForAutomaticallyPushEnablingUseCase,
private val setNotificationsEnabledUseCase: SetNotificationsEnabledUseCase, private val setNotificationsEnabledUseCase: SetNotificationsEnabledUseCase,
private val notificationsFeatureToggles: NotificationsFeatureToggles,
private val shouldSaveUserWalletsSyncUseCase: ShouldSaveUserWalletsSyncUseCase, private val shouldSaveUserWalletsSyncUseCase: ShouldSaveUserWalletsSyncUseCase,
private val getIsHuaweiDeviceWithoutGoogleServicesUseCase: GetIsHuaweiDeviceWithoutGoogleServicesUseCase, private val getIsHuaweiDeviceWithoutGoogleServicesUseCase: GetIsHuaweiDeviceWithoutGoogleServicesUseCase,
val screenLifecycleProvider: ScreenLifecycleProvider, val screenLifecycleProvider: ScreenLifecycleProvider,
@ -575,7 +573,6 @@ internal class WalletModel @Inject constructor(
} }
private fun enableNotificationsIfNeeded() { private fun enableNotificationsIfNeeded() {
if (!notificationsFeatureToggles.isNotificationsEnabled) return
modelScope.launch { modelScope.launch {
val isUserAllowToEnableNotifications = notificationsRepository.isUserAllowToSubscribeOnPushNotifications() val isUserAllowToEnableNotifications = notificationsRepository.isUserAllowToSubscribeOnPushNotifications()
if (isUserAllowToEnableNotifications) { if (isUserAllowToEnableNotifications) {

View file

@ -341,7 +341,6 @@ include(":domain:blockaid")
include(":domain:blockaid:models") include(":domain:blockaid:models")
include(":domain:notifications") include(":domain:notifications")
include(":domain:notifications:models") include(":domain:notifications:models")
include(":domain:notifications:toggles")
include(":domain:express") include(":domain:express")
include(":domain:express:models") include(":domain:express:models")
include(":domain:swap") include(":domain:swap")