From c392737765e074a94a3ffe32a347360847eff8e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Fri, 21 Aug 2026 15:16:26 +0200 Subject: [PATCH] Try fixing the empty state for the room list search in global search --- .../home/impl/search/GlobalSearchPresenter.kt | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenter.kt index b7ab71cee2..103548daea 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenter.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.roomlist.LatestEventValue +import io.element.android.libraries.matrix.api.roomlist.RoomList import io.element.android.libraries.matrix.api.search.MessageSearch import io.element.android.libraries.matrix.api.search.MessageSearchPaginationState import io.element.android.libraries.matrix.api.search.MessageSearchResult @@ -108,13 +109,25 @@ class GlobalSearchPresenter( when (currentTarget) { GlobalSearchTarget.ROOMS -> { - roomListSearchDataSource.roomSummaries.collectLatest { results -> + combine( + roomListSearchDataSource.roomSummaries, + roomListSearchDataSource.loadingState, + ) { summaries, loadingState -> + Pair(summaries, loadingState) + }.collectLatest { (results, loadingState) -> + Timber.d("Room list search found ${results.size} items, loading state: $loadingState") // The room list data source always returns some values, even if the query is empty, // so we only want to update the search results if the query is not empty - searchResults = if (queryState.text.isNotEmpty() && results.isNotEmpty()) { - AsyncData.Success(GlobalSearchResults.RoomListResults(results = results)) - } else { - AsyncData.Uninitialized + searchResults = when { + queryState.text.isNotEmpty() && results.isNotEmpty() -> { + AsyncData.Success(GlobalSearchResults.RoomListResults(results = results)) + } + loadingState is RoomList.LoadingState.Loaded && results.isEmpty() -> { + AsyncData.Success(GlobalSearchResults.RoomListResults(results = persistentListOf())) + } + else -> { + AsyncData.Uninitialized + } } } }