mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-01 01:02:41 +00:00
Make global search use a Joined filter for room results (#7695)
Before this, global search returned also invites, which wasn't planned.
This commit is contained in:
committed by
GitHub
parent
d2c49bf4af
commit
8cd3750cde
+9
-1
@@ -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.RoomListFilter
|
||||
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
|
||||
@@ -94,7 +95,14 @@ class GlobalSearchPresenter(
|
||||
AsyncData.Uninitialized
|
||||
}
|
||||
|
||||
launch { roomListSearchDataSource.setSearchQuery(queryState.text.toString()) }
|
||||
// Apply the query to the room list search, looking only for joined rooms matching the query
|
||||
launch {
|
||||
roomListSearchDataSource.setSearchQuery(
|
||||
searchQuery = queryState.text.toString(),
|
||||
additionalFilters = RoomListFilter.Joined,
|
||||
)
|
||||
}
|
||||
// Apply the query to the message search too
|
||||
launch {
|
||||
currentMessageSearch.setQuery(queryState.text.toString())
|
||||
.onFailure { Timber.e(it, "Could not set query for message search") }
|
||||
|
||||
+6
-2
@@ -60,11 +60,15 @@ class RoomListSearchDataSource(
|
||||
roomList.updateVisibleRange(visibleRange)
|
||||
}
|
||||
|
||||
suspend fun setSearchQuery(searchQuery: String) = coroutineScope {
|
||||
suspend fun setSearchQuery(searchQuery: String, additionalFilters: RoomListFilter?) = coroutineScope {
|
||||
val filter = if (searchQuery.isBlank()) {
|
||||
RoomListFilter.None
|
||||
} else {
|
||||
RoomListFilter.NormalizedMatchRoomName(searchQuery)
|
||||
if (additionalFilters != null) {
|
||||
RoomListFilter.all(additionalFilters, RoomListFilter.NormalizedMatchRoomName(searchQuery))
|
||||
} else {
|
||||
RoomListFilter.NormalizedMatchRoomName(searchQuery)
|
||||
}
|
||||
}
|
||||
roomList.updateFilter(filter)
|
||||
}
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ class RoomListSearchPresenter(
|
||||
val dataSource = remember { dataSourceFactory.create(coroutineScope) }
|
||||
|
||||
LaunchedEffect(searchQuery.text) {
|
||||
dataSource.setSearchQuery(searchQuery.text.toString())
|
||||
dataSource.setSearchQuery(searchQuery = searchQuery.text.toString(), additionalFilters = null)
|
||||
}
|
||||
|
||||
fun handleEvent(event: RoomListSearchEvent) {
|
||||
|
||||
+6
@@ -23,6 +23,9 @@ import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter.Joined
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter.NormalizedMatchRoomName
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||
import io.element.android.libraries.matrix.api.search.MessageSearchService
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
@@ -142,6 +145,9 @@ class GlobalSearchPresenterTest {
|
||||
testScheduler.advanceUntilIdle()
|
||||
roomList.summaries.emit(listOf(aRoomSummary()))
|
||||
|
||||
// The filter is updated to include the search query and only search joined rooms
|
||||
assertThat(roomList.currentFilter.value).isEqualTo(RoomListFilter.all(Joined, NormalizedMatchRoomName("A query")))
|
||||
|
||||
// Wait for the presenter to emit a loading state before the success state
|
||||
consumeItemsUntilPredicate { it.results is AsyncData.Loading }
|
||||
|
||||
|
||||
+5
@@ -67,6 +67,11 @@ sealed interface RoomListFilter {
|
||||
*/
|
||||
data object Invite : RoomListFilter
|
||||
|
||||
/**
|
||||
* A filter that matches rooms with Joined membership.
|
||||
*/
|
||||
data object Joined : RoomListFilter
|
||||
|
||||
/**
|
||||
* A filter that matches either Group,People rooms or Space.
|
||||
*/
|
||||
|
||||
+2
@@ -16,6 +16,7 @@ import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Deduplicat
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Favourite
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Identifiers
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Invite
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Joined
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonLeft
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonSpace
|
||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.None
|
||||
@@ -73,6 +74,7 @@ internal object RoomListFilterMapper {
|
||||
is RoomListFilter.NormalizedMatchRoomName -> NormalizedMatchRoomName(
|
||||
pattern = filter.pattern
|
||||
)
|
||||
RoomListFilter.Joined -> Joined
|
||||
RoomListFilter.Invite -> Invite
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user