From f0a0700f5d27af5d088de9373f1f99381399b738 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Mon, 7 Sep 2026 14:19:19 +0200 Subject: [PATCH] Bump SDK bindings to `v26.09.3` (#7637) Fix API breaks: - A new `Mentions` room list filter is available. - `RoomListService.subscribeToRooms` is now `RoomListService.setRoomSubscriptions`. - `enableAutomaticBackPagination` moved from `Client` to `ClientBuilder`. --- gradle/libs.versions.toml | 2 +- .../libraries/matrix/api/roomlist/RoomListFilter.kt | 7 ++++++- .../libraries/matrix/impl/RustMatrixClientFactory.kt | 6 +----- .../libraries/matrix/impl/room/RoomSyncSubscriber.kt | 4 ++-- .../matrix/impl/roomlist/RoomListFilterMapper.kt | 8 +++++--- .../matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt | 1 + 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c964d50c51..2e843e0041 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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 # 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. -matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.08.25" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.09.3" # Others coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt index 11eed2128b..44485fed62 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomListFilter.kt @@ -48,10 +48,15 @@ sealed interface RoomListFilter { ) : RoomListFilter /** - * A filter that matches rooms that are unread. + * A filter that matches rooms that has unread notifications. */ data object Unread : RoomListFilter + /** + * A filter that matches rooms that have unread mentions. + */ + data object Mentions : RoomListFilter + /** * A filter that matches rooms that are marked as favorite. */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index b1d93fd903..de29e7a953 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -99,6 +99,7 @@ class RustMatrixClientFactory( isMessageSearchAvailable = isMessageSearchAvailable, ) .homeserverUrl(sessionData.homeserverUrl) + .enableAutomaticBackPagination(featureFlagService.isFeatureEnabled(FeatureFlags.AutomaticBackPagination)) .let { (clientBuilderEnterpriseHook(RustMatrixClientBuilder(it), SessionId(sessionData.userId)) as RustMatrixClientBuilder).inner } .use { it.build() } @@ -127,11 +128,6 @@ class RustMatrixClientFactory( ): RustMatrixClient { val (anonymizedAccessToken, anonymizedRefreshToken) = client.session().anonymizedTokens() - // Must be called before creating the sync service, timelines etc. - if (featureFlagService.isFeatureEnabled(FeatureFlags.AutomaticBackPagination)) { - client.enableAutomaticBackpagination() - } - client.setUtdDelegate(UtdTracker(analyticsService)) val syncService = client.syncService() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt index bf31c2edf3..619be8a437 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt @@ -28,7 +28,7 @@ class RoomSyncSubscriber( withContext(dispatchers.io) { try { Timber.d("Subscribing to room $roomId}") - roomListService.subscribeToRooms(listOf(roomId.value)) + roomListService.setRoomSubscriptions(listOf(roomId.value)) } catch (exception: Exception) { Timber.e(exception, "Failed to subscribe to room $roomId") } @@ -40,7 +40,7 @@ class RoomSyncSubscriber( withContext(dispatchers.io) { try { Timber.d("Subscribing to rooms: $roomIds") - roomListService.subscribeToRooms(roomIds.map { it.value }) + roomListService.setRoomSubscriptions(roomIds.map { it.value }) } catch (cancellationException: CancellationException) { throw cancellationException } catch (exception: Exception) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilterMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilterMapper.kt index 648376a9cc..0e0d979a1e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilterMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFilterMapper.kt @@ -20,9 +20,10 @@ import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonLeft import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NonSpace import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.None import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName +import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.ReadReceipts import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Space -import org.matrix.rustcomponents.sdk.RoomListEntriesDynamicFilterKind.Unread -import org.matrix.rustcomponents.sdk.RoomListFilterCategory +import uniffi.matrix_sdk_ui.RoomListFilterCategory +import uniffi.matrix_sdk_ui.RoomListFilterReadReceipts /** * Mapper for converting RoomListFilter to Rust SDK filter kinds. @@ -67,7 +68,8 @@ internal object RoomListFilterMapper { RoomListFilter.Category.People -> Category(RoomListFilterCategory.PEOPLE) RoomListFilter.Category.Space -> Space RoomListFilter.Favorite -> Favourite - RoomListFilter.Unread -> Unread + RoomListFilter.Unread -> ReadReceipts(RoomListFilterReadReceipts.NOTIFICATIONS) + RoomListFilter.Mentions -> ReadReceipts(RoomListFilterReadReceipts.MENTIONS) is RoomListFilter.NormalizedMatchRoomName -> NormalizedMatchRoomName( pattern = filter.pattern ) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt index ba010ed728..99caa2f4ed 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt @@ -27,6 +27,7 @@ class FakeFfiClientBuilder( override fun addRootCertificates(certificates: List) = this override fun autoEnableBackups(autoEnableBackups: Boolean) = this override fun autoEnableCrossSigning(autoEnableCrossSigning: Boolean) = this + override fun enableAutomaticBackPagination(enableAutomaticBackPagination: Boolean): ClientBuilder = this override fun backupDownloadStrategy(backupDownloadStrategy: BackupDownloadStrategy) = this override fun disableAutomaticTokenRefresh() = this override fun disableBuiltInRootCertificates() = this