mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 01:05:20 +00:00
ui
This commit is contained in:
@@ -78,25 +78,37 @@ fun PeerCounter(
|
|||||||
|
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = modifier.clickable { onClick() }
|
modifier = modifier.clickable { onClick() }.padding(end = 8.dp) // Added right margin to match "bitchat" logo spacing
|
||||||
) {
|
) {
|
||||||
if (hasUnreadChannels.values.any { it > 0 }) {
|
if (hasUnreadChannels.values.any { it > 0 }) {
|
||||||
Text(
|
// Channel icon in a Box to ensure consistent size with other icons
|
||||||
text = "#",
|
Box(
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
modifier = Modifier.size(16.dp),
|
||||||
color = Color(0xFF0080FF),
|
contentAlignment = Alignment.Center
|
||||||
fontSize = 16.sp
|
) {
|
||||||
)
|
Text(
|
||||||
|
text = "#",
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = Color(0xFF0080FF),
|
||||||
|
fontSize = 16.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
Spacer(modifier = Modifier.width(6.dp))
|
Spacer(modifier = Modifier.width(6.dp))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasUnreadPrivateMessages.isNotEmpty()) {
|
if (hasUnreadPrivateMessages.isNotEmpty()) {
|
||||||
Text(
|
// Mail icon in a Box to ensure consistent 16.dp size matching the person icon
|
||||||
text = "✉",
|
Box(
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
modifier = Modifier.size(16.dp),
|
||||||
color = Color(0xFFFF8C00),
|
contentAlignment = Alignment.Center
|
||||||
fontSize = 16.sp
|
) {
|
||||||
)
|
Text(
|
||||||
|
text = "✉",
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = Color(0xFFFF8C00),
|
||||||
|
fontSize = 16.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
Spacer(modifier = Modifier.width(6.dp))
|
Spacer(modifier = Modifier.width(6.dp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -256,21 +257,17 @@ fun PeopleSection(
|
|||||||
modifier = Modifier.padding(horizontal = 24.dp, vertical = 8.dp)
|
modifier = Modifier.padding(horizontal = 24.dp, vertical = 8.dp)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// Sort peers: favorites first, then by nickname
|
// Get unread private messages and private chat history for sorting
|
||||||
val sortedPeers = connectedPeers.sortedWith { peer1, peer2 ->
|
val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.observeAsState(emptySet())
|
||||||
val isFav1 = viewModel.isFavorite(peer1)
|
val privateChats by viewModel.privateChats.observeAsState(emptyMap())
|
||||||
val isFav2 = viewModel.isFavorite(peer2)
|
|
||||||
|
// Smart sorting: unread DMs first, then by most recent DM, then favorites, then alphabetical
|
||||||
when {
|
val sortedPeers = connectedPeers.sortedWith(
|
||||||
isFav1 && !isFav2 -> -1
|
compareBy<String> { !hasUnreadPrivateMessages.contains(it) } // Unread DM senders first
|
||||||
!isFav1 && isFav2 -> 1
|
.thenByDescending { privateChats[it]?.maxByOrNull { msg -> msg.timestamp }?.timestamp?.time ?: 0L } // Most recent DM (convert Date to Long)
|
||||||
else -> {
|
.thenBy { !viewModel.isFavorite(it) } // Favorites
|
||||||
val name1 = if (peer1 == nickname) "You" else (peerNicknames[peer1] ?: peer1)
|
.thenBy { (if (it == nickname) "You" else (peerNicknames[it] ?: it)).lowercase() } // Alphabetical
|
||||||
val name2 = if (peer2 == nickname) "You" else (peerNicknames[peer2] ?: peer2)
|
)
|
||||||
name1.compareTo(name2, ignoreCase = true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sortedPeers.forEach { peerID ->
|
sortedPeers.forEach { peerID ->
|
||||||
PeerItem(
|
PeerItem(
|
||||||
@@ -279,6 +276,7 @@ fun PeopleSection(
|
|||||||
signalStrength = peerRSSI[peerID] ?: 0,
|
signalStrength = peerRSSI[peerID] ?: 0,
|
||||||
isSelected = peerID == selectedPrivatePeer,
|
isSelected = peerID == selectedPrivatePeer,
|
||||||
isFavorite = viewModel.isFavorite(peerID),
|
isFavorite = viewModel.isFavorite(peerID),
|
||||||
|
hasUnreadDM = hasUnreadPrivateMessages.contains(peerID),
|
||||||
colorScheme = colorScheme,
|
colorScheme = colorScheme,
|
||||||
onItemClick = { onPrivateChatStart(peerID) },
|
onItemClick = { onPrivateChatStart(peerID) },
|
||||||
onToggleFavorite = { viewModel.toggleFavorite(peerID) }
|
onToggleFavorite = { viewModel.toggleFavorite(peerID) }
|
||||||
@@ -295,6 +293,7 @@ private fun PeerItem(
|
|||||||
signalStrength: Int,
|
signalStrength: Int,
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
isFavorite: Boolean,
|
isFavorite: Boolean,
|
||||||
|
hasUnreadDM: Boolean,
|
||||||
colorScheme: ColorScheme,
|
colorScheme: ColorScheme,
|
||||||
onItemClick: () -> Unit,
|
onItemClick: () -> Unit,
|
||||||
onToggleFavorite: () -> Unit
|
onToggleFavorite: () -> Unit
|
||||||
@@ -310,11 +309,26 @@ private fun PeerItem(
|
|||||||
.padding(horizontal = 24.dp, vertical = 8.dp),
|
.padding(horizontal = 24.dp, vertical = 8.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
// Signal strength indicators
|
// Show mail icon instead of signal strength when user has unread DMs
|
||||||
SignalStrengthIndicator(
|
if (hasUnreadDM) {
|
||||||
signalStrength = signalStrength,
|
Box(
|
||||||
colorScheme = colorScheme
|
modifier = Modifier.width(24.dp),
|
||||||
)
|
contentAlignment = Alignment.Center
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = "✉",
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = Color(0xFFFF8C00), // Orange to match private message theme
|
||||||
|
fontSize = 16.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Signal strength indicators
|
||||||
|
SignalStrengthIndicator(
|
||||||
|
signalStrength = signalStrength,
|
||||||
|
colorScheme = colorScheme
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.width(8.dp))
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user