Skip to content

Commit a497703

Browse files
authored
Merge pull request #5468 from element-hq/feature/fga/space_tweaks
Spaces : some tweaks around ui
2 parents 69c8623 + adb4828 commit a497703

File tree

59 files changed

+248
-173
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+248
-173
lines changed

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/HomeSpacesView.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,17 @@ fun HomeSpacesView(
3333
when (space) {
3434
CurrentSpace.Root -> {
3535
item {
36-
SpaceHeaderRootView(
37-
numberOfSpaces = state.spaceRooms.size,
38-
// TODO
39-
numberOfRooms = 0,
40-
)
36+
SpaceHeaderRootView(numberOfSpaces = state.spaceRooms.size)
4137
}
4238
}
4339
is CurrentSpace.Space -> item {
4440
SpaceHeaderView(
4541
avatarData = space.spaceRoom.getAvatarData(AvatarSize.SpaceHeader),
4642
name = space.spaceRoom.name,
4743
topic = space.spaceRoom.topic,
48-
joinRule = space.spaceRoom.joinRule,
44+
visibility = space.spaceRoom.visibility,
4945
heroes = space.spaceRoom.heroes.toImmutableList(),
5046
numberOfMembers = space.spaceRoom.numJoinedMembers,
51-
numberOfRooms = space.spaceRoom.childrenCount,
5247
)
5348
}
5449
}

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/SpaceRoomProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
3030
roomId = RoomId("!spaceId1:example.com"),
3131
),
3232
aSpaceRoom(
33-
name = null,
33+
rawName = null,
3434
numJoinedMembers = 5,
3535
childrenCount = 10,
3636
worldReadable = true,
@@ -39,7 +39,7 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
3939
state = CurrentUserMembership.INVITED,
4040
),
4141
aSpaceRoom(
42-
name = null,
42+
rawName = null,
4343
numJoinedMembers = 5,
4444
childrenCount = 10,
4545
worldReadable = true,

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ import io.element.android.libraries.designsystem.theme.components.TextField
7474
import io.element.android.libraries.designsystem.theme.components.TopAppBar
7575
import io.element.android.libraries.designsystem.theme.placeholderBackground
7676
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
77-
import io.element.android.libraries.matrix.api.room.join.JoinRule
77+
import io.element.android.libraries.matrix.api.spaces.SpaceRoomVisibility
7878
import io.element.android.libraries.matrix.ui.components.SpaceInfoRow
7979
import io.element.android.libraries.matrix.ui.components.SpaceMembersView
8080
import io.element.android.libraries.matrix.ui.model.InviteSender
@@ -567,10 +567,7 @@ private fun DefaultLoadedContent(
567567
subtitle = {
568568
when {
569569
contentState.details is LoadedDetails.Space -> {
570-
SpaceInfoRow(
571-
joinRule = contentState.joinRule ?: JoinRule.Public,
572-
numberOfRooms = contentState.details.childrenCount,
573-
)
570+
SpaceInfoRow(visibility = SpaceRoomVisibility.fromJoinRule(contentState.joinRule))
574571
}
575572
contentState.alias != null -> {
576573
RoomPreviewSubtitleAtom(contentState.alias.value)

features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
3030
persistentListOf(
3131
aSelectableSpaceRoom(
3232
spaceRoom = aSpaceRoom(
33-
name = "A long space name that should be truncated",
33+
rawName = "A long space name that should be truncated",
3434
worldReadable = true,
3535
),
3636
isLastAdmin = true,

features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceStateProvider.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInvit
1313
import io.element.android.libraries.architecture.AsyncAction
1414
import io.element.android.libraries.matrix.api.core.RoomId
1515
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
16+
import io.element.android.libraries.matrix.api.room.join.JoinRule
1617
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
1718
import io.element.android.libraries.previewutils.room.aSpaceRoom
19+
import kotlinx.collections.immutable.persistentListOf
1820
import kotlinx.collections.immutable.toImmutableList
1921
import kotlinx.collections.immutable.toImmutableMap
2022
import kotlinx.collections.immutable.toImmutableSet
@@ -25,7 +27,17 @@ open class SpaceStateProvider : PreviewParameterProvider<SpaceState> {
2527
aSpaceState(),
2628
aSpaceState(
2729
parentSpace = aSpaceRoom(
28-
name = null,
30+
joinRule = JoinRule.Public
31+
)
32+
),
33+
aSpaceState(
34+
parentSpace = aSpaceRoom(
35+
joinRule = JoinRule.Restricted(persistentListOf())
36+
)
37+
),
38+
aSpaceState(
39+
parentSpace = aSpaceRoom(
40+
rawName = null,
2941
numJoinedMembers = 5,
3042
childrenCount = 10,
3143
worldReadable = true,

features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,9 @@ private fun SpaceViewContent(
134134
avatarData = currentSpace.getAvatarData(AvatarSize.SpaceHeader),
135135
name = currentSpace.name,
136136
topic = currentSpace.topic,
137-
joinRule = currentSpace.joinRule,
137+
visibility = currentSpace.visibility,
138138
heroes = currentSpace.heroes.toImmutableList(),
139139
numberOfMembers = currentSpace.numJoinedMembers,
140-
numberOfRooms = currentSpace.childrenCount,
141140
)
142141
}
143142
}

features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpacePresenterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import org.junit.Test
2929
class LeaveSpacePresenterTest {
3030
private val aSpace = aSpaceRoom(
3131
roomId = A_SPACE_ID,
32-
name = A_SPACE_NAME,
32+
rawName = A_SPACE_NAME,
3333
)
3434

3535
@Test
@@ -198,7 +198,7 @@ class LeaveSpacePresenterTest {
198198
private fun aLeaveSpaceRoom(
199199
spaceRoom: SpaceRoom = aSpaceRoom(
200200
roomId = A_SPACE_ID,
201-
name = A_SPACE_NAME,
201+
rawName = A_SPACE_NAME,
202202
),
203203
isLastAdmin: Boolean = false,
204204
) = LeaveSpaceRoom(

features/space/impl/src/test/kotlin/io/element/android/features/space/impl/root/SpaceViewTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class SpaceViewTest {
5252

5353
@Test
5454
fun `clicking on a room name invokes the expected callback`() {
55-
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, name = A_ROOM_NAME)
55+
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, rawName = A_ROOM_NAME)
5656
val eventsRecorder = EventsRecorder<SpaceEvents>(expectEvents = false)
5757
ensureCalledOnceWithParam(aSpaceRoom) {
5858
rule.setSpaceView(

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/spaces/SpaceRoom.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.room.join.JoinRule
1515
import io.element.android.libraries.matrix.api.user.MatrixUser
1616

1717
data class SpaceRoom(
18-
val name: String?,
18+
val rawName: String?,
1919
val avatarUrl: String?,
2020
val canonicalAlias: RoomAlias?,
2121
val childrenCount: Int,
@@ -32,6 +32,20 @@ data class SpaceRoom(
3232
* The via parameters of the room.
3333
*/
3434
val via: List<String>,
35+
val isDirect: Boolean?,
3536
) {
3637
val isSpace = roomType == RoomType.Space
38+
39+
/**
40+
* Temporary logic to compute a name for direct rooms with no name.
41+
* This will be replaced by sdk logic in the future.
42+
*/
43+
val name = if (rawName == null && isDirect == true && heroes.size == 1) {
44+
val dmRecipient = heroes.first()
45+
dmRecipient.displayName
46+
} else {
47+
rawName
48+
}
49+
50+
val visibility = SpaceRoomVisibility.fromJoinRule(joinRule)
3751
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.api.spaces
9+
10+
import androidx.compose.runtime.Immutable
11+
import io.element.android.libraries.matrix.api.room.join.JoinRule
12+
@Immutable
13+
sealed interface SpaceRoomVisibility {
14+
data object Private : SpaceRoomVisibility
15+
data object Public : SpaceRoomVisibility
16+
data object Restricted : SpaceRoomVisibility
17+
18+
companion object {
19+
fun fromJoinRule(joinRule: JoinRule?): SpaceRoomVisibility = when (joinRule) {
20+
JoinRule.Public -> Public
21+
is JoinRule.Restricted, is JoinRule.KnockRestricted -> Restricted
22+
// Else fallback to Private
23+
else -> Private
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)