Updated on 2026-08-14
This commit is contained in:
parent
5aff097e3e
commit
84802cb6e2
14 changed files with 132 additions and 18 deletions
|
|
@ -36,6 +36,7 @@ dependencies {
|
|||
implementation(projects.domain.wallets.models)
|
||||
implementation(projects.domain.demo)
|
||||
implementation(projects.domain.nft)
|
||||
implementation(projects.domain.settings)
|
||||
implementation(projects.domain.notifications.toggles)
|
||||
implementation(projects.domain.notifications.models)
|
||||
implementation(projects.domain.notifications)
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ internal class PreviewWalletSettingsComponent : WalletSettingsComponent {
|
|||
isNotificationsFeatureEnabled = true,
|
||||
onCheckedNotificationsChanged = {},
|
||||
onNotificationsDescriptionClick = {},
|
||||
isNotificationsPermissionGranted = false,
|
||||
),
|
||||
requestPushNotificationsPermission = false,
|
||||
onPushNotificationPermissionGranted = {},
|
||||
|
|
|
|||
|
|
@ -37,4 +37,10 @@ internal sealed class WalletSettingsItemUM {
|
|||
val more: TextReference,
|
||||
val onClick: () -> Unit,
|
||||
) : WalletSettingsItemUM()
|
||||
|
||||
data class NotificationPermission(
|
||||
override val id: String,
|
||||
val title: TextReference,
|
||||
val description: TextReference,
|
||||
) : WalletSettingsItemUM()
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.tangem.feature.walletsettings.model
|
||||
|
||||
import android.os.Build
|
||||
import arrow.core.getOrElse
|
||||
import com.arkivanov.decompose.router.slot.SlotNavigation
|
||||
import com.arkivanov.decompose.router.slot.activate
|
||||
|
|
@ -22,6 +23,7 @@ import com.tangem.domain.nft.DisableWalletNFTUseCase
|
|||
import com.tangem.domain.nft.EnableWalletNFTUseCase
|
||||
import com.tangem.domain.nft.GetWalletNFTEnabledUseCase
|
||||
import com.tangem.domain.notifications.toggles.NotificationsFeatureToggles
|
||||
import com.tangem.domain.settings.repositories.PermissionRepository
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.models.isMultiCurrency
|
||||
import com.tangem.domain.wallets.models.requireColdWallet
|
||||
|
|
@ -65,6 +67,7 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
private val getWalletNotificationsEnabledUseCase: GetWalletNotificationsEnabledUseCase,
|
||||
private val setNotificationsEnabledUseCase: SetNotificationsEnabledUseCase,
|
||||
private val settingsManager: SettingsManager,
|
||||
private val permissionsRepository: PermissionRepository,
|
||||
) : Model() {
|
||||
|
||||
val params: WalletSettingsComponent.Params = paramsContainer.require()
|
||||
|
|
@ -98,6 +101,7 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
isNFTEnabled = nftEnabled,
|
||||
isNotificationsEnabled = notificationsEnabled,
|
||||
isNotificationsFeatureEnabled = notificationsToggles.isNotificationsEnabled,
|
||||
isNotificationsPermissionGranted = isNotificationsPermissionGranted(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
@ -105,6 +109,16 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private fun isNotificationsPermissionGranted(): Boolean {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
permissionsRepository.hasRuntimePermission(
|
||||
android.Manifest.permission.POST_NOTIFICATIONS,
|
||||
)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildItems(
|
||||
userWallet: UserWallet,
|
||||
dialogNavigation: SlotNavigation<DialogConfig>,
|
||||
|
|
@ -113,6 +127,7 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
isNFTEnabled: Boolean,
|
||||
isNotificationsFeatureEnabled: Boolean,
|
||||
isNotificationsEnabled: Boolean,
|
||||
isNotificationsPermissionGranted: Boolean,
|
||||
): PersistentList<WalletSettingsItemUM> = itemsBuilder.buildItems(
|
||||
userWalletId = userWallet.walletId,
|
||||
userWalletName = userWallet.name,
|
||||
|
|
@ -147,6 +162,7 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
onReferralClick = { onReferralClick(userWallet) },
|
||||
isNotificationsEnabled = isNotificationsEnabled,
|
||||
isNotificationsFeatureEnabled = isNotificationsFeatureEnabled,
|
||||
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
|
||||
onCheckedNotificationsChanged = ::onCheckedNotificationsChange,
|
||||
onNotificationsDescriptionClick = ::onNotificationsDescriptionClick,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ import com.tangem.core.ui.components.appbar.models.TopAppBarButtonUM
|
|||
import com.tangem.core.ui.components.block.BlockCard
|
||||
import com.tangem.core.ui.components.block.BlockItem
|
||||
import com.tangem.core.ui.components.items.DescriptionItem
|
||||
import com.tangem.core.ui.components.notifications.Notification
|
||||
import com.tangem.core.ui.components.notifications.NotificationConfig
|
||||
import com.tangem.core.ui.extensions.resolveReference
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
|
|
@ -109,6 +111,10 @@ private fun Content(state: WalletSettingsUM, modifier: Modifier = Modifier) {
|
|||
yOffset = DESCRIPTION_OFFSET,
|
||||
onDescriptionClick = item.onClick,
|
||||
)
|
||||
is WalletSettingsItemUM.NotificationPermission -> NotificationAlertBlock(
|
||||
modifier = itemModifier,
|
||||
model = item,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -216,6 +222,18 @@ private fun SwitchBlock(model: WalletSettingsItemUM.WithSwitch, modifier: Modifi
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun NotificationAlertBlock(model: WalletSettingsItemUM.NotificationPermission, modifier: Modifier = Modifier) {
|
||||
Notification(
|
||||
config = NotificationConfig(
|
||||
title = model.title,
|
||||
subtitle = model.description,
|
||||
iconResId = R.drawable.ic_alert_triangle_20,
|
||||
),
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun DescriptionWithMoreBlock(
|
||||
model: WalletSettingsItemUM.DescriptionWithMore,
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ internal class ItemsBuilder @Inject constructor(
|
|||
onCheckedNFTChange: (Boolean) -> Unit,
|
||||
isNotificationsFeatureEnabled: Boolean,
|
||||
isNotificationsEnabled: Boolean,
|
||||
isNotificationsPermissionGranted: Boolean,
|
||||
onCheckedNotificationsChanged: (Boolean) -> Unit,
|
||||
onNotificationsDescriptionClick: () -> Unit,
|
||||
forgetWallet: () -> Unit,
|
||||
|
|
@ -61,24 +62,34 @@ internal class ItemsBuilder @Inject constructor(
|
|||
onReferralClick = onReferralClick,
|
||||
),
|
||||
)
|
||||
.run {
|
||||
if (isNotificationsFeatureEnabled) {
|
||||
add(
|
||||
buildNotificationsSwitchItem(
|
||||
isNotificationsEnabled,
|
||||
onCheckedNotificationsChanged,
|
||||
),
|
||||
).add(
|
||||
buildNotificationsDescriptionItem(
|
||||
onDescriptionClick = onNotificationsDescriptionClick,
|
||||
),
|
||||
)
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
.addAll(
|
||||
buildNotificationItems(
|
||||
isNotificationsFeatureEnabled = isNotificationsFeatureEnabled,
|
||||
isNotificationsPermissionGranted = isNotificationsPermissionGranted,
|
||||
isNotificationsEnabled = isNotificationsEnabled,
|
||||
onCheckedNotificationsChanged = onCheckedNotificationsChanged,
|
||||
onNotificationsDescriptionClick = onNotificationsDescriptionClick,
|
||||
),
|
||||
)
|
||||
.add(buildForgetItem(forgetWallet))
|
||||
|
||||
private fun buildNotificationItems(
|
||||
isNotificationsFeatureEnabled: Boolean,
|
||||
isNotificationsPermissionGranted: Boolean,
|
||||
isNotificationsEnabled: Boolean,
|
||||
onCheckedNotificationsChanged: (Boolean) -> Unit,
|
||||
onNotificationsDescriptionClick: () -> Unit,
|
||||
): List<WalletSettingsItemUM> {
|
||||
if (!isNotificationsFeatureEnabled) return emptyList()
|
||||
return buildList {
|
||||
if (!isNotificationsPermissionGranted) {
|
||||
add(buildNotificationsPermissionItem())
|
||||
}
|
||||
add(buildNotificationsSwitchItem(isNotificationsEnabled, onCheckedNotificationsChanged))
|
||||
add(buildNotificationsDescriptionItem(onNotificationsDescriptionClick))
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildNameItem(walletName: String, isRenameWalletAvailable: Boolean, renameWallet: () -> Unit) =
|
||||
WalletSettingsItemUM.WithText(
|
||||
id = "wallet_name",
|
||||
|
|
@ -96,6 +107,12 @@ internal class ItemsBuilder @Inject constructor(
|
|||
onCheckedChange = onCheckedNFTChange,
|
||||
)
|
||||
|
||||
private fun buildNotificationsPermissionItem() = WalletSettingsItemUM.NotificationPermission(
|
||||
id = "notifications_permission",
|
||||
title = resourceReference(id = R.string.transaction_notifications_warning_title),
|
||||
description = resourceReference(id = R.string.transaction_notifications_warning_description),
|
||||
)
|
||||
|
||||
private fun buildNotificationsSwitchItem(isNFTEnabled: Boolean, onCheckedNFTChange: (Boolean) -> Unit) =
|
||||
WalletSettingsItemUM.WithSwitch(
|
||||
id = "notifications",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue