diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt index 69fca57cb5..af2100ba0b 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpaceView.kt @@ -50,6 +50,7 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.space.impl.R import io.element.android.libraries.architecture.AsyncAction +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.molecules.InviteButtonsRowMolecule import io.element.android.libraries.designsystem.components.BigIcon @@ -76,6 +77,7 @@ import io.element.android.libraries.designsystem.theme.components.HorizontalDivi import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconSource +import io.element.android.libraries.designsystem.theme.components.OutlinedButton 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 @@ -170,6 +172,7 @@ fun SpaceView( state.eventSink(SpaceEvents.ShowTopicViewer(topic)) }, onCreateRoomClick = onCreateRoomClick, + onAddRoomClick = onAddRoomClick, ) JoinFailuresEffect( hasAnyFailure = state.hasAnyJoinFailures, @@ -243,6 +246,7 @@ private fun SpaceViewContent( onRoomClick: (spaceRoom: SpaceRoom) -> Unit, onTopicClick: (String) -> Unit, onCreateRoomClick: () -> Unit, + onAddRoomClick: ()->Unit, modifier: Modifier = Modifier, ) { LazyColumn(modifier.fillMaxSize()) { @@ -271,7 +275,10 @@ private fun SpaceViewContent( if (state.children.isEmpty() && state.canEditSpaceGraph && !state.hasMoreToLoad) { item { - EmptySpaceView(onCreateRoomClick = onCreateRoomClick) + EmptySpaceView( + onCreateRoomClick = onCreateRoomClick, + onAddRoomClick =onAddRoomClick, + ) } } else { itemsIndexed( @@ -332,7 +339,10 @@ private fun SpaceViewContent( } @Composable -private fun EmptySpaceView(onCreateRoomClick: () -> Unit) { +private fun EmptySpaceView( + onCreateRoomClick: () -> Unit, + onAddRoomClick: ()->Unit, +) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(bottom = 24.dp), @@ -340,15 +350,25 @@ private fun EmptySpaceView(onCreateRoomClick: () -> Unit) { IconTitleSubtitleMolecule( title = stringResource(R.string.screen_space_empty_state_title), subTitle = null, - iconStyle = BigIcon.Style.Default(CompoundIcons.Room()), + iconStyle = BigIcon.Style.Default(vectorIcon = CompoundIcons.Room(), usePrimaryTint = true), modifier = Modifier.fillMaxWidth() .padding(top = 40.dp, start = 24.dp, end = 24.dp, bottom = 24.dp), ) - Button( - text = stringResource(R.string.screen_space_add_room_action), - leadingIcon = IconSource.Vector(CompoundIcons.Plus()), - onClick = onCreateRoomClick, - ) + ButtonColumnMolecule( + modifier = Modifier.padding(horizontal = 16.dp) + ) { + Button( + text = stringResource(CommonStrings.action_add_existing_rooms), + leadingIcon = IconSource.Vector(CompoundIcons.Plus()), + onClick = onAddRoomClick, + modifier = Modifier.fillMaxWidth() + ) + OutlinedButton( + text = stringResource(CommonStrings.action_create_room), + onClick = onCreateRoomClick, + modifier = Modifier.fillMaxWidth() + ) + } } } diff --git a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/root/SpaceViewTest.kt b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/root/SpaceViewTest.kt index ec4d681a40..87343b6e34 100644 --- a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/root/SpaceViewTest.kt +++ b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/root/SpaceViewTest.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 -import io.element.android.features.space.impl.R import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.spaces.SpaceRoom @@ -215,9 +214,25 @@ class SpaceViewTest { ), onCreateRoomClick = onCreateRoomClick, ) - rule.clickOn(R.string.screen_space_add_room_action) + rule.clickOn(CommonStrings.action_create_room) onCreateRoomClick.assertions().isCalledOnce() } + + @Test + fun `clicking add existing room button calls the expected callback`() { + val onAddRoomClick = lambdaRecorder { } + rule.setSpaceView( + aSpaceState( + children = emptyList(), + hasMoreToLoad = false, + isManageMode = true, + canManageRooms = true, + ), + onAddRoomClick = onAddRoomClick, + ) + rule.clickOn(CommonStrings.action_add_existing_rooms) + onAddRoomClick.assertions().isCalledOnce() + } } private fun AndroidComposeTestRule.setSpaceView(