Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-01 15:40:30 +05:00
parent 07d5ede58c
commit e1b50efbe0
16 changed files with 21 additions and 222 deletions

View file

@ -3,11 +3,8 @@ package com.tangem.feature.wallet.presentation.wallet.state.model
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
data class PushNotificationsBottomSheetConfig(
val isFirstTimeRequested: Boolean,
val wasInitiallyAsk: Boolean,
val onRequest: () -> Unit,
val onRequestLater: () -> Unit,
val onNeverRequest: () -> Unit,
val onAllow: () -> Unit,
val onDeny: () -> Unit,
val openSettings: () -> Unit,
) : TangemBottomSheetConfigContent

View file

@ -39,7 +39,6 @@ private fun PushNotificationsSheetContent(content: PushNotificationsBottomSheetC
val isClicked = remember { mutableStateOf(false) }
val requestPushPermission = requestPushPermission(
pushPermission = getPushPermissionOrNull(),
isFirstTimeAsking = content.isFirstTimeRequested,
isClicked = isClicked,
onAllow = {
content.onAllow()
@ -49,7 +48,6 @@ private fun PushNotificationsSheetContent(content: PushNotificationsBottomSheetC
content.onDeny()
onDismiss()
},
onOpenSettings = content.openSettings,
)
Column(modifier = Modifier.background(TangemTheme.colors.background.primary)) {
@ -78,13 +76,9 @@ private fun PushNotificationsSheetContent(content: PushNotificationsBottomSheetC
),
) {
SecondaryButton(
text = if (content.wasInitiallyAsk) {
stringResource(R.string.common_later)
} else {
stringResource(R.string.common_cancel)
},
text = stringResource(R.string.common_cancel),
onClick = {
content.onRequestLater()
content.onNeverRequest()
onDismiss()
},
modifier = Modifier.weight(1f),
@ -110,13 +104,10 @@ private fun PushNotificationsSheetContent_Preview() {
TangemThemePreview {
PushNotificationsSheetContent(
PushNotificationsBottomSheetConfig(
isFirstTimeRequested = false,
wasInitiallyAsk = false,
onRequest = {},
onRequestLater = {},
onNeverRequest = {},
onAllow = {},
onDeny = {},
openSettings = {},
),
onDismiss = {},
)

View file

@ -5,7 +5,6 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import arrow.core.getOrElse
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.navigation.settings.SettingsManager
import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
import com.tangem.domain.settings.*
import com.tangem.domain.tokens.RefreshMultiCurrencyWalletQuotesUseCase
@ -63,11 +62,8 @@ internal class WalletViewModel @Inject constructor(
private val walletDeepLinksHandler: WalletDeepLinksHandler,
private val walletNameMigrationUseCase: WalletNameMigrationUseCase,
private val refreshMultiCurrencyWalletQuotesUseCase: RefreshMultiCurrencyWalletQuotesUseCase,
private val shouldInitiallyAskPermissionUseCase: ShouldInitiallyAskPermissionUseCase,
private val isFirstTimeAskingPermissionUseCase: IsFirstTimeAskingPermissionUseCase,
private val shouldAskPermissionUseCase: ShouldAskPermissionUseCase,
private val pushNotificationsFeatureToggles: PushNotificationsFeatureToggles,
private val settingsManager: SettingsManager,
analyticsEventsHandler: AnalyticsEventHandler,
) : ViewModel() {
@ -157,26 +153,14 @@ internal class WalletViewModel @Inject constructor(
delay(timeMillis = 1_800)
val isFirstTimeRequested = isFirstTimeAskingPermissionUseCase(PUSH_PERMISSION).getOrElse { true }
val wasInitiallyAsk = shouldInitiallyAskPermissionUseCase(PUSH_PERMISSION).getOrElse { true }
val onRequestLater: (Boolean) -> Unit = { isUserDismissed ->
if (wasInitiallyAsk) {
clickIntents.onDelayAskPushPermission(isUserDismissed)
} else {
clickIntents.onNeverAskPushPermission(isUserDismissed)
}
}
stateHolder.showBottomSheet(
content = PushNotificationsBottomSheetConfig(
isFirstTimeRequested = isFirstTimeRequested,
wasInitiallyAsk = wasInitiallyAsk,
onRequest = clickIntents::onRequestPushPermission,
onRequestLater = { onRequestLater(false) },
onNeverRequest = { clickIntents.onNeverAskPushPermission(false) },
onAllow = clickIntents::onAllowPushPermission,
onDeny = clickIntents::onDenyPushPermission,
openSettings = settingsManager::openSettings,
),
onDismiss = { onRequestLater(true) },
onDismiss = { clickIntents.onNeverAskPushPermission(true) },
)
}
}

View file

@ -2,9 +2,7 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels.intents
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.domain.settings.DelayPermissionRequestUseCase
import com.tangem.domain.settings.NeverRequestPermissionUseCase
import com.tangem.domain.settings.SetFirstTimeAskingPermissionUseCase
import com.tangem.features.pushnotifications.api.analytics.PushNotificationAnalyticEvents
import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION
import dagger.hilt.android.scopes.ViewModelScoped
@ -15,8 +13,6 @@ internal interface WalletPushPermissionClickIntents {
fun onRequestPushPermission()
fun onDelayAskPushPermission(isUserDismissed: Boolean)
fun onNeverAskPushPermission(isUserDismissed: Boolean)
fun onDenyPushPermission()
@ -26,9 +22,7 @@ internal interface WalletPushPermissionClickIntents {
@ViewModelScoped
internal class WalletPushPermissionClickIntentsImplementor @Inject constructor(
private val setFirstTimeAskingPermissionUseCase: SetFirstTimeAskingPermissionUseCase,
private val neverRequestPermissionUseCase: NeverRequestPermissionUseCase,
private val delayPermissionRequestUseCase: DelayPermissionRequestUseCase,
private val analyticsEventHandler: AnalyticsEventHandler,
) : BaseWalletClickIntents(), WalletPushPermissionClickIntents {
@ -38,27 +32,13 @@ internal class WalletPushPermissionClickIntentsImplementor @Inject constructor(
analyticsEventHandler.send(
PushNotificationAnalyticEvents.ButtonAllow(AnalyticsParam.ScreensSources.Main),
)
viewModelScope.launch {
setFirstTimeAskingPermissionUseCase(PUSH_PERMISSION)
}
}
override fun onDelayAskPushPermission(isUserDismissed: Boolean) {
if (!isUserDismissedDialog) return
isUserDismissedDialog = isUserDismissed
viewModelScope.launch {
analyticsEventHandler.send(
PushNotificationAnalyticEvents.ButtonLater(AnalyticsParam.ScreensSources.Main),
)
delayPermissionRequestUseCase(PUSH_PERMISSION)
}
}
override fun onNeverAskPushPermission(isUserDismissed: Boolean) {
if (!isUserDismissedDialog) return
isUserDismissedDialog = isUserDismissed
viewModelScope.launch {
analyticsEventHandler.send(PushNotificationAnalyticEvents.ButtonCancel)
PushNotificationAnalyticEvents.ButtonCancel(AnalyticsParam.ScreensSources.Main)
neverRequestPermissionUseCase(PUSH_PERMISSION)
}
}