Update dependency org.matrix.rustcomponents:sdk-android to v26.09.08 (#7668)

* Update dependency org.matrix.rustcomponents:sdk-android to v26.09.08

* Fix API breaks:

- There's no `SyncServiceBuilder.withProfilesExtension()` method anymore. This is now enabled unconditionally in the SDK.
- Timeline filters no longer use the `org.matrix.rustcomponents.sdk.TimelineEventFilter` FFI wrapper, but the `uniffi.matrix_sdk_ui.TimelineEventFilter` type directly. This also changes the underlying types used for inclusion/exclusion.

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
This commit is contained in:
renovate[bot]
2026-09-08 16:22:14 +02:00
committed by GitHub
parent 039c0df9ed
commit 3df1906d2a
7 changed files with 45 additions and 29 deletions
+1 -1
View File
@@ -185,7 +185,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version
# https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt # https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt
# All new features should not be implemented in the pull request that upgrades the version, developers should # All new features should not be implemented in the pull request that upgrades the version, developers should
# only fix API breaks and may add some TODOs. # only fix API breaks and may add some TODOs.
matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.09.3" matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.09.08"
# Others # Others
coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
@@ -133,7 +133,6 @@ class RustMatrixClientFactory(
val syncService = client.syncService() val syncService = client.syncService()
.withSharePos(true) .withSharePos(true)
.withOfflineMode() .withOfflineMode()
.withProfilesExtension()
.finish() .finish()
return RustMatrixClient( return RustMatrixClient(
@@ -9,7 +9,9 @@
package io.element.android.libraries.matrix.impl.room package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.StateEventType
import uniffi.ruma_events.TimelineEventType
import uniffi.ruma_events.stateEventTypeFromString import uniffi.ruma_events.stateEventTypeFromString
import uniffi.ruma_events.timelineEventTypeFromString
import uniffi.ruma_events.StateEventType as RustStateEventType import uniffi.ruma_events.StateEventType as RustStateEventType
fun StateEventType.map(): RustStateEventType = when (this) { fun StateEventType.map(): RustStateEventType = when (this) {
@@ -73,3 +75,34 @@ fun RustStateEventType.map(): StateEventType = when (this) {
RustStateEventType.RoomRetention -> StateEventType.RoomRetention RustStateEventType.RoomRetention -> StateEventType.RoomRetention
is RustStateEventType.Custom -> StateEventType.Custom(this.toString()) is RustStateEventType.Custom -> StateEventType.Custom(this.toString())
} }
fun TimelineEventType.Companion.fromState(stateEventType: StateEventType): TimelineEventType = when (stateEventType) {
StateEventType.PolicyRuleRoom -> TimelineEventType.PolicyRuleRoom
StateEventType.PolicyRuleServer -> TimelineEventType.PolicyRuleServer
StateEventType.PolicyRuleUser -> TimelineEventType.PolicyRuleUser
StateEventType.CallMember -> TimelineEventType.CallMember
StateEventType.RoomAvatar -> TimelineEventType.RoomAvatar
StateEventType.RoomCanonicalAlias -> TimelineEventType.RoomCanonicalAlias
StateEventType.RoomCreate -> TimelineEventType.RoomCreate
StateEventType.RoomEncryption -> TimelineEventType.RoomEncryption
StateEventType.RoomGuestAccess -> TimelineEventType.RoomGuestAccess
StateEventType.RoomHistoryVisibility -> TimelineEventType.RoomHistoryVisibility
StateEventType.RoomJoinRules -> TimelineEventType.RoomJoinRules
StateEventType.RoomMemberEvent -> TimelineEventType.RoomMember
StateEventType.RoomName -> TimelineEventType.RoomName
StateEventType.RoomPinnedEvents -> TimelineEventType.RoomPinnedEvents
StateEventType.RoomPowerLevels -> TimelineEventType.RoomPowerLevels
StateEventType.RoomServerAcl -> TimelineEventType.RoomServerAcl
StateEventType.RoomThirdPartyInvite -> TimelineEventType.RoomThirdPartyInvite
StateEventType.RoomTombstone -> TimelineEventType.RoomTombstone
StateEventType.RoomTopic -> TimelineEventType.RoomTopic
StateEventType.SpaceChild -> TimelineEventType.SpaceChild
StateEventType.SpaceParent -> TimelineEventType.SpaceParent
StateEventType.BeaconInfo -> TimelineEventType.BeaconInfo
StateEventType.MemberHints -> TimelineEventType.MemberHints
StateEventType.RoomImagePack -> TimelineEventType.RoomImagePack
StateEventType.RoomLanguage -> TimelineEventType.RoomLanguage
StateEventType.RoomPolicy -> TimelineEventType.RoomPolicy
StateEventType.RoomRetention -> TimelineEventType.RoomRetention
is StateEventType.Custom -> timelineEventTypeFromString(stateEventType.type)
}
@@ -12,10 +12,10 @@ import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.join.JoinRule
import org.matrix.rustcomponents.sdk.FilterTimelineEventCondition
import org.matrix.rustcomponents.sdk.FilterTimelineEventType
import org.matrix.rustcomponents.sdk.TimelineEventFilter
import uniffi.matrix_sdk_ui.MembershipChangeFilter import uniffi.matrix_sdk_ui.MembershipChangeFilter
import uniffi.matrix_sdk_ui.TimelineEventCondition
import uniffi.matrix_sdk_ui.TimelineEventFilter
import uniffi.ruma_events.TimelineEventType
interface TimelineEventFilterFactory { interface TimelineEventFilterFactory {
fun create( fun create(
@@ -32,22 +32,22 @@ class RustTimelineEventFilterFactory : TimelineEventFilterFactory {
isEncrypted: Boolean?, isEncrypted: Boolean?,
excludedStateTypes: List<StateEventType> excludedStateTypes: List<StateEventType>
): TimelineEventFilter? { ): TimelineEventFilter? {
val excludedEventTypes = excludedStateTypes.map { val excludedEventTypes = excludedStateTypes.map { stateEventType ->
FilterTimelineEventCondition.EventType(FilterTimelineEventType.State(it.map())) TimelineEventCondition.EventType(TimelineEventType.fromState(stateEventType))
} }
// If the room is publicly joinable and not encrypted, we also want to exclude membership changes and profile changes, // If the room is publicly joinable and not encrypted, we also want to exclude membership changes and profile changes,
// as they will pollute the timelines since they're quite common and not add much value. // as they will pollute the timelines since they're quite common and not add much value.
val excludedMembershipChanges = if (joinRule !is JoinRule.Invite && isEncrypted == false) { val excludedMembershipChanges = if (joinRule !is JoinRule.Invite && isEncrypted == false) {
listOf( listOf(
FilterTimelineEventCondition.MembershipChange(MembershipChangeFilter.JOIN), TimelineEventCondition.MembershipChange(MembershipChangeFilter.JOIN),
FilterTimelineEventCondition.MembershipChange(MembershipChangeFilter.LEAVE), TimelineEventCondition.MembershipChange(MembershipChangeFilter.LEAVE),
FilterTimelineEventCondition.ProfileChange, TimelineEventCondition.ProfileChange,
) )
} else { } else {
emptyList() emptyList()
} }
return if (excludedEventTypes.isNotEmpty() || excludedMembershipChanges.isNotEmpty()) { return if (excludedEventTypes.isNotEmpty() || excludedMembershipChanges.isNotEmpty()) {
TimelineEventFilter.exclude(excludedEventTypes + excludedMembershipChanges) TimelineEventFilter.Exclude(excludedEventTypes + excludedMembershipChanges)
} else { } else {
null null
} }
@@ -15,6 +15,5 @@ import org.matrix.rustcomponents.sdk.SyncServiceBuilder
class FakeFfiSyncServiceBuilder : SyncServiceBuilder(NoHandle) { class FakeFfiSyncServiceBuilder : SyncServiceBuilder(NoHandle) {
override fun withOfflineMode(): SyncServiceBuilder = this override fun withOfflineMode(): SyncServiceBuilder = this
override fun withSharePos(enable: Boolean): SyncServiceBuilder = this override fun withSharePos(enable: Boolean): SyncServiceBuilder = this
override fun withProfilesExtension(): SyncServiceBuilder = this
override suspend fun finish(): SyncService = FakeFfiSyncService() override suspend fun finish(): SyncService = FakeFfiSyncService()
} }
@@ -1,14 +0,0 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
* Copyright 2024, 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.impl.fixtures.fakes
import org.matrix.rustcomponents.sdk.NoHandle
import org.matrix.rustcomponents.sdk.TimelineEventFilter
class FakeFfiTimelineEventFilter : TimelineEventFilter(NoHandle)
@@ -10,11 +10,10 @@ package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.join.JoinRule
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineEventFilter import uniffi.matrix_sdk_ui.TimelineEventFilter
import org.matrix.rustcomponents.sdk.TimelineEventFilter
class FakeTimelineEventFilterFactory : TimelineEventFilterFactory { class FakeTimelineEventFilterFactory : TimelineEventFilterFactory {
override fun create(joinRule: JoinRule?, isEncrypted: Boolean?, excludedStateTypes: List<StateEventType>): TimelineEventFilter { override fun create(joinRule: JoinRule?, isEncrypted: Boolean?, excludedStateTypes: List<StateEventType>): TimelineEventFilter {
return FakeFfiTimelineEventFilter() return TimelineEventFilter.Exclude(emptyList())
} }
} }