From 005da2228b29ad5696e748fd5c8a946d66064f11 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 11 Jun 2026 20:40:07 +0200 Subject: [PATCH] Like on web: when starting search show all conversations, even when filters are set before Signed-off-by: tobiasKaminsky --- .../viewmodels/ConversationsListViewModel.kt | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/viewmodels/ConversationsListViewModel.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/viewmodels/ConversationsListViewModel.kt index 7bbf7a754d..f836161d87 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationlist/viewmodels/ConversationsListViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationlist/viewmodels/ConversationsListViewModel.kt @@ -220,6 +220,12 @@ class ConversationsListViewModel @Inject constructor( private val hideRoomToken = MutableStateFlow(null) + private enum class SearchDisplayMode { + OFF, + ALL_CONVERSATIONS, + RESULTS + } + /** * Single source of truth for the [ConversationList] LazyColumn. * Auto-reacts to rooms, filter, search-active and search-result changes. @@ -227,11 +233,17 @@ class ConversationsListViewModel @Inject constructor( val conversationListEntriesFlow: StateFlow> = combine( getRoomsStateFlow, _filterStateFlow, - _isSearchActiveFlow, + combine(_isSearchActiveFlow, _currentSearchQueryFlow) { active, query -> + when { + !active -> SearchDisplayMode.OFF + query.isEmpty() -> SearchDisplayMode.ALL_CONVERSATIONS + else -> SearchDisplayMode.RESULTS + } + }, searchResultEntries, hideRoomToken - ) { rooms, filterState, isSearchActive, searchResults, hideToken -> - buildConversationListEntries(rooms, filterState, isSearchActive, searchResults, hideToken) + ) { rooms, filterState, searchMode, searchResults, hideToken -> + buildConversationListEntries(rooms, filterState, searchMode, searchResults, hideToken) }.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList()) /** Update filter state; triggers [conversationListEntriesFlow] re-emit. */ @@ -583,11 +595,11 @@ class ConversationsListViewModel @Inject constructor( private fun buildConversationListEntries( rooms: List, filterState: Map, - isSearchActive: Boolean, + searchMode: SearchDisplayMode, searchResults: List, hideToken: String? ): List { - if (isSearchActive) return searchResults + if (searchMode == SearchDisplayMode.RESULTS) return searchResults val hasFilterEnabled = filterState[MENTION] == true || filterState[UNREAD] == true || @@ -602,10 +614,12 @@ class ConversationsListViewModel @Inject constructor( ) } - filtered = if (hasFilterEnabled) { - filtered.filter { filterConversationModel(it, filterState) } - } else { - filtered.filter { !isFutureEvent(it) && !it.hasArchived } + filtered = when { + // While search is open with an empty query, all conversations are listed, + // ignoring active filters and the default hiding of archived/future-event rooms + searchMode == SearchDisplayMode.ALL_CONVERSATIONS -> filtered + hasFilterEnabled -> filtered.filter { filterConversationModel(it, filterState) } + else -> filtered.filter { !isFutureEvent(it) && !it.hasArchived } } val sorted = filtered.sortedWith(