From 12b3afbc50507a325ebe3d06e247a16ca9aa5fcf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 11:46:43 +0200 Subject: [PATCH 01/18] Always use `roomSummaryQueryParams`, and not directly a `RoomSummaryQueryParams.Builder()` Also format and add some Kdoc --- .../session/room/RoomSummaryQueryParams.kt | 25 ++++++++++++------- .../room/list/RoomListSectionBuilderGroup.kt | 6 ++--- .../room/list/RoomListSectionBuilderSpace.kt | 6 ++--- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 5c74dcced1..1e6b648756 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -24,21 +24,28 @@ import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomType import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams +/** + * Create a [RoomSummaryQueryParams] object, calling [init] with a [RoomSummaryQueryParams.Builder] + */ fun roomSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): RoomSummaryQueryParams { - return RoomSummaryQueryParams.Builder().apply(init).build() -} - -fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): SpaceSummaryQueryParams { return RoomSummaryQueryParams.Builder() .apply(init) - .apply { - includeType = listOf(RoomType.SPACE) - excludeType = null - roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - } .build() } +/** + * Create a [RoomSummaryQueryParams] object, calling [init] with a [RoomSummaryQueryParams.Builder] + * This is specific for spaces, other filters will be applied after invoking [init] + */ +fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): SpaceSummaryQueryParams { + return roomSummaryQueryParams { + init() + includeType = listOf(RoomType.SPACE) + excludeType = null + roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS + } +} + /** * This class can be used to filter room summaries to use with: * [org.matrix.android.sdk.api.session.room.Room] and [org.matrix.android.sdk.api.session.room.RoomService]. diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt index 80c7b4e921..3822067b14 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt @@ -38,6 +38,7 @@ import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams class RoomListSectionBuilderGroup( private val coroutineScope: CoroutineScope, @@ -281,9 +282,6 @@ class RoomListSectionBuilderGroup( } private fun withQueryParams(builder: (RoomSummaryQueryParams.Builder) -> Unit, block: (RoomSummaryQueryParams) -> Unit) { - RoomSummaryQueryParams.Builder() - .apply { builder.invoke(this) } - .build() - .let { block(it) } + block(roomSummaryQueryParams { builder.invoke(this) }) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index c176b1b9a5..edf4ae6e67 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -51,6 +51,7 @@ import org.matrix.android.sdk.api.session.getRoomSummary import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.api.session.room.summary.RoomAggregateNotificationCount import timber.log.Timber @@ -429,10 +430,7 @@ class RoomListSectionBuilderSpace( } private fun withQueryParams(builder: (RoomSummaryQueryParams.Builder) -> Unit, block: (RoomSummaryQueryParams) -> Unit) { - RoomSummaryQueryParams.Builder() - .apply { builder.invoke(this) } - .build() - .let { block(it) } + block(roomSummaryQueryParams { builder.invoke(this) }) } internal fun RoomSummaryQueryParams.process(spaceFilter: RoomListViewModel.SpaceFilterStrategy, currentSpace: String?): RoomSummaryQueryParams { From 49a29fb56f6ddc5550ebbe14533a1416fb1b176e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 11:48:08 +0200 Subject: [PATCH 02/18] Always use `roomSummaryQueryParams`, and not directly a `RoomSummaryQueryParams.Builder()` Also format and add some Kdoc --- .../android/sdk/api/session/room/RoomSummaryQueryParams.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 1e6b648756..0eb0ef8875 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -34,7 +34,7 @@ fun roomSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = { } /** - * Create a [RoomSummaryQueryParams] object, calling [init] with a [RoomSummaryQueryParams.Builder] + * Create a [SpaceSummaryQueryParams] object (which is a [RoomSummaryQueryParams]), calling [init] with a [RoomSummaryQueryParams.Builder] * This is specific for spaces, other filters will be applied after invoking [init] */ fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): SpaceSummaryQueryParams { From bfdc885d7fdd13078e8c0ebcb61722142805b7b3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 12:26:29 +0200 Subject: [PATCH 03/18] Remove `roomId` from `RoomSummaryQueryParams.Builder()`. Create a new API in RoomService to observe a room summary from a roomId. --- .../matrix/android/sdk/flow/FlowSession.kt | 7 ++++ .../sdk/api/session/room/RoomService.kt | 6 ++++ .../session/room/RoomSummaryQueryParams.kt | 3 -- .../session/room/DefaultRoomService.kt | 20 +++++++---- .../room/summary/RoomSummaryDataSource.kt | 3 +- .../roompreview/RoomPreviewViewModel.kt | 34 +++++++++---------- 6 files changed, 45 insertions(+), 28 deletions(-) diff --git a/matrix-sdk-android-flow/src/main/java/org/matrix/android/sdk/flow/FlowSession.kt b/matrix-sdk-android-flow/src/main/java/org/matrix/android/sdk/flow/FlowSession.kt index 9f260858f6..2839e6ab61 100644 --- a/matrix-sdk-android-flow/src/main/java/org/matrix/android/sdk/flow/FlowSession.kt +++ b/matrix-sdk-android-flow/src/main/java/org/matrix/android/sdk/flow/FlowSession.kt @@ -45,6 +45,13 @@ import org.matrix.android.sdk.api.util.toOptional class FlowSession(private val session: Session) { + fun liveRoomSummary(roomId: String): Flow> { + return session.roomService().getRoomSummaryLive(roomId).asFlow() + .startWith(session.coroutineDispatchers.io) { + session.roomService().getRoomSummary(roomId).toOptional() + } + } + fun liveRoomSummaries(queryParams: RoomSummaryQueryParams, sortOrder: RoomSortOrder = RoomSortOrder.NONE): Flow> { return session.roomService().getRoomSummariesLive(queryParams, sortOrder).asFlow() .startWith(session.coroutineDispatchers.io) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt index 6d5551ddf0..01776ca66d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt @@ -97,6 +97,12 @@ interface RoomService { */ fun getRoomSummary(roomIdOrAlias: String): RoomSummary? + /** + * A live [RoomSummary] associated with the room with id [roomId]. + * You can observe this summary to get dynamic data from this room, even if the room is not joined yet + */ + fun getRoomSummaryLive(roomId: String): LiveData> + /** * Get a snapshot list of room summaries. * @return the immutable list of [RoomSummary] diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 0eb0ef8875..e19dcfb240 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -51,7 +51,6 @@ fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = * [org.matrix.android.sdk.api.session.room.Room] and [org.matrix.android.sdk.api.session.room.RoomService]. */ data class RoomSummaryQueryParams( - val roomId: QueryStringValue, val displayName: QueryStringValue, val canonicalAlias: QueryStringValue, val memberships: List, @@ -64,7 +63,6 @@ data class RoomSummaryQueryParams( ) { class Builder { - var roomId: QueryStringValue = QueryStringValue.IsNotEmpty var displayName: QueryStringValue = QueryStringValue.IsNotEmpty var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition var memberships: List = Membership.all() @@ -76,7 +74,6 @@ data class RoomSummaryQueryParams( var activeGroupId: String? = null fun build() = RoomSummaryQueryParams( - roomId = roomId, displayName = displayName, canonicalAlias = canonicalAlias, memberships = memberships, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt index 29484c4efd..a7a5dbf4f3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt @@ -20,7 +20,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations import androidx.paging.PagedList import com.zhuinden.monarchy.Monarchy -import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.identity.model.SignInvitationResult import org.matrix.android.sdk.api.session.room.Room @@ -91,18 +90,25 @@ internal class DefaultRoomService @Inject constructor( return roomSummaryDataSource.getRoomSummary(roomIdOrAlias) } + override fun getRoomSummaryLive(roomId: String): LiveData> { + return roomSummaryDataSource.getRoomSummaryLive(roomId) + } + override fun getRoomSummaries(queryParams: RoomSummaryQueryParams, sortOrder: RoomSortOrder): List { return roomSummaryDataSource.getRoomSummaries(queryParams, sortOrder) } override fun refreshJoinedRoomSummaryPreviews(roomId: String?) { - val roomSummaries = getRoomSummaries(roomSummaryQueryParams { - if (roomId != null) { - this.roomId = QueryStringValue.Equals(roomId) - } - memberships = listOf(Membership.JOIN) - }) + val roomSummaries = if (roomId == null) { + getRoomSummaries(roomSummaryQueryParams { + memberships = listOf(Membership.JOIN) + }) + } else { + listOfNotNull( + getRoomSummary(roomId)?.takeIf { it.membership == Membership.JOIN } + ) + } if (roomSummaries.isNotEmpty()) { monarchy.runTransactionSync { realm -> diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index cefb4c1bd3..2ede59adcb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -27,6 +27,7 @@ import io.realm.Realm import io.realm.RealmQuery import io.realm.kotlin.where import org.matrix.android.sdk.api.query.ActiveSpaceFilter +import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.query.RoomCategoryFilter import org.matrix.android.sdk.api.query.isNormalized import org.matrix.android.sdk.api.session.room.ResultBoundaries @@ -266,7 +267,7 @@ internal class RoomSummaryDataSource @Inject constructor( private fun roomSummariesQuery(realm: Realm, queryParams: RoomSummaryQueryParams): RealmQuery { val query = with(queryStringValueProcessor) { RoomSummaryEntity.where(realm) - .process(RoomSummaryEntityFields.ROOM_ID, queryParams.roomId) + .process(RoomSummaryEntityFields.ROOM_ID, QueryStringValue.IsNotEmpty) .let { if (queryParams.displayName.isNormalized()) { it.process(RoomSummaryEntityFields.NORMALIZED_DISPLAY_NAME, queryParams.displayName) diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewViewModel.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewViewModel.kt index e58feef5b3..9cfa6cb815 100644 --- a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewViewModel.kt @@ -35,7 +35,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.matrix.android.sdk.api.extensions.tryOrNull -import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoomSummary import org.matrix.android.sdk.api.session.identity.SharedState @@ -43,8 +42,8 @@ import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.peeking.PeekResult -import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.flow.flow +import org.matrix.android.sdk.flow.unwrap import timber.log.Timber class RoomPreviewViewModel @AssistedInject constructor( @@ -160,24 +159,25 @@ class RoomPreviewViewModel @AssistedInject constructor( } private fun observeRoomSummary() { - val queryParams = roomSummaryQueryParams { - roomId = QueryStringValue.Equals(initialState.roomId) - excludeType = null - } session .flow() - .liveRoomSummaries(queryParams) - .onEach { list -> - val isRoomJoined = list.any { - it.membership == Membership.JOIN - } - list.firstOrNull { it.roomId == initialState.roomId }?.roomType?.let { - setState { - copy(roomType = it) - } - } + .liveRoomSummary(initialState.roomId) + .unwrap() + .onEach { roomSummary -> + val isRoomJoined = roomSummary.membership == Membership.JOIN if (isRoomJoined) { - setState { copy(roomJoinState = JoinState.JOINED) } + setState { + copy( + roomType = roomSummary.roomType, + roomJoinState = JoinState.JOINED + ) + } + } else { + setState { + copy( + roomType = roomSummary.roomType + ) + } } } .launchIn(viewModelScope) From 6a728e38511bbc9bfab5638d004a395bf43a398c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 14:48:30 +0200 Subject: [PATCH 04/18] Remove duplicated code lines --- .../app/features/spaces/manage/SpaceAddRoomsViewModel.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt index 0be0fb0464..7c47ce1dae 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt @@ -168,9 +168,6 @@ class SpaceAddRoomsViewModel @AssistedInject constructor( override fun handle(action: SpaceAddRoomActions) { when (action) { is SpaceAddRoomActions.UpdateFilter -> { - roomUpdatableLivePageResult.queryParams = roomUpdatableLivePageResult.queryParams.copy( - displayName = QueryStringValue.Contains(action.filter, QueryStringValue.Case.INSENSITIVE) - ) roomUpdatableLivePageResult.queryParams = roomUpdatableLivePageResult.queryParams.copy( displayName = QueryStringValue.Contains(action.filter, QueryStringValue.Case.INSENSITIVE) ) From 2b0077b1385f728157be803ea43f8ba2121b1278 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 14:56:13 +0200 Subject: [PATCH 05/18] Small rework for nicer code --- .../room/summary/RoomSummaryDataSource.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 2ede59adcb..7f42571922 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -268,13 +268,7 @@ internal class RoomSummaryDataSource @Inject constructor( val query = with(queryStringValueProcessor) { RoomSummaryEntity.where(realm) .process(RoomSummaryEntityFields.ROOM_ID, QueryStringValue.IsNotEmpty) - .let { - if (queryParams.displayName.isNormalized()) { - it.process(RoomSummaryEntityFields.NORMALIZED_DISPLAY_NAME, queryParams.displayName) - } else { - it.process(RoomSummaryEntityFields.DISPLAY_NAME, queryParams.displayName) - } - } + .process(queryParams.displayName.toDisplayNameField(), queryParams.displayName) .process(RoomSummaryEntityFields.CANONICAL_ALIAS, queryParams.canonicalAlias) .process(RoomSummaryEntityFields.MEMBERSHIP_STR, queryParams.memberships) .equalTo(RoomSummaryEntityFields.IS_HIDDEN_FROM_USER, false) @@ -342,6 +336,14 @@ internal class RoomSummaryDataSource @Inject constructor( return query } + private fun QueryStringValue.toDisplayNameField(): String { + return if (isNormalized()) { + RoomSummaryEntityFields.NORMALIZED_DISPLAY_NAME + } else { + RoomSummaryEntityFields.DISPLAY_NAME + } + } + fun getAllRoomSummaryChildOf(spaceAliasOrId: String, memberShips: List): List { val space = getSpaceSummary(spaceAliasOrId) ?: return emptyList() val result = ArrayList() From 8d7a54a6cf3601169d80006e6926e8b6ac9649f6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 15:33:45 +0200 Subject: [PATCH 06/18] `displayName` default value is now `QueryStringValue.NoCondition`. It was working fine since in the DB we always have a name using `RoomDisplayNameFallbackProvider`, which in our current implementation always return a non empty String. --- .../android/sdk/api/session/room/RoomSummaryQueryParams.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index e19dcfb240..1522150bda 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -63,7 +63,7 @@ data class RoomSummaryQueryParams( ) { class Builder { - var displayName: QueryStringValue = QueryStringValue.IsNotEmpty + var displayName: QueryStringValue = QueryStringValue.NoCondition var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition var memberships: List = Membership.all() var roomCategoryFilter: RoomCategoryFilter? = RoomCategoryFilter.ALL From 8843fe0a54b42b79dc71b741f768355be2c8be0b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 15:50:27 +0200 Subject: [PATCH 07/18] Remove `RoomCategoryFilter.ALL` Prefer nullability for API coherency of `RoomSummaryQueryParams` --- .../org/matrix/android/sdk/api/query/RoomCategoryFilter.kt | 1 - .../android/sdk/api/session/room/RoomSummaryQueryParams.kt | 2 +- .../internal/session/room/summary/RoomSummaryDataSource.kt | 4 ---- .../features/home/room/list/RoomListSectionBuilderGroup.kt | 1 - .../features/home/room/list/RoomListSectionBuilderSpace.kt | 1 - 5 files changed, 1 insertion(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt index c8ccc4c8a3..f9034e1a18 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt @@ -20,5 +20,4 @@ enum class RoomCategoryFilter { ONLY_DM, ONLY_ROOMS, ONLY_WITH_NOTIFICATIONS, - ALL } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 1522150bda..92d3cff315 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -66,7 +66,7 @@ data class RoomSummaryQueryParams( var displayName: QueryStringValue = QueryStringValue.NoCondition var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition var memberships: List = Membership.all() - var roomCategoryFilter: RoomCategoryFilter? = RoomCategoryFilter.ALL + var roomCategoryFilter: RoomCategoryFilter? = null var roomTagQueryFilter: RoomTagQueryFilter? = null var excludeType: List? = listOf(RoomType.SPACE) var includeType: List? = null diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 7f42571922..4a8de2ab8f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -279,9 +279,6 @@ internal class RoomSummaryDataSource @Inject constructor( RoomCategoryFilter.ONLY_DM -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, true) RoomCategoryFilter.ONLY_ROOMS -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, false) RoomCategoryFilter.ONLY_WITH_NOTIFICATIONS -> query.greaterThan(RoomSummaryEntityFields.NOTIFICATION_COUNT, 0) - RoomCategoryFilter.ALL -> { - // nop - } } } queryParams.roomTagQueryFilter?.let { @@ -306,7 +303,6 @@ internal class RoomSummaryDataSource @Inject constructor( RoomCategoryFilter.ONLY_DM -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, true) RoomCategoryFilter.ONLY_ROOMS -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, false) RoomCategoryFilter.ONLY_WITH_NOTIFICATIONS -> query.greaterThan(RoomSummaryEntityFields.NOTIFICATION_COUNT, 0) - RoomCategoryFilter.ALL -> Unit // nop null -> Unit } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt index 3822067b14..87bbbd8757 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderGroup.kt @@ -97,7 +97,6 @@ class RoomListSectionBuilderGroup( true ) { it.memberships = listOf(Membership.INVITE) - it.roomCategoryFilter = RoomCategoryFilter.ALL it.activeGroupId = actualGroupId } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index edf4ae6e67..31dc112398 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -298,7 +298,6 @@ class RoomListSectionBuilderSpace( countRoomAsNotif = true ) { it.memberships = listOf(Membership.INVITE) - it.roomCategoryFilter = RoomCategoryFilter.ALL } } From 3442829e11e4bb4be2a1a5e6dfa646388f156939 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 15:53:17 +0200 Subject: [PATCH 08/18] Remove duplicated lines of code (the same code is done a few lines later) --- .../internal/session/room/summary/RoomSummaryDataSource.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 4a8de2ab8f..27ad3df8d2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -274,13 +274,6 @@ internal class RoomSummaryDataSource @Inject constructor( .equalTo(RoomSummaryEntityFields.IS_HIDDEN_FROM_USER, false) } - queryParams.roomCategoryFilter?.let { - when (it) { - RoomCategoryFilter.ONLY_DM -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, true) - RoomCategoryFilter.ONLY_ROOMS -> query.equalTo(RoomSummaryEntityFields.IS_DIRECT, false) - RoomCategoryFilter.ONLY_WITH_NOTIFICATIONS -> query.greaterThan(RoomSummaryEntityFields.NOTIFICATION_COUNT, 0) - } - } queryParams.roomTagQueryFilter?.let { it.isFavorite?.let { fav -> query.equalTo(RoomSummaryEntityFields.IS_FAVOURITE, fav) From 289f27b73814573d548b54d3209a620913711a4a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 16:03:09 +0200 Subject: [PATCH 09/18] Add some Kdoc --- .../api/RoomDisplayNameFallbackProvider.kt | 8 +++++ .../sdk/api/query/ActiveSpaceFilter.kt | 4 +++ .../session/room/RoomSummaryQueryParams.kt | 35 +++++++++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt index a34dbcc196..3c376b55ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/RoomDisplayNameFallbackProvider.kt @@ -16,6 +16,14 @@ package org.matrix.android.sdk.api +/** + * This interface exists to let the implementation provide localized room display name fallback. + * The methods can be called when the room has no name, i.e. its `m.room.name` state event does not exist or + * the name in it is an empty String. + * It allows the SDK to store the room name fallback into the local storage and so let the client do + * queries on the room name. + * *Limitation*: if the locale of the device changes, the methods will not be called again. + */ interface RoomDisplayNameFallbackProvider { fun getNameForRoomInvite(): String fun getNameForEmptyRoom(isDirect: Boolean, leftMemberNames: List): String diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt index 48619b9394..145c7f8bf4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt @@ -16,6 +16,10 @@ package org.matrix.android.sdk.api.query +/** + * Filter to be used to do room queries. + * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] + */ sealed class ActiveSpaceFilter { object None : ActiveSpaceFilter() data class ActiveSpace(val currentSpaceId: String?) : ActiveSpaceFilter() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 92d3cff315..743ea65664 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -47,18 +47,49 @@ fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = } /** - * This class can be used to filter room summaries to use with: - * [org.matrix.android.sdk.api.session.room.Room] and [org.matrix.android.sdk.api.session.room.RoomService]. + * This class can be used to filter room summaries to use with [RoomService]. + * It provides a [Builder]. + * [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of this class. */ data class RoomSummaryQueryParams( + /** + * Query for the displayName of the room. The display name can be the value of the state event, + * or a value returned by [org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider]. + */ val displayName: QueryStringValue, + /** + * Query for the canonical alias of the room. + */ val canonicalAlias: QueryStringValue, + /** + * Used to filter room by membership. + */ val memberships: List, + /** + * Used to filter room by room category. + */ val roomCategoryFilter: RoomCategoryFilter?, + /** + * Used to filter room by room tag. + */ val roomTagQueryFilter: RoomTagQueryFilter?, + /** + * Used to filter room by room type. + * @see [includeType] + */ val excludeType: List?, + /** + * Used to filter room by room type. + * @see [excludeType] + */ val includeType: List?, + /** + * Used to filter room using the current space. + */ val activeSpaceFilter: ActiveSpaceFilter?, + /** + * Used to filter room using the current group. + */ val activeGroupId: String? = null ) { From 00809027c14661b53ec6d0ef384c3d35934e7c48 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 16:15:09 +0200 Subject: [PATCH 10/18] Remove `ActiveSpaceFilter.None` Prefer nullability for API coherency of `RoomSummaryQueryParams` --- .../org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt | 1 - .../android/sdk/api/session/room/RoomSummaryQueryParams.kt | 2 +- .../java/im/vector/app/features/home/HomeDetailViewModel.kt | 4 ++-- .../vector/app/features/home/UnreadMessagesSharedViewModel.kt | 2 +- .../features/home/room/list/RoomListSectionBuilderSpace.kt | 4 ++-- .../java/im/vector/app/features/spaces/SpaceListViewModel.kt | 4 ++-- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt index 145c7f8bf4..e6fe72ca74 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt @@ -21,7 +21,6 @@ package org.matrix.android.sdk.api.query * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] */ sealed class ActiveSpaceFilter { - object None : ActiveSpaceFilter() data class ActiveSpace(val currentSpaceId: String?) : ActiveSpaceFilter() data class ExcludeSpace(val spaceId: String) : ActiveSpaceFilter() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 743ea65664..842fe723c4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -101,7 +101,7 @@ data class RoomSummaryQueryParams( var roomTagQueryFilter: RoomTagQueryFilter? = null var excludeType: List? = listOf(RoomType.SPACE) var includeType: List? = null - var activeSpaceFilter: ActiveSpaceFilter = ActiveSpaceFilter.None + var activeSpaceFilter: ActiveSpaceFilter? = null var activeGroupId: String? = null fun build() = RoomSummaryQueryParams( diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index a4f1566eff..dd4501d330 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -241,7 +241,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.INVITE) roomCategoryFilter = RoomCategoryFilter.ONLY_DM - activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } ?: ActiveSpaceFilter.None + activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } } ).size @@ -258,7 +258,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_DM - activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } ?: ActiveSpaceFilter.None + activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } } ) diff --git a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt index c1b3937fee..7874731e3f 100644 --- a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt @@ -153,7 +153,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia this.memberships = listOf(Membership.JOIN) this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() - } ?: ActiveSpaceFilter.None + } } ) diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index 31dc112398..0ce6db0077 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -385,7 +385,7 @@ class RoomListSectionBuilderSpace( ) } else { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - activeSpaceFilter = ActiveSpaceFilter.None + activeSpaceFilter = null ) } liveQueryParams.update { filteredPagedRoomSummariesLive.queryParams } @@ -442,7 +442,7 @@ class RoomListSectionBuilderSpace( RoomListViewModel.SpaceFilterStrategy.ALL_IF_SPACE_NULL -> { if (currentSpace == null) { copy( - activeSpaceFilter = ActiveSpaceFilter.None + activeSpaceFilter = null ) } else { copy( diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt index 52b6cc0749..55fdd4a481 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt @@ -112,7 +112,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa this.memberships = listOf(Membership.JOIN) this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() - } ?: ActiveSpaceFilter.None + } }, sortOrder = RoomSortOrder.NONE ).asFlow() .sample(300) @@ -129,7 +129,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa this.memberships = listOf(Membership.JOIN) this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() - } ?: ActiveSpaceFilter.None + } } ) val counts = RoomAggregateNotificationCount( From c7997edf9acca39e7c5310ae0f12ecd5b51f852e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 16:26:16 +0200 Subject: [PATCH 11/18] Rename ActiveSpaceFilter to SpaceFilter --- .../sdk/session/space/SpaceHierarchyTest.kt | 4 ++-- .../{ActiveSpaceFilter.kt => SpaceFilter.kt} | 6 +++--- .../api/session/room/RoomSummaryQueryParams.kt | 8 ++++---- .../room/summary/RoomSummaryDataSource.kt | 16 ++++++++-------- .../app/features/home/HomeDetailViewModel.kt | 10 +++++----- .../home/UnreadMessagesSharedViewModel.kt | 10 +++++----- .../room/list/RoomListSectionBuilderSpace.kt | 14 +++++++------- .../app/features/spaces/SpaceListViewModel.kt | 6 +++--- .../app/features/spaces/SpaceMenuViewModel.kt | 4 ++-- .../spaces/leave/SpaceLeaveAdvancedViewModel.kt | 4 ++-- .../spaces/manage/SpaceAddRoomsViewModel.kt | 8 ++++---- 11 files changed, 45 insertions(+), 45 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/{ActiveSpaceFilter.kt => SpaceFilter.kt} (81%) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt index 4a9d7cc6ea..427157d1cd 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt @@ -29,8 +29,8 @@ import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.junit.runners.MethodSorters import org.matrix.android.sdk.InstrumentedTest -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.QueryStringValue +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toContent @@ -248,7 +248,7 @@ class SpaceHierarchyTest : InstrumentedTest { Thread.sleep(6_000) val orphansUpdate = session.roomService().getRoomSummaries(roomSummaryQueryParams { - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null) + spaceFilter = SpaceFilter.ActiveSpace(null) }) assertEquals("Unexpected number of orphan rooms ${orphansUpdate.map { it.name }}", 2, orphansUpdate.size) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt similarity index 81% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt index e6fe72ca74..2e59d03665 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/ActiveSpaceFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt @@ -20,7 +20,7 @@ package org.matrix.android.sdk.api.query * Filter to be used to do room queries. * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] */ -sealed class ActiveSpaceFilter { - data class ActiveSpace(val currentSpaceId: String?) : ActiveSpaceFilter() - data class ExcludeSpace(val spaceId: String) : ActiveSpaceFilter() +sealed class SpaceFilter { + data class ActiveSpace(val currentSpaceId: String?) : SpaceFilter() + data class ExcludeSpace(val spaceId: String) : SpaceFilter() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 842fe723c4..7682e6c348 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -16,10 +16,10 @@ package org.matrix.android.sdk.api.session.room -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.query.RoomCategoryFilter import org.matrix.android.sdk.api.query.RoomTagQueryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomType import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams @@ -86,7 +86,7 @@ data class RoomSummaryQueryParams( /** * Used to filter room using the current space. */ - val activeSpaceFilter: ActiveSpaceFilter?, + val spaceFilter: SpaceFilter?, /** * Used to filter room using the current group. */ @@ -101,7 +101,7 @@ data class RoomSummaryQueryParams( var roomTagQueryFilter: RoomTagQueryFilter? = null var excludeType: List? = listOf(RoomType.SPACE) var includeType: List? = null - var activeSpaceFilter: ActiveSpaceFilter? = null + var spaceFilter: SpaceFilter? = null var activeGroupId: String? = null fun build() = RoomSummaryQueryParams( @@ -112,7 +112,7 @@ data class RoomSummaryQueryParams( roomTagQueryFilter = roomTagQueryFilter, excludeType = excludeType, includeType = includeType, - activeSpaceFilter = activeSpaceFilter, + spaceFilter = spaceFilter, activeGroupId = activeGroupId ) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 27ad3df8d2..81bfb7af0f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -26,9 +26,9 @@ import com.zhuinden.monarchy.Monarchy import io.realm.Realm import io.realm.RealmQuery import io.realm.kotlin.where -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.query.RoomCategoryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.query.isNormalized import org.matrix.android.sdk.api.session.room.ResultBoundaries import org.matrix.android.sdk.api.session.room.RoomSortOrder @@ -300,21 +300,21 @@ internal class RoomSummaryDataSource @Inject constructor( } // Timber.w("VAL: activeSpaceId : ${queryParams.activeSpaceId}") - when (queryParams.activeSpaceFilter) { - is ActiveSpaceFilter.ActiveSpace -> { + when (queryParams.spaceFilter) { + is SpaceFilter.ActiveSpace -> { // It's annoying but for now realm java does not support querying in primitive list :/ // https://github.com/realm/realm-java/issues/5361 - if (queryParams.activeSpaceFilter.currentSpaceId == null) { + if (queryParams.spaceFilter.currentSpaceId == null) { // orphan rooms query.isNull(RoomSummaryEntityFields.FLATTEN_PARENT_IDS) } else { - query.contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.activeSpaceFilter.currentSpaceId) + query.contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.currentSpaceId) } } - is ActiveSpaceFilter.ExcludeSpace -> { - query.not().contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.activeSpaceFilter.spaceId) + is SpaceFilter.ExcludeSpace -> { + query.not().contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.spaceId) } - else -> { + else -> { // nop } } diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index dd4501d330..8015504810 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -45,8 +45,8 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.RoomCategoryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.NewSessionListener import org.matrix.android.sdk.api.session.initsync.SyncStatusService @@ -241,7 +241,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.INVITE) roomCategoryFilter = RoomCategoryFilter.ONLY_DM - activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } + spaceFilter = activeSpaceRoomId?.let { SpaceFilter.ActiveSpace(it) } } ).size @@ -249,7 +249,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.INVITE) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) + spaceFilter = SpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) } ).size } @@ -258,7 +258,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_DM - activeSpaceFilter = activeSpaceRoomId?.let { ActiveSpaceFilter.ActiveSpace(it) } + spaceFilter = activeSpaceRoomId?.let { SpaceFilter.ActiveSpace(it) } } ) @@ -266,7 +266,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) + spaceFilter = SpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) } ) diff --git a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt index 7874731e3f..a6f5c2f718 100644 --- a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt @@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOn -import org.matrix.android.sdk.api.query.ActiveSpaceFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.RoomSortOrder import org.matrix.android.sdk.api.session.room.model.Membership @@ -78,7 +78,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia roomService.getPagedRoomSummariesLive( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.ActiveSpace(null) }, sortOrder = RoomSortOrder.NONE ).asFlow() .throttleFirst(300) @@ -86,7 +86,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia val counts = roomService.getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.ActiveSpace(null) } ) val invites = if (autoAcceptInvites.hideInvites) { @@ -95,7 +95,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia roomService.getRoomSummaries( roomSummaryQueryParams { this.memberships = listOf(Membership.INVITE) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.ActiveSpace(null) } ).size } @@ -151,7 +151,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia val totalCount = roomService.getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index 0ce6db0077..75c5867693 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -43,9 +43,9 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.update import org.matrix.android.sdk.api.extensions.tryOrNull -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.RoomCategoryFilter import org.matrix.android.sdk.api.query.RoomTagQueryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoomSummary import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams @@ -370,7 +370,7 @@ class RoomListSectionBuilderSpace( activeSpaceUpdaters.add(object : RoomListViewModel.ActiveSpaceQueryUpdater { override fun updateForSpaceId(roomId: String?) { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(roomId) + spaceFilter = SpaceFilter.ActiveSpace(roomId) ) liveQueryParams.update { filteredPagedRoomSummariesLive.queryParams } } @@ -381,11 +381,11 @@ class RoomListSectionBuilderSpace( override fun updateForSpaceId(roomId: String?) { if (roomId != null) { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(roomId) + spaceFilter = SpaceFilter.ActiveSpace(roomId) ) } else { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - activeSpaceFilter = null + spaceFilter = null ) } liveQueryParams.update { filteredPagedRoomSummariesLive.queryParams } @@ -436,17 +436,17 @@ class RoomListSectionBuilderSpace( return when (spaceFilter) { RoomListViewModel.SpaceFilterStrategy.ORPHANS_IF_SPACE_NULL -> { copy( - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(currentSpace) + spaceFilter = SpaceFilter.ActiveSpace(currentSpace) ) } RoomListViewModel.SpaceFilterStrategy.ALL_IF_SPACE_NULL -> { if (currentSpace == null) { copy( - activeSpaceFilter = null + spaceFilter = null ) } else { copy( - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(currentSpace) + spaceFilter = SpaceFilter.ActiveSpace(currentSpace) ) } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt index 55fdd4a481..3daa2e0adb 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt @@ -44,8 +44,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.sample import kotlinx.coroutines.launch import org.matrix.android.sdk.api.extensions.tryOrNull -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.QueryStringValue +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.toContent import org.matrix.android.sdk.api.session.events.model.toModel @@ -110,7 +110,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa session.roomService().getPagedRoomSummariesLive( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } }, sortOrder = RoomSortOrder.NONE @@ -127,7 +127,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa val totalCount = session.roomService().getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceMenuViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceMenuViewModel.kt index 4e1489ef9b..c3e4cfdbf5 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceMenuViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceMenuViewModel.kt @@ -34,8 +34,8 @@ import im.vector.app.features.session.coroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.RoomCategoryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.getRoom @@ -141,7 +141,7 @@ class SpaceMenuViewModel @AssistedInject constructor( session.roomService().getRoomSummaries( roomSummaryQueryParams { excludeType = null - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(initialState.spaceId) + spaceFilter = SpaceFilter.ActiveSpace(initialState.spaceId) memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS } diff --git a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedViewModel.kt index 2ab417ac55..926739f96c 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedViewModel.kt @@ -33,8 +33,8 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import okhttp3.internal.toImmutableList -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.RoomCategoryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel @@ -93,7 +93,7 @@ class SpaceLeaveAdvancedViewModel @AssistedInject constructor( roomSummaryQueryParams { includeType = null memberships = listOf(Membership.JOIN) - activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(initialState.spaceId) + spaceFilter = SpaceFilter.ActiveSpace(initialState.spaceId) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS } ) diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt index 7c47ce1dae..8c1880e372 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomsViewModel.kt @@ -35,9 +35,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import org.matrix.android.sdk.api.query.ActiveSpaceFilter import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.query.RoomCategoryFilter +import org.matrix.android.sdk.api.query.SpaceFilter import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoomSummary import org.matrix.android.sdk.api.session.room.RoomSortOrder @@ -72,7 +72,7 @@ class SpaceAddRoomsViewModel @AssistedInject constructor( this.memberships = listOf(Membership.JOIN) this.excludeType = null this.includeType = listOf(RoomType.SPACE) - this.activeSpaceFilter = ActiveSpaceFilter.ExcludeSpace(initialState.spaceId) + this.spaceFilter = SpaceFilter.ExcludeSpace(initialState.spaceId) this.displayName = QueryStringValue.Contains(initialState.currentFilter, QueryStringValue.Case.INSENSITIVE) }, pagedListConfig = PagedList.Config.Builder() @@ -98,7 +98,7 @@ class SpaceAddRoomsViewModel @AssistedInject constructor( this.excludeType = listOf(RoomType.SPACE) this.includeType = null this.roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - this.activeSpaceFilter = ActiveSpaceFilter.ExcludeSpace(initialState.spaceId) + this.spaceFilter = SpaceFilter.ExcludeSpace(initialState.spaceId) this.displayName = QueryStringValue.Contains(initialState.currentFilter, QueryStringValue.Case.INSENSITIVE) }, pagedListConfig = PagedList.Config.Builder() @@ -124,7 +124,7 @@ class SpaceAddRoomsViewModel @AssistedInject constructor( this.excludeType = listOf(RoomType.SPACE) this.includeType = null this.roomCategoryFilter = RoomCategoryFilter.ONLY_DM - this.activeSpaceFilter = ActiveSpaceFilter.ExcludeSpace(initialState.spaceId) + this.spaceFilter = SpaceFilter.ExcludeSpace(initialState.spaceId) this.displayName = QueryStringValue.Contains(initialState.currentFilter, QueryStringValue.Case.INSENSITIVE) }, pagedListConfig = PagedList.Config.Builder() From 0b6f35b2565f41fb8246aab36e53c808a3764f32 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 17:09:21 +0200 Subject: [PATCH 12/18] Create SpaceFilter.OrphanRooms to improve the API. Not 100% of the side effect. There is probably some (fixed?) bugs here. --- .../android/sdk/api/query/SpaceFilter.kt | 20 +++++++++++++++---- .../session/room/RoomSummaryQueryParams.kt | 4 ++-- .../room/summary/RoomSummaryDataSource.kt | 15 ++++++-------- .../app/features/home/HomeDetailViewModel.kt | 4 ++-- .../home/UnreadMessagesSharedViewModel.kt | 9 ++++----- .../room/list/RoomListSectionBuilderSpace.kt | 4 ++-- .../app/features/spaces/SpaceListViewModel.kt | 4 ++-- 7 files changed, 34 insertions(+), 26 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt index 2e59d03665..237f9388f2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt @@ -17,10 +17,22 @@ package org.matrix.android.sdk.api.query /** - * Filter to be used to do room queries. + * Filter to be used to do room queries regarding the space hierarchy. * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] */ -sealed class SpaceFilter { - data class ActiveSpace(val currentSpaceId: String?) : SpaceFilter() - data class ExcludeSpace(val spaceId: String) : SpaceFilter() +sealed interface SpaceFilter { + /** + * Used to get all the rooms that are not in any space. + */ + object OrphanRooms : SpaceFilter + + /** + * Used to get all the rooms that have the provided space in their parent hierarchy. + */ + data class ActiveSpace(val spaceId: String) : SpaceFilter + + /** + * Used to get all the rooms that do not have the provided space in their parent hierarchy. + */ + data class ExcludeSpace(val spaceId: String) : SpaceFilter } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 7682e6c348..8afcfa9ac6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -25,7 +25,7 @@ import org.matrix.android.sdk.api.session.room.model.RoomType import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams /** - * Create a [RoomSummaryQueryParams] object, calling [init] with a [RoomSummaryQueryParams.Builder] + * Create a [RoomSummaryQueryParams] object, calling [init] with a [RoomSummaryQueryParams.Builder]. */ fun roomSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): RoomSummaryQueryParams { return RoomSummaryQueryParams.Builder() @@ -34,7 +34,7 @@ fun roomSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = { } /** - * Create a [SpaceSummaryQueryParams] object (which is a [RoomSummaryQueryParams]), calling [init] with a [RoomSummaryQueryParams.Builder] + * Create a [SpaceSummaryQueryParams] object (which is a [RoomSummaryQueryParams]), calling [init] with a [RoomSummaryQueryParams.Builder]. * This is specific for spaces, other filters will be applied after invoking [init] */ fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) = {}): SpaceSummaryQueryParams { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index 81bfb7af0f..4b453908e7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -301,22 +301,19 @@ internal class RoomSummaryDataSource @Inject constructor( // Timber.w("VAL: activeSpaceId : ${queryParams.activeSpaceId}") when (queryParams.spaceFilter) { + SpaceFilter.OrphanRooms -> { + // orphan rooms + query.isNull(RoomSummaryEntityFields.FLATTEN_PARENT_IDS) + } is SpaceFilter.ActiveSpace -> { // It's annoying but for now realm java does not support querying in primitive list :/ // https://github.com/realm/realm-java/issues/5361 - if (queryParams.spaceFilter.currentSpaceId == null) { - // orphan rooms - query.isNull(RoomSummaryEntityFields.FLATTEN_PARENT_IDS) - } else { - query.contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.currentSpaceId) - } + query.contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.spaceId) } is SpaceFilter.ExcludeSpace -> { query.not().contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.spaceId) } - else -> { - // nop - } + null -> Unit // nop } queryParams.activeGroupId?.let { activeGroupId -> diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index 8015504810..5044e71a50 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -249,7 +249,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.INVITE) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - spaceFilter = SpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) + spaceFilter = groupingMethod.spaceSummary?.roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms } ).size } @@ -266,7 +266,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - spaceFilter = SpaceFilter.ActiveSpace(groupingMethod.spaceSummary?.roomId) + spaceFilter = groupingMethod.spaceSummary?.roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms } ) diff --git a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt index a6f5c2f718..09e2d11f84 100644 --- a/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/UnreadMessagesSharedViewModel.kt @@ -74,11 +74,10 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia private val roomService = session.roomService() init { - roomService.getPagedRoomSummariesLive( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.spaceFilter = SpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.OrphanRooms }, sortOrder = RoomSortOrder.NONE ).asFlow() .throttleFirst(300) @@ -86,7 +85,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia val counts = roomService.getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.spaceFilter = SpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.OrphanRooms } ) val invites = if (autoAcceptInvites.hideInvites) { @@ -95,7 +94,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia roomService.getRoomSummaries( roomSummaryQueryParams { this.memberships = listOf(Membership.INVITE) - this.spaceFilter = SpaceFilter.ActiveSpace(null) + this.spaceFilter = SpaceFilter.OrphanRooms } ).size } @@ -151,7 +150,7 @@ class UnreadMessagesSharedViewModel @AssistedInject constructor(@Assisted initia val totalCount = roomService.getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.OrphanRooms.takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index 75c5867693..c001b69121 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -370,7 +370,7 @@ class RoomListSectionBuilderSpace( activeSpaceUpdaters.add(object : RoomListViewModel.ActiveSpaceQueryUpdater { override fun updateForSpaceId(roomId: String?) { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - spaceFilter = SpaceFilter.ActiveSpace(roomId) + spaceFilter = roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms ) liveQueryParams.update { filteredPagedRoomSummariesLive.queryParams } } @@ -436,7 +436,7 @@ class RoomListSectionBuilderSpace( return when (spaceFilter) { RoomListViewModel.SpaceFilterStrategy.ORPHANS_IF_SPACE_NULL -> { copy( - spaceFilter = SpaceFilter.ActiveSpace(currentSpace) + spaceFilter = currentSpace?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms ) } RoomListViewModel.SpaceFilterStrategy.ALL_IF_SPACE_NULL -> { diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt index 3daa2e0adb..086ab08c3b 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt @@ -110,7 +110,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa session.roomService().getPagedRoomSummariesLive( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.OrphanRooms.takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } }, sortOrder = RoomSortOrder.NONE @@ -127,7 +127,7 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa val totalCount = session.roomService().getNotificationCountForRooms( roomSummaryQueryParams { this.memberships = listOf(Membership.JOIN) - this.spaceFilter = SpaceFilter.ActiveSpace(null).takeIf { + this.spaceFilter = SpaceFilter.OrphanRooms.takeIf { !vectorPreferences.prefSpacesShowAllRoomInHome() } } From 5fbcec0c9c1bc01957674f3db5498415fc1fd413 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 17:14:23 +0200 Subject: [PATCH 13/18] Add some Kdoc --- .../android/sdk/api/query/QueryStringValue.kt | 44 ++++++++++++++++--- .../sdk/api/query/RoomCategoryFilter.kt | 15 +++++++ .../sdk/api/query/RoomTagQueryFilter.kt | 16 ++++++- .../sdk/api/session/room/RoomSortOrder.kt | 19 ++++++++ .../session/room/RoomSummaryQueryParams.kt | 4 ++ 5 files changed, 91 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt index 368ff98661..4c6b5a9a18 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt @@ -20,20 +20,52 @@ package org.matrix.android.sdk.api.query * Basic query language. All these cases are mutually exclusive. */ sealed interface QueryStringValue { + /** + * No condition, i.e. there will be no test on the tested field + */ + object NoCondition : QueryStringValue + + /** + * The tested field has to be null + */ + object IsNull : QueryStringValue + + /** + * The tested field has to be not null + */ + object IsNotNull : QueryStringValue + + /** + * The tested field has to be empty + */ + object IsEmpty : QueryStringValue + + /** + * The tested field has to not empty + */ + object IsNotEmpty : QueryStringValue + + /** + * Interface to check String content + */ sealed interface ContentQueryStringValue : QueryStringValue { val string: String val case: Case } - object NoCondition : QueryStringValue - object IsNull : QueryStringValue - object IsNotNull : QueryStringValue - object IsEmpty : QueryStringValue - object IsNotEmpty : QueryStringValue - + /** + * The tested field must match the [string]. + */ data class Equals(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue + + /** + * The tested field must contain the [string] + */ data class Contains(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue + /** + * Case enum for [ContentQueryStringValue] + */ enum class Case { /** * Match query sensitive to case. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt index f9034e1a18..93decb5c53 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt @@ -16,8 +16,23 @@ package org.matrix.android.sdk.api.query +/** + * To filter by Room category + * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] + */ enum class RoomCategoryFilter { + /** + * Get only the DM, i.e. the rooms referenced in `m.direct` account data. + */ ONLY_DM, + + /** + * Get only the Room, not the DM, i.e. the rooms not referenced in `m.direct` account data. + */ ONLY_ROOMS, + + /** + * Get the room with non-0 notifications. + */ ONLY_WITH_NOTIFICATIONS, } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomTagQueryFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomTagQueryFilter.kt index 613916bc18..73947f8f7a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomTagQueryFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomTagQueryFilter.kt @@ -16,8 +16,22 @@ package org.matrix.android.sdk.api.query +/** + * Filter room by their tag. + * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] + * @see [org.matrix.android.sdk.api.session.room.model.tag.RoomTag] + */ data class RoomTagQueryFilter( + /** + * Set to true to get the rooms which have the tag "m.favourite". + */ val isFavorite: Boolean?, + /** + * Set to true to get the rooms which have the tag "m.lowpriority". + */ val isLowPriority: Boolean?, - val isServerNotice: Boolean? + /** + * Set to true to get the rooms which have the tag "m.server_notice". + */ + val isServerNotice: Boolean?, ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSortOrder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSortOrder.kt index e721abd6a0..9368ad6bf4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSortOrder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSortOrder.kt @@ -16,9 +16,28 @@ package org.matrix.android.sdk.api.session.room +/** + * Enum to sort room list. + */ enum class RoomSortOrder { + /** + * Sort room list by room ascending name. + */ NAME, + + /** + * Sort room list by room descending last activity. + */ ACTIVITY, + + /** + * Sort room list by room priority and last activity: favorite room first, low priority room last, + * then descending last activity. + */ PRIORITY_AND_ACTIVITY, + + /** + * Do not sort room list. Useful if the order does not matter. Order can be indeterminate. + */ NONE } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 8afcfa9ac6..3d943473e4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -93,6 +93,10 @@ data class RoomSummaryQueryParams( val activeGroupId: String? = null ) { + /** + * Builder for [RoomSummaryQueryParams]. + * [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of [RoomSummaryQueryParams]. + */ class Builder { var displayName: QueryStringValue = QueryStringValue.NoCondition var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition From cffdb7f7a6f9cec46bfa33f2c230fed6ac368930 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 17:49:12 +0200 Subject: [PATCH 14/18] Add some Kdoc --- .../android/sdk/api/query/QueryStringValue.kt | 16 +- .../sdk/api/query/RoomCategoryFilter.kt | 2 +- .../sdk/api/session/room/model/RoomSummary.kt | 140 +++++++++++++++++- .../api/session/room/model/VersioningState.kt | 16 +- 4 files changed, 161 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt index 4c6b5a9a18..f08c86885d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt @@ -21,32 +21,32 @@ package org.matrix.android.sdk.api.query */ sealed interface QueryStringValue { /** - * No condition, i.e. there will be no test on the tested field + * No condition, i.e. there will be no test on the tested field. */ object NoCondition : QueryStringValue /** - * The tested field has to be null + * The tested field has to be null. */ object IsNull : QueryStringValue /** - * The tested field has to be not null + * The tested field has to be not null. */ object IsNotNull : QueryStringValue /** - * The tested field has to be empty + * The tested field has to be empty. */ object IsEmpty : QueryStringValue /** - * The tested field has to not empty + * The tested field has to not empty. */ object IsNotEmpty : QueryStringValue /** - * Interface to check String content + * Interface to check String content. */ sealed interface ContentQueryStringValue : QueryStringValue { val string: String @@ -59,12 +59,12 @@ sealed interface QueryStringValue { data class Equals(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue /** - * The tested field must contain the [string] + * The tested field must contain the [string]. */ data class Contains(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue /** - * Case enum for [ContentQueryStringValue] + * Case enum for [ContentQueryStringValue]. */ enum class Case { /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt index 93decb5c53..c2117adbd3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/RoomCategoryFilter.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.api.query /** - * To filter by Room category + * To filter by Room category. * @see [org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams] */ enum class RoomCategoryFilter { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt index b978feb1e2..1ab23b7a11 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt @@ -28,66 +28,200 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent * It can be retrieved by [org.matrix.android.sdk.api.session.room.Room] and [org.matrix.android.sdk.api.session.room.RoomService] */ data class RoomSummary( + /** + * The roomId of the room. + */ val roomId: String, - // Computed display name + /** + * Computed display name. The value of the state event `m.room.name` if not empty, else can be the value returned + * by [org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider]. + */ val displayName: String = "", + /** + * The value of the live state event `m.room.name`. + */ val name: String = "", + /** + * The value of the live state event `m.room.topic`. + */ val topic: String = "", + /** + * The value of the live state event `m.room.avatar`. + */ val avatarUrl: String = "", + /** + * The value of the live state event `m.room.canonical_alias`. + */ val canonicalAlias: String? = null, + /** + * The list of all the aliases of this room. Content of the live state event `m.room.aliases`. + */ val aliases: List = emptyList(), + /** + * The value of the live state event `m.room.join_rules`. + */ val joinRules: RoomJoinRules? = null, + /** + * True is this room is referenced in the account data `m.direct`. + */ val isDirect: Boolean = false, + /** + * If [isDirect] is true, this is the id of the first other member of this room. + */ val directUserId: String? = null, + /** + * If [isDirect] is true, this it the presence of the first other member of this room. + */ val directUserPresence: UserPresence? = null, + /** + * Number of members who have joined this room. + */ val joinedMembersCount: Int? = 0, + /** + * Number of members who are invited to this room. + */ val invitedMembersCount: Int? = 0, + /** + * Latest [TimelineEvent] which can be displayed in this room. Can be used in the room list. + */ val latestPreviewableEvent: TimelineEvent? = null, + /** + * List of other member ids of this room. + */ val otherMemberIds: List = emptyList(), + /** + * Number of unread message in this room. + */ val notificationCount: Int = 0, + /** + * Number of unread and highlighted message in this room. + */ val highlightCount: Int = 0, + /** + * True if this room has unread messages. + */ val hasUnreadMessages: Boolean = false, + /** + * List of tags in this room. + */ val tags: List = emptyList(), + /** + * Current user membership in this room. + */ val membership: Membership = Membership.NONE, + /** + * Versioning state of this room. + */ val versioningState: VersioningState = VersioningState.NONE, + /** + * Value of `m.fully_read` for this room. + */ val readMarkerId: String? = null, + /** + * Message saved as draft for this room. + */ val userDrafts: List = emptyList(), + /** + * True if this room is encrypted. + */ val isEncrypted: Boolean, + /** + * Timestamp of the `m.room.encryption` state event. + */ val encryptionEventTs: Long?, + /** + * List of users who are currently typing on this room. + */ val typingUsers: List, + /** + * UserId of the user who has invited the current user to this room. + */ val inviterId: String? = null, + /** + * Breadcrumb index, util to sort rooms by last seen. + */ val breadcrumbsIndex: Int = NOT_IN_BREADCRUMBS, + /** + * The room encryption trust level. + * @see [RoomEncryptionTrustLevel] + */ val roomEncryptionTrustLevel: RoomEncryptionTrustLevel? = null, + /** + * True if a message has not been sent in this room. + */ val hasFailedSending: Boolean = false, + /** + * The type of the room. Null for regular room. + * @see [RoomType] + */ val roomType: String? = null, + /** + * List of parent spaces. + */ val spaceParents: List? = null, + /** + * List of children space. + */ val spaceChildren: List? = null, + /** + * List of all the space parents. Will be empty by default, you have to explicitly request it. + */ val flattenParents: List = emptyList(), + /** + * List of all the space parent Ids. + */ val flattenParentIds: List = emptyList(), - val roomEncryptionAlgorithm: RoomEncryptionAlgorithm? = null + /** + * Information about the encryption algorithm, if this room is encrypted. + */ + val roomEncryptionAlgorithm: RoomEncryptionAlgorithm? = null, ) { - + /** + * True if [versioningState] is not [VersioningState.NONE]. + */ val isVersioned: Boolean get() = versioningState != VersioningState.NONE + /** + * True if [notificationCount] is not `0`. + */ val hasNewMessages: Boolean get() = notificationCount != 0 + /** + * True if the room has the tag `m.lowpriority`. + */ val isLowPriority: Boolean get() = hasTag(RoomTag.ROOM_TAG_LOW_PRIORITY) + /** + * True if the room has the tag `m.favourite`. + */ val isFavorite: Boolean get() = hasTag(RoomTag.ROOM_TAG_FAVOURITE) + /** + * True if [joinRules] is [RoomJoinRules.PUBLIC]. + */ val isPublic: Boolean get() = joinRules == RoomJoinRules.PUBLIC + /** + * Test if the room has the provided [tag]. + */ fun hasTag(tag: String) = tags.any { it.name == tag } + /** + * True if a 1-1 call can be started, i.e. the room has exactly 2 joined members. + */ val canStartCall: Boolean get() = joinedMembersCount == 2 companion object { + /** + * Constant to indicated that the room is not on the breadcrumbs. + * Used by [breadcrumbsIndex]. + */ const val NOT_IN_BREADCRUMBS = -1 } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt index b4e7b10d44..2e1668ebbb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt @@ -16,8 +16,22 @@ package org.matrix.android.sdk.api.session.room.model +/** + * Enum for the versioning state of a room. + */ enum class VersioningState { + /** + * The room is not versioned. + */ NONE, + + /** + * The room has been upgraded, but the new room is not joined yet. + */ UPGRADED_ROOM_NOT_JOINED, - UPGRADED_ROOM_JOINED + + /** + * The room has been upgraded, and the new room has been joined. + */ + UPGRADED_ROOM_JOINED, } From ad60467ae740ab834ac82780579828e5effd65fe Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 May 2022 18:11:48 +0200 Subject: [PATCH 15/18] Fix test compilation --- .../org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt index 427157d1cd..f16cd91e36 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt @@ -248,7 +248,7 @@ class SpaceHierarchyTest : InstrumentedTest { Thread.sleep(6_000) val orphansUpdate = session.roomService().getRoomSummaries(roomSummaryQueryParams { - spaceFilter = SpaceFilter.ActiveSpace(null) + spaceFilter = SpaceFilter.OrphanRooms }) assertEquals("Unexpected number of orphan rooms ${orphansUpdate.map { it.name }}", 2, orphansUpdate.size) } From d7a1ae3a00f41ee740fce3fd7f75d2feed9eb3cb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 25 May 2022 10:50:45 +0200 Subject: [PATCH 16/18] Add changelog --- changelog.d/6143.sdk | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/6143.sdk diff --git a/changelog.d/6143.sdk b/changelog.d/6143.sdk new file mode 100644 index 0000000000..70cf4d8b77 --- /dev/null +++ b/changelog.d/6143.sdk @@ -0,0 +1,3 @@ +Remove `RoomSummaryQueryParams.roomId`. If you need to observe a single room, use the new API `RoomService.getRoomSummaryLive(roomId: String)` +- `ActiveSpaceFilter` has been renamed to `SpaceFilter` +- `RoomCategoryFilter.ALL` has been removed, just pass `null` to not filter on Room category. From c071dc502e084c48ffabd91ccacb614b85af4b85 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 30 May 2022 11:33:46 +0200 Subject: [PATCH 17/18] Create extension `String?.toActiveSpaceOrOrphanRooms()` to reduce noise. --- .../java/org/matrix/android/sdk/api/query/SpaceFilter.kt | 5 +++++ .../im/vector/app/features/home/HomeDetailViewModel.kt | 9 +++++++-- .../home/room/list/RoomListSectionBuilderSpace.kt | 5 +++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt index 237f9388f2..6383412ffb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt @@ -36,3 +36,8 @@ sealed interface SpaceFilter { */ data class ExcludeSpace(val spaceId: String) : SpaceFilter } + +/** + * Return a [SpaceFilter.ActiveSpace] if the String is not null, or [SpaceFilter.OrphanRooms]. + */ +fun String?.toActiveSpaceOrOrphanRooms(): SpaceFilter = this?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt index 5044e71a50..30bff45cbd 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailViewModel.kt @@ -47,6 +47,7 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.matrix.android.sdk.api.query.RoomCategoryFilter import org.matrix.android.sdk.api.query.SpaceFilter +import org.matrix.android.sdk.api.query.toActiveSpaceOrOrphanRooms import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.NewSessionListener import org.matrix.android.sdk.api.session.initsync.SyncStatusService @@ -249,7 +250,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.INVITE) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - spaceFilter = groupingMethod.spaceSummary?.roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms + spaceFilter = groupingMethod.toActiveSpaceOrOrphanRooms() } ).size } @@ -266,7 +267,7 @@ class HomeDetailViewModel @AssistedInject constructor( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) roomCategoryFilter = RoomCategoryFilter.ONLY_ROOMS - spaceFilter = groupingMethod.spaceSummary?.roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms + spaceFilter = groupingMethod.toActiveSpaceOrOrphanRooms() } ) @@ -287,4 +288,8 @@ class HomeDetailViewModel @AssistedInject constructor( } .launchIn(viewModelScope) } + + private fun RoomGroupingMethod.BySpace.toActiveSpaceOrOrphanRooms(): SpaceFilter? { + return spaceSummary?.roomId?.toActiveSpaceOrOrphanRooms() + } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index c001b69121..08ecca8c6a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -46,6 +46,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.query.RoomCategoryFilter import org.matrix.android.sdk.api.query.RoomTagQueryFilter import org.matrix.android.sdk.api.query.SpaceFilter +import org.matrix.android.sdk.api.query.toActiveSpaceOrOrphanRooms import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoomSummary import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams @@ -370,7 +371,7 @@ class RoomListSectionBuilderSpace( activeSpaceUpdaters.add(object : RoomListViewModel.ActiveSpaceQueryUpdater { override fun updateForSpaceId(roomId: String?) { filteredPagedRoomSummariesLive.queryParams = roomQueryParams.copy( - spaceFilter = roomId?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms + spaceFilter = roomId?.toActiveSpaceOrOrphanRooms() ) liveQueryParams.update { filteredPagedRoomSummariesLive.queryParams } } @@ -436,7 +437,7 @@ class RoomListSectionBuilderSpace( return when (spaceFilter) { RoomListViewModel.SpaceFilterStrategy.ORPHANS_IF_SPACE_NULL -> { copy( - spaceFilter = currentSpace?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms + spaceFilter = currentSpace?.toActiveSpaceOrOrphanRooms() ) } RoomListViewModel.SpaceFilterStrategy.ALL_IF_SPACE_NULL -> { From ec498cf054d0074669a5f0988f2ca906c60e7f97 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 30 May 2022 10:43:57 +0200 Subject: [PATCH 18/18] Cleaner code --- .../home/room/list/RoomListSectionBuilderSpace.kt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt index 08ecca8c6a..e36d3da899 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListSectionBuilderSpace.kt @@ -441,15 +441,9 @@ class RoomListSectionBuilderSpace( ) } RoomListViewModel.SpaceFilterStrategy.ALL_IF_SPACE_NULL -> { - if (currentSpace == null) { - copy( - spaceFilter = null - ) - } else { - copy( - spaceFilter = SpaceFilter.ActiveSpace(currentSpace) - ) - } + copy( + spaceFilter = currentSpace?.let { SpaceFilter.ActiveSpace(it) } + ) } RoomListViewModel.SpaceFilterStrategy.NONE -> this }