From 8e2449ab4e200d21207f6b4fe1eb4e8f94edb758 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sun, 6 Aug 2023 00:31:48 +0200 Subject: [PATCH] feat: Add MessageBox --- .../ui/components/atoms/MessageBox.kt | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/src/main/java/app/myzel394/locationtest/ui/components/atoms/MessageBox.kt diff --git a/app/src/main/java/app/myzel394/locationtest/ui/components/atoms/MessageBox.kt b/app/src/main/java/app/myzel394/locationtest/ui/components/atoms/MessageBox.kt new file mode 100644 index 0000000..ab6ffd0 --- /dev/null +++ b/app/src/main/java/app/myzel394/locationtest/ui/components/atoms/MessageBox.kt @@ -0,0 +1,85 @@ +package app.myzel394.locationtest.ui.components.atoms + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check +import androidx.compose.material.icons.filled.Error +import androidx.compose.material.icons.filled.Info +import androidx.compose.material.icons.filled.Warning +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp + + +@Composable +fun MessageBox( + modifier: Modifier = Modifier, + type: MessageType, + message: String, + title: String? = null, +) { + val backgroundColor = when(type) { + MessageType.ERROR -> MaterialTheme.colorScheme.errorContainer + MessageType.INFO -> MaterialTheme.colorScheme.tertiaryContainer + MessageType.SUCCESS -> Color.Green.copy(alpha = 0.3f) + MessageType.WARNING -> Color.Yellow.copy(alpha = 0.3f) + } + val textColor = when(type) { + MessageType.ERROR -> MaterialTheme.colorScheme.onError + MessageType.INFO -> MaterialTheme.colorScheme.onTertiary + MessageType.SUCCESS -> Color.Green + MessageType.WARNING -> Color.Yellow + } + + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .clip(MaterialTheme.shapes.medium) + .background(backgroundColor) + .padding(horizontal = 8.dp, vertical = 16.dp) + .then(modifier) + ) { + Icon( + imageVector = when(type) { + MessageType.ERROR -> Icons.Default.Error + MessageType.INFO -> Icons.Default.Info + MessageType.SUCCESS -> Icons.Default.Check + MessageType.WARNING -> Icons.Default.Warning + }, + contentDescription = null, + tint = textColor, + modifier = Modifier.padding(16.dp) + ) + Column { + if (title != null) { + Text( + text = title, + style = MaterialTheme.typography.bodyLarge, + color = textColor, + ) + } + Text( + text = message, + style = MaterialTheme.typography.bodyMedium, + color = textColor, + ) + } + } + +} + +enum class MessageType { + ERROR, + INFO, + SUCCESS, + WARNING, +} \ No newline at end of file