diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 3d6bb5f29..442707edd 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.ui +import android.content.Context import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -52,6 +53,7 @@ import androidx.compose.ui.composed import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics @@ -71,7 +73,12 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors -import com.google.samples.apps.nowinandroid.core.ui.SnackbarErrorHandler +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError.Custom +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError.Default +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError.Exception +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError.Offline +import com.google.samples.apps.nowinandroid.core.ui.SnackbarError.Unknown import com.google.samples.apps.nowinandroid.feature.settings.SettingsDialog import com.google.samples.apps.nowinandroid.navigation.NiaNavHost import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination @@ -83,6 +90,8 @@ fun NiaApp(appState: NiaAppState, modifier: Modifier = Modifier) { appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU var showSettingsDialog by rememberSaveable { mutableStateOf(false) } + val ctx = LocalContext.current + NiaBackground(modifier = modifier) { NiaGradientBackground( gradientColors = if (shouldShowGradientBackground) { @@ -103,6 +112,7 @@ fun NiaApp(appState: NiaAppState, modifier: Modifier = Modifier) { message = notConnectedMessage, duration = Indefinite, ) + snackbarHostState.handleError(ctx, Offline) } } @@ -130,8 +140,6 @@ internal fun NiaApp( val unreadDestinations by appState.topLevelDestinationsWithUnreadResources .collectAsStateWithLifecycle() - val snackbarErrorHandler = SnackbarErrorHandler(snackbarHostState) - if (showSettingsDialog) { SettingsDialog( onDismiss = { onSettingsDismissed() }, @@ -221,7 +229,6 @@ internal fun NiaApp( duration = Short, ) == ActionPerformed }, - snackbarErrorHandler = snackbarErrorHandler, ) } } @@ -325,3 +332,24 @@ private fun NavDestination?.isTopLevelDestinationInHierarchy(destination: TopLev this?.hierarchy?.any { it.route?.contains(destination.name, true) ?: false } ?: false + +suspend fun SnackbarHostState.handleError(ctx: Context, error: SnackbarError<*>) { + // Log the error or show a generic error message + when (error) { + is Custom -> { + showSnackbar(error.data.toString()) + } + is Exception -> { + showSnackbar(ctx.getString(R.string.error_exception)) + } + is Offline -> { + showSnackbar(ctx.getString(R.string.not_connected)) + } + is Default -> { + showSnackbar(ctx.getString(R.string.error_default)) + } + is Unknown -> { + showSnackbar(ctx.getString(R.string.error_unknown)) + } + } +} \ No newline at end of file