From 3e564206485467364162f4017a1588f0cfa887a0 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 6 Mar 2024 09:51:43 +0100 Subject: [PATCH] Add room moderation feature flag (#2495) --- .../features/roomdetails/impl/RoomDetailsPresenter.kt | 6 +++++- .../android/features/roomdetails/impl/RoomDetailsState.kt | 2 +- .../features/roomdetails/impl/RoomDetailsStateProvider.kt | 2 +- .../android/features/roomdetails/impl/RoomDetailsView.kt | 2 +- .../android/libraries/featureflag/api/FeatureFlags.kt | 7 +++++++ .../featureflag/impl/StaticFeatureFlagProvider.kt | 1 + 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 6fef4a59bb..ad7b4569c8 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -80,6 +80,10 @@ class RoomDetailsPresenter @Inject constructor( val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } } val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } } + val isRoomModerationEnabled by produceState(initialValue = false) { + value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration) + } + LaunchedEffect(Unit) { canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings) if (canShowNotificationSettings.value) { @@ -152,7 +156,7 @@ class RoomDetailsPresenter @Inject constructor( leaveRoomState = leaveRoomState, roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(), isFavorite = isFavorite, - displayAdminSettings = !room.isDm && isUserAdmin, + displayRolesAndPermissionsSettings = isRoomModerationEnabled && !room.isDm && isUserAdmin, eventSink = ::handleEvents, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 95f90e2c70..f5abc5bcce 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -37,7 +37,7 @@ data class RoomDetailsState( val leaveRoomState: LeaveRoomState, val roomNotificationSettings: RoomNotificationSettings?, val isFavorite: Boolean, - val displayAdminSettings: Boolean, + val displayRolesAndPermissionsSettings: Boolean, val eventSink: (RoomDetailsEvent) -> Unit ) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt index 5cd57b42c9..06b7ea7be7 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt @@ -110,7 +110,7 @@ fun aRoomDetailsState( leaveRoomState = leaveRoomState, roomNotificationSettings = roomNotificationSettings, isFavorite = isFavorite, - displayAdminSettings = displayAdminSettings, + displayRolesAndPermissionsSettings = displayAdminSettings, eventSink = eventSink ) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index d1f2f82fce..06ea4d5b2b 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -176,7 +176,7 @@ fun RoomDetailsView( } ) - if (state.displayAdminSettings) { + if (state.displayRolesAndPermissionsSettings) { ListItem( headlineContent = { Text("Roles and permissions") }, leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Admin())), diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 82c4375872..a242d014d1 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -82,4 +82,11 @@ enum class FeatureFlags( defaultValue = true, isFinished = false, ), + RoomModeration( + key = "feature.roomModeration", + title = "Room moderation", + description = "Add moderation features to the room for users with permissions", + defaultValue = true, + isFinished = false, + ), } diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt index c5f868ccc3..f7deeb85e3 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt @@ -41,6 +41,7 @@ class StaticFeatureFlagProvider @Inject constructor() : FeatureFlags.Mentions -> true FeatureFlags.MarkAsUnread -> false FeatureFlags.RoomListFilters -> false + FeatureFlags.RoomModeration -> false } } else { false