Add empty create room fab button

This commit is contained in:
Florian Renaud 2023-02-28 18:07:34 +01:00
parent c135d2a13c
commit 7fbab8939b
3 changed files with 29 additions and 2 deletions

View file

@ -31,6 +31,7 @@ import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.node.node import com.bumble.appyx.core.node.node
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.features.createroom.CreateRoomNode
import io.element.android.features.preferences.PreferencesFlowNode import io.element.android.features.preferences.PreferencesFlowNode
import io.element.android.features.roomlist.RoomListNode import io.element.android.features.roomlist.RoomListNode
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
@ -86,6 +87,10 @@ class LoggedInFlowNode(
override fun onSettingsClicked() { override fun onSettingsClicked() {
backstack.push(NavTarget.Settings) backstack.push(NavTarget.Settings)
} }
override fun onCreateRoomClicked() {
backstack.push(NavTarget.CreateRoom)
}
} }
sealed interface NavTarget : Parcelable { sealed interface NavTarget : Parcelable {
@ -97,6 +102,9 @@ class LoggedInFlowNode(
@Parcelize @Parcelize
object Settings : NavTarget object Settings : NavTarget
@Parcelize
object CreateRoom : NavTarget
} }
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
@ -120,6 +128,9 @@ class LoggedInFlowNode(
NavTarget.Settings -> { NavTarget.Settings -> {
PreferencesFlowNode(buildContext, onOpenBugReport) PreferencesFlowNode(buildContext, onOpenBugReport)
} }
NavTarget.CreateRoom -> {
CreateRoomNode(buildContext)
}
} }
} }

View file

@ -38,6 +38,7 @@ class RoomListNode @AssistedInject constructor(
interface Callback : Plugin { interface Callback : Plugin {
fun onRoomClicked(roomId: RoomId) fun onRoomClicked(roomId: RoomId)
fun onSettingsClicked() fun onSettingsClicked()
fun onCreateRoomClicked()
} }
private fun onRoomClicked(roomId: RoomId) { private fun onRoomClicked(roomId: RoomId) {
@ -48,6 +49,10 @@ class RoomListNode @AssistedInject constructor(
plugins<Callback>().forEach { it.onSettingsClicked() } plugins<Callback>().forEach { it.onSettingsClicked() }
} }
private fun onCreateRoomClicked() {
plugins<Callback>().forEach { it.onCreateRoomClicked() }
}
@Composable @Composable
override fun View(modifier: Modifier) { override fun View(modifier: Modifier) {
val state = presenter.present() val state = presenter.present()
@ -55,7 +60,8 @@ class RoomListNode @AssistedInject constructor(
state = state, state = state,
modifier = modifier, modifier = modifier,
onRoomClicked = this::onRoomClicked, onRoomClicked = this::onRoomClicked,
onOpenSettings = this::onOpenSettings onOpenSettings = this::onOpenSettings,
onCreateRoomClicked = this::onCreateRoomClicked,
) )
} }
} }

View file

@ -22,6 +22,7 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FabPosition
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -42,6 +43,7 @@ import io.element.android.features.roomlist.model.RoomListState
import io.element.android.features.roomlist.model.RoomListStateProvider import io.element.android.features.roomlist.model.RoomListStateProvider
import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.components.FloatingActionButton
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.designsystem.utils.LogCompositions
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
@ -54,6 +56,7 @@ fun RoomListView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
onRoomClicked: (RoomId) -> Unit = {}, onRoomClicked: (RoomId) -> Unit = {},
onOpenSettings: () -> Unit = {}, onOpenSettings: () -> Unit = {},
onCreateRoomClicked: () -> Unit = {},
) { ) {
fun onFilterChanged(filter: String) { fun onFilterChanged(filter: String) {
state.eventSink(RoomListEvents.UpdateFilter(filter)) state.eventSink(RoomListEvents.UpdateFilter(filter))
@ -72,6 +75,7 @@ fun RoomListView(
onFilterChanged = ::onFilterChanged, onFilterChanged = ::onFilterChanged,
onOpenSettings = onOpenSettings, onOpenSettings = onOpenSettings,
onScrollOver = ::onVisibleRangedChanged, onScrollOver = ::onVisibleRangedChanged,
onCreateRoomClicked = onCreateRoomClicked,
) )
} }
@ -86,6 +90,7 @@ fun RoomListContent(
onFilterChanged: (String) -> Unit = {}, onFilterChanged: (String) -> Unit = {},
onOpenSettings: () -> Unit = {}, onOpenSettings: () -> Unit = {},
onScrollOver: (IntRange) -> Unit = {}, onScrollOver: (IntRange) -> Unit = {},
onCreateRoomClicked: () -> Unit = {},
) { ) {
fun onRoomClicked(room: RoomListRoomSummary) { fun onRoomClicked(room: RoomListRoomSummary) {
onRoomClicked(room.roomId) onRoomClicked(room.roomId)
@ -148,7 +153,12 @@ fun RoomListContent(
} }
} }
} }
} },
floatingActionButton = {
FloatingActionButton(onClick = onCreateRoomClicked) {
}
},
) )
} }