mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
misc: Provide ConfigureRoomState.availableVisibilityOptions from the presenter (#6024)
It seems better to handle the filtering logic there than on the view. Besides this, hide knocking for spaces even if the knocking feature is enabled. We don't want to have knocking in spaces yet.
This commit is contained in:
committed by
GitHub
parent
2e353848f9
commit
2c635c04a9
+9
-1
@@ -124,6 +124,14 @@ class ConfigureRoomPresenter(
|
|||||||
val localCoroutineScope = rememberCoroutineScope()
|
val localCoroutineScope = rememberCoroutineScope()
|
||||||
val createRoomAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
val createRoomAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
||||||
|
|
||||||
|
val availableVisibilityOptions = remember(isSpace, isKnockFeatureEnabled) {
|
||||||
|
listOfNotNull(
|
||||||
|
RoomVisibilityItem.Public,
|
||||||
|
RoomVisibilityItem.AskToJoin.takeIf { !isSpace && isKnockFeatureEnabled },
|
||||||
|
RoomVisibilityItem.Private,
|
||||||
|
).toImmutableList()
|
||||||
|
}
|
||||||
|
|
||||||
fun createRoom(config: CreateRoomConfig) {
|
fun createRoom(config: CreateRoomConfig) {
|
||||||
createRoomAction.value = AsyncAction.Uninitialized
|
createRoomAction.value = AsyncAction.Uninitialized
|
||||||
localCoroutineScope.createRoom(config, createRoomAction)
|
localCoroutineScope.createRoom(config, createRoomAction)
|
||||||
@@ -155,13 +163,13 @@ class ConfigureRoomPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ConfigureRoomState(
|
return ConfigureRoomState(
|
||||||
isKnockFeatureEnabled = isKnockFeatureEnabled,
|
|
||||||
config = createRoomConfig,
|
config = createRoomConfig,
|
||||||
avatarActions = avatarActions,
|
avatarActions = avatarActions,
|
||||||
createRoomAction = createRoomAction.value,
|
createRoomAction = createRoomAction.value,
|
||||||
cameraPermissionState = cameraPermissionState,
|
cameraPermissionState = cameraPermissionState,
|
||||||
homeserverName = homeserverName,
|
homeserverName = homeserverName,
|
||||||
roomAddressValidity = roomAddressValidity.value,
|
roomAddressValidity = roomAddressValidity.value,
|
||||||
|
availableVisibilityOptions = availableVisibilityOptions,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -16,13 +16,13 @@ import io.element.android.libraries.permissions.api.PermissionsState
|
|||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
|
||||||
data class ConfigureRoomState(
|
data class ConfigureRoomState(
|
||||||
val isKnockFeatureEnabled: Boolean,
|
|
||||||
val config: CreateRoomConfig,
|
val config: CreateRoomConfig,
|
||||||
val avatarActions: ImmutableList<AvatarAction>,
|
val avatarActions: ImmutableList<AvatarAction>,
|
||||||
val createRoomAction: AsyncAction<RoomId>,
|
val createRoomAction: AsyncAction<RoomId>,
|
||||||
val cameraPermissionState: PermissionsState,
|
val cameraPermissionState: PermissionsState,
|
||||||
val roomAddressValidity: RoomAddressValidity,
|
val roomAddressValidity: RoomAddressValidity,
|
||||||
val homeserverName: String,
|
val homeserverName: String,
|
||||||
|
val availableVisibilityOptions: ImmutableList<RoomVisibilityItem>,
|
||||||
val eventSink: (ConfigureRoomEvents) -> Unit
|
val eventSink: (ConfigureRoomEvents) -> Unit
|
||||||
) {
|
) {
|
||||||
val isValid: Boolean = config.roomName?.isNotEmpty() == true &&
|
val isValid: Boolean = config.roomName?.isNotEmpty() == true &&
|
||||||
|
|||||||
+4
-1
@@ -101,14 +101,17 @@ fun aConfigureRoomState(
|
|||||||
cameraPermissionState: PermissionsState = aPermissionsState(showDialog = false),
|
cameraPermissionState: PermissionsState = aPermissionsState(showDialog = false),
|
||||||
homeserverName: String = "matrix.org",
|
homeserverName: String = "matrix.org",
|
||||||
roomAddressValidity: RoomAddressValidity = RoomAddressValidity.Valid,
|
roomAddressValidity: RoomAddressValidity = RoomAddressValidity.Valid,
|
||||||
|
availableVisibilityOptions: List<RoomVisibilityItem> = RoomVisibilityItem.entries.filter {
|
||||||
|
if (!isKnockFeatureEnabled) it != RoomVisibilityItem.AskToJoin else true
|
||||||
|
},
|
||||||
eventSink: (ConfigureRoomEvents) -> Unit = { },
|
eventSink: (ConfigureRoomEvents) -> Unit = { },
|
||||||
) = ConfigureRoomState(
|
) = ConfigureRoomState(
|
||||||
config = config,
|
config = config,
|
||||||
isKnockFeatureEnabled = isKnockFeatureEnabled,
|
|
||||||
avatarActions = avatarActions.toImmutableList(),
|
avatarActions = avatarActions.toImmutableList(),
|
||||||
createRoomAction = createRoomAction,
|
createRoomAction = createRoomAction,
|
||||||
cameraPermissionState = cameraPermissionState,
|
cameraPermissionState = cameraPermissionState,
|
||||||
homeserverName = homeserverName,
|
homeserverName = homeserverName,
|
||||||
roomAddressValidity = roomAddressValidity,
|
roomAddressValidity = roomAddressValidity,
|
||||||
|
availableVisibilityOptions = availableVisibilityOptions.toImmutableList(),
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|||||||
+4
-7
@@ -65,6 +65,7 @@ import io.element.android.libraries.matrix.ui.components.AvatarPickerView
|
|||||||
import io.element.android.libraries.matrix.ui.room.address.RoomAddressField
|
import io.element.android.libraries.matrix.ui.room.address.RoomAddressField
|
||||||
import io.element.android.libraries.permissions.api.PermissionsView
|
import io.element.android.libraries.permissions.api.PermissionsView
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlin.jvm.optionals.getOrNull
|
import kotlin.jvm.optionals.getOrNull
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -120,6 +121,7 @@ fun ConfigureRoomView(
|
|||||||
)
|
)
|
||||||
|
|
||||||
RoomVisibilityAndAccessOptions(
|
RoomVisibilityAndAccessOptions(
|
||||||
|
options = state.availableVisibilityOptions,
|
||||||
selected = when (state.config.roomVisibility) {
|
selected = when (state.config.roomVisibility) {
|
||||||
is RoomVisibilityState.Private -> RoomVisibilityItem.Private
|
is RoomVisibilityState.Private -> RoomVisibilityItem.Private
|
||||||
is RoomVisibilityState.Public -> when (state.config.roomVisibility.roomAccess) {
|
is RoomVisibilityState.Public -> when (state.config.roomVisibility.roomAccess) {
|
||||||
@@ -127,7 +129,6 @@ fun ConfigureRoomView(
|
|||||||
RoomAccess.Anyone -> RoomVisibilityItem.Public
|
RoomAccess.Anyone -> RoomVisibilityItem.Public
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isKnockingEnabled = state.isKnockFeatureEnabled,
|
|
||||||
onOptionClick = {
|
onOptionClick = {
|
||||||
focusManager.clearFocus()
|
focusManager.clearFocus()
|
||||||
state.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(it))
|
state.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(it))
|
||||||
@@ -279,8 +280,8 @@ private fun ConfigureRoomOptions(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun RoomVisibilityAndAccessOptions(
|
private fun RoomVisibilityAndAccessOptions(
|
||||||
|
options: ImmutableList<RoomVisibilityItem>,
|
||||||
selected: RoomVisibilityItem,
|
selected: RoomVisibilityItem,
|
||||||
isKnockingEnabled: Boolean,
|
|
||||||
onOptionClick: (RoomVisibilityItem) -> Unit,
|
onOptionClick: (RoomVisibilityItem) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
@@ -288,11 +289,7 @@ private fun RoomVisibilityAndAccessOptions(
|
|||||||
title = stringResource(R.string.screen_create_room_room_access_section_title),
|
title = stringResource(R.string.screen_create_room_room_access_section_title),
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
) {
|
) {
|
||||||
RoomVisibilityItem.entries.forEach { item ->
|
options.forEach { item ->
|
||||||
if (item == RoomVisibilityItem.AskToJoin && !isKnockingEnabled) {
|
|
||||||
return@forEach
|
|
||||||
}
|
|
||||||
|
|
||||||
val isSelected = item == selected
|
val isSelected = item == selected
|
||||||
ListItem(
|
ListItem(
|
||||||
leadingContent = ListItemContent.Custom {
|
leadingContent = ListItemContent.Custom {
|
||||||
|
|||||||
Reference in New Issue
Block a user