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
@@ -133,7 +133,6 @@ class RustMatrixClientFactory(
val syncService = client.syncService()
.withSharePos(true)
.withOfflineMode()
.withProfilesExtension()
.finish()
return RustMatrixClient(
@@ -9,7 +9,9 @@
package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.StateEventType
import uniffi.ruma_events.TimelineEventType
import uniffi.ruma_events.stateEventTypeFromString
import uniffi.ruma_events.timelineEventTypeFromString
import uniffi.ruma_events.StateEventType as RustStateEventType
fun StateEventType.map(): RustStateEventType = when (this) {
@@ -73,3 +75,34 @@ fun RustStateEventType.map(): StateEventType = when (this) {
RustStateEventType.RoomRetention -> StateEventType.RoomRetention
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 io.element.android.libraries.matrix.api.room.StateEventType
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.TimelineEventCondition
import uniffi.matrix_sdk_ui.TimelineEventFilter
import uniffi.ruma_events.TimelineEventType
interface TimelineEventFilterFactory {
fun create(
@@ -32,22 +32,22 @@ class RustTimelineEventFilterFactory : TimelineEventFilterFactory {
isEncrypted: Boolean?,
excludedStateTypes: List<StateEventType>
): TimelineEventFilter? {
val excludedEventTypes = excludedStateTypes.map {
FilterTimelineEventCondition.EventType(FilterTimelineEventType.State(it.map()))
val excludedEventTypes = excludedStateTypes.map { stateEventType ->
TimelineEventCondition.EventType(TimelineEventType.fromState(stateEventType))
}
// 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.
val excludedMembershipChanges = if (joinRule !is JoinRule.Invite && isEncrypted == false) {
listOf(
FilterTimelineEventCondition.MembershipChange(MembershipChangeFilter.JOIN),
FilterTimelineEventCondition.MembershipChange(MembershipChangeFilter.LEAVE),
FilterTimelineEventCondition.ProfileChange,
TimelineEventCondition.MembershipChange(MembershipChangeFilter.JOIN),
TimelineEventCondition.MembershipChange(MembershipChangeFilter.LEAVE),
TimelineEventCondition.ProfileChange,
)
} else {
emptyList()
}
return if (excludedEventTypes.isNotEmpty() || excludedMembershipChanges.isNotEmpty()) {
TimelineEventFilter.exclude(excludedEventTypes + excludedMembershipChanges)
TimelineEventFilter.Exclude(excludedEventTypes + excludedMembershipChanges)
} else {
null
}
@@ -15,6 +15,5 @@ import org.matrix.rustcomponents.sdk.SyncServiceBuilder
class FakeFfiSyncServiceBuilder : SyncServiceBuilder(NoHandle) {
override fun withOfflineMode(): SyncServiceBuilder = this
override fun withSharePos(enable: Boolean): SyncServiceBuilder = this
override fun withProfilesExtension(): SyncServiceBuilder = this
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.join.JoinRule
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiTimelineEventFilter
import org.matrix.rustcomponents.sdk.TimelineEventFilter
import uniffi.matrix_sdk_ui.TimelineEventFilter
class FakeTimelineEventFilterFactory : TimelineEventFilterFactory {
override fun create(joinRule: JoinRule?, isEncrypted: Boolean?, excludedStateTypes: List<StateEventType>): TimelineEventFilter {
return FakeFfiTimelineEventFilter()
return TimelineEventFilter.Exclude(emptyList())
}
}