diff --git a/features/createroom/impl/src/main/res/values/localazy.xml b/features/createroom/impl/src/main/res/values/localazy.xml
index b2a0f1d5be..95134845e0 100644
--- a/features/createroom/impl/src/main/res/values/localazy.xml
+++ b/features/createroom/impl/src/main/res/values/localazy.xml
@@ -7,8 +7,6 @@
"Add name…"
"New room"
"New space"
- "(no space)"
- "Home"
"Only people invited can join."
"Private"
"Anyone can find this room.
diff --git a/features/space/impl/build.gradle.kts b/features/space/impl/build.gradle.kts
index a29d388587..deec862fa3 100644
--- a/features/space/impl/build.gradle.kts
+++ b/features/space/impl/build.gradle.kts
@@ -52,4 +52,5 @@ dependencies {
testImplementation(projects.libraries.featureflag.test)
testImplementation(projects.features.createroom.test)
testImplementation(projects.features.invite.test)
+ testImplementation(projects.features.rolesandpermissions.test)
}
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt
index 2b29a895a6..62cefaeaf2 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/SpaceFlowNode.kt
@@ -22,10 +22,13 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.pop
import com.bumble.appyx.navmodel.backstack.operation.push
+import com.bumble.appyx.navmodel.backstack.operation.replace
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedInject
import io.element.android.annotations.ContributesNode
import io.element.android.features.createroom.api.CreateRoomEntryPoint
+import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesEntryPoint
+import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesListType
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.features.space.impl.addroom.AddRoomToSpaceNode
import io.element.android.features.space.impl.di.SpaceFlowGraph
@@ -38,10 +41,15 @@ import io.element.android.libraries.architecture.callback
import io.element.android.libraries.architecture.createNode
import io.element.android.libraries.di.DependencyInjectionGraphOwner
import io.element.android.libraries.di.RoomScope
+import io.element.android.libraries.di.annotations.SessionCoroutineScope
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.spaces.SpaceService
import io.element.android.libraries.matrix.api.spaces.loadAllIncrementally
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.NonCancellable
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import kotlinx.parcelize.Parcelize
@ContributesNode(RoomScope::class)
@@ -49,10 +57,12 @@ import kotlinx.parcelize.Parcelize
class SpaceFlowNode(
@Assisted val buildContext: BuildContext,
@Assisted plugins: List,
- room: JoinedRoom,
+ private val room: JoinedRoom,
spaceService: SpaceService,
graphFactory: SpaceFlowGraph.Factory,
private val createRoomEntryPoint: CreateRoomEntryPoint,
+ private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
+ @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
) : BaseFlowNode(
backstack = BackStack(
initialElement = NavTarget.Root,
@@ -80,6 +90,9 @@ class SpaceFlowNode(
@Parcelize
data object AddRoom : NavTarget
+
+ @Parcelize
+ data object ChangeOwners : NavTarget
}
override fun onBuilt() {
@@ -105,6 +118,10 @@ class SpaceFlowNode(
override fun navigateToRolesAndPermissions() {
backstack.push(NavTarget.Settings(SpaceSettingsFlowNode.NavTarget.RolesAndPermissions))
}
+
+ override fun navigateToChooseOwners() {
+ backstack.replace(NavTarget.ChangeOwners)
+ }
}
createNode(buildContext, listOf(callback))
}
@@ -177,6 +194,29 @@ class SpaceFlowNode(
}
createNode(buildContext, listOf(callback))
}
+ NavTarget.ChangeOwners -> {
+ val node = changeRoomMemberRolesEntryPoint.createNode(
+ parentNode = this,
+ buildContext = buildContext,
+ room = room,
+ listType = ChangeRoomMemberRolesListType.SelectNewOwnersWhenLeaving,
+ )
+
+ val completionProxy = node as ChangeRoomMemberRolesEntryPoint.NodeProxy
+ sessionCoroutineScope.launch {
+ val changedOwners = withContext(NonCancellable) {
+ completionProxy.waitForCompletion()
+ }
+
+ if (changedOwners) {
+ backstack.replace(NavTarget.Leave)
+ } else {
+ backstack.pop()
+ }
+ }
+
+ node
+ }
}
}
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceNode.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceNode.kt
index c41acc0c05..6f7ef89e5a 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceNode.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceNode.kt
@@ -34,6 +34,7 @@ class LeaveSpaceNode(
interface Callback : Plugin {
fun closeLeaveSpaceFlow()
fun navigateToRolesAndPermissions()
+ fun navigateToChooseOwners()
}
private val leaveSpaceHandle = matrixClient.spaceService.getLeaveSpaceHandle(room.roomId)
@@ -57,6 +58,7 @@ class LeaveSpaceNode(
state = state,
onCancel = callback::closeLeaveSpaceFlow,
onRolesAndPermissionsClick = callback::navigateToRolesAndPermissions,
+ onChooseOwnersClick = callback::navigateToChooseOwners,
modifier = modifier
)
}
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenter.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenter.kt
index 2d30bc8617..4e1fd34673 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenter.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenter.kt
@@ -92,6 +92,7 @@ class LeaveSpacePresenter(
SelectableSpaceRoom(
spaceRoom = room.spaceRoom,
isLastOwner = room.isLastOwner,
+ joinedMembersCount = room.spaceRoom.numJoinedMembers,
isSelected = selectedRoomIds.contains(room.spaceRoom.roomId),
)
}.toImmutableList()
@@ -130,9 +131,11 @@ class LeaveSpacePresenter(
}
}
+ val currentSpaceToLeave = leaveSpaceRooms.dataOrNull()?.current
return LeaveSpaceState(
- spaceName = leaveSpaceRooms.dataOrNull()?.current?.spaceRoom?.displayName,
- isLastOwner = leaveSpaceRooms.dataOrNull()?.current?.isLastOwner == true,
+ spaceName = currentSpaceToLeave?.spaceRoom?.displayName,
+ needsOwnerChange = currentSpaceToLeave?.let { it.spaceRoom.numJoinedMembers > 1 && it.isLastOwner } == true,
+ areCreatorsPrivileged = currentSpaceToLeave?.areCreatorsPrivileged == true,
selectableSpaceRooms = selectableSpaceRooms,
leaveSpaceAction = leaveSpaceAction.value,
eventSink = ::handleEvent,
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceState.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceState.kt
index 2ff98ea583..9bf029cb15 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceState.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceState.kt
@@ -15,7 +15,8 @@ import kotlinx.collections.immutable.toImmutableList
data class LeaveSpaceState(
val spaceName: String?,
- val isLastOwner: Boolean,
+ val needsOwnerChange: Boolean,
+ val areCreatorsPrivileged: Boolean,
val selectableSpaceRooms: AsyncData>,
val leaveSpaceAction: AsyncAction,
val eventSink: (LeaveSpaceEvents) -> Unit,
@@ -25,7 +26,7 @@ data class LeaveSpaceState(
private val selectableRooms: ImmutableList
init {
- val partition = rooms.partition { it.isLastOwner }
+ val partition = rooms.partition { it.isLastOwner && it.joinedMembersCount > 1 }
lastAdminRooms = partition.first.toImmutableList()
selectableRooms = partition.second.toImmutableList()
}
@@ -33,12 +34,12 @@ data class LeaveSpaceState(
/**
* True if we should show the quick action to select/deselect all rooms.
*/
- val showQuickAction = isLastOwner.not() && selectableRooms.isNotEmpty()
+ val showQuickAction = needsOwnerChange.not() && selectableRooms.isNotEmpty()
/**
* True if we should show the leave button.
*/
- val showLeaveButton = isLastOwner.not() && selectableSpaceRooms is AsyncData.Success
+ val showLeaveButton = needsOwnerChange.not() && selectableSpaceRooms is AsyncData.Success
/**
* True if there all the selectable rooms are selected.
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt
index 362e987fc4..44e5ce7cd7 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt
@@ -109,17 +109,23 @@ class LeaveSpaceStateProvider : PreviewParameterProvider {
aLeaveSpaceState(
isLastOwner = true,
),
+ aLeaveSpaceState(
+ isLastOwner = true,
+ areCreatorsPrivileged = true,
+ ),
)
}
fun aLeaveSpaceState(
spaceName: String? = "Space name",
isLastOwner: Boolean = false,
+ areCreatorsPrivileged: Boolean = false,
selectableSpaceRooms: AsyncData> = AsyncData.Uninitialized,
leaveSpaceAction: AsyncAction = AsyncAction.Uninitialized,
) = LeaveSpaceState(
spaceName = spaceName,
- isLastOwner = isLastOwner,
+ needsOwnerChange = isLastOwner,
+ areCreatorsPrivileged = areCreatorsPrivileged,
selectableSpaceRooms = selectableSpaceRooms,
leaveSpaceAction = leaveSpaceAction,
eventSink = { }
@@ -128,9 +134,11 @@ fun aLeaveSpaceState(
fun aSelectableSpaceRoom(
spaceRoom: SpaceRoom = aSpaceRoom(),
isLastOwner: Boolean = false,
+ joinedMembersCount: Int = 2,
isSelected: Boolean = false,
) = SelectableSpaceRoom(
spaceRoom = spaceRoom,
isLastOwner = isLastOwner,
+ joinedMembersCount = joinedMembersCount,
isSelected = isSelected,
)
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt
index 52d52a103e..f0be5e1f2f 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceView.kt
@@ -12,14 +12,13 @@ package io.element.android.features.space.impl.leave
import androidx.annotation.StringRes
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.consumeWindowInsets
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
-import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
@@ -40,6 +39,7 @@ import io.element.android.features.space.impl.R
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
+import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.async.AsyncFailure
@@ -54,7 +54,6 @@ import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.Checkbox
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconSource
-import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar
@@ -71,30 +70,42 @@ fun LeaveSpaceView(
state: LeaveSpaceState,
onCancel: () -> Unit,
onRolesAndPermissionsClick: () -> Unit,
+ onChooseOwnersClick: () -> Unit,
modifier: Modifier = Modifier,
) {
- Scaffold(
+ HeaderFooterPage(
modifier = modifier,
+ contentPadding = PaddingValues(bottom = 14.dp),
topBar = {
- LeaveSpaceHeader(
- state = state,
- onBackClick = onCancel,
+ TopAppBar(
+ navigationIcon = {
+ BackButton(onClick = onCancel)
+ },
+ title = {},
)
},
- containerColor = ElementTheme.colors.bgCanvasDefault,
- ) { padding ->
- Column(
- modifier = Modifier
- .padding(padding)
- .imePadding()
- .consumeWindowInsets(padding)
- .fillMaxSize()
- ) {
- LazyColumn(
- modifier = Modifier
- .weight(1f),
- ) {
- if (state.isLastOwner.not()) {
+ header = {
+ LeaveSpaceHeader(state = state)
+ },
+ footer = {
+ LeaveSpaceButtons(
+ showLeaveButton = state.showLeaveButton,
+ selectedRoomsCount = state.selectedRoomsCount,
+ onLeaveSpace = {
+ state.eventSink(LeaveSpaceEvents.LeaveSpace)
+ },
+ onCancel = onCancel,
+ showRolesAndPermissionsButton = state.needsOwnerChange && !state.areCreatorsPrivileged,
+ showChooseOwnersButton = state.needsOwnerChange && state.areCreatorsPrivileged,
+ onChooseOwnersButtonClick = onChooseOwnersClick,
+ onRolesAndPermissionsClick = onRolesAndPermissionsClick,
+ )
+ },
+ content = {
+ if (state.needsOwnerChange.not()) {
+ LazyColumn(
+ modifier = Modifier.padding(top = 20.dp),
+ ) {
when (state.selectableSpaceRooms) {
is AsyncData.Success -> {
// List rooms where the user is the only admin
@@ -125,18 +136,8 @@ fun LeaveSpaceView(
}
}
}
- LeaveSpaceButtons(
- showLeaveButton = state.showLeaveButton,
- selectedRoomsCount = state.selectedRoomsCount,
- onLeaveSpace = {
- state.eventSink(LeaveSpaceEvents.LeaveSpace)
- },
- onCancel = onCancel,
- showRolesAndPermissionsButton = state.isLastOwner,
- onRolesAndPermissionsClick = onRolesAndPermissionsClick,
- )
}
- }
+ )
AsyncActionView(
async = state.leaveSpaceAction,
@@ -149,25 +150,27 @@ fun LeaveSpaceView(
@Composable
private fun LeaveSpaceHeader(
state: LeaveSpaceState,
- onBackClick: () -> Unit,
) {
Column {
- TopAppBar(
- navigationIcon = {
- BackButton(onClick = onBackClick)
- },
- title = {},
- )
IconTitleSubtitleMolecule(
- modifier = Modifier.padding(top = 0.dp, bottom = 8.dp, start = 24.dp, end = 24.dp),
+ modifier = Modifier.padding(top = 24.dp, bottom = 8.dp, start = 24.dp, end = 24.dp),
iconStyle = BigIcon.Style.AlertSolid,
- title = stringResource(
- if (state.isLastOwner) R.string.screen_leave_space_title_last_admin else R.string.screen_leave_space_title,
- state.spaceName ?: stringResource(CommonStrings.common_space)
- ),
+ title = if (state.needsOwnerChange) {
+ if (state.areCreatorsPrivileged) {
+ stringResource(R.string.screen_leave_space_title_last_owner)
+ } else {
+ stringResource(R.string.screen_leave_space_title_last_admin, state.spaceName ?: stringResource(CommonStrings.common_space))
+ }
+ } else {
+ stringResource(R.string.screen_leave_space_title, state.spaceName ?: stringResource(CommonStrings.common_space))
+ },
subTitle =
- if (state.isLastOwner) {
- stringResource(R.string.screen_leave_space_subtitle_last_admin)
+ if (state.needsOwnerChange) {
+ if (state.areCreatorsPrivileged) {
+ stringResource(R.string.screen_leave_space_subtitle_last_owner, state.spaceName ?: stringResource(CommonStrings.common_space))
+ } else {
+ stringResource(R.string.screen_leave_space_subtitle_last_admin)
+ }
} else if (state.selectableSpaceRooms is AsyncData.Success && state.selectableSpaceRooms.data.isNotEmpty()) {
if (state.hasOnlyLastAdminRoom) {
stringResource(R.string.screen_leave_space_subtitle_only_last_admin)
@@ -216,10 +219,12 @@ private fun LeaveSpaceButtons(
onLeaveSpace: () -> Unit,
showRolesAndPermissionsButton: Boolean,
onRolesAndPermissionsClick: () -> Unit,
+ showChooseOwnersButton: Boolean,
+ onChooseOwnersButtonClick: () -> Unit,
onCancel: () -> Unit,
) {
ButtonColumnMolecule(
- modifier = Modifier.padding(16.dp)
+ modifier = Modifier.padding(top = 16.dp)
) {
if (showLeaveButton) {
val text = if (selectedRoomsCount > 0) {
@@ -243,6 +248,14 @@ private fun LeaveSpaceButtons(
leadingIcon = IconSource.Vector(CompoundIcons.Settings()),
)
}
+ if (showChooseOwnersButton) {
+ Button(
+ text = stringResource(R.string.screen_leave_space_choose_owners_action),
+ onClick = onChooseOwnersButtonClick,
+ modifier = Modifier.fillMaxWidth(),
+ destructive = true,
+ )
+ }
TextButton(
modifier = Modifier.fillMaxWidth(),
text = stringResource(CommonStrings.action_cancel),
@@ -262,6 +275,7 @@ private fun SpaceItem(
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 66.dp)
+ .padding(horizontal = 16.dp)
.toggleable(
value = selectableSpaceRoom.isSelected,
role = Role.Checkbox,
@@ -276,9 +290,9 @@ private fun SpaceItem(
onClick = onClick,
),
verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(16.dp),
) {
Avatar(
- modifier = Modifier.padding(horizontal = 16.dp),
avatarData = room.getAvatarData(AvatarSize.LeaveSpaceRoom),
avatarType = if (room.isSpace) AvatarType.Space() else AvatarType.Room(),
)
@@ -358,5 +372,6 @@ internal fun LeaveSpaceViewPreview(
state = state,
onCancel = {},
onRolesAndPermissionsClick = {},
+ onChooseOwnersClick = {},
)
}
diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/SelectableSpaceRoom.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/SelectableSpaceRoom.kt
index a6c42e16dc..a5dae34f15 100644
--- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/SelectableSpaceRoom.kt
+++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/SelectableSpaceRoom.kt
@@ -13,5 +13,6 @@ import io.element.android.libraries.matrix.api.spaces.SpaceRoom
data class SelectableSpaceRoom(
val spaceRoom: SpaceRoom,
val isLastOwner: Boolean,
+ val joinedMembersCount: Int,
val isSelected: Boolean,
)
diff --git a/features/space/impl/src/main/res/values/localazy.xml b/features/space/impl/src/main/res/values/localazy.xml
index b5495b721a..414f6c5ccf 100644
--- a/features/space/impl/src/main/res/values/localazy.xml
+++ b/features/space/impl/src/main/res/values/localazy.xml
@@ -1,5 +1,6 @@
+ "Choose owners"
"%1$s (Admin)"
- "Leave %1$d room and space"
@@ -7,9 +8,11 @@
"Select the rooms you’d like to leave which you\'re not the only administrator for:"
"You need to assign another admin for this space before you can leave."
+ "You are the only owner of %1$s. You need to transfer ownership to someone else before you leave."
"You will not be removed from the following room(s) because you\'re the only administrator:"
"Leave %1$s?"
"You are the only admin for %1$s"
+ "Transfer ownership"
"Room"
"Adding a room will not affect the room access. To change the access go to Room settings > Security & privacy."
"Add your first room"
diff --git a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/DefaultSpaceEntryPointTest.kt b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/DefaultSpaceEntryPointTest.kt
index 0c3ae1b888..c0ec58d267 100644
--- a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/DefaultSpaceEntryPointTest.kt
+++ b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/DefaultSpaceEntryPointTest.kt
@@ -12,6 +12,7 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.testing.junit4.util.MainDispatcherRule
import com.google.common.truth.Truth.assertThat
+import io.element.android.features.changeroommemberroles.test.FakeChangeRoomMemberRolesEntryPoint
import io.element.android.features.createroom.api.FakeCreateRoomEntryPoint
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.features.space.impl.di.FakeSpaceFlowGraph
@@ -22,6 +23,7 @@ import io.element.android.libraries.matrix.test.spaces.FakeSpaceRoomList
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
import io.element.android.tests.testutils.lambda.lambdaError
import io.element.android.tests.testutils.node.TestParentNode
+import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
@@ -33,7 +35,7 @@ class DefaultSpaceEntryPointTest {
val mainDispatcherRule = MainDispatcherRule()
@Test
- fun `test node builder`() {
+ fun `test node builder`() = runTest {
val entryPoint = DefaultSpaceEntryPoint()
val nodeInputs = SpaceEntryPoint.Inputs(A_ROOM_ID)
val parentNode = TestParentNode.create { buildContext, plugins ->
@@ -46,6 +48,8 @@ class DefaultSpaceEntryPointTest {
room = FakeJoinedRoom(),
graphFactory = FakeSpaceFlowGraph.Factory,
createRoomEntryPoint = FakeCreateRoomEntryPoint(),
+ changeRoomMemberRolesEntryPoint = FakeChangeRoomMemberRolesEntryPoint(),
+ sessionCoroutineScope = backgroundScope,
)
}
val callback = object : SpaceEntryPoint.Callback {
diff --git a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenterTest.kt b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenterTest.kt
index e78a338bb7..b3b6fc7976 100644
--- a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenterTest.kt
+++ b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenterTest.kt
@@ -29,11 +29,6 @@ import kotlinx.coroutines.test.runTest
import org.junit.Test
class LeaveSpacePresenterTest {
- private val aSpace = aSpaceRoom(
- roomId = A_SPACE_ID,
- displayName = A_SPACE_NAME,
- )
-
@Test
fun `present - initial state`() = runTest {
val presenter = createLeaveSpacePresenter(
@@ -44,7 +39,7 @@ class LeaveSpacePresenterTest {
presenter.test {
val state = awaitItem()
assertThat(state.spaceName).isNull()
- assertThat(state.isLastOwner).isFalse()
+ assertThat(state.needsOwnerChange).isFalse()
assertThat(state.selectableSpaceRooms.isLoading()).isTrue()
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
cancelAndIgnoreRemainingEvents()
@@ -87,7 +82,7 @@ class LeaveSpacePresenterTest {
skipItems(2)
val finalState = awaitItem()
assertThat(finalState.spaceName).isEqualTo(A_SPACE_NAME)
- assertThat(finalState.isLastOwner).isTrue()
+ assertThat(finalState.needsOwnerChange).isTrue()
// The current state is not in the sub room list
assertThat(finalState.selectableSpaceRooms.dataOrNull()!!).isEmpty()
}
@@ -145,8 +140,8 @@ class LeaveSpacePresenterTest {
roomsResult = {
Result.success(
listOf(
- LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID), isLastOwner = false),
- LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID_2), isLastOwner = true),
+ LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID), isLastOwner = false, areCreatorsPrivileged = false),
+ LeaveSpaceRoom(aSpaceRoom(roomId = A_ROOM_ID_2), isLastOwner = true, areCreatorsPrivileged = false),
)
)
},
@@ -157,7 +152,7 @@ class LeaveSpacePresenterTest {
skipItems(3)
val state = awaitItem()
assertThat(state.spaceName).isNull()
- assertThat(state.isLastOwner).isFalse()
+ assertThat(state.needsOwnerChange).isFalse()
val data = state.selectableSpaceRooms.dataOrNull()!!
assertThat(data.size).isEqualTo(2)
// Only one room is selectable as the user is the last admin in the other one
@@ -232,6 +227,20 @@ class LeaveSpacePresenterTest {
}
}
+ @Test
+ fun `present - needsOwnerChange is false if user is the last joined member`() = runTest {
+ val presenter = createLeaveSpacePresenter(
+ leaveSpaceHandle = FakeLeaveSpaceHandle(
+ roomsResult = { Result.success(listOf(aLeaveSpaceRoom(spaceRoom = aSpaceRoom(numJoinedMembers = 1), isLastOwner = true))) },
+ )
+ )
+ presenter.test {
+ skipItems(3)
+ val state = awaitItem()
+ assertThat(state.needsOwnerChange).isFalse()
+ }
+ }
+
private fun createLeaveSpacePresenter(
leaveSpaceHandle: LeaveSpaceHandle = FakeLeaveSpaceHandle(),
): LeaveSpacePresenter {
@@ -241,13 +250,18 @@ class LeaveSpacePresenterTest {
}
}
+private val aSpace = aSpaceRoom(
+ roomId = A_SPACE_ID,
+ displayName = A_SPACE_NAME,
+ numJoinedMembers = 2,
+)
+
private fun aLeaveSpaceRoom(
- spaceRoom: SpaceRoom = aSpaceRoom(
- roomId = A_SPACE_ID,
- displayName = A_SPACE_NAME,
- ),
+ spaceRoom: SpaceRoom = aSpace,
isLastOwner: Boolean = false,
+ areCreatorsPrivileged: Boolean = false,
) = LeaveSpaceRoom(
spaceRoom = spaceRoom,
isLastOwner = isLastOwner,
+ areCreatorsPrivileged = areCreatorsPrivileged,
)
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/LeaveSpaceRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/LeaveSpaceRoom.kt
index 2b1389ea6e..dc098dc20d 100644
--- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/LeaveSpaceRoom.kt
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/LeaveSpaceRoom.kt
@@ -11,4 +11,5 @@ package io.element.android.libraries.matrix.api.spaces
data class LeaveSpaceRoom(
val spaceRoom: SpaceRoom,
val isLastOwner: Boolean,
+ val areCreatorsPrivileged: Boolean,
)
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustLeaveSpaceHandle.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustLeaveSpaceHandle.kt
index 16b5186c92..9411aa0bf9 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustLeaveSpaceHandle.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustLeaveSpaceHandle.kt
@@ -41,6 +41,7 @@ class RustLeaveSpaceHandle(
LeaveSpaceRoom(
spaceRoom = spaceRoomMapper.map(leaveSpaceRoom.spaceRoom),
isLastOwner = leaveSpaceRoom.isLastOwner,
+ areCreatorsPrivileged = leaveSpaceRoom.areCreatorsPrivileged,
)
}
}
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_0_en.png
index 2c1b9ca8e0..cb07763549 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:51d8d0648c4fb58b7dc75ecc60d59a0a7abb5d79aee5f711f163b05f8188af87
-size 13970
+oid sha256:6a02edc97a1019920c4efa226b3f328ce12c9eb51c7ad29b524354a40d65c0ca
+size 14066
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_10_en.png
new file mode 100644
index 0000000000..56c4cf82cb
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_10_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:420a0602c83e35fc352b2357ac113b61b9c2ea6e4752b1ac75ac5c9f470466d6
+size 31569
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_1_en.png
index e5cee223db..68952b5ea8 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8f39bbc5e4ca32400555a3c934e18ca195f7d0c3d5d1e69753956a921e9ab017
-size 15873
+oid sha256:a65ebc58159ab95a2e8b9e7aedb1ce1113b26117c335e6a79c5944d78012d594
+size 15857
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_2_en.png
index 205ad9ef22..2da962c349 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:890519f50978232445ad53ff654ae53ee06a9811c4f93903c9b28edf4b922c04
-size 44357
+oid sha256:33f4f4c25d57bd0b71fbeb7f983c206c27932a3fdd0a2f8baac4a5d05ae7cd0e
+size 44267
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_3_en.png
index c1e295cab1..cd6a5f5723 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6e494e7ad96ca581fc24109d30eb45dc94ffc8f00a65e5c437958a723f50a5b3
-size 44247
+oid sha256:67ce94b2bbe6394230480a65cd57cfa8025052525ec0a477c49714a5b95b046e
+size 44688
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_4_en.png
index 0e2b81065a..b34ea22f97 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:def5cf57cdc01aecc58da2dc78a693d328db67ad1c67a80fcedcdad00ee658be
-size 35911
+oid sha256:f6fb03a992094eec5a88ec201f64e7773eebdea831c6eb75aa35e7b543386443
+size 36262
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_5_en.png
index 76a111f70b..a614eb4b01 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:be2282d9efed268e05ec6ab9f54b1f24260b4adc5ebc95ffd942bc30aeb075c7
-size 42642
+oid sha256:7b4967b0a0dc144e43a9a22d62affe132f5000d0fc312537445c90d32a3e6146
+size 42936
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_6_en.png
index 9ad785a01d..d98190351f 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:27d182389507043106053e120a8fb9f6dff6dd525bbb1da0043b74de84cd8309
-size 42196
+oid sha256:faffcd04f9cac0d4c3ce035c22851066c4d8ea90a547ab3014106256dde95bf1
+size 39677
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_7_en.png
index a0ac90c2a5..494a2f53bb 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:db70500bf818299ebe264a9ce3e600107b0b0d3ad4588c7ddb384b308b0a3f0e
-size 40173
+oid sha256:031c8b3ceef13ebbadbcd11a31e122e3862b105c3f9f2707664b4cd84b113644
+size 37240
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_8_en.png
index a32a6ae2bc..10c9a12938 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_8_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_8_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:969272a4544df5be09e42dadc3ae18b2526ec203947a74b5505c194a8c545351
-size 16560
+oid sha256:4deec322ce73460029b43e7f76d5ae1b2e1b9b038192367648b5e6dfb8bf9cd9
+size 16761
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_9_en.png
index 930061aba1..c00978df3b 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_9_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Day_9_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:08e629078ddc8fe761305d7e3b1ce22344187a9b6bf4e729b85cfc6c59d2fde2
-size 33271
+oid sha256:a5eb3f2d8e7a508ed1a6ea894915181180db2442cf6460c8a5a325bd5190ddf9
+size 33648
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_0_en.png
index 29fc6aebdf..ef0b50ab0c 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c3f33575c7ad3ba99f4e571b6e9810b48c79a23d462b7a2cb0a305f7f7f32307
-size 13919
+oid sha256:6fd460c22bc9822d0c85b3826753f5eb39670c98688d77890131be97b3b55229
+size 13942
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_10_en.png
new file mode 100644
index 0000000000..61651c16ab
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_10_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e9f06efd39f5e4ea6934bb9509fee07efe7ff77f83e993bfc31aeee8641a55a
+size 30894
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_1_en.png
index 93b3edb129..6738d18a7e 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b27e0253ee16c90b0ff9447366702b72b1abb4d19aa01cc521ff35206888c948
-size 15386
+oid sha256:c7c2812171bf4a27491aa677235ad4d56d6027a919001ebd8b44832d7c811482
+size 15430
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_2_en.png
index 3a4f89b5b5..7ae3036512 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5a3d199d941e84e0d70e18de23375629dedc9b74bc4bfed2d7353fc85f9fc496
-size 43143
+oid sha256:ceca65b246352957ec37506af8ac82022bfca136bde7f53db89c5756a8cdff21
+size 43211
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_3_en.png
index 6328d868e0..cb056dfa80 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f7e276ca863450e76ddbbc10ff6f22fc17c35bd6414a47a1ce33285a3f46b3c8
-size 42957
+oid sha256:f76d06da0abb8e63a2ab3d16acfbdb28653505e41e710712151918d888d72c2c
+size 43435
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_4_en.png
index f48ae7b759..fff856de16 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8cc5d0edd3dc205c3af67390a15697c020160294548ee96fb3d89c2a1e8706e0
-size 34940
+oid sha256:970ec46da6ab6358315bcea7ff7bd611811750c7e4edb437b804cf62bde9a55c
+size 35267
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_5_en.png
index 53a1d062df..b25adc281d 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c66c9ce57c7679b1f2b32c11789fc6050ee5d7ec251d77f35aefe988fd7d850f
-size 41627
+oid sha256:0a76a195966879b08238d4882de54aaf998d65e689b304cc586fbb0700408bac
+size 42020
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_6_en.png
index 3b3686d1b6..5dde62fc1b 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0648f116f14434da9708075d4a225d4d2b9fb8cdb55a61c217a2200ea5c3eb33
-size 40640
+oid sha256:fd1f1f8e203bcf4e9c3cd4a4c309fe70d94c67f8017188caa6ecc6e4a4ca5e0f
+size 38019
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_7_en.png
index 4384cbfe3c..a9dfa26518 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3cd90931fcccd226921e51efa78c026dfe5ca230b6ee56cf2236c2f4c5e1f7b5
-size 38134
+oid sha256:3e00026924d002f0838b172f098d7e44f6462f182c32f4b59a1282834ffe020a
+size 35018
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_8_en.png
index bfc370319f..48db20c14c 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_8_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_8_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ae93fc35355b1d16fb7be977bc49d2937da7b60f2ed76e2a184756b900afca17
-size 16435
+oid sha256:95db09b4af9f4dd225d5410d2a67fd9e2e8736c3ba9c803d6433093d0487b30a
+size 16502
diff --git a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_9_en.png
index e4293e23a2..bc5f3dccc2 100644
--- a/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_9_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.space.impl.leave_LeaveSpaceView_Night_9_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5fc7f07a583f9dedb887ca83c67543e904d7bab092ebf70e06bc5292bf1e95b3
-size 32414
+oid sha256:dbc6e69ee6acf4ba8c2753ae731fe2114076c530f9a0572f44dee665e15f4096
+size 32901