Color the profile
This commit is contained in:
@@ -12,4 +12,9 @@ import androidx.room3.Relation
|
||||
data class LocalChatMessage(
|
||||
@Embedded val chatMessage: ChatMessage,
|
||||
|
||||
@Relation(
|
||||
parentColumns = ["senderPublicKey"],
|
||||
entityColumns = ["publicKey"]
|
||||
)
|
||||
val profile: Profile?,
|
||||
)
|
||||
|
||||
@@ -5,6 +5,12 @@ import ac.cord.auxiliary.compose.database.model.Mention
|
||||
import ac.cord.auxiliary.compose.database.model.Participant
|
||||
import ac.cord.auxiliary.compose.database.model.Post
|
||||
import ac.cord.auxiliary.compose.database.model.Profile
|
||||
import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.room3.Embedded
|
||||
import androidx.room3.Relation
|
||||
|
||||
@@ -17,4 +23,38 @@ data class LocalChatRoom(
|
||||
entityColumns = ["chatRoomId"],
|
||||
)
|
||||
val participants: List<LocalParticipant> = emptyList(),
|
||||
)
|
||||
) {
|
||||
@Composable
|
||||
fun RenderChatRoomTitleText() {
|
||||
if (chatRoom.subject != null) {
|
||||
Text(
|
||||
text = chatRoom.subject,
|
||||
color = ProfileColor.fromPublicKey(chatRoom.id)
|
||||
)
|
||||
} else {
|
||||
if (participants.size == 1) {
|
||||
Text(
|
||||
text = "Note to Self (${participants.first().profile?.humanReadableNameOrPubkey()})"
|
||||
)
|
||||
} else {
|
||||
// Remove the active user publicKey from participants...
|
||||
val participantNames = participants.filter { it.participant.participantPublicKey != chatRoom.userPublicKey }.map { buildAnnotatedString {
|
||||
withStyle(style = SpanStyle(color = ProfileColor.fromPublicKey(it.participant.participantPublicKey))) {
|
||||
append(it.profile?.humanReadableNameOrPubkey() ?: "unknown participant")
|
||||
}
|
||||
} }
|
||||
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
participantNames.forEachIndexed { index, participantName ->
|
||||
if (index != 0) {
|
||||
append(", ")
|
||||
}
|
||||
append(participantName)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom
|
||||
import ac.cord.auxiliary.compose.repository.ChatRepository
|
||||
import ac.cord.auxiliary.compose.repository.NostrRepository
|
||||
import ac.cord.auxiliary.compose.ui.composable.widgets.LoadingDataIndicator
|
||||
import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor
|
||||
import ac.cord.auxiliary.compose.ui.theme.AuxTheme
|
||||
import ac.cord.auxiliary.compose.ui.view.model.ChatRoomDetailMessageListViewModel
|
||||
import ac.cord.auxiliary.compose.ui.view.model.ChatRoomDetailViewModel
|
||||
@@ -62,7 +63,10 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
@@ -114,16 +118,7 @@ fun ChatRoomDetailScreen(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
title = {
|
||||
val messageTitle = chatRoomDetailUIState.localChatRoom.chatRoom.subject ?: if (chatRoomDetailUIState.localChatRoom.participants.size == 1) {
|
||||
"Note to Self (${chatRoomDetailUIState.localChatRoom.participants.first().profile?.humanReadableNameOrPubkey()})"
|
||||
} else {
|
||||
// Remove the active user publicKey from participants...
|
||||
chatRoomDetailUIState.localChatRoom.participants.filter { it.participant.participantPublicKey != chatRoomDetailUIState.localChatRoom.chatRoom.userPublicKey }.map { it.profile?.humanReadableNameOrPubkey() ?: "unknown participant" }.joinToString()
|
||||
}
|
||||
|
||||
Text(
|
||||
text = messageTitle
|
||||
)
|
||||
chatRoomDetailUIState.localChatRoom.RenderChatRoomTitleText()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import ac.cord.auxiliary.compose.database.model.intermdiate.LocalChatRoom
|
||||
import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString
|
||||
import ac.cord.auxiliary.compose.repository.ChatRepository
|
||||
import ac.cord.auxiliary.compose.repository.NostrRepository
|
||||
import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor
|
||||
import ac.cord.auxiliary.compose.ui.view.state.ChatRoomDetailMessageListUIState
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
@@ -187,9 +188,10 @@ class ChatRoomDetailMessageListViewModel(
|
||||
) {
|
||||
if (localChatMessage.chatMessage.isUserMessage.not()) {
|
||||
Text(
|
||||
text = localChatMessage.chatMessage.senderPublicKey, // TODO: Get send name...
|
||||
text = localChatMessage.profile?.humanReadableNameOrPubkey() ?: localChatMessage.chatMessage.senderPublicKey,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.MiddleEllipsis,
|
||||
color = ProfileColor.fromPublicKey(localChatMessage.chatMessage.senderPublicKey),
|
||||
style = MaterialTheme.typography.labelSmall
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package ac.cord.auxiliary.compose.ui.view.model
|
||||
|
||||
import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest
|
||||
import ac.cord.auxiliary.compose.database.model.Profile
|
||||
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
|
||||
import ac.cord.auxiliary.compose.nostr.Relays
|
||||
import ac.cord.auxiliary.compose.repository.ChatRepository
|
||||
import ac.cord.auxiliary.compose.repository.NostrRepository
|
||||
import ac.cord.auxiliary.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
|
||||
import ac.cord.auxiliary.compose.ui.composable.navigation.routes.Route
|
||||
import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileColor
|
||||
import ac.cord.auxiliary.compose.ui.view.state.ChatRoomListUIState
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -26,7 +28,10 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -130,12 +135,6 @@ class ChatRoomListViewModel(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(10.dp)
|
||||
) {
|
||||
item {
|
||||
Text(
|
||||
text = "Messages"
|
||||
)
|
||||
}
|
||||
|
||||
items(
|
||||
items = chatRoomListUIState.chatRoomList,
|
||||
key = { it.chatRoom.id }
|
||||
@@ -154,18 +153,7 @@ class ChatRoomListViewModel(
|
||||
modifier = Modifier.padding(20.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
if (localChatRoom.participants.size == 1) {
|
||||
Text(
|
||||
text = "Note to Self (${localChatRoom.participants.first().profile?.humanReadableNameOrPubkey()})"
|
||||
)
|
||||
} else {
|
||||
// Remove the active user publicKey from participants...
|
||||
val participantNames = localChatRoom.participants.filter { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }.map { it.profile?.humanReadableNameOrPubkey() ?: "unknown participant" }
|
||||
|
||||
Text(
|
||||
text = localChatRoom.chatRoom.subject ?: participantNames.joinToString()
|
||||
)
|
||||
}
|
||||
localChatRoom.RenderChatRoomTitleText()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user