From 73f1ff0f1abe502dd5d7a3071d983f8e36a46bef Mon Sep 17 00:00:00 2001 From: Dane Evans Date: Sun, 7 Dec 2025 23:42:48 +1100 Subject: [PATCH] fix #3838 : message deletion count on the contacts page. (#3924) --- .../java/com/geeksville/mesh/ui/contact/Contacts.kt | 8 ++++++-- .../geeksville/mesh/ui/contact/ContactsViewModel.kt | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/contact/Contacts.kt b/app/src/main/java/com/geeksville/mesh/ui/contact/Contacts.kt index 3c0c60a60..5a07b721f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/contact/Contacts.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/contact/Contacts.kt @@ -165,7 +165,11 @@ fun ContactsScreen( .mapNotNull { pagedContacts[it] } .filter { it.contactKey in selectedContactKeys } } - val selectedCount = remember(selectedContacts) { selectedContacts.sumOf { it.messageCount } } + // Get message count directly from repository for selected contacts + var selectedCount by remember { mutableStateOf(0) } + LaunchedEffect(selectedContactKeys.size, selectedContactKeys.joinToString(",")) { + selectedCount = viewModel.getTotalMessageCount(selectedContactKeys.toList()) + } val isAllMuted = remember(selectedContacts) { selectedContacts.all { it.isMuted } } // Callback functions for item interaction @@ -398,7 +402,7 @@ private fun DeleteConfirmationDialog( pluralStringResource( Res.plurals.delete_messages, selectedCount, - arrayOf(selectedCount), // Pass the count as a format argument + selectedCount, // Pass the count as a format argument ) AlertDialog( diff --git a/app/src/main/java/com/geeksville/mesh/ui/contact/ContactsViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/contact/ContactsViewModel.kt index 10ff696cd..7db9d03db 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/contact/ContactsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/contact/ContactsViewModel.kt @@ -189,5 +189,15 @@ constructor( fun getContactSettings() = packetRepository.getContactSettings() + /** + * Get the total message count for a list of contact keys. This queries the repository directly, so it works even if + * contacts aren't loaded in the paged list. + */ + suspend fun getTotalMessageCount(contactKeys: List): Int = if (contactKeys.isEmpty()) { + 0 + } else { + contactKeys.sumOf { contactKey -> packetRepository.getMessageCount(contactKey) } + } + private fun getUser(userId: String?) = nodeRepository.getUser(userId ?: DataPacket.ID_BROADCAST) }