diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt index 037204bac6..553a60a185 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt @@ -96,7 +96,7 @@ class HomeFlowNode( val isNewOwnerSelected = changeRoomMemberRolesNode.waitForCompletion() withContext(NonCancellable) { backstack.pop() - if(isNewOwnerSelected) { + if (isNewOwnerSelected) { onNewOwnersSelected(changeRoomMemberRolesNode.roomId) } } diff --git a/features/rolesandpermissions/api/src/main/kotlin/io/element/android/features/rolesandpermissions/api/ChangeRoomMemberRolesEntryPoint.kt b/features/rolesandpermissions/api/src/main/kotlin/io/element/android/features/rolesandpermissions/api/ChangeRoomMemberRolesEntryPoint.kt index 52f0c7a7ba..5bc4bbfbdd 100644 --- a/features/rolesandpermissions/api/src/main/kotlin/io/element/android/features/rolesandpermissions/api/ChangeRoomMemberRolesEntryPoint.kt +++ b/features/rolesandpermissions/api/src/main/kotlin/io/element/android/features/rolesandpermissions/api/ChangeRoomMemberRolesEntryPoint.kt @@ -10,7 +10,6 @@ package io.element.android.features.rolesandpermissions.api import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import io.element.android.libraries.architecture.FeatureEntryPoint -import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.JoinedRoom diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/RolesAndPermissionsFlowNode.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/RolesAndPermissionsFlowNode.kt index 0c18a3c7a5..17453e4451 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/RolesAndPermissionsFlowNode.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/RolesAndPermissionsFlowNode.kt @@ -62,7 +62,7 @@ class RolesAndPermissionsFlowNode( data object ChangeModerators : NavTarget @Parcelize - data object ChangeRoomPermissions: NavTarget + data object ChangeRoomPermissions : NavTarget } private val asyncIndicatorState = AsyncIndicatorState() @@ -101,7 +101,6 @@ class RolesAndPermissionsFlowNode( override fun openEditPermissions() { backstack.push(NavTarget.ChangeRoomPermissions) } - } createNode( buildContext = buildContext, @@ -127,8 +126,6 @@ class RolesAndPermissionsFlowNode( } } - - @Composable override fun View(modifier: Modifier) { Box(modifier = modifier) { diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsNode.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsNode.kt index b53938914d..81716ab8c4 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsNode.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsNode.kt @@ -25,7 +25,6 @@ class ChangeRoomPermissionsNode( @Assisted plugins: List, private val presenter: ChangeRoomPermissionsPresenter, ) : Node(buildContext, plugins = plugins) { - interface Callback : Plugin { fun onComplete(changesSaved: Boolean) } diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenter.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenter.kt index e073a48171..a6d4eeefd4 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenter.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsPresenter.kt @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevelsValues import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -51,14 +51,22 @@ class ChangeRoomPermissionsPresenter( ) } - internal fun buildItems(forSpace: Boolean) = persistentMapOf( - RoomPermissionsSection.RoomDetails to itemsForSection(RoomPermissionsSection.RoomDetails), - RoomPermissionsSection.MessagesAndContent to itemsForSection(RoomPermissionsSection.MessagesAndContent), - RoomPermissionsSection.MembershipModeration to itemsForSection(RoomPermissionsSection.MembershipModeration), - ) + private fun RoomPermissionsSection.shouldShow(isSpace: Boolean): Boolean { + return when (this) { + RoomPermissionsSection.RoomDetails -> true + RoomPermissionsSection.MembershipModeration -> true + RoomPermissionsSection.MessagesAndContent -> !isSpace + } + } + + internal fun buildItems(isSpace: Boolean) = + RoomPermissionsSection.entries + .filter { section -> section.shouldShow(isSpace) } + .associateWith { itemsForSection(it) } + .toImmutableMap() } - private val items = buildItems(forSpace = room.info().isSpace) + private val itemsBySection = buildItems(isSpace = room.info().isSpace) private var initialPermissions by mutableStateOf(null) private var currentPermissions by mutableStateOf(null) @@ -112,7 +120,7 @@ class ChangeRoomPermissionsPresenter( } return ChangeRoomPermissionsState( currentPermissions = currentPermissions, - itemsBySection = items, + itemsBySection = itemsBySection, hasChanges = hasChanges, saveAction = saveAction, confirmExitAction = confirmExitAction, diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsState.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsState.kt index e91dd9fcb6..b1032e5fac 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsState.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/permissions/ChangeRoomPermissionsState.kt @@ -25,9 +25,9 @@ data class ChangeRoomPermissionsState( val saveAction: AsyncAction, val confirmExitAction: AsyncAction, val eventSink: (ChangeRoomPermissionsEvent) -> Unit, -){ +) { fun selectedRoleForType(type: RoomPermissionType): SelectableRole? { - if(currentPermissions == null) return null + if (currentPermissions == null) return null val role = when (type) { RoomPermissionType.BAN -> RoomMember.Role.forPowerLevel(currentPermissions.ban) RoomPermissionType.INVITE -> RoomMember.Role.forPowerLevel(currentPermissions.invite) @@ -38,14 +38,13 @@ data class ChangeRoomPermissionsState( RoomPermissionType.ROOM_AVATAR -> RoomMember.Role.forPowerLevel(currentPermissions.roomAvatar) RoomPermissionType.ROOM_TOPIC -> RoomMember.Role.forPowerLevel(currentPermissions.roomTopic) } - return when(role){ + return when (role) { is RoomMember.Role.Owner, RoomMember.Role.Admin -> SelectableRole.Admin RoomMember.Role.Moderator -> SelectableRole.Moderator RoomMember.Role.User -> SelectableRole.Everyone } } - } enum class RoomPermissionsSection { @@ -54,7 +53,7 @@ enum class RoomPermissionsSection { MembershipModeration, } -enum class SelectableRole: DropdownOption { +enum class SelectableRole : DropdownOption { Admin { @Composable @ReadOnlyComposable @@ -72,7 +71,6 @@ enum class SelectableRole: DropdownOption { } } - enum class RoomPermissionType { BAN, INVITE, diff --git a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt index fb97080221..e2049336a2 100644 --- a/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt +++ b/features/rolesandpermissions/impl/src/main/kotlin/io/element/android/features/rolesandpermissions/impl/roles/ChangeRolesPresenter.kt @@ -27,7 +27,6 @@ import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.designsystem.theme.components.SearchBarResultState -import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.RoomMember diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt index 84b108aa7f..389dc6c15b 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceDropdown.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MenuAnchorType import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf