diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt index 7322dbd961..644c3d1e03 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt @@ -23,4 +23,5 @@ sealed interface ConfigureRoomEvents { data class TopicChanged(val topic: String) : ConfigureRoomEvents data class AvatarUriChanged(val uri: Uri?) : ConfigureRoomEvents data class RoomPrivacyChanged(val privacy: RoomPrivacy?) : ConfigureRoomEvents + object CreateRoom : ConfigureRoomEvents } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt index 97871fb99a..c8bad29f93 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt @@ -43,6 +43,10 @@ class ConfigureRoomPresenter @AssistedInject constructor( var topic by rememberSaveable { mutableStateOf("") } var avatarUri by rememberSaveable { mutableStateOf(null) } var privacy by rememberSaveable { mutableStateOf(null) } + val isCreateButtonEnabled by rememberSaveable(roomName, privacy) { + val enabled = roomName.isNotEmpty() && privacy != null + mutableStateOf(enabled) + } fun handleEvents(event: ConfigureRoomEvents) { when (event) { @@ -50,6 +54,7 @@ class ConfigureRoomPresenter @AssistedInject constructor( is ConfigureRoomEvents.RoomNameChanged -> roomName = event.name is ConfigureRoomEvents.TopicChanged -> topic = event.topic is ConfigureRoomEvents.RoomPrivacyChanged -> privacy = event.privacy + ConfigureRoomEvents.CreateRoom -> Unit // TODO } } @@ -59,6 +64,7 @@ class ConfigureRoomPresenter @AssistedInject constructor( topic = topic, avatarUri = avatarUri, privacy = privacy, + isCreateButtonEnabled = isCreateButtonEnabled, eventSink = ::handleEvents, ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt index 643f01ef3e..23f5691267 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt @@ -26,5 +26,6 @@ data class ConfigureRoomState( val topic: String, val avatarUri: Uri?, val privacy: RoomPrivacy?, + val isCreateButtonEnabled: Boolean, val eventSink: (ConfigureRoomEvents) -> Unit ) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt index d097b0e599..3e4961f56a 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt @@ -24,7 +24,6 @@ open class ConfigureRoomStateProvider : PreviewParameterProvider get() = sequenceOf( aConfigureRoomState(), - // Add other state here ) } @@ -34,5 +33,6 @@ fun aConfigureRoomState() = ConfigureRoomState( topic = "", avatarUri = null, privacy = null, + isCreateButtonEnabled = false, eventSink = {} ) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt index 5b9b548ea3..6f56ae06ef 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt @@ -71,16 +71,15 @@ fun ConfigureRoomView( state: ConfigureRoomState, modifier: Modifier = Modifier, onBackPressed: () -> Unit = {}, - onCreatePressed: () -> Unit = {}, ) { val selectedUsersListState = rememberLazyListState() Scaffold( modifier = modifier, topBar = { ConfigureRoomToolbar( - isNextActionEnabled = false, + isNextActionEnabled = state.isCreateButtonEnabled, onBackPressed = onBackPressed, - onNextPressed = onCreatePressed, + onNextPressed = { state.eventSink(ConfigureRoomEvents.CreateRoom) }, ) } ) { padding -> @@ -326,6 +325,7 @@ fun RoomPrivacyOption( } } +// Move this composable to design module if we want to reuse it in other screens @Composable fun LabelledTextField( label: String,