Merge pull request #2369 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-0.x
Update dependency org.matrix.rustcomponents:sdk-android to v0.1.99
This commit is contained in:
commit
e0b151529d
8 changed files with 106 additions and 43 deletions
|
|
@ -152,7 +152,7 @@ jsoup = "org.jsoup:jsoup:1.17.2"
|
||||||
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
|
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
|
||||||
molecule-runtime = "app.cash.molecule:molecule-runtime:1.3.2"
|
molecule-runtime = "app.cash.molecule:molecule-runtime:1.3.2"
|
||||||
timber = "com.jakewharton.timber:timber:5.0.1"
|
timber = "com.jakewharton.timber:timber:5.0.1"
|
||||||
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.98"
|
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.99"
|
||||||
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
||||||
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
||||||
sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
|
sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
|
||||||
|
|
|
||||||
|
|
@ -28,29 +28,7 @@ import kotlinx.coroutines.flow.onEach
|
||||||
* It lets load rooms on demand and filter them.
|
* It lets load rooms on demand and filter them.
|
||||||
*/
|
*/
|
||||||
interface DynamicRoomList : RoomList {
|
interface DynamicRoomList : RoomList {
|
||||||
sealed interface Filter {
|
val currentFilter: StateFlow<RoomListFilter>
|
||||||
/**
|
|
||||||
* No filter applied.
|
|
||||||
*/
|
|
||||||
data object All : Filter
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter only the left rooms.
|
|
||||||
*/
|
|
||||||
data object AllNonLeft : Filter
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter all rooms.
|
|
||||||
*/
|
|
||||||
data object None : Filter
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter rooms by normalized room name.
|
|
||||||
*/
|
|
||||||
data class NormalizedMatchRoomName(val pattern: String) : Filter
|
|
||||||
}
|
|
||||||
|
|
||||||
val currentFilter: StateFlow<Filter>
|
|
||||||
val loadedPages: StateFlow<Int>
|
val loadedPages: StateFlow<Int>
|
||||||
val pageSize: Int
|
val pageSize: Int
|
||||||
|
|
||||||
|
|
@ -68,7 +46,7 @@ interface DynamicRoomList : RoomList {
|
||||||
* Update the filter to apply to the list.
|
* Update the filter to apply to the list.
|
||||||
* @param filter the filter to apply.
|
* @param filter the filter to apply.
|
||||||
*/
|
*/
|
||||||
suspend fun updateFilter(filter: Filter)
|
suspend fun updateFilter(filter: RoomListFilter)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.api.roomlist
|
||||||
|
|
||||||
|
sealed interface RoomListFilter {
|
||||||
|
companion object {
|
||||||
|
fun all(vararg filters: RoomListFilter): RoomListFilter {
|
||||||
|
return All(filters.toList())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun any(vararg filters: RoomListFilter): RoomListFilter {
|
||||||
|
return Any(filters.toList())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class All(
|
||||||
|
val filters: List<RoomListFilter>
|
||||||
|
) : RoomListFilter
|
||||||
|
|
||||||
|
data class Any(
|
||||||
|
val filters: List<RoomListFilter>
|
||||||
|
) : RoomListFilter
|
||||||
|
|
||||||
|
data object NonLeft : RoomListFilter
|
||||||
|
|
||||||
|
data object Unread : RoomListFilter
|
||||||
|
|
||||||
|
sealed interface Category : RoomListFilter {
|
||||||
|
data object Group : Category
|
||||||
|
data object People : Category
|
||||||
|
}
|
||||||
|
|
||||||
|
data object None : RoomListFilter
|
||||||
|
|
||||||
|
data class NormalizedMatchRoomName(
|
||||||
|
val pattern: String
|
||||||
|
) : RoomListFilter
|
||||||
|
|
||||||
|
data class FuzzyMatchRoomName(
|
||||||
|
val pattern: String
|
||||||
|
) : RoomListFilter
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -28,7 +29,6 @@ import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomListLoadingState
|
import org.matrix.rustcomponents.sdk.RoomListLoadingState
|
||||||
import org.matrix.rustcomponents.sdk.RoomList as InnerRoomList
|
import org.matrix.rustcomponents.sdk.RoomList as InnerRoomList
|
||||||
import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService
|
import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService
|
||||||
|
|
@ -44,7 +44,7 @@ internal class RoomListFactory(
|
||||||
*/
|
*/
|
||||||
fun createRoomList(
|
fun createRoomList(
|
||||||
pageSize: Int,
|
pageSize: Int,
|
||||||
initialFilter: DynamicRoomList.Filter = DynamicRoomList.Filter.All,
|
initialFilter: RoomListFilter = RoomListFilter.all(),
|
||||||
innerProvider: suspend () -> InnerRoomList
|
innerProvider: suspend () -> InnerRoomList
|
||||||
): DynamicRoomList {
|
): DynamicRoomList {
|
||||||
val loadingStateFlow: MutableStateFlow<RoomList.LoadingState> = MutableStateFlow(RoomList.LoadingState.NotLoaded)
|
val loadingStateFlow: MutableStateFlow<RoomList.LoadingState> = MutableStateFlow(RoomList.LoadingState.NotLoaded)
|
||||||
|
|
@ -91,7 +91,7 @@ internal class RoomListFactory(
|
||||||
private class RustDynamicRoomList(
|
private class RustDynamicRoomList(
|
||||||
override val summaries: MutableStateFlow<List<RoomSummary>>,
|
override val summaries: MutableStateFlow<List<RoomSummary>>,
|
||||||
override val loadingState: MutableStateFlow<RoomList.LoadingState>,
|
override val loadingState: MutableStateFlow<RoomList.LoadingState>,
|
||||||
override val currentFilter: MutableStateFlow<DynamicRoomList.Filter>,
|
override val currentFilter: MutableStateFlow<RoomListFilter>,
|
||||||
override val loadedPages: MutableStateFlow<Int>,
|
override val loadedPages: MutableStateFlow<Int>,
|
||||||
private val dynamicEvents: MutableSharedFlow<RoomListDynamicEvents>,
|
private val dynamicEvents: MutableSharedFlow<RoomListDynamicEvents>,
|
||||||
private val processor: RoomSummaryListProcessor,
|
private val processor: RoomSummaryListProcessor,
|
||||||
|
|
@ -101,7 +101,7 @@ private class RustDynamicRoomList(
|
||||||
processor.rebuildRoomSummaries()
|
processor.rebuildRoomSummaries()
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun updateFilter(filter: DynamicRoomList.Filter) {
|
override suspend fun updateFilter(filter: RoomListFilter) {
|
||||||
currentFilter.emit(filter)
|
currentFilter.emit(filter)
|
||||||
val filterEvent = RoomListDynamicEvents.SetFilter(filter.toRustFilter())
|
val filterEvent = RoomListDynamicEvents.SetFilter(filter.toRustFilter())
|
||||||
dynamicEvents.emit(filterEvent)
|
dynamicEvents.emit(filterEvent)
|
||||||
|
|
@ -124,12 +124,3 @@ private fun RoomListLoadingState.toLoadingState(): RoomList.LoadingState {
|
||||||
RoomListLoadingState.NotLoaded -> RoomList.LoadingState.NotLoaded
|
RoomListLoadingState.NotLoaded -> RoomList.LoadingState.NotLoaded
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DynamicRoomList.Filter.toRustFilter(): RoomListEntriesDynamicFilterKind {
|
|
||||||
return when (this) {
|
|
||||||
DynamicRoomList.Filter.All -> RoomListEntriesDynamicFilterKind.All
|
|
||||||
is DynamicRoomList.Filter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(this.pattern)
|
|
||||||
DynamicRoomList.Filter.None -> RoomListEntriesDynamicFilterKind.None
|
|
||||||
DynamicRoomList.Filter.AllNonLeft -> RoomListEntriesDynamicFilterKind.AllNonLeft
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListFilterCategory
|
||||||
|
|
||||||
|
fun RoomListFilter.toRustFilter(): RoomListEntriesDynamicFilterKind {
|
||||||
|
return when (this) {
|
||||||
|
is RoomListFilter.All -> RoomListEntriesDynamicFilterKind.All(filters.map { it.toRustFilter() })
|
||||||
|
is RoomListFilter.Any -> RoomListEntriesDynamicFilterKind.Any(filters.map { it.toRustFilter() })
|
||||||
|
RoomListFilter.Category.Group -> RoomListEntriesDynamicFilterKind.Category(RoomListFilterCategory.GROUP)
|
||||||
|
RoomListFilter.Category.People -> RoomListEntriesDynamicFilterKind.Category(RoomListFilterCategory.PEOPLE)
|
||||||
|
is RoomListFilter.FuzzyMatchRoomName -> RoomListEntriesDynamicFilterKind.FuzzyMatchRoomName(pattern)
|
||||||
|
RoomListFilter.NonLeft -> RoomListEntriesDynamicFilterKind.NonLeft
|
||||||
|
RoomListFilter.None -> RoomListEntriesDynamicFilterKind.None
|
||||||
|
is RoomListFilter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(pattern)
|
||||||
|
RoomListFilter.Unread -> RoomListEntriesDynamicFilterKind.Unread
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally
|
import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -45,7 +46,7 @@ internal class RustRoomListService(
|
||||||
) : RoomListService {
|
) : RoomListService {
|
||||||
override val allRooms: DynamicRoomList = roomListFactory.createRoomList(
|
override val allRooms: DynamicRoomList = roomListFactory.createRoomList(
|
||||||
pageSize = DEFAULT_PAGE_SIZE,
|
pageSize = DEFAULT_PAGE_SIZE,
|
||||||
initialFilter = DynamicRoomList.Filter.AllNonLeft,
|
initialFilter = RoomListFilter.all(RoomListFilter.NonLeft),
|
||||||
) {
|
) {
|
||||||
innerRoomListService.allRooms()
|
innerRoomListService.allRooms()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.test.roomlist
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
@ -61,13 +62,13 @@ class FakeRoomListService : RoomListService {
|
||||||
override val allRooms: DynamicRoomList = SimplePagedRoomList(
|
override val allRooms: DynamicRoomList = SimplePagedRoomList(
|
||||||
allRoomSummariesFlow,
|
allRoomSummariesFlow,
|
||||||
allRoomsLoadingStateFlow,
|
allRoomsLoadingStateFlow,
|
||||||
MutableStateFlow(DynamicRoomList.Filter.None)
|
MutableStateFlow(RoomListFilter.all())
|
||||||
)
|
)
|
||||||
|
|
||||||
override val invites: RoomList = SimplePagedRoomList(
|
override val invites: RoomList = SimplePagedRoomList(
|
||||||
inviteRoomSummariesFlow,
|
inviteRoomSummariesFlow,
|
||||||
inviteRoomsLoadingStateFlow,
|
inviteRoomsLoadingStateFlow,
|
||||||
MutableStateFlow(DynamicRoomList.Filter.None)
|
MutableStateFlow(RoomListFilter.all())
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun updateAllRoomsVisibleRange(range: IntRange) {
|
override fun updateAllRoomsVisibleRange(range: IntRange) {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.libraries.matrix.test.roomlist
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
@ -26,7 +27,7 @@ import kotlinx.coroutines.flow.getAndUpdate
|
||||||
data class SimplePagedRoomList(
|
data class SimplePagedRoomList(
|
||||||
override val summaries: StateFlow<List<RoomSummary>>,
|
override val summaries: StateFlow<List<RoomSummary>>,
|
||||||
override val loadingState: StateFlow<RoomList.LoadingState>,
|
override val loadingState: StateFlow<RoomList.LoadingState>,
|
||||||
override val currentFilter: MutableStateFlow<DynamicRoomList.Filter>
|
override val currentFilter: MutableStateFlow<RoomListFilter>
|
||||||
) : DynamicRoomList {
|
) : DynamicRoomList {
|
||||||
override val pageSize: Int = Int.MAX_VALUE
|
override val pageSize: Int = Int.MAX_VALUE
|
||||||
override val loadedPages = MutableStateFlow(1)
|
override val loadedPages = MutableStateFlow(1)
|
||||||
|
|
@ -40,7 +41,7 @@ data class SimplePagedRoomList(
|
||||||
loadedPages.emit(1)
|
loadedPages.emit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun updateFilter(filter: DynamicRoomList.Filter) {
|
override suspend fun updateFilter(filter: RoomListFilter) {
|
||||||
currentFilter.emit(filter)
|
currentFilter.emit(filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue