fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.6.25 (#4936)
Fix broken API changes: - `RoomInfo.isPublic` is now optional, so we need to assume its default value in some places of the app. - `RoomInfo.userPowerLevels` is now `RoomInfo.roomPowerLevels` and also contains this info. - `ClientBuilder` now uses a `DecryptionSettings` value. - The call widget settings provider now internally uses a different Rust type. - `Client.clearCache` now takes a `syncService` so it can stop it. --- 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:
parent
ef9436ed8d
commit
7d3f4cbb09
28 changed files with 148 additions and 60 deletions
|
|
@ -129,7 +129,7 @@ class RustMatrixClient(
|
|||
private val sessionStore: SessionStore,
|
||||
private val appCoroutineScope: CoroutineScope,
|
||||
private val sessionDelegate: RustClientSessionDelegate,
|
||||
innerSyncService: ClientSyncService,
|
||||
private val innerSyncService: ClientSyncService,
|
||||
dispatchers: CoroutineDispatchers,
|
||||
baseCacheDirectory: File,
|
||||
clock: SystemClock,
|
||||
|
|
@ -531,7 +531,7 @@ class RustMatrixClient(
|
|||
}
|
||||
|
||||
override suspend fun clearCache() {
|
||||
innerClient.clearCaches()
|
||||
innerClient.clearCaches(innerSyncService)
|
||||
destroy()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder
|
|||
import org.matrix.rustcomponents.sdk.use
|
||||
import timber.log.Timber
|
||||
import uniffi.matrix_sdk_crypto.CollectStrategy
|
||||
import uniffi.matrix_sdk_crypto.DecryptionSettings
|
||||
import uniffi.matrix_sdk_crypto.TrustRequirement
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
|
|
@ -120,12 +121,14 @@ class RustMatrixClientFactory @Inject constructor(
|
|||
CollectStrategy.ERROR_ON_VERIFIED_USER_PROBLEM
|
||||
}
|
||||
)
|
||||
.roomDecryptionTrustRequirement(
|
||||
trustRequirement = if (featureFlagService.isFeatureEnabled(FeatureFlags.OnlySignedDeviceIsolationMode)) {
|
||||
TrustRequirement.CROSS_SIGNED_OR_LEGACY
|
||||
} else {
|
||||
TrustRequirement.UNTRUSTED
|
||||
}
|
||||
.decryptionSettings(
|
||||
DecryptionSettings(
|
||||
senderDeviceTrustRequirement = if (featureFlagService.isFeatureEnabled(FeatureFlags.OnlySignedDeviceIsolationMode)) {
|
||||
TrustRequirement.CROSS_SIGNED_OR_LEGACY
|
||||
} else {
|
||||
TrustRequirement.UNTRUSTED
|
||||
}
|
||||
)
|
||||
)
|
||||
.enableShareHistoryOnInvite(featureFlagService.isFeatureEnabled(FeatureFlags.EnableKeyShareOnInvite))
|
||||
.run {
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ class JoinedRustRoom(
|
|||
}
|
||||
|
||||
init {
|
||||
val powerLevelChanges = roomInfoFlow.map { it.userPowerLevels }.distinctUntilChanged()
|
||||
val powerLevelChanges = roomInfoFlow.map { it.roomPowerLevels }.distinctUntilChanged()
|
||||
val membershipChanges = liveTimeline.membershipChangeEventReceived.onStart { emit(Unit) }
|
||||
combine(membershipChanges, powerLevelChanges) { _, _ -> }
|
||||
// Skip initial one
|
||||
|
|
|
|||
|
|
@ -14,12 +14,13 @@ import io.element.android.libraries.matrix.api.core.UserId
|
|||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||
import io.element.android.libraries.matrix.api.room.RoomInfo
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.matrix.impl.room.history.map
|
||||
import io.element.android.libraries.matrix.impl.room.join.map
|
||||
import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper
|
||||
import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsValuesMapper
|
||||
import io.element.android.libraries.matrix.impl.room.tombstone.map
|
||||
import kotlinx.collections.immutable.ImmutableMap
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.collections.immutable.toPersistentMap
|
||||
import org.matrix.rustcomponents.sdk.Membership
|
||||
|
|
@ -28,6 +29,7 @@ import uniffi.matrix_sdk_base.EncryptionState
|
|||
import org.matrix.rustcomponents.sdk.Membership as RustMembership
|
||||
import org.matrix.rustcomponents.sdk.RoomInfo as RustRoomInfo
|
||||
import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode
|
||||
import org.matrix.rustcomponents.sdk.RoomPowerLevels as RustRoomPowerLevels
|
||||
|
||||
class RoomInfoMapper {
|
||||
fun map(rustRoomInfo: RustRoomInfo): RoomInfo = rustRoomInfo.let {
|
||||
|
|
@ -55,7 +57,7 @@ class RoomInfoMapper {
|
|||
activeMembersCount = it.activeMembersCount.toLong(),
|
||||
invitedMembersCount = it.invitedMembersCount.toLong(),
|
||||
joinedMembersCount = it.joinedMembersCount.toLong(),
|
||||
userPowerLevels = mapPowerLevels(it.userPowerLevels),
|
||||
roomPowerLevels = it.powerLevels?.let(::mapPowerLevels),
|
||||
highlightCount = it.highlightCount.toLong(),
|
||||
notificationCount = it.notificationCount.toLong(),
|
||||
userDefinedNotificationMode = it.cachedUserDefinedNotificationMode?.map(),
|
||||
|
|
@ -96,6 +98,9 @@ fun RoomHero.map(): MatrixUser = MatrixUser(
|
|||
avatarUrl = avatarUrl
|
||||
)
|
||||
|
||||
fun mapPowerLevels(powerLevels: Map<String, Long>): ImmutableMap<UserId, Long> {
|
||||
return powerLevels.mapKeys { (key, _) -> UserId(key) }.toPersistentMap()
|
||||
fun mapPowerLevels(roomPowerLevels: RustRoomPowerLevels): RoomPowerLevels {
|
||||
return RoomPowerLevels(
|
||||
values = RoomPowerLevelsValuesMapper.map(roomPowerLevels.values()),
|
||||
users = roomPowerLevels.userPowerLevels().mapKeys { (key, _) -> UserId(key) }.toPersistentMap()
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ object RoomPreviewInfoMapper {
|
|||
roomType = info.roomType.map(),
|
||||
isHistoryWorldReadable = info.isHistoryWorldReadable.orFalse(),
|
||||
membership = info.membership?.map(),
|
||||
joinRule = info.joinRule.map(),
|
||||
joinRule = info.joinRule?.map(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider
|
|||
import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings
|
||||
import io.element.android.services.analytics.api.AnalyticsService
|
||||
import kotlinx.coroutines.flow.first
|
||||
import org.matrix.rustcomponents.sdk.EncryptionSystem
|
||||
import org.matrix.rustcomponents.sdk.VirtualElementCallWidgetOptions
|
||||
import org.matrix.rustcomponents.sdk.newVirtualElementCallWidget
|
||||
import uniffi.matrix_sdk.EncryptionSystem
|
||||
import uniffi.matrix_sdk.VirtualElementCallWidgetOptions
|
||||
import javax.inject.Inject
|
||||
import org.matrix.rustcomponents.sdk.Intent as CallIntent
|
||||
import uniffi.matrix_sdk.Intent as CallIntent
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultCallWidgetSettingsProvider @Inject constructor(
|
||||
|
|
@ -50,6 +50,7 @@ class DefaultCallWidgetSettingsProvider @Inject constructor(
|
|||
parentUrl = null,
|
||||
hideHeader = true,
|
||||
controlledMediaDevices = true,
|
||||
header = null,
|
||||
)
|
||||
val rustWidgetSettings = newVirtualElementCallWidget(options)
|
||||
return MatrixWidgetSettings.fromRustWidgetSettings(rustWidgetSettings)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,6 @@ fun aRustNotificationRoomInfo(
|
|||
isEncrypted: Boolean? = true,
|
||||
isDirect: Boolean = false,
|
||||
joinRule: JoinRule? = null,
|
||||
isPublic: Boolean = true,
|
||||
) = NotificationRoomInfo(
|
||||
displayName = displayName,
|
||||
avatarUrl = avatarUrl,
|
||||
|
|
@ -61,7 +60,6 @@ fun aRustNotificationRoomInfo(
|
|||
isEncrypted = isEncrypted,
|
||||
isDirect = isDirect,
|
||||
joinRule = joinRule,
|
||||
isPublic = isPublic,
|
||||
)
|
||||
|
||||
fun aRustNotificationEventTimeline(
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
package io.element.android.libraries.matrix.impl.fixtures.factories
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomPowerLevels
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
||||
import org.matrix.rustcomponents.sdk.JoinRule
|
||||
|
|
@ -17,6 +18,7 @@ import org.matrix.rustcomponents.sdk.RoomHistoryVisibility
|
|||
import org.matrix.rustcomponents.sdk.RoomInfo
|
||||
import org.matrix.rustcomponents.sdk.RoomMember
|
||||
import org.matrix.rustcomponents.sdk.RoomNotificationMode
|
||||
import org.matrix.rustcomponents.sdk.RoomPowerLevels
|
||||
import org.matrix.rustcomponents.sdk.SuccessorRoom
|
||||
import uniffi.matrix_sdk_base.EncryptionState
|
||||
|
||||
|
|
@ -39,7 +41,7 @@ fun aRustRoomInfo(
|
|||
activeMembersCount: ULong = 0uL,
|
||||
invitedMembersCount: ULong = 0uL,
|
||||
joinedMembersCount: ULong = 0uL,
|
||||
userPowerLevels: Map<String, Long> = mapOf(),
|
||||
roomPowerLevels: RoomPowerLevels = FakeFfiRoomPowerLevels(),
|
||||
highlightCount: ULong = 0uL,
|
||||
notificationCount: ULong = 0uL,
|
||||
userDefinedNotificationMode: RoomNotificationMode? = null,
|
||||
|
|
@ -73,7 +75,7 @@ fun aRustRoomInfo(
|
|||
activeMembersCount = activeMembersCount,
|
||||
invitedMembersCount = invitedMembersCount,
|
||||
joinedMembersCount = joinedMembersCount,
|
||||
userPowerLevels = userPowerLevels,
|
||||
powerLevels = roomPowerLevels,
|
||||
highlightCount = highlightCount,
|
||||
notificationCount = notificationCount,
|
||||
cachedUserDefinedNotificationMode = userDefinedNotificationMode,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import org.matrix.rustcomponents.sdk.PusherKind
|
|||
import org.matrix.rustcomponents.sdk.RoomDirectorySearch
|
||||
import org.matrix.rustcomponents.sdk.Session
|
||||
import org.matrix.rustcomponents.sdk.SessionVerificationController
|
||||
import org.matrix.rustcomponents.sdk.SyncService
|
||||
import org.matrix.rustcomponents.sdk.SyncServiceBuilder
|
||||
import org.matrix.rustcomponents.sdk.TaskHandle
|
||||
import org.matrix.rustcomponents.sdk.UnableToDecryptDelegate
|
||||
|
|
@ -62,7 +63,7 @@ class FakeFfiClient(
|
|||
) = Unit
|
||||
|
||||
override suspend fun deletePusher(identifiers: PusherIdentifiers) = Unit
|
||||
override suspend fun clearCaches() = simulateLongTask { clearCachesResult() }
|
||||
override suspend fun clearCaches(syncService: SyncService?) = simulateLongTask { clearCachesResult() }
|
||||
override suspend fun setUtdDelegate(utdDelegate: UnableToDecryptDelegate) = withUtdHook(utdDelegate)
|
||||
override suspend fun getSessionVerificationController(): SessionVerificationController = FakeFfiSessionVerificationController()
|
||||
override suspend fun ignoredUsers(): List<String> {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import org.matrix.rustcomponents.sdk.RequestConfig
|
|||
import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder
|
||||
import uniffi.matrix_sdk.BackupDownloadStrategy
|
||||
import uniffi.matrix_sdk_crypto.CollectStrategy
|
||||
import uniffi.matrix_sdk_crypto.TrustRequirement
|
||||
import uniffi.matrix_sdk_crypto.DecryptionSettings
|
||||
|
||||
class FakeFfiClientBuilder : ClientBuilder(NoPointer) {
|
||||
override fun addRootCertificates(certificates: List<ByteArray>) = this
|
||||
|
|
@ -27,7 +27,7 @@ class FakeFfiClientBuilder : ClientBuilder(NoPointer) {
|
|||
override fun backupDownloadStrategy(backupDownloadStrategy: BackupDownloadStrategy) = this
|
||||
override fun disableAutomaticTokenRefresh() = this
|
||||
override fun disableBuiltInRootCertificates() = this
|
||||
override fun roomDecryptionTrustRequirement(trustRequirement: TrustRequirement) = this
|
||||
override fun decryptionSettings(decryptionSettings: DecryptionSettings): ClientBuilder = this
|
||||
override fun disableSslVerification() = this
|
||||
override fun homeserverUrl(url: String) = this
|
||||
override fun sessionPassphrase(passphrase: String?) = this
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright 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.NoPointer
|
||||
import org.matrix.rustcomponents.sdk.RoomPowerLevels
|
||||
import org.matrix.rustcomponents.sdk.RoomPowerLevelsValues
|
||||
|
||||
class FakeFfiRoomPowerLevels(
|
||||
private val values: RoomPowerLevelsValues = defaultFfiRoomPowerLevelValues(),
|
||||
private val users: Map<String, Long> = emptyMap(),
|
||||
) : RoomPowerLevels(NoPointer) {
|
||||
override fun values(): RoomPowerLevelsValues = values
|
||||
override fun userPowerLevels(): Map<String, Long> = users
|
||||
}
|
||||
|
||||
fun defaultFfiRoomPowerLevelValues() = RoomPowerLevelsValues(
|
||||
ban = 50,
|
||||
invite = 0,
|
||||
kick = 50,
|
||||
eventsDefault = 0,
|
||||
redact = 50,
|
||||
roomName = 100,
|
||||
roomAvatar = 100,
|
||||
roomTopic = 100,
|
||||
stateDefault = 0,
|
||||
usersDefault = 0,
|
||||
)
|
||||
|
|
@ -16,10 +16,12 @@ import io.element.android.libraries.matrix.api.room.RoomInfo
|
|||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero
|
||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
|
||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomMember
|
||||
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomPowerLevels
|
||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ALIAS
|
||||
|
|
@ -28,8 +30,9 @@ import io.element.android.libraries.matrix.test.A_USER_ID
|
|||
import io.element.android.libraries.matrix.test.A_USER_ID_3
|
||||
import io.element.android.libraries.matrix.test.A_USER_ID_6
|
||||
import io.element.android.libraries.matrix.test.room.aRoomMember
|
||||
import io.element.android.libraries.matrix.test.room.defaultRoomPowerLevelValues
|
||||
import kotlinx.collections.immutable.persistentMapOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableMap
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.junit.Test
|
||||
import org.matrix.rustcomponents.sdk.Membership
|
||||
|
|
@ -64,7 +67,7 @@ class RoomInfoMapperTest {
|
|||
activeMembersCount = 2uL,
|
||||
invitedMembersCount = 3uL,
|
||||
joinedMembersCount = 4uL,
|
||||
userPowerLevels = mapOf(A_USER_ID_6.value to 50L),
|
||||
roomPowerLevels = FakeFfiRoomPowerLevels(users = mapOf(A_USER_ID_6.value to 50L)),
|
||||
highlightCount = 10uL,
|
||||
notificationCount = 11uL,
|
||||
userDefinedNotificationMode = RustRoomNotificationMode.MUTE,
|
||||
|
|
@ -99,7 +102,10 @@ class RoomInfoMapperTest {
|
|||
activeMembersCount = 2L,
|
||||
invitedMembersCount = 3L,
|
||||
joinedMembersCount = 4L,
|
||||
userPowerLevels = mapOf(A_USER_ID_6 to 50L).toImmutableMap(),
|
||||
roomPowerLevels = RoomPowerLevels(
|
||||
values = defaultRoomPowerLevelValues(),
|
||||
users = persistentMapOf(A_USER_ID_6 to 50L)
|
||||
),
|
||||
highlightCount = 10L,
|
||||
notificationCount = 11L,
|
||||
userDefinedNotificationMode = RoomNotificationMode.MUTE,
|
||||
|
|
@ -149,7 +155,7 @@ class RoomInfoMapperTest {
|
|||
activeMembersCount = 2uL,
|
||||
invitedMembersCount = 3uL,
|
||||
joinedMembersCount = 4uL,
|
||||
userPowerLevels = emptyMap(),
|
||||
roomPowerLevels = FakeFfiRoomPowerLevels(),
|
||||
highlightCount = 10uL,
|
||||
notificationCount = 11uL,
|
||||
userDefinedNotificationMode = null,
|
||||
|
|
@ -184,7 +190,10 @@ class RoomInfoMapperTest {
|
|||
activeMembersCount = 2L,
|
||||
invitedMembersCount = 3L,
|
||||
joinedMembersCount = 4L,
|
||||
userPowerLevels = emptyMap<UserId, Long>().toImmutableMap(),
|
||||
roomPowerLevels = RoomPowerLevels(
|
||||
values = defaultRoomPowerLevelValues(),
|
||||
users = persistentMapOf(),
|
||||
),
|
||||
highlightCount = 10L,
|
||||
notificationCount = 11L,
|
||||
userDefinedNotificationMode = null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue