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`.
This commit is contained in:
parent
e2efb6b8fa
commit
2c173087a5
|
|
@ -45,7 +45,7 @@ fun DiscoverServersList(
|
|||
) {
|
||||
val viewModel = hiltViewModel<DiscoverServersListViewModel>()
|
||||
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() {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue