Update dependency org.matrix.rustcomponents:sdk-android to v26.1.27 (#6096)

* Update dependency org.matrix.rustcomponents:sdk-android to v26.1.27

* Fix breaking API changes: `LeaveSpaceRoom.isLastAdmin` is now `LeaveSpaceRoom.isLastOwner`.

* Rename `isLastAdmin` to `isLastOwner` in our codebase too.

---------

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-01-27 15:02:55 +00:00 committed by GitHub
parent 8a05f525fa
commit 692302df5c
10 changed files with 51 additions and 51 deletions

View file

@ -69,7 +69,7 @@ class LeaveSpacePresenter(
// By default select all rooms that can be left // By default select all rooms that can be left
val otherRoomsExcludingDm = otherRooms.filter { it.spaceRoom.isDirect != true } val otherRoomsExcludingDm = otherRooms.filter { it.spaceRoom.isDirect != true }
selectedRoomIds = otherRoomsExcludingDm selectedRoomIds = otherRoomsExcludingDm
.filter { it.isLastAdmin.not() } .filter { it.isLastOwner.not() }
.map { it.spaceRoom.roomId } .map { it.spaceRoom.roomId }
leaveSpaceRooms = rooms.fold( leaveSpaceRooms = rooms.fold(
onSuccess = { onSuccess = {
@ -91,7 +91,7 @@ class LeaveSpacePresenter(
it.others.map { room -> it.others.map { room ->
SelectableSpaceRoom( SelectableSpaceRoom(
spaceRoom = room.spaceRoom, spaceRoom = room.spaceRoom,
isLastAdmin = room.isLastAdmin, isLastOwner = room.isLastOwner,
isSelected = selectedRoomIds.contains(room.spaceRoom.roomId), isSelected = selectedRoomIds.contains(room.spaceRoom.roomId),
) )
}.toImmutableList() }.toImmutableList()
@ -110,7 +110,7 @@ class LeaveSpacePresenter(
LeaveSpaceEvents.SelectAllRooms -> { LeaveSpaceEvents.SelectAllRooms -> {
selectedRoomIds = selectableSpaceRooms.dataOrNull() selectedRoomIds = selectableSpaceRooms.dataOrNull()
.orEmpty() .orEmpty()
.filter { it.isLastAdmin.not() } .filter { it.isLastOwner.not() }
.map { it.spaceRoom.roomId } .map { it.spaceRoom.roomId }
} }
is LeaveSpaceEvents.ToggleRoomSelection -> { is LeaveSpaceEvents.ToggleRoomSelection -> {
@ -132,7 +132,7 @@ class LeaveSpacePresenter(
return LeaveSpaceState( return LeaveSpaceState(
spaceName = leaveSpaceRooms.dataOrNull()?.current?.spaceRoom?.displayName, spaceName = leaveSpaceRooms.dataOrNull()?.current?.spaceRoom?.displayName,
isLastAdmin = leaveSpaceRooms.dataOrNull()?.current?.isLastAdmin == true, isLastOwner = leaveSpaceRooms.dataOrNull()?.current?.isLastOwner == true,
selectableSpaceRooms = selectableSpaceRooms, selectableSpaceRooms = selectableSpaceRooms,
leaveSpaceAction = leaveSpaceAction.value, leaveSpaceAction = leaveSpaceAction.value,
eventSink = ::handleEvent, eventSink = ::handleEvent,

View file

@ -15,7 +15,7 @@ import kotlinx.collections.immutable.toImmutableList
data class LeaveSpaceState( data class LeaveSpaceState(
val spaceName: String?, val spaceName: String?,
val isLastAdmin: Boolean, val isLastOwner: Boolean,
val selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>>, val selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>>,
val leaveSpaceAction: AsyncAction<Unit>, val leaveSpaceAction: AsyncAction<Unit>,
val eventSink: (LeaveSpaceEvents) -> Unit, val eventSink: (LeaveSpaceEvents) -> Unit,
@ -25,7 +25,7 @@ data class LeaveSpaceState(
private val selectableRooms: ImmutableList<SelectableSpaceRoom> private val selectableRooms: ImmutableList<SelectableSpaceRoom>
init { init {
val partition = rooms.partition { it.isLastAdmin } val partition = rooms.partition { it.isLastOwner }
lastAdminRooms = partition.first.toImmutableList() lastAdminRooms = partition.first.toImmutableList()
selectableRooms = partition.second.toImmutableList() selectableRooms = partition.second.toImmutableList()
} }
@ -33,12 +33,12 @@ data class LeaveSpaceState(
/** /**
* True if we should show the quick action to select/deselect all rooms. * True if we should show the quick action to select/deselect all rooms.
*/ */
val showQuickAction = isLastAdmin.not() && selectableRooms.isNotEmpty() val showQuickAction = isLastOwner.not() && selectableRooms.isNotEmpty()
/** /**
* True if we should show the leave button. * True if we should show the leave button.
*/ */
val showLeaveButton = isLastAdmin.not() && selectableSpaceRooms is AsyncData.Success val showLeaveButton = isLastOwner.not() && selectableSpaceRooms is AsyncData.Success
/** /**
* True if there all the selectable rooms are selected. * True if there all the selectable rooms are selected.

View file

@ -34,7 +34,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
displayName = "A long space name that should be truncated", displayName = "A long space name that should be truncated",
worldReadable = true, worldReadable = true,
), ),
isLastAdmin = true, isLastOwner = true,
), ),
aSelectableSpaceRoom( aSelectableSpaceRoom(
spaceRoom = aSpaceRoom( spaceRoom = aSpaceRoom(
@ -52,7 +52,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
spaceRoom = aSpaceRoom( spaceRoom = aSpaceRoom(
worldReadable = true, worldReadable = true,
), ),
isLastAdmin = true, isLastOwner = true,
), ),
aSelectableSpaceRoom( aSelectableSpaceRoom(
spaceRoom = aSpaceRoom( spaceRoom = aSpaceRoom(
@ -70,7 +70,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
spaceRoom = aSpaceRoom( spaceRoom = aSpaceRoom(
worldReadable = true, worldReadable = true,
), ),
isLastAdmin = true, isLastOwner = true,
), ),
) )
), ),
@ -82,11 +82,11 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
spaceRoom = aSpaceRoom( spaceRoom = aSpaceRoom(
worldReadable = true, worldReadable = true,
), ),
isLastAdmin = true, isLastOwner = true,
), ),
aSelectableSpaceRoom( aSelectableSpaceRoom(
spaceRoom = aSpaceRoom(), spaceRoom = aSpaceRoom(),
isLastAdmin = true, isLastOwner = true,
), ),
) )
), ),
@ -107,19 +107,19 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
selectableSpaceRooms = AsyncData.Failure(Exception("An error")), selectableSpaceRooms = AsyncData.Failure(Exception("An error")),
), ),
aLeaveSpaceState( aLeaveSpaceState(
isLastAdmin = true, isLastOwner = true,
), ),
) )
} }
fun aLeaveSpaceState( fun aLeaveSpaceState(
spaceName: String? = "Space name", spaceName: String? = "Space name",
isLastAdmin: Boolean = false, isLastOwner: Boolean = false,
selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>> = AsyncData.Uninitialized, selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>> = AsyncData.Uninitialized,
leaveSpaceAction: AsyncAction<Unit> = AsyncAction.Uninitialized, leaveSpaceAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
) = LeaveSpaceState( ) = LeaveSpaceState(
spaceName = spaceName, spaceName = spaceName,
isLastAdmin = isLastAdmin, isLastOwner = isLastOwner,
selectableSpaceRooms = selectableSpaceRooms, selectableSpaceRooms = selectableSpaceRooms,
leaveSpaceAction = leaveSpaceAction, leaveSpaceAction = leaveSpaceAction,
eventSink = { } eventSink = { }
@ -127,10 +127,10 @@ fun aLeaveSpaceState(
fun aSelectableSpaceRoom( fun aSelectableSpaceRoom(
spaceRoom: SpaceRoom = aSpaceRoom(), spaceRoom: SpaceRoom = aSpaceRoom(),
isLastAdmin: Boolean = false, isLastOwner: Boolean = false,
isSelected: Boolean = false, isSelected: Boolean = false,
) = SelectableSpaceRoom( ) = SelectableSpaceRoom(
spaceRoom = spaceRoom, spaceRoom = spaceRoom,
isLastAdmin = isLastAdmin, isLastOwner = isLastOwner,
isSelected = isSelected, isSelected = isSelected,
) )

View file

@ -94,7 +94,7 @@ fun LeaveSpaceView(
modifier = Modifier modifier = Modifier
.weight(1f), .weight(1f),
) { ) {
if (state.isLastAdmin.not()) { if (state.isLastOwner.not()) {
when (state.selectableSpaceRooms) { when (state.selectableSpaceRooms) {
is AsyncData.Success -> { is AsyncData.Success -> {
// List rooms where the user is the only admin // List rooms where the user is the only admin
@ -132,7 +132,7 @@ fun LeaveSpaceView(
state.eventSink(LeaveSpaceEvents.LeaveSpace) state.eventSink(LeaveSpaceEvents.LeaveSpace)
}, },
onCancel = onCancel, onCancel = onCancel,
showRolesAndPermissionsButton = state.isLastAdmin, showRolesAndPermissionsButton = state.isLastOwner,
onRolesAndPermissionsClick = onRolesAndPermissionsClick, onRolesAndPermissionsClick = onRolesAndPermissionsClick,
) )
} }
@ -162,11 +162,11 @@ private fun LeaveSpaceHeader(
modifier = Modifier.padding(top = 0.dp, bottom = 8.dp, start = 24.dp, end = 24.dp), modifier = Modifier.padding(top = 0.dp, bottom = 8.dp, start = 24.dp, end = 24.dp),
iconStyle = BigIcon.Style.AlertSolid, iconStyle = BigIcon.Style.AlertSolid,
title = stringResource( title = stringResource(
if (state.isLastAdmin) R.string.screen_leave_space_title_last_admin else R.string.screen_leave_space_title, if (state.isLastOwner) R.string.screen_leave_space_title_last_admin else R.string.screen_leave_space_title,
state.spaceName ?: stringResource(CommonStrings.common_space) state.spaceName ?: stringResource(CommonStrings.common_space)
), ),
subTitle = subTitle =
if (state.isLastAdmin) { if (state.isLastOwner) {
stringResource(R.string.screen_leave_space_subtitle_last_admin) stringResource(R.string.screen_leave_space_subtitle_last_admin)
} else if (state.selectableSpaceRooms is AsyncData.Success && state.selectableSpaceRooms.data.isNotEmpty()) { } else if (state.selectableSpaceRooms is AsyncData.Success && state.selectableSpaceRooms.data.isNotEmpty()) {
if (state.hasOnlyLastAdminRoom) { if (state.hasOnlyLastAdminRoom) {
@ -265,11 +265,11 @@ private fun SpaceItem(
.toggleable( .toggleable(
value = selectableSpaceRoom.isSelected, value = selectableSpaceRoom.isSelected,
role = Role.Checkbox, role = Role.Checkbox,
enabled = selectableSpaceRoom.isLastAdmin.not(), enabled = selectableSpaceRoom.isLastOwner.not(),
onValueChange = { onClick() } onValueChange = { onClick() }
) )
.clickable( .clickable(
enabled = selectableSpaceRoom.isLastAdmin.not(), enabled = selectableSpaceRoom.isLastOwner.not(),
// TODO // TODO
onClickLabel = null, onClickLabel = null,
role = Role.Checkbox, role = Role.Checkbox,
@ -324,7 +324,7 @@ private fun SpaceItem(
room.numJoinedMembers, room.numJoinedMembers,
room.numJoinedMembers room.numJoinedMembers
) )
val subTitle = if (selectableSpaceRoom.isLastAdmin) { val subTitle = if (selectableSpaceRoom.isLastOwner) {
stringResource(R.string.screen_leave_space_last_admin_info, membersCount) stringResource(R.string.screen_leave_space_last_admin_info, membersCount)
} else { } else {
membersCount membersCount
@ -343,7 +343,7 @@ private fun SpaceItem(
Checkbox( Checkbox(
checked = selectableSpaceRoom.isSelected, checked = selectableSpaceRoom.isSelected,
onCheckedChange = null, onCheckedChange = null,
enabled = selectableSpaceRoom.isLastAdmin.not(), enabled = selectableSpaceRoom.isLastOwner.not(),
) )
} }
} }

View file

@ -12,6 +12,6 @@ import io.element.android.libraries.matrix.api.spaces.SpaceRoom
data class SelectableSpaceRoom( data class SelectableSpaceRoom(
val spaceRoom: SpaceRoom, val spaceRoom: SpaceRoom,
val isLastAdmin: Boolean, val isLastOwner: Boolean,
val isSelected: Boolean, val isSelected: Boolean,
) )

View file

@ -44,7 +44,7 @@ class LeaveSpacePresenterTest {
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
assertThat(state.spaceName).isNull() assertThat(state.spaceName).isNull()
assertThat(state.isLastAdmin).isFalse() assertThat(state.isLastOwner).isFalse()
assertThat(state.selectableSpaceRooms.isLoading()).isTrue() assertThat(state.selectableSpaceRooms.isLoading()).isTrue()
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized) assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
cancelAndIgnoreRemainingEvents() cancelAndIgnoreRemainingEvents()
@ -78,7 +78,7 @@ class LeaveSpacePresenterTest {
fun `present - current space name and is last admin`() = runTest { fun `present - current space name and is last admin`() = runTest {
val presenter = createLeaveSpacePresenter( val presenter = createLeaveSpacePresenter(
leaveSpaceHandle = FakeLeaveSpaceHandle( leaveSpaceHandle = FakeLeaveSpaceHandle(
roomsResult = { Result.success(listOf(aLeaveSpaceRoom(spaceRoom = aSpace, isLastAdmin = true))) }, roomsResult = { Result.success(listOf(aLeaveSpaceRoom(spaceRoom = aSpace, isLastOwner = true))) },
) )
) )
presenter.test { presenter.test {
@ -87,7 +87,7 @@ class LeaveSpacePresenterTest {
skipItems(2) skipItems(2)
val finalState = awaitItem() val finalState = awaitItem()
assertThat(finalState.spaceName).isEqualTo(A_SPACE_NAME) assertThat(finalState.spaceName).isEqualTo(A_SPACE_NAME)
assertThat(finalState.isLastAdmin).isTrue() assertThat(finalState.isLastOwner).isTrue()
// The current state is not in the sub room list // The current state is not in the sub room list
assertThat(finalState.selectableSpaceRooms.dataOrNull()!!).isEmpty() assertThat(finalState.selectableSpaceRooms.dataOrNull()!!).isEmpty()
} }
@ -145,8 +145,8 @@ class LeaveSpacePresenterTest {
roomsResult = { roomsResult = {
Result.success( Result.success(
listOf( listOf(
LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID), isLastAdmin = false), LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID), isLastOwner = false),
LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID_2), isLastAdmin = true), LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID_2), isLastOwner = true),
) )
) )
}, },
@ -157,18 +157,18 @@ class LeaveSpacePresenterTest {
skipItems(3) skipItems(3)
val state = awaitItem() val state = awaitItem()
assertThat(state.spaceName).isNull() assertThat(state.spaceName).isNull()
assertThat(state.isLastAdmin).isFalse() assertThat(state.isLastOwner).isFalse()
val data = state.selectableSpaceRooms.dataOrNull()!! val data = state.selectableSpaceRooms.dataOrNull()!!
assertThat(data.size).isEqualTo(2) assertThat(data.size).isEqualTo(2)
// Only one room is selectable as the user is the last admin in the other one // Only one room is selectable as the user is the last admin in the other one
val room1 = data[0] val room1 = data[0]
assertThat(room1.spaceRoom.roomId).isEqualTo(A_ROOM_ID) assertThat(room1.spaceRoom.roomId).isEqualTo(A_ROOM_ID)
assertThat(room1.isSelected).isTrue() assertThat(room1.isSelected).isTrue()
assertThat(room1.isLastAdmin).isFalse() assertThat(room1.isLastOwner).isFalse()
val room2 = data[1] val room2 = data[1]
assertThat(room2.spaceRoom.roomId).isEqualTo(A_ROOM_ID_2) assertThat(room2.spaceRoom.roomId).isEqualTo(A_ROOM_ID_2)
assertThat(room2.isSelected).isFalse() assertThat(room2.isSelected).isFalse()
assertThat(room2.isLastAdmin).isTrue() assertThat(room2.isLastOwner).isTrue()
// Deselect all // Deselect all
state.eventSink(LeaveSpaceEvents.DeselectAllRooms) state.eventSink(LeaveSpaceEvents.DeselectAllRooms)
skipItems(1) skipItems(1)
@ -246,8 +246,8 @@ private fun aLeaveSpaceRoom(
roomId = A_SPACE_ID, roomId = A_SPACE_ID,
displayName = A_SPACE_NAME, displayName = A_SPACE_NAME,
), ),
isLastAdmin: Boolean = false, isLastOwner: Boolean = false,
) = LeaveSpaceRoom( ) = LeaveSpaceRoom(
spaceRoom = spaceRoom, spaceRoom = spaceRoom,
isLastAdmin = isLastAdmin, isLastOwner = isLastOwner,
) )

View file

@ -44,10 +44,10 @@ class LeaveSpaceStateTest {
@Test @Test
fun `test last admin`() { fun `test last admin`() {
val sut = aLeaveSpaceState( val sut = aLeaveSpaceState(
isLastAdmin = true, isLastOwner = true,
selectableSpaceRooms = AsyncData.Success( selectableSpaceRooms = AsyncData.Success(
persistentListOf( persistentListOf(
aSelectableSpaceRoom(isLastAdmin = false, isSelected = false), aSelectableSpaceRoom(isLastOwner = false, isSelected = false),
) )
) )
) )
@ -63,8 +63,8 @@ class LeaveSpaceStateTest {
val sut = aLeaveSpaceState( val sut = aLeaveSpaceState(
selectableSpaceRooms = AsyncData.Success( selectableSpaceRooms = AsyncData.Success(
listOf( listOf(
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastOwner = false, isSelected = true),
aSelectableSpaceRoom(isLastAdmin = false, isSelected = false), aSelectableSpaceRoom(isLastOwner = false, isSelected = false),
).toImmutableList() ).toImmutableList()
) )
) )
@ -80,8 +80,8 @@ class LeaveSpaceStateTest {
val sut = aLeaveSpaceState( val sut = aLeaveSpaceState(
selectableSpaceRooms = AsyncData.Success( selectableSpaceRooms = AsyncData.Success(
listOf( listOf(
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastOwner = false, isSelected = true),
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastOwner = false, isSelected = true),
).toImmutableList() ).toImmutableList()
) )
) )
@ -97,9 +97,9 @@ class LeaveSpaceStateTest {
val sut = aLeaveSpaceState( val sut = aLeaveSpaceState(
selectableSpaceRooms = AsyncData.Success( selectableSpaceRooms = AsyncData.Success(
persistentListOf( persistentListOf(
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), aSelectableSpaceRoom(isLastOwner = true, isSelected = false),
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastOwner = false, isSelected = true),
aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastOwner = false, isSelected = true),
) )
) )
) )
@ -115,8 +115,8 @@ class LeaveSpaceStateTest {
val sut = aLeaveSpaceState( val sut = aLeaveSpaceState(
selectableSpaceRooms = AsyncData.Success( selectableSpaceRooms = AsyncData.Success(
listOf( listOf(
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), aSelectableSpaceRoom(isLastOwner = true, isSelected = false),
aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), aSelectableSpaceRoom(isLastOwner = true, isSelected = false),
).toImmutableList() ).toImmutableList()
) )
) )

View file

@ -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 # 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 # 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. # only fix API breaks and may add some TODOs.
matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.1.22" matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.1.27"
# Others # Others
coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }

View file

@ -10,5 +10,5 @@ package io.element.android.libraries.matrix.api.spaces
data class LeaveSpaceRoom( data class LeaveSpaceRoom(
val spaceRoom: SpaceRoom, val spaceRoom: SpaceRoom,
val isLastAdmin: Boolean, val isLastOwner: Boolean,
) )

View file

@ -40,7 +40,7 @@ class RustLeaveSpaceHandle(
inner.await().rooms().map { leaveSpaceRoom -> inner.await().rooms().map { leaveSpaceRoom ->
LeaveSpaceRoom( LeaveSpaceRoom(
spaceRoom = spaceRoomMapper.map(leaveSpaceRoom.spaceRoom), spaceRoom = spaceRoomMapper.map(leaveSpaceRoom.spaceRoom),
isLastAdmin = leaveSpaceRoom.isLastAdmin, isLastOwner = leaveSpaceRoom.isLastOwner,
) )
} }
} }