From 2c173087a58b504b701d443eab7f56ea881fc062 Mon Sep 17 00:00:00 2001 From: AbronStudio Date: Wed, 6 Aug 2025 11:57:28 +0330 Subject: [PATCH] Refactor: Update UI elements and navigation - Removed bottom padding for the logout button in `SettingsScreen`. - Replaced `Scaffold` with `Column` and removed padding from its content in `SettingsScreen`. - Removed `Spacer` for status bar height in `ChannelSideDrawer`. - Updated padding for the server list in `DiscoverServersList`. - Removed unused `Spacer` at the end of the server list in `DiscoverServersList`. - Applied inner padding to the `Column` in `ChatRouterScreen`. - Reordered "Discover" and "Add Server" buttons and updated their styling in `ChannelSideDrawer`. - Adjusted the server banner height and removed the offset for server info in `ChannelSideDrawer`. --- .../chat/discover/DiscoverServersList.kt | 34 +++--- .../screens/chat/drawer/ChannelSideDrawer.kt | 101 ++++++++---------- .../revolt/screens/chat/ChatRouterScreen.kt | 3 +- .../revolt/screens/settings/SettingsScreen.kt | 30 +++--- 4 files changed, 79 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/discover/DiscoverServersList.kt b/app/src/main/java/chat/revolt/composables/screens/chat/discover/DiscoverServersList.kt index 67ada19d..7f97a9b8 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/discover/DiscoverServersList.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/discover/DiscoverServersList.kt @@ -45,7 +45,7 @@ fun DiscoverServersList( ) { val viewModel = hiltViewModel() val uiState by viewModel.uiState.collectAsState() - + // Handle server invite dialog uiState.selectedInviteCode?.let { inviteCode -> // Find the server with this invite code @@ -63,10 +63,10 @@ fun DiscoverServersList( ) } } - + Column( modifier = Modifier - .padding(vertical = 24.dp, horizontal = 16.dp), + .padding(top = 24.dp, start = 16.dp, end = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { Image( @@ -99,12 +99,15 @@ fun DiscoverServersList( .align(Alignment.CenterHorizontally) ) } + uiState.error != null -> { Text(stringResource(R.string.error)) } + uiState.servers.isEmpty() -> { Text(stringResource(R.string.no_servers_found)) } + else -> { LazyColumn( modifier = Modifier @@ -114,25 +117,25 @@ fun DiscoverServersList( items(uiState.servers) { server -> // Check if the server is already joined val isJoined = isServerAlreadyJoined(server.id) - + ServerItem( server = server, isProcessing = uiState.processingServerId == server.id, isJoined = isServerAlreadyJoined(server.id), - onClick = { + onClick = { if (isJoined) { // If already joined, navigate directly to server channels onJoinToServerSuccess(server.id) } else if (server.inviteCode.isNotEmpty()) { // If not joined, load server data and show invite dialog - viewModel.loadServerDataAndShowDialog(server.inviteCode, server.id) + viewModel.loadServerDataAndShowDialog( + server.inviteCode, + server.id + ) } } ) } - item { - Spacer(modifier = Modifier.height(96.dp)) - } } } } @@ -145,7 +148,7 @@ private fun isServerAlreadyJoined(serverId: String): Boolean { } @Composable - fun ServerItem( +fun ServerItem( server: ServerData, isJoined: Boolean, onClick: () -> Unit, @@ -154,7 +157,7 @@ private fun isServerAlreadyJoined(serverId: String): Boolean { // Calculate alpha values based on disabled state val contentAlpha = if (server.disabled) 0.5f else 1.0f val descriptionAlpha = if (server.disabled) 0.4f else 0.7f - + Card( modifier = Modifier .fillMaxWidth() @@ -175,7 +178,7 @@ private fun isServerAlreadyJoined(serverId: String): Boolean { ) ) Spacer(modifier = Modifier.width(12.dp)) - + Column( modifier = Modifier.weight(1f) ) { @@ -186,9 +189,9 @@ private fun isServerAlreadyJoined(serverId: String): Boolean { alpha = contentAlpha ) ) - + Spacer(modifier = Modifier.height(4.dp)) - + Text( text = server.description, style = MaterialTheme.typography.bodyMedium, @@ -200,7 +203,7 @@ private fun isServerAlreadyJoined(serverId: String): Boolean { ) } Spacer(modifier = Modifier.height(12.dp)) - + if (isProcessing) { CircularProgressIndicator( modifier = Modifier @@ -268,6 +271,7 @@ private fun ServerItemPreview() { isProcessing = false ) } + @Preview @Composable private fun JoinedServerItemPreview() { diff --git a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt index 0d73173c..8a1f2a28 100644 --- a/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt +++ b/app/src/main/java/chat/revolt/composables/screens/chat/drawer/ChannelSideDrawer.kt @@ -37,6 +37,7 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CornerSize +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon @@ -96,6 +97,7 @@ import chat.revolt.composables.screens.chat.discover.DiscoverServersList import chat.revolt.screens.chat.ChatRouterDestination import chat.revolt.screens.chat.LocalIsConnected import chat.revolt.sheets.ChannelContextSheet +import com.google.android.material.color.MaterialColors @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable @@ -203,21 +205,9 @@ fun ChannelSideDrawer( Modifier.width(64.dp), verticalArrangement = Arrangement.spacedBy(6.dp), horizontalAlignment = Alignment.CenterHorizontally, - contentPadding = PaddingValues( - bottom = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() - ) ) { stickyHeader(key = "self") { Column(Modifier.background(MaterialTheme.colorScheme.background)) { - AnimatedVisibility(LocalIsConnected.current) { - Spacer( - Modifier - .height( - WindowInsets.statusBars.asPaddingValues() - .calculateTopPadding() - ) - ) - } UserAvatar( username = RevoltAPI.userCache[RevoltAPI.selfId]?.let { User.resolveDefaultName( @@ -311,6 +301,47 @@ fun ChannelSideDrawer( ) } + + item(key = "discover") { + Box( + Modifier + .padding(8.dp) + .clip(RoundedCornerShape(16.dp)) + .clickable { + onDestinationChanged( + ChatRouterDestination.Discover + ) + } + .size(48.dp) + .background(MaterialTheme.colorScheme.onPrimary), + contentAlignment = Alignment.Center + ) { + Icon( + painter = painterResource(R.drawable.icn_explore_24dp), + contentDescription = stringResource(R.string.discover_alt) + ) + } + } + + item(key = "add_server") { + Box( + Modifier + .padding(8.dp) + .clip(CircleShape) + .clickable { + onShowAddServerSheet() + } + .size(48.dp) + .background(MaterialTheme.colorScheme.onPrimary), + contentAlignment = Alignment.Center + ) { + Icon( + painter = painterResource(R.drawable.icn_add_24dp), + contentDescription = stringResource(R.string.server_plus_alt) + ) + } + } + items( serverList.size, key = { serverList[it].id ?: it } @@ -385,44 +416,6 @@ fun ChannelSideDrawer( } } - item(key = "add_server") { - Box( - Modifier - .padding(8.dp) - .clip(CircleShape) - .clickable { - onShowAddServerSheet() - } - .size(48.dp), - contentAlignment = Alignment.Center - ) { - Icon( - painter = painterResource(R.drawable.icn_add_24dp), - contentDescription = stringResource(R.string.server_plus_alt) - ) - } - } - - item(key = "discover") { - Box( - Modifier - .padding(8.dp) - .clip(CircleShape) - .clickable { - onDestinationChanged( - ChatRouterDestination.Discover - ) - } - .size(48.dp), - contentAlignment = Alignment.Center - ) { - Icon( - painter = painterResource(R.drawable.icn_explore_24dp), - contentDescription = stringResource(R.string.discover_alt) - ) - } - } - if (showSettingsIcon) { item(key = "settings") { Box( @@ -457,10 +450,7 @@ fun ChannelSideDrawer( topEnd = CornerSize(0.dp) ) ) - .height( - serverBannerHeight + WindowInsets.statusBars.asPaddingValues() - .calculateTopPadding() - ) + .height(serverBannerHeight) ) { if (server?.banner != null) { RemoteImage( @@ -492,8 +482,7 @@ fun ChannelSideDrawer( Row( Modifier - .padding(16.dp) - .offset(y = serverInfoOffset), + .padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { CompositionLocalProvider( 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 2899bf3a..548749ce 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material.icons.Icons @@ -928,7 +929,7 @@ fun ChannelNavigator( } } ) { innerPadding -> - Column { + Column(modifier = Modifier.padding(innerPadding)) { when (dest) { is ChatRouterDestination.Settings -> { SettingsScreen( diff --git a/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt b/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt index 5e8e51c9..1290ec80 100644 --- a/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/chat/revolt/screens/settings/SettingsScreen.kt @@ -14,7 +14,6 @@ import androidx.compose.material3.LargeTopAppBar import androidx.compose.material3.ListItem import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable @@ -65,22 +64,20 @@ fun SettingsScreen( val context = LocalContext.current val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() - Scaffold( + Column( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - topBar = { - LargeTopAppBar( - scrollBehavior = scrollBehavior, - title = { - Text( - text = stringResource(R.string.settings), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - }, - ) - }, - ) { pv -> - Box(Modifier.padding(pv)) { + ) { + LargeTopAppBar( + scrollBehavior = scrollBehavior, + title = { + Text( + text = stringResource(R.string.settings), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + }, + ) + Box { Column( modifier = Modifier .fillMaxSize() @@ -377,7 +374,6 @@ fun SettingsScreen( } }, modifier = Modifier - .padding(bottom =92.dp) .testTag("settings_view_logout") .clickable { viewModel.logout()