From 4ebcf960cedd07d4e9dd8b97263362cdc21659a6 Mon Sep 17 00:00:00 2001 From: ElementBot <110224175+ElementBot@users.noreply.github.com> Date: Thu, 15 Oct 2026 15:47:56 +0100 Subject: [PATCH] Update Matrix Rust SDK to 26.10.14-nightly (#7930) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update Matrix Rust SDK to 26.10.14-nightly * `withSearchIndexStore` now uses `key` instead of passphrase * Fix `RustMatrixClient` now returning `searchIndex` size too --------- Co-authored-by: Jorge Martín --- .../DeveloperSettingsPresenterTest.kt | 10 ++++++-- gradle/libs.versions.toml | 2 +- .../matrix/api/analytics/SdkStoreSizes.kt | 1 + .../libraries/matrix/impl/RustMatrixClient.kt | 1 + .../matrix/impl/RustMatrixClientFactory.kt | 2 +- .../DefaultGetDatabaseSizesUseCase.kt | 3 +++ .../matrix/impl/RustMatrixClientTest.kt | 11 ++++++++- .../api/AnalyticsUserData.kt | 1 + .../sentry/SentryAnalyticsProviderTest.kt | 23 +++++++++++++++---- 9 files changed, 45 insertions(+), 9 deletions(-) diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt index c3c08602cd..16b0761757 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenterTest.kt @@ -71,7 +71,13 @@ class DeveloperSettingsPresenterTest { val presenter = createDeveloperSettingsPresenter( databaseSizesUseCase = GetDatabaseSizesUseCase { Result.success( - SdkStoreSizes(stateStore = 10.megaBytes, eventCacheStore = 10.megaBytes, mediaStore = 10.megaBytes, cryptoStore = 10.megaBytes) + SdkStoreSizes( + stateStore = 10.megaBytes, + eventCacheStore = 10.megaBytes, + mediaStore = 10.megaBytes, + cryptoStore = 10.megaBytes, + searchIndex = 10.megaBytes, + ) ) } ) @@ -295,7 +301,7 @@ class DeveloperSettingsPresenterTest { clearCacheUseCase: FakeClearCacheUseCase = FakeClearCacheUseCase(), enterpriseService: EnterpriseService = FakeEnterpriseService(), vacuumStoresUseCase: VacuumStoresUseCase = VacuumStoresUseCase {}, - databaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) }, + databaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null, null)) }, markAllRoomsAsRead: FakeMarkAllRoomsAsRead = FakeMarkAllRoomsAsRead(), buildMeta: BuildMeta = aBuildMeta(), notificationSettingsService: NotificationSettingsService = FakeNotificationSettingsService(), diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5348fcdd9d..f7cd3df6e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -186,7 +186,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version # it as a plain `require`: without this, a library built against a newer SDK would silently drag this app # onto it. With it, this pin always wins, and a library that needs something newer fails at configuration # time naming both versions instead of at runtime with NoSuchMethodError. -matrix_sdk = { module = "org.matrix.rustcomponents:sdk-android", version = { strictly = "26.10.12-nightly" } } +matrix_sdk = { module = "org.matrix.rustcomponents:sdk-android", version = { strictly = "26.10.14-nightly" } } rustls_platform_verifier = "org.rustls:rustls-platform-verifier:0.2.0" # Others diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt index 62b68b8fdb..e04128d624 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt @@ -17,4 +17,5 @@ data class SdkStoreSizes( val eventCacheStore: ByteSize?, val mediaStore: ByteSize?, val cryptoStore: ByteSize?, + val searchIndex: ByteSize?, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 43b339e06c..fbf19fdae6 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -737,6 +737,7 @@ class RustMatrixClient( eventCacheStore = eventCacheStore?.bytes, mediaStore = mediaStore?.bytes, cryptoStore = cryptoStore?.bytes, + searchIndex = searchIndex?.bytes, ) } } 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 49663bae9e..b4fd42762f 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 @@ -188,7 +188,7 @@ class RustMatrixClientFactory( // use, or left unencrypted for sessions without one, matching those stores. withSearchIndexStore( path = File(sessionPaths.fileDirectory, SEARCH_INDEX_DIRECTORY).absolutePath, - password = clientSecret?.formattedAsString(), + key = clientSecret?.formattedAsString(), ) } else { this diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/DefaultGetDatabaseSizesUseCase.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/DefaultGetDatabaseSizesUseCase.kt index 8dba525788..3d220e8afd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/DefaultGetDatabaseSizesUseCase.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/analytics/DefaultGetDatabaseSizesUseCase.kt @@ -44,6 +44,9 @@ class DefaultGetDatabaseSizesUseCase( cryptoStore = cryptoSize.bytes, eventCacheStore = eventCacheSize.bytes, mediaStore = mediaCacheSize.bytes, + // TODO - The search index is not stored in a database file but in a directory, which can be expensive to calculate. + // For now, we return null to avoid performance issues. + searchIndex = null, )) } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt index 2e027930fd..66c5ac6e15 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt @@ -256,7 +256,15 @@ class RustMatrixClientTest { @Test fun `getDatabaseSizes returns the database sizes`() = runTest { val client = createRustMatrixClient( - client = FakeFfiClient(getStoreSizesResult = { StoreSizes(null, 10uL, 11uL, 12uL) }) + client = FakeFfiClient(getStoreSizesResult = { + StoreSizes( + cryptoStore = null, + stateStore = 10uL, + eventCacheStore = 11uL, + mediaStore = 12uL, + searchIndex = 13uL, + ) + }) ) client.getDatabaseSizes().getOrThrow().run { @@ -264,6 +272,7 @@ class RustMatrixClientTest { assertThat(stateStore).isEqualTo(10.bytes) assertThat(eventCacheStore).isEqualTo(11.bytes) assertThat(mediaStore).isEqualTo(12.bytes) + assertThat(searchIndex).isEqualTo(13.bytes) } } diff --git a/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsUserData.kt b/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsUserData.kt index 28ae4a5668..0b4f848119 100644 --- a/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsUserData.kt +++ b/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsUserData.kt @@ -14,6 +14,7 @@ object AnalyticsUserData { const val EVENT_CACHE_SIZE = "event_cache_size" const val CRYPTO_STORE_SIZE = "crypto_store_size" const val MEDIA_STORE_SIZE = "media_store_size" + const val SEARCH_INDEX_SIZE = "search_index_size" const val FIRST_SYNC_STATE = "first_sync_state" const val TIMELINE_ITEM_COUNT = "timeline_item_count" diff --git a/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt b/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt index ae1ac82dda..0711c50653 100644 --- a/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt +++ b/services/analyticsproviders/sentry/src/test/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProviderTest.kt @@ -142,7 +142,13 @@ class SentryAnalyticsProviderTest : RobolectricTest() { createSentryAnalyticsProvider( getDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success( - SdkStoreSizes(stateStore = 10.megaBytes, eventCacheStore = 11.megaBytes, mediaStore = 12.megaBytes, cryptoStore = 13.megaBytes) + SdkStoreSizes( + stateStore = 10.megaBytes, + eventCacheStore = 11.megaBytes, + mediaStore = 12.megaBytes, + cryptoStore = 13.megaBytes, + searchIndex = 14.megaBytes, + ) ) }, appNavigationStateService = FakeAppNavigationStateService( @@ -167,6 +173,9 @@ class SentryAnalyticsProviderTest : RobolectricTest() { assertThat(result.getExtra(AnalyticsUserData.EVENT_CACHE_SIZE)).isEqualTo(11) assertThat(result.getExtra(AnalyticsUserData.MEDIA_STORE_SIZE)).isEqualTo(12) assertThat(result.getExtra(AnalyticsUserData.CRYPTO_STORE_SIZE)).isEqualTo(13) + + // The search index size won't be included + assertThat(result.getExtra(AnalyticsUserData.SEARCH_INDEX_SIZE)).isNull() } } @@ -175,7 +184,13 @@ class SentryAnalyticsProviderTest : RobolectricTest() { createSentryAnalyticsProvider( getDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success( - SdkStoreSizes(stateStore = 10.megaBytes, eventCacheStore = 11.megaBytes, mediaStore = 12.megaBytes, cryptoStore = 13.megaBytes) + SdkStoreSizes( + stateStore = 10.megaBytes, + eventCacheStore = 11.megaBytes, + mediaStore = 12.megaBytes, + cryptoStore = 13.megaBytes, + searchIndex = 14.megaBytes, + ) ) }, appNavigationStateService = FakeAppNavigationStateService( @@ -196,7 +211,7 @@ class SentryAnalyticsProviderTest : RobolectricTest() { createSentryAnalyticsProvider( getDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success( - SdkStoreSizes(stateStore = null, eventCacheStore = null, mediaStore = null, cryptoStore = null) + SdkStoreSizes(stateStore = null, eventCacheStore = null, mediaStore = null, cryptoStore = null, searchIndex = null) ) }, appNavigationStateService = FakeAppNavigationStateService( @@ -216,7 +231,7 @@ class SentryAnalyticsProviderTest : RobolectricTest() { private fun createSentryAnalyticsProvider( sentryDsn: SentryDsn? = SentryDsn("https://1234@sentry.com/a"), buildMeta: BuildMeta = aBuildMeta(), - getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) }, + getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null, null)) }, appNavigationStateService: FakeAppNavigationStateService = FakeAppNavigationStateService( initialAppNavigationState = AppNavigationState(NavigationState.Session("owner", A_SESSION_ID), isInForeground = true) )