diff --git a/app/src/main/java/chat/revolt/components/chat/SystemMessage.kt b/app/src/main/java/chat/revolt/components/chat/SystemMessage.kt
index 24c84bc1..5ccf816e 100644
--- a/app/src/main/java/chat/revolt/components/chat/SystemMessage.kt
+++ b/app/src/main/java/chat/revolt/components/chat/SystemMessage.kt
@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
@@ -27,6 +28,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import chat.revolt.R
import chat.revolt.api.schemas.Message
+import chat.revolt.components.generic.UIMarkdown
enum class SystemMessageType(val type: String) {
CHANNEL_OWNERSHIP_CHANGED("channel_ownership_changed"),
@@ -42,12 +44,16 @@ enum class SystemMessageType(val type: String) {
TEXT("text")
}
+fun String?.mention(): String {
+ return "<@$this>"
+}
+
@Composable
fun SystemMessage(message: Message) {
if (message.system == null) return
val systemMessageType =
- SystemMessageType.values().firstOrNull { it.type == message.system.type }
+ SystemMessageType.entries.firstOrNull { it.type == message.system.type }
if (systemMessageType == null) {
Text(text = message.system.toString())
@@ -62,7 +68,9 @@ fun SystemMessage(message: Message) {
) {
Row(
verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.padding(horizontal = 10.dp, vertical = 4.dp)
+ modifier = Modifier
+ .padding(horizontal = 10.dp, vertical = 4.dp)
+ .fillMaxWidth()
) {
SystemMessageIconWithBackground(type = systemMessageType)
@@ -70,49 +78,101 @@ fun SystemMessage(message: Message) {
when (systemMessageType) {
SystemMessageType.CHANNEL_OWNERSHIP_CHANGED -> {
- Text(
- text = "Channel ownership changed from ${message.system.from} to ${message.system.to}"
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_ownership_changed,
+ message.system.from.mention(),
+ message.system.to.mention()
+ )
)
}
SystemMessageType.CHANNEL_ICON_CHANGED -> {
- Text(text = "Channel icon changed by ${message.system.by}")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_channel_icon_changed,
+ message.system.by.mention()
+ )
+ )
}
SystemMessageType.CHANNEL_DESCRIPTION_CHANGED -> {
- Text(text = "Channel description changed by ${message.system.by}")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_channel_description_changed,
+ message.system.by.mention()
+ )
+ )
}
SystemMessageType.CHANNEL_RENAMED -> {
- Text(text = "Channel renamed to ${message.system.name} by ${message.system.by}")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_channel_renamed,
+ message.system.by.mention(),
+ "**${message.system.name ?: stringResource(R.string.unknown)}**"
+ )
+ )
}
SystemMessageType.USER_REMOVE -> {
- Text(text = "User ${message.system.id} removed by ${message.system.by}")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_removed,
+ message.system.by.mention(),
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.USER_ADDED -> {
- Text(text = "User ${message.system.id} added by ${message.system.by}")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_added,
+ message.system.by.mention(),
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.USER_BANNED -> {
- Text(text = "User ${message.system.id} banned")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_banned,
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.USER_KICKED -> {
- Text(text = "User ${message.system.id} kicked")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_kicked,
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.USER_LEFT -> {
- Text(text = "User ${message.system.id} left")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_left,
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.USER_JOINED -> {
- Text(text = "User ${message.system.id} joined")
+ UIMarkdown(
+ stringResource(
+ R.string.system_message_user_joined,
+ message.system.id.mention()
+ )
+ )
}
SystemMessageType.TEXT -> {
- message.system.content?.let { Text(text = it) }
+ message.system.content?.let { UIMarkdown(it) }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dca624ee..5100a2ac 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -177,6 +177,17 @@
User joined
System message
+ %1$s transferred ownership to %2$s
+ %1$s changed the channel icon
+ %1$s changed the channel description
+ %1$s renamed the channel to %2$s
+ %1$s removed %2$s
+ %1$s added %2$s
+ %1$s has been banned
+ %1$s has been kicked
+ %1$s left
+ %1$s joined
+
Today
Yesterday
%1$d days ago