From 4e235500313e6f1d4b57d8ecdc09f7119a05d44e Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 1 Jun 2023 10:22:19 +0100 Subject: [PATCH] User search: provide 10 results not 5 Also refactor slightly so the caller specifies the number of results, which lets all the constants sit in the repository. --- .../libraries/usersearch/api/UserListDataSource.kt | 2 +- .../libraries/usersearch/impl/MatrixUserListDataSource.kt | 8 ++------ .../libraries/usersearch/impl/MatrixUserRepository.kt | 3 ++- .../usersearch/impl/MatrixUserListDataSourceTest.kt | 4 ++-- .../libraries/usersearch/test/FakeUserListDataSource.kt | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/libraries/usersearch/api/src/main/kotlin/io/element/android/libraries/usersearch/api/UserListDataSource.kt b/libraries/usersearch/api/src/main/kotlin/io/element/android/libraries/usersearch/api/UserListDataSource.kt index f855e20861..b204af447a 100644 --- a/libraries/usersearch/api/src/main/kotlin/io/element/android/libraries/usersearch/api/UserListDataSource.kt +++ b/libraries/usersearch/api/src/main/kotlin/io/element/android/libraries/usersearch/api/UserListDataSource.kt @@ -21,6 +21,6 @@ import io.element.android.libraries.matrix.api.user.MatrixUser interface UserListDataSource { //TODO should probably have a flow - suspend fun search(query: String): List + suspend fun search(query: String, count: Long): List suspend fun getProfile(userId: UserId): MatrixUser? } diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt index 53985415f1..18dbf97af5 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt @@ -28,16 +28,12 @@ import javax.inject.Inject class MatrixUserListDataSource @Inject constructor( private val client: MatrixClient ) : UserListDataSource { - override suspend fun search(query: String): List { - val res = client.searchUsers(query, MAX_SEARCH_RESULTS) + override suspend fun search(query: String, count: Long): List { + val res = client.searchUsers(query, count) return res.getOrNull()?.results.orEmpty() } override suspend fun getProfile(userId: UserId): MatrixUser? { return client.getProfile(userId).getOrNull() } - - companion object { - private const val MAX_SEARCH_RESULTS = 5L - } } diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt index f127a53d83..ea60503459 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt @@ -44,7 +44,7 @@ class MatrixUserRepository @Inject constructor( // Debounce delay(DEBOUNCE_TIME_MILLIS) - val results = dataSource.search(query).toMutableList() + val results = dataSource.search(query, MAXIMUM_SEARCH_RESULTS).toMutableList() // If the query is a user ID and the result doesn't contain that user ID, query the profile information explicitly if (isUserId && results.none { it.userId.value == query }) { @@ -60,5 +60,6 @@ class MatrixUserRepository @Inject constructor( companion object { private const val DEBOUNCE_TIME_MILLIS = 250L private const val MINIMUM_SEARCH_LENGTH = 3 + private const val MAXIMUM_SEARCH_RESULTS = 10L } } diff --git a/libraries/usersearch/impl/src/test/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSourceTest.kt b/libraries/usersearch/impl/src/test/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSourceTest.kt index 5dc42773d3..793a9f7f58 100644 --- a/libraries/usersearch/impl/src/test/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSourceTest.kt +++ b/libraries/usersearch/impl/src/test/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSourceTest.kt @@ -47,7 +47,7 @@ internal class MatrixUserListDataSourceTest { ) val dataSource = MatrixUserListDataSource(matrixClient) - val results = dataSource.search("test") + val results = dataSource.search("test", 2) Truth.assertThat(results).containsExactly( aMatrixUserProfile(), aMatrixUserProfile(userId = A_USER_ID_2) @@ -63,7 +63,7 @@ internal class MatrixUserListDataSourceTest { ) val dataSource = MatrixUserListDataSource(matrixClient) - val results = dataSource.search("test") + val results = dataSource.search("test", 2) Truth.assertThat(results).isEmpty() } diff --git a/libraries/usersearch/test/src/main/kotlin/io/element/android/libraries/usersearch/test/FakeUserListDataSource.kt b/libraries/usersearch/test/src/main/kotlin/io/element/android/libraries/usersearch/test/FakeUserListDataSource.kt index d5f5183a4f..23935c1a6c 100644 --- a/libraries/usersearch/test/src/main/kotlin/io/element/android/libraries/usersearch/test/FakeUserListDataSource.kt +++ b/libraries/usersearch/test/src/main/kotlin/io/element/android/libraries/usersearch/test/FakeUserListDataSource.kt @@ -25,7 +25,7 @@ class FakeUserListDataSource : UserListDataSource { private var searchResult: List = emptyList() private var profile: MatrixUser? = null - override suspend fun search(query: String): List = searchResult + override suspend fun search(query: String, count: Long): List = searchResult.take(count.toInt()) override suspend fun getProfile(userId: UserId): MatrixUser? = profile