diff --git a/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt b/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt index 575485aae9..cac63e19f7 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/utils/RequestPushPermission.kt @@ -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() } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 3a9681b918..ed7f027de5 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -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) }, ) } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletPushPermissionClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletPushPermissionClickIntents.kt index fe8848daf5..62fec7ce4f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletPushPermissionClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletPushPermissionClickIntents.kt @@ -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)