Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-31 10:47:34 +05:00
parent d4a1d04023
commit 33764123ba
3 changed files with 22 additions and 15 deletions

View file

@ -26,11 +26,10 @@ fun requestPushPermission(
val permissionState = pushPermission?.let { permission ->
val tempPermissionState = rememberPermissionState(permission = permission)
rememberPermissionState(permission = permission) {
when {
it -> onAllow()
!tempPermissionState.status.shouldShowRationale && !isFirstTimeAsking -> onOpenSettings()
else -> onDeny()
}
val isGranted = tempPermissionState.status.isGranted
val shouldShowRationale = tempPermissionState.status.shouldShowRationale
if (isGranted && !shouldShowRationale && !isFirstTimeAsking) onOpenSettings()
}
}

View file

@ -159,22 +159,24 @@ internal class WalletViewModel @Inject constructor(
val isFirstTimeRequested = isFirstTimeAskingPermissionUseCase(PUSH_PERMISSION).getOrElse { true }
val wasInitiallyAsk = shouldInitiallyAskPermissionUseCase(PUSH_PERMISSION).getOrElse { true }
val onRequestLater: () -> Unit = if (wasInitiallyAsk) {
clickIntents::onDelayAskPushPermission
} else {
clickIntents::onNeverAskPushPermission
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,
onRequestLater = { onRequestLater(false) },
onAllow = clickIntents::onAllowPushPermission,
onDeny = clickIntents::onDenyPushPermission,
openSettings = settingsManager::openSettings,
),
onDismiss = onRequestLater,
onDismiss = { onRequestLater(true) },
)
}
}

View file

@ -15,9 +15,9 @@ internal interface WalletPushPermissionClickIntents {
fun onRequestPushPermission()
fun onDelayAskPushPermission()
fun onDelayAskPushPermission(isUserDismissed: Boolean)
fun onNeverAskPushPermission()
fun onNeverAskPushPermission(isUserDismissed: Boolean)
fun onDenyPushPermission()
@ -32,7 +32,9 @@ internal class WalletPushPermissionClickIntentsImplementor @Inject constructor(
private val analyticsEventHandler: AnalyticsEventHandler,
) : BaseWalletClickIntents(), WalletPushPermissionClickIntents {
private var isUserDismissedDialog: Boolean = true
override fun onRequestPushPermission() {
isUserDismissedDialog = false
analyticsEventHandler.send(
PushNotificationAnalyticEvents.ButtonAllow(AnalyticsParam.ScreensSources.Main),
)
@ -41,7 +43,9 @@ internal class WalletPushPermissionClickIntentsImplementor @Inject constructor(
}
}
override fun onDelayAskPushPermission() {
override fun onDelayAskPushPermission(isUserDismissed: Boolean) {
if (!isUserDismissedDialog) return
isUserDismissedDialog = isUserDismissed
viewModelScope.launch {
analyticsEventHandler.send(
PushNotificationAnalyticEvents.ButtonLater(AnalyticsParam.ScreensSources.Main),
@ -50,7 +54,9 @@ internal class WalletPushPermissionClickIntentsImplementor @Inject constructor(
}
}
override fun onNeverAskPushPermission() {
override fun onNeverAskPushPermission(isUserDismissed: Boolean) {
if (!isUserDismissedDialog) return
isUserDismissedDialog = isUserDismissed
viewModelScope.launch {
analyticsEventHandler.send(PushNotificationAnalyticEvents.ButtonCancel)
neverRequestPermissionUseCase(PUSH_PERMISSION)