diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsStateProvider.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsStateProvider.kt index d4f4bad6e2..d64c85f8cf 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsStateProvider.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsStateProvider.kt @@ -58,5 +58,7 @@ private fun previewPermissions(): RoomPowerLevelsValues { roomName = RoomMember.Role.Admin.powerLevel, roomAvatar = RoomMember.Role.Moderator.powerLevel, roomTopic = RoomMember.Role.User.powerLevel, + // SpaceManagement section + spaceChild = RoomMember.Role.Moderator.powerLevel, ) } diff --git a/features/rolesandpermissions/impl/src/test/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenterTest.kt b/features/rolesandpermissions/impl/src/test/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenterTest.kt index 223003caa5..7c328c9bad 100644 --- a/features/rolesandpermissions/impl/src/test/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenterTest.kt +++ b/features/rolesandpermissions/impl/src/test/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenterTest.kt @@ -97,6 +97,7 @@ class ChangeRoomPermissionsPresenterTest { presenter.present() }.test { val state = awaitUpdatedItem() + val initialPermissions = defaultPermissions() state.eventSink(ChangeRoomPermissionsEvent.ChangeMinimumRoleForAction(RoomPermissionType.INVITE, SelectableRole.Moderator)) state.eventSink(ChangeRoomPermissionsEvent.ChangeMinimumRoleForAction(RoomPermissionType.KICK, SelectableRole.Moderator)) @@ -120,6 +121,7 @@ class ChangeRoomPermissionsPresenterTest { roomName = Moderator.powerLevel, roomAvatar = Moderator.powerLevel, roomTopic = Moderator.powerLevel, + spaceChild = initialPermissions.spaceChild ) ) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 192ac93b14..da6891cca6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,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:25.11.11" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.11.19" # Others coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt index cd378790d3..f9d38fd8a7 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt @@ -154,7 +154,7 @@ class StateContentFormatter( "RoomHistoryVisibility" } } - OtherState.RoomJoinRules -> when (renderingMode) { + is OtherState.RoomJoinRules -> when (renderingMode) { RenderingMode.RoomList -> { Timber.v("Filtering timeline item for room state change: $content") null diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultBaseRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultBaseRoomLastMessageFormatterTest.kt index 954b5e2c82..5b8c2c86df 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultBaseRoomLastMessageFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultBaseRoomLastMessageFormatterTest.kt @@ -746,7 +746,7 @@ class DefaultBaseRoomLastMessageFormatterTest { OtherState.RoomCanonicalAlias, OtherState.RoomGuestAccess, OtherState.RoomHistoryVisibility, - OtherState.RoomJoinRules, + OtherState.RoomJoinRules(null), OtherState.RoomPinnedEvents(OtherState.RoomPinnedEvents.Change.CHANGED), OtherState.RoomUserPowerLevels(emptyMap()), OtherState.RoomServerAcl, diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatterTest.kt index 95658ca7dc..c067113b2d 100644 --- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatterTest.kt +++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatterTest.kt @@ -601,7 +601,7 @@ class DefaultPinnedMessagesBannerFormatterTest { OtherState.RoomCanonicalAlias, OtherState.RoomGuestAccess, OtherState.RoomHistoryVisibility, - OtherState.RoomJoinRules, + OtherState.RoomJoinRules(null), OtherState.RoomPinnedEvents(OtherState.RoomPinnedEvents.Change.CHANGED), OtherState.RoomUserPowerLevels(emptyMap()), OtherState.RoomServerAcl, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/RoomPowerLevelsValues.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/RoomPowerLevelsValues.kt index 9cee4f0c3d..d20b6141eb 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/RoomPowerLevelsValues.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/RoomPowerLevelsValues.kt @@ -22,6 +22,7 @@ data class RoomPowerLevelsValues( val roomName: Long, val roomAvatar: Long, val roomTopic: Long, + val spaceChild: Long, ) /** diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt index f9e968ff6e..ed3f53169f 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.api.timeline.item.event import androidx.compose.runtime.Immutable +import io.element.android.libraries.matrix.api.room.join.JoinRule @Immutable sealed interface OtherState { @@ -22,7 +23,7 @@ sealed interface OtherState { data object RoomEncryption : OtherState data object RoomGuestAccess : OtherState data object RoomHistoryVisibility : OtherState - data object RoomJoinRules : OtherState + data class RoomJoinRules(val joinRule: JoinRule?) : OtherState data class RoomName(val name: String?) : OtherState data class RoomPinnedEvents(val change: Change) : OtherState { enum class Change { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapper.kt index d955a38402..081d08457e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapper.kt @@ -24,6 +24,7 @@ object RoomPowerLevelsValuesMapper { roomName = values.roomName, roomAvatar = values.roomAvatar, roomTopic = values.roomTopic, + spaceChild = values.spaceChild, ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt index dc60afc596..d0545d3f0a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt @@ -32,6 +32,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UnknownConten import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause import io.element.android.libraries.matrix.impl.media.map import io.element.android.libraries.matrix.impl.poll.map +import io.element.android.libraries.matrix.impl.room.join.map import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap import org.matrix.rustcomponents.sdk.EmbeddedEventDetails @@ -210,7 +211,7 @@ private fun RustOtherState.map(): OtherState { RustOtherState.RoomEncryption -> OtherState.RoomEncryption RustOtherState.RoomGuestAccess -> OtherState.RoomGuestAccess RustOtherState.RoomHistoryVisibility -> OtherState.RoomHistoryVisibility - is RustOtherState.RoomJoinRules -> OtherState.RoomJoinRules + is RustOtherState.RoomJoinRules -> OtherState.RoomJoinRules(joinRule?.map()) is RustOtherState.RoomName -> OtherState.RoomName(name) is RustOtherState.RoomPinnedEvents -> OtherState.RoomPinnedEvents(change.map()) is RustOtherState.RoomPowerLevels -> OtherState.RoomUserPowerLevels(users) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPowerLevels.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPowerLevels.kt index 18e3cb87f7..1c1bbb42e3 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPowerLevels.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPowerLevels.kt @@ -21,6 +21,7 @@ internal fun aRustRoomPowerLevelsValues( roomName: Long, roomAvatar: Long, roomTopic: Long, + spaceChild: Long, ) = RoomPowerLevelsValues( ban = ban, invite = invite, @@ -32,4 +33,5 @@ internal fun aRustRoomPowerLevelsValues( roomName = roomName, roomAvatar = roomAvatar, roomTopic = roomTopic, + spaceChild = spaceChild ) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiRoomPowerLevels.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiRoomPowerLevels.kt index 6fb93d71aa..72464827ed 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiRoomPowerLevels.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiRoomPowerLevels.kt @@ -31,4 +31,5 @@ fun defaultFfiRoomPowerLevelValues() = RoomPowerLevelsValues( roomTopic = 100, stateDefault = 0, usersDefault = 0, + spaceChild = 100, ) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt index ebe4cd178a..a98a222c1e 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt @@ -16,7 +16,6 @@ import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels -import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevelsValues import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoom import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiRoomListService @@ -24,6 +23,7 @@ import io.element.android.libraries.matrix.test.A_DEVICE_ID import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.libraries.matrix.test.room.defaultRoomPowerLevelValues import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.persistentMapOf import kotlinx.coroutines.flow.SharingStarted @@ -128,7 +128,7 @@ class RustBaseRoomTest { val rustBaseRoom = createRustBaseRoom( initialRoomInfo = aRoomInfo( roomPowerLevels = RoomPowerLevels( - values = RoomPowerLevelsValues(50, 50, 50, 50, 50, 50, 50, 50), + values = defaultRoomPowerLevelValues(), users = persistentMapOf(A_USER_ID to 100L) ) ), diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapperTest.kt index a30aefe1e2..3c100283a1 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/powerlevels/RoomPowerLevelsValuesMapperTest.kt @@ -29,6 +29,7 @@ class RoomPowerLevelsValuesMapperTest { roomName = 8, roomAvatar = 9, roomTopic = 10, + spaceChild = 11, ) ) ).isEqualTo( @@ -41,6 +42,7 @@ class RoomPowerLevelsValuesMapperTest { roomName = 8, roomAvatar = 9, roomTopic = 10, + spaceChild = 11, ) ) } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeBaseRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeBaseRoom.kt index 9c016d1272..56f880dc11 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeBaseRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeBaseRoom.kt @@ -260,5 +260,6 @@ fun defaultRoomPowerLevelValues() = RoomPowerLevelsValues( redactEvents = 50, roomName = 100, roomAvatar = 100, - roomTopic = 100 + roomTopic = 100, + spaceChild = 100, ) diff --git a/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToMetadataKtTest.kt b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToMetadataKtTest.kt index c5cce66883..67c3596af3 100644 --- a/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToMetadataKtTest.kt +++ b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToMetadataKtTest.kt @@ -510,7 +510,7 @@ class InReplyToMetadataKtTest { fun `state content`() = runTest { moleculeFlow(RecompositionMode.Immediate) { anInReplyToDetailsReady( - eventContent = StateContent("", OtherState.RoomJoinRules) + eventContent = StateContent("", OtherState.RoomJoinRules(null)) ).metadata(hideImage = false) }.test { awaitItem().let {