From 6bfe417b9253b9bd01564fb675603671c97a22e8 Mon Sep 17 00:00:00 2001 From: Infi Date: Wed, 23 Jul 2025 04:32:26 +0200 Subject: [PATCH] feat: update system messages design Signed-off-by: Infi --- .../revolt/composables/chat/SystemMessage.kt | 74 ++++++++++++++----- .../res/drawable/icn_contract_edit_24dp.xml | 10 +++ .../main/res/drawable/icn_door_open_24dp.xml | 10 +++ app/src/main/res/drawable/icn_gavel_24dp.xml | 10 +++ .../main/res/drawable/icn_group_add_24dp.xml | 10 +++ .../res/drawable/icn_group_remove_24dp.xml | 10 +++ app/src/main/res/drawable/icn_info_24dp.xml | 10 +++ .../icn_ink_highlighter_move_24dp.xml | 11 +++ app/src/main/res/drawable/icn_key_24dp.xml | 10 +++ .../drawable/icn_landscape_2_edit_24dp.xml | 10 +++ .../drawable/icn_sports_and_outdoors_24dp.xml | 10 +++ .../res/drawable/icn_waving_hand_24dp.xml | 10 +++ 12 files changed, 167 insertions(+), 18 deletions(-) create mode 100644 app/src/main/res/drawable/icn_contract_edit_24dp.xml create mode 100644 app/src/main/res/drawable/icn_door_open_24dp.xml create mode 100644 app/src/main/res/drawable/icn_gavel_24dp.xml create mode 100644 app/src/main/res/drawable/icn_group_add_24dp.xml create mode 100644 app/src/main/res/drawable/icn_group_remove_24dp.xml create mode 100644 app/src/main/res/drawable/icn_info_24dp.xml create mode 100644 app/src/main/res/drawable/icn_ink_highlighter_move_24dp.xml create mode 100644 app/src/main/res/drawable/icn_key_24dp.xml create mode 100644 app/src/main/res/drawable/icn_landscape_2_edit_24dp.xml create mode 100644 app/src/main/res/drawable/icn_sports_and_outdoors_24dp.xml create mode 100644 app/src/main/res/drawable/icn_waving_hand_24dp.xml diff --git a/app/src/main/java/chat/revolt/composables/chat/SystemMessage.kt b/app/src/main/java/chat/revolt/composables/chat/SystemMessage.kt index e743ea39..776ef49f 100644 --- a/app/src/main/java/chat/revolt/composables/chat/SystemMessage.kt +++ b/app/src/main/java/chat/revolt/composables/chat/SystemMessage.kt @@ -8,19 +8,21 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Info +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialShapes import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text +import androidx.compose.material3.toShape import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider 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.graphics.Shape import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -184,7 +186,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si when (type) { SystemMessageType.CHANNEL_OWNERSHIP_CHANGED -> { Icon( - painter = painterResource(R.drawable.ic_key_arrow_right_24dp), + painter = painterResource(R.drawable.icn_key_24dp), contentDescription = stringResource(R.string.system_message_ownership_changed_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -193,7 +195,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.CHANNEL_ICON_CHANGED -> { Icon( - painter = painterResource(R.drawable.ic_image_multiple_24dp), + painter = painterResource(R.drawable.icn_landscape_2_edit_24dp), contentDescription = stringResource( R.string.system_message_channel_icon_changed_alt ), @@ -204,7 +206,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.CHANNEL_DESCRIPTION_CHANGED -> { Icon( - painter = painterResource(R.drawable.ic_text_box_multiple_24dp), + painter = painterResource(R.drawable.icn_contract_edit_24dp), contentDescription = stringResource( R.string.system_message_channel_description_changed_alt ), @@ -215,7 +217,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.CHANNEL_RENAMED -> { Icon( - painter = painterResource(R.drawable.ic_cursor_text_24dp), + painter = painterResource(R.drawable.icn_ink_highlighter_move_24dp), contentDescription = stringResource(R.string.system_message_channel_renamed_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -224,7 +226,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_REMOVE -> { Icon( - painter = painterResource(R.drawable.ic_account_cancel_24dp), + painter = painterResource(R.drawable.icn_group_remove_24dp), contentDescription = stringResource(R.string.system_message_user_removed_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -233,7 +235,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_ADDED -> { Icon( - painter = painterResource(R.drawable.ic_account_plus_24dp), + painter = painterResource(R.drawable.icn_group_add_24dp), contentDescription = stringResource(R.string.system_message_user_added_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -242,7 +244,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_BANNED -> { Icon( - painter = painterResource(R.drawable.ic_gavel_24dp), + painter = painterResource(R.drawable.icn_gavel_24dp), contentDescription = stringResource(R.string.system_message_user_banned_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -251,7 +253,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_KICKED -> { Icon( - painter = painterResource(R.drawable.ic_shield_24dp), + painter = painterResource(R.drawable.icn_sports_and_outdoors_24dp), contentDescription = stringResource(R.string.system_message_user_kicked_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -260,7 +262,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_LEFT -> { Icon( - painter = painterResource(R.drawable.ic_account_arrow_left_24dp), + painter = painterResource(R.drawable.icn_door_open_24dp), contentDescription = stringResource(R.string.system_message_user_left_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -269,16 +271,16 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si SystemMessageType.USER_JOINED -> { Icon( - painter = painterResource(R.drawable.ic_account_arrow_right_24dp), + painter = painterResource(R.drawable.icn_waving_hand_24dp), contentDescription = stringResource(R.string.system_message_user_joined_alt), tint = LocalContentColor.current, - modifier = modifier.size(size) + modifier = modifier.size(size), ) } SystemMessageType.TEXT -> { Icon( - imageVector = Icons.Default.Info, + painter = painterResource(R.drawable.icn_info_24dp), contentDescription = stringResource(R.string.system_message_text_alt), tint = LocalContentColor.current, modifier = modifier.size(size) @@ -287,6 +289,36 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si } } +@OptIn(ExperimentalMaterial3ExpressiveApi::class) +@Composable +private fun shapeForType(type: SystemMessageType): Shape { + return when (type) { + SystemMessageType.CHANNEL_OWNERSHIP_CHANGED -> MaterialShapes.Slanted + SystemMessageType.CHANNEL_ICON_CHANGED -> MaterialShapes.Pentagon + SystemMessageType.CHANNEL_DESCRIPTION_CHANGED -> MaterialShapes.Gem + SystemMessageType.CHANNEL_RENAMED -> MaterialShapes.Pill + SystemMessageType.USER_REMOVE -> MaterialShapes.Flower + SystemMessageType.USER_ADDED -> MaterialShapes.Sunny + SystemMessageType.USER_BANNED -> MaterialShapes.Burst + SystemMessageType.USER_KICKED -> MaterialShapes.SoftBurst + SystemMessageType.USER_LEFT -> MaterialShapes.Cookie4Sided + SystemMessageType.USER_JOINED -> MaterialShapes.Cookie9Sided + SystemMessageType.TEXT -> MaterialShapes.Square + }.toShape() +} + +// TODO - find the best colours for each type +@Composable +private fun backgroundColourForType(type: SystemMessageType): Color { + return MaterialTheme.colorScheme.primaryContainer +} + +@Composable +private fun contentColourForType(type: SystemMessageType): Color { + return MaterialTheme.colorScheme.onPrimaryContainer +} + +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun SystemMessageIconWithBackground( type: SystemMessageType, @@ -296,10 +328,16 @@ fun SystemMessageIconWithBackground( Box( contentAlignment = Alignment.Center, modifier = modifier - .clip(CircleShape) - .background(MaterialTheme.colorScheme.primary.copy(alpha = 0.3f)) + .clip(shapeForType(type)) + .background( + color = backgroundColourForType(type), + ) .size(size) ) { - SystemMessageIcon(type = type) + CompositionLocalProvider( + LocalContentColor provides contentColourForType(type), + ) { + SystemMessageIcon(type = type) + } } } diff --git a/app/src/main/res/drawable/icn_contract_edit_24dp.xml b/app/src/main/res/drawable/icn_contract_edit_24dp.xml new file mode 100644 index 00000000..74d87ca3 --- /dev/null +++ b/app/src/main/res/drawable/icn_contract_edit_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_door_open_24dp.xml b/app/src/main/res/drawable/icn_door_open_24dp.xml new file mode 100644 index 00000000..fc5ac4d7 --- /dev/null +++ b/app/src/main/res/drawable/icn_door_open_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_gavel_24dp.xml b/app/src/main/res/drawable/icn_gavel_24dp.xml new file mode 100644 index 00000000..9c3d180f --- /dev/null +++ b/app/src/main/res/drawable/icn_gavel_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_group_add_24dp.xml b/app/src/main/res/drawable/icn_group_add_24dp.xml new file mode 100644 index 00000000..8da13774 --- /dev/null +++ b/app/src/main/res/drawable/icn_group_add_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_group_remove_24dp.xml b/app/src/main/res/drawable/icn_group_remove_24dp.xml new file mode 100644 index 00000000..31387d9d --- /dev/null +++ b/app/src/main/res/drawable/icn_group_remove_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_info_24dp.xml b/app/src/main/res/drawable/icn_info_24dp.xml new file mode 100644 index 00000000..3186ebff --- /dev/null +++ b/app/src/main/res/drawable/icn_info_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_ink_highlighter_move_24dp.xml b/app/src/main/res/drawable/icn_ink_highlighter_move_24dp.xml new file mode 100644 index 00000000..1b4f58e0 --- /dev/null +++ b/app/src/main/res/drawable/icn_ink_highlighter_move_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/icn_key_24dp.xml b/app/src/main/res/drawable/icn_key_24dp.xml new file mode 100644 index 00000000..e0df275b --- /dev/null +++ b/app/src/main/res/drawable/icn_key_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_landscape_2_edit_24dp.xml b/app/src/main/res/drawable/icn_landscape_2_edit_24dp.xml new file mode 100644 index 00000000..bbab5311 --- /dev/null +++ b/app/src/main/res/drawable/icn_landscape_2_edit_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_sports_and_outdoors_24dp.xml b/app/src/main/res/drawable/icn_sports_and_outdoors_24dp.xml new file mode 100644 index 00000000..26841394 --- /dev/null +++ b/app/src/main/res/drawable/icn_sports_and_outdoors_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/icn_waving_hand_24dp.xml b/app/src/main/res/drawable/icn_waving_hand_24dp.xml new file mode 100644 index 00000000..61c395b9 --- /dev/null +++ b/app/src/main/res/drawable/icn_waving_hand_24dp.xml @@ -0,0 +1,10 @@ + + +