Skip to content

Commit a2dd455

Browse files
authored
Merge pull request #5273 from element-hq/feature/bma/spaceNextStep
Space: add content in home screen
2 parents c903680 + d09bc71 commit a2dd455

File tree

146 files changed

+1298
-250
lines changed

Some content is hidden

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

146 files changed

+1298
-250
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
1818
import androidx.compose.runtime.setValue
1919
import dev.zacsweers.metro.Inject
2020
import io.element.android.features.home.impl.roomlist.RoomListState
21+
import io.element.android.features.home.impl.spaces.HomeSpacesState
2122
import io.element.android.features.logout.api.direct.DirectLogoutState
2223
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
2324
import io.element.android.libraries.architecture.Presenter
@@ -36,6 +37,7 @@ class HomePresenter(
3637
private val snackbarDispatcher: SnackbarDispatcher,
3738
private val indicatorService: IndicatorService,
3839
private val roomListPresenter: Presenter<RoomListState>,
40+
private val homeSpacesPresenter: Presenter<HomeSpacesState>,
3941
private val logoutPresenter: Presenter<DirectLogoutState>,
4042
private val rageshakeFeatureAvailability: RageshakeFeatureAvailability,
4143
private val featureFlagService: FeatureFlagService,
@@ -46,6 +48,7 @@ class HomePresenter(
4648
val isOnline by syncService.isOnline.collectAsState()
4749
val canReportBug by remember { rageshakeFeatureAvailability.isAvailable() }.collectAsState(false)
4850
val roomListState = roomListPresenter.present()
51+
val homeSpacesState = homeSpacesPresenter.present()
4952
val isSpaceFeatureEnabled by remember {
5053
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Space)
5154
}.collectAsState(initial = false)
@@ -78,6 +81,7 @@ class HomePresenter(
7881
hasNetworkConnection = isOnline,
7982
currentHomeNavigationBarItem = currentHomeNavigationBarItem,
8083
roomListState = roomListState,
84+
homeSpacesState = homeSpacesState,
8185
snackbarMessage = snackbarMessage,
8286
canReportBug = canReportBug,
8387
directLogoutState = directLogoutState,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.features.home.impl
99

1010
import androidx.compose.runtime.Immutable
1111
import io.element.android.features.home.impl.roomlist.RoomListState
12+
import io.element.android.features.home.impl.spaces.HomeSpacesState
1213
import io.element.android.features.logout.api.direct.DirectLogoutState
1314
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
1415
import io.element.android.libraries.matrix.api.user.MatrixUser
@@ -20,6 +21,7 @@ data class HomeState(
2021
val hasNetworkConnection: Boolean,
2122
val currentHomeNavigationBarItem: HomeNavigationBarItem,
2223
val roomListState: RoomListState,
24+
val homeSpacesState: HomeSpacesState,
2325
val snackbarMessage: SnackbarMessage?,
2426
val canReportBug: Boolean,
2527
val directLogoutState: DirectLogoutState,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import io.element.android.features.home.impl.roomlist.RoomListStateProvider
1313
import io.element.android.features.home.impl.roomlist.aRoomListState
1414
import io.element.android.features.home.impl.roomlist.aRoomsContentState
1515
import io.element.android.features.home.impl.roomlist.generateRoomListRoomSummaryList
16+
import io.element.android.features.home.impl.spaces.HomeSpacesState
17+
import io.element.android.features.home.impl.spaces.aHomeSpacesState
1618
import io.element.android.features.logout.api.direct.DirectLogoutState
1719
import io.element.android.features.logout.api.direct.aDirectLogoutState
1820
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
@@ -51,6 +53,7 @@ internal fun aHomeState(
5153
snackbarMessage: SnackbarMessage? = null,
5254
currentHomeNavigationBarItem: HomeNavigationBarItem = HomeNavigationBarItem.Chats,
5355
roomListState: RoomListState = aRoomListState(),
56+
homeSpacesState: HomeSpacesState = aHomeSpacesState(),
5457
canReportBug: Boolean = true,
5558
isSpaceFeatureEnabled: Boolean = false,
5659
directLogoutState: DirectLogoutState = aDirectLogoutState(),
@@ -64,6 +67,7 @@ internal fun aHomeState(
6467
directLogoutState = directLogoutState,
6568
currentHomeNavigationBarItem = currentHomeNavigationBarItem,
6669
roomListState = roomListState,
70+
homeSpacesState = homeSpacesState,
6771
isSpaceFeatureEnabled = isSpaceFeatureEnabled,
6872
eventSink = eventSink,
6973
)

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import androidx.compose.material3.rememberTopAppBarState
2525
import androidx.compose.runtime.Composable
2626
import androidx.compose.runtime.remember
2727
import androidx.compose.runtime.rememberCoroutineScope
28-
import androidx.compose.ui.Alignment
2928
import androidx.compose.ui.Modifier
3029
import androidx.compose.ui.graphics.Color
3130
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -50,6 +49,7 @@ import io.element.android.features.home.impl.roomlist.RoomListDeclineInviteMenu
5049
import io.element.android.features.home.impl.roomlist.RoomListEvents
5150
import io.element.android.features.home.impl.roomlist.RoomListState
5251
import io.element.android.features.home.impl.search.RoomListSearchView
52+
import io.element.android.features.home.impl.spaces.HomeSpacesView
5353
import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorContainer
5454
import io.element.android.libraries.androidutils.throttler.FirstThrottler
5555
import io.element.android.libraries.designsystem.preview.ElementPreview
@@ -61,7 +61,6 @@ import io.element.android.libraries.designsystem.theme.components.NavigationBarI
6161
import io.element.android.libraries.designsystem.theme.components.NavigationBarItem
6262
import io.element.android.libraries.designsystem.theme.components.NavigationBarText
6363
import io.element.android.libraries.designsystem.theme.components.Scaffold
64-
import io.element.android.libraries.designsystem.theme.components.Text
6564
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost
6665
import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState
6766
import io.element.android.libraries.matrix.api.core.RoomId
@@ -262,19 +261,17 @@ private fun HomeScaffold(
262261
)
263262
}
264263
HomeNavigationBarItem.Spaces -> {
265-
Box(
264+
HomeSpacesView(
266265
modifier = Modifier
267266
.fillMaxSize()
268267
.padding(padding)
269268
.consumeWindowInsets(padding)
270-
) {
271-
Text(
272-
modifier = Modifier.align(Alignment.Center),
273-
text = "Spaces are coming soon!",
274-
style = ElementTheme.typography.fontBodyLgRegular,
275-
color = ElementTheme.colors.textPrimary,
276-
)
277-
}
269+
.hazeSource(state = hazeState),
270+
state = state.homeSpacesState,
271+
onSpaceClick = { spaceId ->
272+
// TODO
273+
}
274+
)
278275
}
279276
}
280277
},

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,13 @@ import io.element.android.features.home.impl.model.RoomSummaryDisplayType
4545
import io.element.android.features.home.impl.roomlist.RoomListEvents
4646
import io.element.android.libraries.core.extensions.orEmpty
4747
import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom
48+
import io.element.android.libraries.designsystem.atomic.molecules.InviteButtonsRowMolecule
4849
import io.element.android.libraries.designsystem.components.avatar.Avatar
4950
import io.element.android.libraries.designsystem.components.avatar.AvatarType
5051
import io.element.android.libraries.designsystem.modifiers.onKeyboardContextMenuAction
5152
import io.element.android.libraries.designsystem.preview.ElementPreview
5253
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
53-
import io.element.android.libraries.designsystem.theme.components.Button
54-
import io.element.android.libraries.designsystem.theme.components.ButtonSize
5554
import io.element.android.libraries.designsystem.theme.components.Icon
56-
import io.element.android.libraries.designsystem.theme.components.OutlinedButton
5755
import io.element.android.libraries.designsystem.theme.components.Text
5856
import io.element.android.libraries.designsystem.theme.roomListRoomMessage
5957
import io.element.android.libraries.designsystem.theme.roomListRoomMessageDate
@@ -101,7 +99,7 @@ internal fun RoomSummaryRow(
10199
)
102100
}
103101
Spacer(modifier = Modifier.height(12.dp))
104-
InviteButtonsRow(
102+
InviteButtonsRowMolecule(
105103
onAcceptClick = {
106104
eventSink(RoomListEvents.AcceptInvite(room))
107105
},
@@ -346,31 +344,6 @@ private fun InviteNameAndIndicatorRow(
346344
}
347345
}
348346

349-
@Composable
350-
private fun InviteButtonsRow(
351-
onAcceptClick: () -> Unit,
352-
onDeclineClick: () -> Unit,
353-
modifier: Modifier = Modifier
354-
) {
355-
Row(
356-
modifier = modifier,
357-
horizontalArrangement = spacedBy(12.dp)
358-
) {
359-
OutlinedButton(
360-
text = stringResource(CommonStrings.action_decline),
361-
onClick = onDeclineClick,
362-
size = ButtonSize.MediumLowPadding,
363-
modifier = Modifier.weight(1f),
364-
)
365-
Button(
366-
text = stringResource(CommonStrings.action_accept),
367-
onClick = onAcceptClick,
368-
size = ButtonSize.MediumLowPadding,
369-
modifier = Modifier.weight(1f),
370-
)
371-
}
372-
}
373-
374347
@Composable
375348
private fun OnGoingCallIcon(
376349
color: Color,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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.features.home.impl.di
9+
10+
import dev.zacsweers.metro.BindingContainer
11+
import dev.zacsweers.metro.Binds
12+
import dev.zacsweers.metro.ContributesTo
13+
import io.element.android.features.home.impl.spaces.HomeSpacesPresenter
14+
import io.element.android.features.home.impl.spaces.HomeSpacesState
15+
import io.element.android.libraries.architecture.Presenter
16+
import io.element.android.libraries.di.SessionScope
17+
18+
@BindingContainer
19+
@ContributesTo(SessionScope::class)
20+
interface HomeSpacesModule {
21+
@Binds
22+
fun bindHomeSpacesPresenter(presenter: HomeSpacesPresenter): Presenter<HomeSpacesState>
23+
}

0 commit comments

Comments
 (0)