Updated on 2026-08-14

This commit is contained in:
Tangem 2026-06-10 13:30:48 +03:00
parent 6c41eefe0b
commit 044efe36c5
19 changed files with 540 additions and 35 deletions

View file

@ -19,6 +19,7 @@ dependencies {
implementation(projects.features.nft.api)
implementation(projects.features.onboardingV2.api)
implementation(projects.features.pushNotifications.api)
implementation(projects.features.pushNotificationSettings.api)
implementation(projects.features.hotWallet.api)
implementation(projects.features.wallet.api)

View file

@ -63,6 +63,8 @@ internal class PreviewWalletSettingsComponent : WalletSettingsComponent {
isNotificationsEnabled = true,
onCheckedNotificationsChanged = {},
onNotificationsDescriptionClick = {},
isPushNotificationSettingsEnabled = false,
onNotificationSettingsClick = {},
isNotificationsPermissionGranted = false,
onAccessCodeClick = {},
onBackupClick = {},

View file

@ -51,6 +51,7 @@ import com.tangem.feature.walletsettings.utils.ItemsBuilder
import com.tangem.feature.walletsettings.utils.WalletCardItemDelegate
import com.tangem.features.hotwallet.HotWalletFeatureToggles
import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents
import com.tangem.features.pushnotificationsettings.PushNotificationSettingsFeatureToggles
import com.tangem.hot.sdk.model.HotWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.collections.immutable.PersistentList
@ -92,6 +93,7 @@ internal class WalletSettingsModel @Inject constructor(
private val accountListSortingSaver: AccountListSortingSaver,
private val startAssetsDiscoveryUseCase: StartAssetsDiscoveryUseCase,
private val hotWalletFeatureToggles: HotWalletFeatureToggles,
private val pushNotificationSettingsFeatureToggles: PushNotificationSettingsFeatureToggles,
) : Model() {
val params: WalletSettingsComponent.Params = paramsContainer.require()
@ -203,6 +205,8 @@ internal class WalletSettingsModel @Inject constructor(
is UserWallet.Cold -> userWallet.isMultiCurrency
is UserWallet.Hot -> true
}
val isPushNotificationSettingsEnabled =
pushNotificationSettingsFeatureToggles.isPushNotificationSettingsEnabled
return itemsBuilder.buildItems(
userWallet = userWallet,
cardItem = cardItem,
@ -245,6 +249,8 @@ internal class WalletSettingsModel @Inject constructor(
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
onCheckedNotificationsChanged = ::onCheckedNotificationsChange,
onNotificationsDescriptionClick = ::onNotificationsDescriptionClick,
isPushNotificationSettingsEnabled = isPushNotificationSettingsEnabled,
onNotificationSettingsClick = ::onNotificationSettingsClick,
onAccessCodeClick = { onAccessCodeClick(userWallet) },
onBackupClick = ::onBackupClick,
onCardSettingsClick = ::onCardSettingsClick,
@ -252,6 +258,10 @@ internal class WalletSettingsModel @Inject constructor(
)
}
private fun onNotificationSettingsClick() {
router.push(AppRoute.PushNotificationSettings(userWalletId = params.userWalletId))
}
private fun forgetWallet() = modelScope.launch {
val userWallet = getUserWalletUseCase(params.userWalletId)
.getOrNull()

View file

@ -33,6 +33,8 @@ internal class ItemsBuilder @Inject constructor() {
isNotificationsPermissionGranted: Boolean,
onCheckedNotificationsChanged: (Boolean) -> Unit,
onNotificationsDescriptionClick: () -> Unit,
isPushNotificationSettingsEnabled: Boolean,
onNotificationSettingsClick: () -> Unit,
forgetWallet: () -> Unit,
onLinkMoreCardsClick: () -> Unit,
onReferralClick: () -> Unit,
@ -50,20 +52,26 @@ internal class ItemsBuilder @Inject constructor() {
isLinkMoreCardsAvailable = isLinkMoreCardsAvailable,
isReferralAvailable = isReferralAvailable,
isManageTokensAvailable = isManageTokensAvailable,
isPushNotificationSettingsEnabled = isPushNotificationSettingsEnabled,
onLinkMoreCardsClick = onLinkMoreCardsClick,
onReferralClick = onReferralClick,
onManageTokensClick = onManageTokensClick,
onBackupClick = onBackupClick,
onCardSettingsClick = onCardSettingsClick,
onNotificationSettingsClick = onNotificationSettingsClick,
),
)
.addAll(
buildNotificationItems(
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
isNotificationsEnabled = isNotificationsEnabled,
onCheckedNotificationsChanged = onCheckedNotificationsChanged,
onNotificationsDescriptionClick = onNotificationsDescriptionClick,
),
if (isPushNotificationSettingsEnabled) {
emptyList()
} else {
buildNotificationItems(
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
isNotificationsEnabled = isNotificationsEnabled,
onCheckedNotificationsChanged = onCheckedNotificationsChanged,
onNotificationsDescriptionClick = onNotificationsDescriptionClick,
)
},
)
.addAll(
buildNFTItems(
@ -137,11 +145,13 @@ internal class ItemsBuilder @Inject constructor() {
isLinkMoreCardsAvailable: Boolean,
isReferralAvailable: Boolean,
isManageTokensAvailable: Boolean,
isPushNotificationSettingsEnabled: Boolean,
onLinkMoreCardsClick: () -> Unit,
onReferralClick: () -> Unit,
onManageTokensClick: () -> Unit,
onBackupClick: () -> Unit,
onCardSettingsClick: () -> Unit,
onNotificationSettingsClick: () -> Unit,
) = WalletSettingsItemUM.WithItems(
id = "card",
description = null,
@ -207,6 +217,16 @@ internal class ItemsBuilder @Inject constructor() {
add(referralBlock)
}
if (isPushNotificationSettingsEnabled) {
val notificationSettingsBlock = BlockUM(
text = resourceReference(R.string.push_notification_settings_title),
iconRes = R.drawable.ic_push_notification_settings_24,
onClick = onNotificationSettingsClick,
)
add(notificationSettingsBlock)
}
}.toImmutableList(),
)