From b560b0443e6df3f77d92699671a735515d4ce017 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 15 Jan 2026 16:41:33 +0100 Subject: [PATCH] Move canEditSpaceGraph out of SettingsPermissions to his own Permissions --- .../space/impl/root/SpacePermissions.kt | 33 +++++++++++++++++++ .../space/impl/root/SpacePresenter.kt | 6 ++-- .../impl/settings/SpaceSettingsPermissions.kt | 4 --- 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePermissions.kt diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePermissions.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePermissions.kt new file mode 100644 index 0000000000..90ee8e27f1 --- /dev/null +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePermissions.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.features.space.impl.root + +import io.element.android.features.space.impl.settings.SpaceSettingsPermissions +import io.element.android.features.space.impl.settings.spaceSettingsPermissions +import io.element.android.libraries.matrix.api.room.StateEventType +import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions + +data class SpacePermissions( + val settingsPermissions: SpaceSettingsPermissions, + val canEditSpaceGraph: Boolean, +) { + companion object { + val DEFAULT = SpacePermissions( + settingsPermissions = SpaceSettingsPermissions.DEFAULT, + canEditSpaceGraph = false, + ) + } +} + +fun RoomPermissions.spacePermissions(): SpacePermissions { + return SpacePermissions( + settingsPermissions = spaceSettingsPermissions(), + canEditSpaceGraph = canOwnUserSendState(StateEventType.SpaceChild) || canOwnUserSendState(StateEventType.SpaceParent), + ) +} + diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt index 475920c0fc..9ca68e866f 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt @@ -92,8 +92,8 @@ class SpacePresenter( } }.collectAsState() - val permissions by room.permissionsAsState(SpaceSettingsPermissions.DEFAULT) { perms -> - perms.spaceSettingsPermissions() + val permissions by room.permissionsAsState(SpacePermissions.DEFAULT) { perms -> + perms.spacePermissions() } val isSpaceSettingsEnabled by remember { featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings) @@ -101,7 +101,7 @@ class SpacePresenter( val roomInfo by room.roomInfoFlow.collectAsState() val canAccessSpaceSettings by remember { - derivedStateOf { isSpaceSettingsEnabled && permissions.hasAny(roomInfo.joinRule) } + derivedStateOf { isSpaceSettingsEnabled && permissions.settingsPermissions.hasAny(roomInfo.joinRule) } } val currentSpace by spaceRoomList.currentSpaceFlow.collectAsState() val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap>()) } diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsPermissions.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsPermissions.kt index c02593f953..e3ec70a51d 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsPermissions.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/settings/SpaceSettingsPermissions.kt @@ -11,7 +11,6 @@ import io.element.android.features.roomdetailsedit.api.RoomDetailsEditPermission import io.element.android.features.roomdetailsedit.api.roomDetailsEditPermissions import io.element.android.features.securityandprivacy.api.SecurityAndPrivacyPermissions import io.element.android.features.securityandprivacy.api.securityAndPrivacyPermissions -import io.element.android.libraries.matrix.api.room.StateEventType import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions import io.element.android.libraries.matrix.api.room.powerlevels.canEditRolesAndPermissions @@ -20,7 +19,6 @@ data class SpaceSettingsPermissions( val editDetailsPermissions: RoomDetailsEditPermissions, val canEditRolesAndPermissions: Boolean, val securityAndPrivacyPermissions: SecurityAndPrivacyPermissions, - val canEditSpaceGraph: Boolean, ) { fun hasAny(joinRule: JoinRule?): Boolean { return editDetailsPermissions.hasAny || @@ -33,7 +31,6 @@ data class SpaceSettingsPermissions( editDetailsPermissions = RoomDetailsEditPermissions.DEFAULT, canEditRolesAndPermissions = false, securityAndPrivacyPermissions = SecurityAndPrivacyPermissions.DEFAULT, - canEditSpaceGraph = false, ) } } @@ -43,6 +40,5 @@ fun RoomPermissions.spaceSettingsPermissions(): SpaceSettingsPermissions { editDetailsPermissions = roomDetailsEditPermissions(), canEditRolesAndPermissions = canEditRolesAndPermissions(), securityAndPrivacyPermissions = securityAndPrivacyPermissions(), - canEditSpaceGraph = canOwnUserSendState(StateEventType.SpaceChild) || canOwnUserSendState(StateEventType.SpaceParent), ) }