mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 06:55: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.permalink.PermalinkParser
|
||||||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
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.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.MessageSearch
|
||||||
import io.element.android.libraries.matrix.api.search.MessageSearchPaginationState
|
import io.element.android.libraries.matrix.api.search.MessageSearchPaginationState
|
||||||
import io.element.android.libraries.matrix.api.search.MessageSearchResult
|
import io.element.android.libraries.matrix.api.search.MessageSearchResult
|
||||||
@@ -94,7 +95,14 @@ class GlobalSearchPresenter(
|
|||||||
AsyncData.Uninitialized
|
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 {
|
launch {
|
||||||
currentMessageSearch.setQuery(queryState.text.toString())
|
currentMessageSearch.setQuery(queryState.text.toString())
|
||||||
.onFailure { Timber.e(it, "Could not set query for message search") }
|
.onFailure { Timber.e(it, "Could not set query for message search") }
|
||||||
|
|||||||
+5
-1
@@ -60,12 +60,16 @@ class RoomListSearchDataSource(
|
|||||||
roomList.updateVisibleRange(visibleRange)
|
roomList.updateVisibleRange(visibleRange)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun setSearchQuery(searchQuery: String) = coroutineScope {
|
suspend fun setSearchQuery(searchQuery: String, additionalFilters: RoomListFilter?) = coroutineScope {
|
||||||
val filter = if (searchQuery.isBlank()) {
|
val filter = if (searchQuery.isBlank()) {
|
||||||
RoomListFilter.None
|
RoomListFilter.None
|
||||||
|
} else {
|
||||||
|
if (additionalFilters != null) {
|
||||||
|
RoomListFilter.all(additionalFilters, RoomListFilter.NormalizedMatchRoomName(searchQuery))
|
||||||
} else {
|
} else {
|
||||||
RoomListFilter.NormalizedMatchRoomName(searchQuery)
|
RoomListFilter.NormalizedMatchRoomName(searchQuery)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
roomList.updateFilter(filter)
|
roomList.updateFilter(filter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ class RoomListSearchPresenter(
|
|||||||
val dataSource = remember { dataSourceFactory.create(coroutineScope) }
|
val dataSource = remember { dataSourceFactory.create(coroutineScope) }
|
||||||
|
|
||||||
LaunchedEffect(searchQuery.text) {
|
LaunchedEffect(searchQuery.text) {
|
||||||
dataSource.setSearchQuery(searchQuery.text.toString())
|
dataSource.setSearchQuery(searchQuery = searchQuery.text.toString(), additionalFilters = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: RoomListSearchEvent) {
|
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.featureflag.test.FakeFeatureFlagService
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
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.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.search.MessageSearchService
|
import io.element.android.libraries.matrix.api.search.MessageSearchService
|
||||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||||
@@ -142,6 +145,9 @@ class GlobalSearchPresenterTest {
|
|||||||
testScheduler.advanceUntilIdle()
|
testScheduler.advanceUntilIdle()
|
||||||
roomList.summaries.emit(listOf(aRoomSummary()))
|
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
|
// Wait for the presenter to emit a loading state before the success state
|
||||||
consumeItemsUntilPredicate { it.results is AsyncData.Loading }
|
consumeItemsUntilPredicate { it.results is AsyncData.Loading }
|
||||||
|
|
||||||
|
|||||||
+5
@@ -67,6 +67,11 @@ sealed interface RoomListFilter {
|
|||||||
*/
|
*/
|
||||||
data object Invite : 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.
|
* 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.Favourite
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Identifiers
|
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Identifiers
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Invite
|
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.NonLeft
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonSpace
|
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonSpace
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.None
|
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.None
|
||||||
@@ -73,6 +74,7 @@ internal object RoomListFilterMapper {
|
|||||||
is RoomListFilter.NormalizedMatchRoomName -> NormalizedMatchRoomName(
|
is RoomListFilter.NormalizedMatchRoomName -> NormalizedMatchRoomName(
|
||||||
pattern = filter.pattern
|
pattern = filter.pattern
|
||||||
)
|
)
|
||||||
|
RoomListFilter.Joined -> Joined
|
||||||
RoomListFilter.Invite -> Invite
|
RoomListFilter.Invite -> Invite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user