diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt index 71dad8b..447c75f 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt @@ -425,6 +425,9 @@ fun ChatDetailScreen( var groupAdminKeys by remember(user.publicKey, currentUserPublicKey) { mutableStateOf>(emptySet()) } + var groupMembersCount by remember(user.publicKey, currentUserPublicKey) { + mutableStateOf(null) + } var mentionCandidates by remember(user.publicKey, currentUserPublicKey) { mutableStateOf>(emptyList()) } @@ -439,6 +442,7 @@ fun ChatDetailScreen( LaunchedEffect(isGroupChat, user.publicKey, currentUserPublicKey) { if (!isGroupChat || user.publicKey.isBlank() || currentUserPublicKey.isBlank()) { groupAdminKeys = emptySet() + groupMembersCount = null mentionCandidates = emptyList() return@LaunchedEffect } @@ -446,15 +450,20 @@ fun ChatDetailScreen( val members = withContext(Dispatchers.IO) { groupRepository.requestGroupMembers(user.publicKey).orEmpty() } - val adminKey = members.firstOrNull().orEmpty() + val normalizedMembers = + members.map { it.trim() } + .filter { it.isNotBlank() } + .distinct() + groupMembersCount = normalizedMembers.size + + val adminKey = normalizedMembers.firstOrNull().orEmpty() groupAdminKeys = if (adminKey.isBlank()) emptySet() else setOf(adminKey) mentionCandidates = withContext(Dispatchers.IO) { - members.map { it.trim() } - .filter { it.isNotBlank() && !it.equals(currentUserPublicKey.trim(), ignoreCase = true) } - .distinct() + normalizedMembers + .filter { !it.equals(currentUserPublicKey.trim(), ignoreCase = true) } .mapNotNull { memberKey -> val resolvedUser = viewModel.resolveUserForProfile(memberKey) ?: return@mapNotNull null val normalizedUsername = resolvedUser.username.trim().trimStart('@') @@ -636,10 +645,13 @@ fun ChatDetailScreen( val isRosettaOfficial = user.title.equals("Rosetta", ignoreCase = true) || user.username.equals("rosetta", ignoreCase = true) || isSystemAccount + val groupMembersSubtitleCount = groupMembersCount ?: 0 + val groupMembersSubtitle = + "$groupMembersSubtitleCount member${if (groupMembersSubtitleCount == 1) "" else "s"}" val chatSubtitle = when { isSavedMessages -> "Notes" - isGroupChat -> "group" + isGroupChat -> groupMembersSubtitle isTyping -> "" // Пустая строка, используем компонент TypingIndicator isOnline -> "online" isSystemAccount -> "official account"