@@ -2,21 +2,30 @@ package net.thunderbird.feature.notification.api.ui
22
33import androidx.compose.foundation.layout.PaddingValues
44import androidx.compose.foundation.layout.consumeWindowInsets
5+ import androidx.compose.foundation.layout.fillMaxSize
56import androidx.compose.foundation.layout.padding
67import androidx.compose.foundation.verticalScroll
78import androidx.compose.runtime.Composable
9+ import androidx.compose.runtime.getValue
10+ import androidx.compose.runtime.mutableStateOf
11+ import androidx.compose.runtime.remember
12+ import androidx.compose.runtime.setValue
813import androidx.compose.ui.Modifier
14+ import androidx.compose.ui.platform.testTag
15+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
916import app.k9mail.core.ui.compose.designsystem.organism.snackbar.SnackbarHost
1017import app.k9mail.core.ui.compose.designsystem.organism.snackbar.SnackbarHostState
1118import app.k9mail.core.ui.compose.designsystem.organism.snackbar.rememberSnackbarHostState
1219import app.k9mail.core.ui.compose.designsystem.template.Scaffold
1320import app.k9mail.core.ui.compose.designsystem.template.ScaffoldFabPosition
1421import kotlinx.collections.immutable.ImmutableSet
1522import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId
23+ import net.thunderbird.feature.notification.api.ui.InAppNotificationScaffoldDefaults.TEST_TAG_ERROR_NOTIFICATIONS_DIALOG
1624import net.thunderbird.feature.notification.api.ui.InAppNotificationScaffoldDefaults.TEST_TAG_INNER_SCAFFOLD
1725import net.thunderbird.feature.notification.api.ui.InAppNotificationScaffoldDefaults.TEST_TAG_IN_APP_NOTIFICATION_HOST
1826import net.thunderbird.feature.notification.api.ui.InAppNotificationScaffoldDefaults.TEST_TAG_SNACKBAR_HOST
1927import net.thunderbird.feature.notification.api.ui.action.NotificationAction
28+ import net.thunderbird.feature.notification.api.ui.dialog.ErrorNotificationsDialog
2029import net.thunderbird.feature.notification.api.ui.host.DisplayInAppNotificationFlag
2130import net.thunderbird.feature.notification.api.ui.host.rememberInAppNotificationHostStateHolder
2231import net.thunderbird.feature.notification.api.ui.host.visual.SnackbarVisual
@@ -55,6 +64,7 @@ fun InAppNotificationScaffold(
5564 content : @Composable (PaddingValues ) -> Unit ,
5665) {
5766 val hostStateHolder = rememberInAppNotificationHostStateHolder(enabled)
67+ var showErrorNotificationDialog by remember { mutableStateOf(false ) }
5868 Scaffold (
5969 modifier = modifier.testTagAsResourceId(TEST_TAG_INNER_SCAFFOLD ),
6070 topBar = topBar,
@@ -69,7 +79,12 @@ fun InAppNotificationScaffold(
6979 floatingActionButtonPosition = floatingActionButtonPosition,
7080 ) { paddingValues ->
7181 InAppNotificationHost (
72- onActionClick = onNotificationActionClick,
82+ onActionClick = { action ->
83+ when (action) {
84+ NotificationAction .OpenNotificationCentre -> showErrorNotificationDialog = true
85+ else -> onNotificationActionClick(action)
86+ }
87+ },
7388 contentPadding = paddingValues,
7489 hostStateHolder = hostStateHolder,
7590 onSnackbarNotificationEvent = { visual: SnackbarVisual ->
@@ -86,11 +101,24 @@ fun InAppNotificationScaffold(
86101 modifier = Modifier .testTagAsResourceId(TEST_TAG_IN_APP_NOTIFICATION_HOST ),
87102 content = content,
88103 )
104+
105+ if (showErrorNotificationDialog) {
106+ val state by hostStateHolder.currentInAppNotificationHostState.collectAsStateWithLifecycle()
107+ ErrorNotificationsDialog (
108+ visuals = state.bannerInlineVisuals,
109+ onDismiss = { showErrorNotificationDialog = false },
110+ onNotificationActionClick = onNotificationActionClick,
111+ modifier = Modifier
112+ .fillMaxSize()
113+ .testTag(TEST_TAG_ERROR_NOTIFICATIONS_DIALOG ),
114+ )
115+ }
89116 }
90117}
91118
92- object InAppNotificationScaffoldDefaults {
119+ internal object InAppNotificationScaffoldDefaults {
93120 internal const val TEST_TAG_INNER_SCAFFOLD = " ins_inner_scaffold"
94121 internal const val TEST_TAG_IN_APP_NOTIFICATION_HOST = " ins_in_app_notification_host"
95122 internal const val TEST_TAG_SNACKBAR_HOST = " ins_snackbar_host"
123+ internal const val TEST_TAG_ERROR_NOTIFICATIONS_DIALOG = " ins_error_notifications_dialog"
96124}
0 commit comments