From cfb68f0ed60c94d794fbf7d6372f396be8dc67bf Mon Sep 17 00:00:00 2001 From: AbronStudio Date: Tue, 5 Aug 2025 11:41:48 +0330 Subject: [PATCH] Refactor: Update DiscoverServersList and related files - Updated `DiscoverServersList` to refine UI elements: - Removed background modifier and lazy list state. - Adjusted padding, spacing, and image resources for server items. - Replaced `UserAvatar` with a generic `Image` for server icons. - Added an `IconButton` for server selection. - Added extra space at the bottom of list. - Simplified `DiscoverViewModel` by removing filtering logic, selected category, search query, and server acknowledgement functionality. - Streamlined `ServerData` in `ServerDataRepository.kt` by removing several fields: `iconUrl`, `bannerUrl`, `memberCount`, `category`, `tags`, `isVerified`, and `isOfficial`. - Added a new drawable resource `three_person.xml`. - Updated `ChannelSideDrawer.kt` to use `safeDrawingPadding()` for better handling of system UI elements. --- .../googlesheets/ServerDataRepository.kt | 16 +---- .../chat/discover/DiscoverServersList.kt | 62 +++++++++++-------- .../screens/chat/drawer/ChannelSideDrawer.kt | 2 + .../screens/discover/DiscoverViewModel.kt | 59 ------------------ app/src/main/res/drawable/three_person.xml | 9 +++ 5 files changed, 48 insertions(+), 100 deletions(-) create mode 100644 app/src/main/res/drawable/three_person.xml diff --git a/app/src/main/java/chat/revolt/api/routes/googlesheets/ServerDataRepository.kt b/app/src/main/java/chat/revolt/api/routes/googlesheets/ServerDataRepository.kt index 51172444..41f42659 100644 --- a/app/src/main/java/chat/revolt/api/routes/googlesheets/ServerDataRepository.kt +++ b/app/src/main/java/chat/revolt/api/routes/googlesheets/ServerDataRepository.kt @@ -24,13 +24,6 @@ class ServerDataRepository { id = rowData["id"] ?: "", name = rowData["name"] ?: "", description = rowData["description"] ?: "", - iconUrl = rowData["iconUrl"] ?: "", - bannerUrl = rowData["bannerUrl"] ?: "", - memberCount = rowData["memberCount"]?.toIntOrNull() ?: 0, - category = rowData["category"] ?: "", - tags = rowData["tags"]?.split(",")?.map { it.trim() } ?: emptyList(), - isVerified = rowData["isVerified"]?.toBoolean() ?: false, - isOfficial = rowData["isOfficial"]?.toBoolean() ?: false ) } emit(servers) @@ -65,13 +58,6 @@ data class ServerData( val id: String, val name: String, val description: String, - val iconUrl: String, - val bannerUrl: String, - val memberCount: Int, - val category: String, - val tags: List, - val isVerified: Boolean, - val isOfficial: Boolean ) /** @@ -84,4 +70,4 @@ data class ServerCategory( val description: String, val iconName: String, val sortOrder: Int -) \ No newline at end of file +) \ No newline at end of file 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 ead5867f..1d483bed 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 @@ -1,7 +1,6 @@ package chat.revolt.composables.screens.chat.discover import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -11,14 +10,12 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.Card import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -26,18 +23,15 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import chat.revolt.R import chat.revolt.api.routes.googlesheets.ServerData -import chat.revolt.composables.generic.NonIdealState -import chat.revolt.composables.generic.UserAvatar @Composable fun DiscoverServersList() { @@ -57,22 +51,22 @@ fun DiscoverServersList() { painter = painterResource(R.drawable.discover_character_image), contentDescription = null, ) - + Text( text = stringResource(R.string.discover_servers), style = MaterialTheme.typography.headlineMedium ) - + Spacer(modifier = Modifier.height(8.dp)) - + Text( text = stringResource(R.string.discover_servers_description), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium ) - + Spacer(modifier = Modifier.height(16.dp)) - + when { isLoading -> { CircularProgressIndicator( @@ -89,7 +83,6 @@ fun DiscoverServersList() { } else -> { LazyColumn( - state = rememberLazyListState(), modifier = Modifier .fillMaxSize() .weight(1f) @@ -100,6 +93,9 @@ fun DiscoverServersList() { onClick = { /* Handle server selection */ } ) } + item { + Spacer(modifier = Modifier.height(96.dp)) + } } } } @@ -120,11 +116,15 @@ fun ServerItem( Row( modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .padding(8.dp), verticalAlignment = Alignment.CenterVertically ) { - - Spacer(modifier = Modifier.width(16.dp)) + Image( + painter = painterResource(R.drawable.three_person), + contentDescription = "", + colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.onBackground) + ) + Spacer(modifier = Modifier.width(12.dp)) Column( modifier = Modifier.weight(1f) @@ -132,7 +132,6 @@ fun ServerItem( Text( text = server.name, style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold ) Spacer(modifier = Modifier.height(4.dp)) @@ -140,17 +139,28 @@ fun ServerItem( Text( text = server.description, style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onBackground.copy( + alpha = 0.7f, + ), maxLines = 2, overflow = TextOverflow.Ellipsis ) - - Spacer(modifier = Modifier.height(4.dp)) - - Text( - text = "${server.memberCount} members", - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) - ) + } + Spacer(modifier = Modifier.height(12.dp)) + IconButton( + onClick = onClick, + ) { + Box( + modifier = Modifier + .fillMaxSize() + ) { + Image( + painter = painterResource(R.drawable.icn_arrow_forward_24dp), + contentDescription = "", + modifier = Modifier + .align(Alignment.Center) + ) + } } } } 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 dabeaf3f..e185e316 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 @@ -29,6 +29,8 @@ import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSize +import androidx.compose.foundation.layout.safeContentPadding +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.width diff --git a/app/src/main/java/chat/revolt/screens/discover/DiscoverViewModel.kt b/app/src/main/java/chat/revolt/screens/discover/DiscoverViewModel.kt index 426c55f6..eb86575e 100644 --- a/app/src/main/java/chat/revolt/screens/discover/DiscoverViewModel.kt +++ b/app/src/main/java/chat/revolt/screens/discover/DiscoverViewModel.kt @@ -8,7 +8,6 @@ import androidx.lifecycle.viewModelScope import chat.revolt.api.routes.googlesheets.ServerCategory import chat.revolt.api.routes.googlesheets.ServerData import chat.revolt.api.routes.googlesheets.ServerDataRepository -import chat.revolt.api.routes.server.ackServer import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.launch @@ -27,14 +26,6 @@ class DiscoverViewModel @Inject constructor( var uiState by mutableStateOf(DiscoverUiState.Loading) private set - // Selected category for filtering - var selectedCategory by mutableStateOf(null) - private set - - // Search query for filtering - var searchQuery by mutableStateOf("") - private set - // Initialize the ViewModel init { loadServerData() @@ -68,56 +59,6 @@ class DiscoverViewModel @Inject constructor( } } } - - /** - * Sets the selected category for filtering - * @param categoryId The ID of the category to select, or null to clear selection - */ - fun selectCategory(categoryId: String?) { - selectedCategory = categoryId - } - - /** - * Updates the search query for filtering - * @param query The search query - */ - fun updateSearchQuery(query: String) { - searchQuery = query - } - - /** - * Returns the filtered list of servers based on selected category and search query - */ - fun getFilteredServers(): List { - val currentState = uiState - if (currentState !is DiscoverUiState.Success) return emptyList() - - return currentState.servers.filter { server -> - val matchesCategory = selectedCategory == null || server.category == selectedCategory - val matchesSearch = searchQuery.isEmpty() || - server.name.contains(searchQuery, ignoreCase = true) || - server.description.contains(searchQuery, ignoreCase = true) || - server.tags.any { it.contains(searchQuery, ignoreCase = true) } - - matchesCategory && matchesSearch - } - } - - /** - * Acknowledges a server selection - * This can be used for analytics or to mark a server as viewed - * @param serverId The ID of the selected server - */ - fun acknowledgeServerSelection(serverId: String) { - viewModelScope.launch { - try { - ackServer(serverId) - } catch (e: Exception) { - // Log but don't change UI state as this is not critical - e.printStackTrace() - } - } - } } /** diff --git a/app/src/main/res/drawable/three_person.xml b/app/src/main/res/drawable/three_person.xml new file mode 100644 index 00000000..01641e09 --- /dev/null +++ b/app/src/main/res/drawable/three_person.xml @@ -0,0 +1,9 @@ + + +