From 76d8a58ef8a9b9597a226016859425ed6f487578 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Sat, 8 Apr 2023 17:33:21 +0200 Subject: [PATCH] added snackbar --- .../common/snackbar/SnackBarManager.kt | 20 +++++++++++++++ .../common/snackbar/SnackBarMessage.kt | 25 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarManager.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarMessage.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarManager.kt b/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarManager.kt new file mode 100644 index 0000000..ad743d5 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarManager.kt @@ -0,0 +1,20 @@ +package be.ugent.sel.studeez.common.snackbar + +import androidx.annotation.StringRes +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +object SnackbarManager { + private val messages: MutableStateFlow = MutableStateFlow(null) + val snackbarMessages: StateFlow + get() = messages.asStateFlow() + + fun showMessage(@StringRes message: Int) { + messages.value = SnackbarMessage.ResourceSnackbar(message) + } + + fun showMessage(message: SnackbarMessage) { + messages.value = message + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarMessage.kt b/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarMessage.kt new file mode 100644 index 0000000..495ceb1 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/common/snackbar/SnackBarMessage.kt @@ -0,0 +1,25 @@ +package be.ugent.sel.studeez.common.snackbar + +import android.content.res.Resources +import androidx.annotation.StringRes +import be.ugent.sel.studeez.R.string as AppText + +sealed class SnackbarMessage { + class StringSnackbar(val message: String) : SnackbarMessage() + class ResourceSnackbar(@StringRes val message: Int) : SnackbarMessage() + + companion object { + fun SnackbarMessage.toMessage(resources: Resources): String { + return when (this) { + is StringSnackbar -> this.message + is ResourceSnackbar -> resources.getString(this.message) + } + } + + fun Throwable.toSnackbarMessage(): SnackbarMessage { + val message = this.message.orEmpty() + return if (message.isNotBlank()) StringSnackbar(message) + else ResourceSnackbar(AppText.generic_error) + } + } +}