From 364b1665812bb9a5dddd386c98f00b19b485b407 Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Sat, 7 Mar 2026 20:42:21 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D1=82=D1=81=D0=BB=D0=B5=D0=B6=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=20=D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B?= =?UTF-8?q?=20=D0=B2=20ChatDetailScreen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messenger/ui/chats/ChatDetailScreen.kt | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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"