From 5cf0943e26338ad8c043e3156fe6b27ef807e54e Mon Sep 17 00:00:00 2001 From: Infi Date: Mon, 20 Feb 2023 03:52:18 +0100 Subject: [PATCH] feat: various M3 related tweaks --- .../revolt/api/realtime/RealtimeSocket.kt | 3 ++ .../revolt/components/chat/MessageField.kt | 10 ++++-- .../revolt/components/generic/UserAvatar.kt | 8 ++--- .../components/screens/chat/DoubleDrawer.kt | 33 ++++++++++++------- .../revolt/screens/chat/ChatRouterScreen.kt | 11 ++++--- .../screens/chat/views/ChannelScreen.kt | 10 +++++- .../revolt/screens/chat/views/HomeScreen.kt | 23 +++++++++++++ 7 files changed, 75 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt index d6fa59b5..40b61a10 100644 --- a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt +++ b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt @@ -161,6 +161,9 @@ object RealtimeSocket { RevoltAPI.channelCache[channelUpdateFrame.id] = existing.mergeWithPartial(channelUpdateFrame.data) } + "Authenticated" -> { + // No effect + } else -> { Log.i("RealtimeSocket", "Unknown frame: $rawFrame") } diff --git a/app/src/main/java/chat/revolt/components/chat/MessageField.kt b/app/src/main/java/chat/revolt/components/chat/MessageField.kt index af3c806f..b9d6bf43 100644 --- a/app/src/main/java/chat/revolt/components/chat/MessageField.kt +++ b/app/src/main/java/chat/revolt/components/chat/MessageField.kt @@ -5,6 +5,7 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions @@ -87,7 +88,8 @@ fun MessageField( unfocusedIndicatorColor = Color.Transparent, disabledIndicatorColor = Color.Transparent, errorIndicatorColor = Color.Transparent, - placeholderColor = Color.Gray + placeholderColor = Color.Gray, + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp) ), contentPadding = PaddingValues(16.dp), leadingIcon = { @@ -126,7 +128,11 @@ fun MessageField( .padding(4.dp) ) } - } + }, + shape = RoundedCornerShape( + topStart = 16.dp, + topEnd = 16.dp + ) ) } ) diff --git a/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt b/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt index 65db6445..7fbfa36b 100644 --- a/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt +++ b/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt @@ -33,10 +33,10 @@ enum class Presence { fun presenceFromStatus(status: String): Presence { return when (status) { - "online" -> Presence.Online - "idle" -> Presence.Idle - "dnd" -> Presence.Dnd - "focus" -> Presence.Focus + "Online" -> Presence.Online + "Idle" -> Presence.Idle + "Busy" -> Presence.Dnd + "Focus" -> Presence.Focus else -> Presence.Offline } } diff --git a/app/src/main/java/chat/revolt/components/screens/chat/DoubleDrawer.kt b/app/src/main/java/chat/revolt/components/screens/chat/DoubleDrawer.kt index 22fd261a..78289719 100644 --- a/app/src/main/java/chat/revolt/components/screens/chat/DoubleDrawer.kt +++ b/app/src/main/java/chat/revolt/components/screens/chat/DoubleDrawer.kt @@ -126,12 +126,6 @@ fun DoubleDrawer( modifier = Modifier .fillMaxHeight() .fillMaxWidth(drawerWeight) - .clip( - RoundedCornerShape( - topEnd = 16.dp, - bottomEnd = 16.dp - ) - ) .align(Alignment.CenterStart) .offset { IntOffset( @@ -140,15 +134,18 @@ fun DoubleDrawer( ) }, ) { - startPanel() + Box( + modifier = Modifier + .fillMaxSize() + .clip(RoundedCornerShape(topEnd = 16.dp, bottomEnd = 16.dp)) + ) { + startPanel() + } } Box( modifier = Modifier .fillMaxSize() - .clip( - RoundedCornerShape(contentCornerRadius) - ) .align(Alignment.Center) .offset { IntOffset( @@ -157,7 +154,13 @@ fun DoubleDrawer( ) }, ) { - content() + Box( + modifier = Modifier + .fillMaxSize() + .clip(RoundedCornerShape(contentCornerRadius)) + ) { + content() + } } Box( @@ -178,7 +181,13 @@ fun DoubleDrawer( ) }, ) { - endPanel() + Box( + modifier = Modifier + .fillMaxSize() + .clip(RoundedCornerShape(topStart = 16.dp, bottomStart = 16.dp)) + ) { + endPanel() + } } } } diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index 021bbe75..91949e0c 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -20,7 +20,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.ViewModel @@ -96,7 +95,11 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = vie val navController = rememberNavController(bottomSheetNavigator) val navBackStackEntry by navController.currentBackStackEntryAsState() - ModalBottomSheetLayout(bottomSheetNavigator = bottomSheetNavigator) { + ModalBottomSheetLayout( + sheetShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), + sheetBackgroundColor = MaterialTheme.colorScheme.surface, + bottomSheetNavigator = bottomSheetNavigator, + ) { Column { AnimatedVisibility(visible = RealtimeSocket.disconnectionState != DisconnectionState.Connected) { DisconnectedNotice( @@ -178,7 +181,7 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = vie Surface( tonalElevation = 1.dp, modifier = Modifier - .padding(vertical = 4.dp) + .padding(start = 4.dp, top = 8.dp, bottom = 8.dp) .clip(RoundedCornerShape(16.dp)) ) { Column( @@ -215,7 +218,7 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = vie Text( text = server?.name ?: stringResource(R.string.unknown), - fontWeight = FontWeight.Black, + style = MaterialTheme.typography.labelLarge, fontSize = 24.sp, modifier = Modifier.padding(16.dp) ) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt index a36abbc5..1638e4f8 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt @@ -11,12 +11,14 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -402,7 +404,13 @@ fun ChannelScreen( navController.navigate("channel/${channel.id}/info") } .fillMaxWidth() - .background(MaterialTheme.colorScheme.surface) + .clip( + RoundedCornerShape( + bottomStart = 16.dp, + bottomEnd = 16.dp + ) + ) + .background(MaterialTheme.colorScheme.surfaceColorAtElevation(1.dp)) .padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { diff --git a/app/src/main/java/chat/revolt/screens/chat/views/HomeScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/HomeScreen.kt index 81539fe0..49752268 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/HomeScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/HomeScreen.kt @@ -1,10 +1,19 @@ package chat.revolt.screens.chat.views import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.ViewModel import androidx.navigation.NavController @@ -33,6 +42,7 @@ class HomeScreenViewModel @Inject constructor( fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hiltViewModel()) { Column { PageHeader(text = stringResource(id = R.string.home)) + LinkOnHome( heading = stringResource(id = R.string.logout), icon = Icons.Default.Close, @@ -44,5 +54,18 @@ fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hi } } }) + + LinkOnHome( + heading = stringResource(id = R.string.settings), + icon = Icons.Default.Settings, + onClick = { + navController.navigate("settings") + }) + Text(buildAnnotatedString { + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append("Note: ") + } + append("Settings are accessible from the top left status icon in the drawer. The link here is temporary until a tutorial is in place.") + }, modifier = Modifier.padding(16.dp)) } } \ No newline at end of file