Skip to content

Commit d0f2677

Browse files
authored
Remove Room moderation feature flag (#2678)
* Remove the feature flag * Add changelog * Increase login timeout for Maestro
1 parent ecd2974 commit d0f2677

File tree

9 files changed

+6
-48
lines changed

9 files changed

+6
-48
lines changed

.maestro/tests/assertions/assertSessionVerificationDisplayed.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ appId: ${MAESTRO_APP_ID}
22
---
33
- extendedWaitUntil:
44
visible: "Confirm that it's you"
5-
timeout: 10000
5+
timeout: 20000

changelog.d/2678.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Enable room moderation feature.

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ class RoomDetailsPresenter @Inject constructor(
7878
val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } }
7979
val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } }
8080

81-
val isRoomModerationEnabled by produceState(initialValue = false) {
82-
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
83-
}
84-
8581
LaunchedEffect(Unit) {
8682
canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings)
8783
if (canShowNotificationSettings.value) {
@@ -147,7 +143,7 @@ class RoomDetailsPresenter @Inject constructor(
147143
leaveRoomState = leaveRoomState,
148144
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
149145
isFavorite = isFavorite,
150-
displayRolesAndPermissionsSettings = isRoomModerationEnabled && !room.isDm && isUserAdmin,
146+
displayRolesAndPermissionsSettings = !room.isDm && isUserAdmin,
151147
eventSink = ::handleEvents,
152148
)
153149
}

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.RoomMembe
3434
import io.element.android.libraries.architecture.Presenter
3535
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
3636
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
37-
import io.element.android.libraries.featureflag.api.FeatureFlagService
38-
import io.element.android.libraries.featureflag.api.FeatureFlags
3937
import io.element.android.libraries.matrix.api.room.MatrixRoom
4038
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
4139
import io.element.android.libraries.matrix.api.room.RoomMembershipState
@@ -50,7 +48,6 @@ class RoomMemberListPresenter @AssistedInject constructor(
5048
private val room: MatrixRoom,
5149
private val roomMemberListDataSource: RoomMemberListDataSource,
5250
private val coroutineDispatchers: CoroutineDispatchers,
53-
private val featureFlagService: FeatureFlagService,
5451
private val roomMembersModerationPresenter: RoomMembersModerationPresenter,
5552
@Assisted private val navigator: RoomMemberListNavigator,
5653
) : Presenter<RoomMemberListState> {
@@ -74,15 +71,7 @@ class RoomMemberListPresenter @AssistedInject constructor(
7471
value = room.canInvite().getOrElse { false }
7572
}
7673

77-
val isRoomModerationEnabled by produceState(initialValue = false) {
78-
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
79-
}
80-
81-
val roomModerationState = if (isRoomModerationEnabled) {
82-
roomMembersModerationPresenter.present()
83-
} else {
84-
remember { roomMembersModerationPresenter.dummyState() }
85-
}
74+
val roomModerationState = roomMembersModerationPresenter.present()
8675

8776
// Ensure we load the latest data when entering this screen
8877
LaunchedEffect(Unit) {

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/moderation/DefaultRoomMembersModerationPresenter.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ import io.element.android.libraries.architecture.runUpdatingState
3131
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
3232
import io.element.android.libraries.core.extensions.finally
3333
import io.element.android.libraries.di.RoomScope
34-
import io.element.android.libraries.featureflag.api.FeatureFlagService
35-
import io.element.android.libraries.featureflag.api.FeatureFlags
3634
import io.element.android.libraries.matrix.api.core.UserId
3735
import io.element.android.libraries.matrix.api.room.MatrixRoom
3836
import io.element.android.libraries.matrix.api.room.RoomMember
@@ -51,7 +49,6 @@ import javax.inject.Inject
5149
@ContributesBinding(RoomScope::class)
5250
class DefaultRoomMembersModerationPresenter @Inject constructor(
5351
private val room: MatrixRoom,
54-
private val featureFlagService: FeatureFlagService,
5552
private val dispatchers: CoroutineDispatchers,
5653
private val analyticsService: AnalyticsService,
5754
) : RoomMembersModerationPresenter {
@@ -61,9 +58,8 @@ class DefaultRoomMembersModerationPresenter @Inject constructor(
6158
private suspend fun canKick() = room.canKick().getOrDefault(false)
6259

6360
override suspend fun canDisplayModerationActions(): Boolean {
64-
val isRoomModerationEnabled = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
6561
val isDm = room.isDm && room.isEncrypted
66-
return isRoomModerationEnabled && !isDm && (canBan() || canKick())
62+
return !isDm && (canBan() || canKick())
6763
}
6864

6965
@Composable
@@ -76,7 +72,7 @@ class DefaultRoomMembersModerationPresenter @Inject constructor(
7672
val unbanUserAsyncAction = remember { mutableStateOf(AsyncAction.Uninitialized as AsyncAction<Unit>) }
7773

7874
val canDisplayBannedUsers by produceState(initialValue = false) {
79-
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration) && !room.isDm && canBan()
75+
value = !room.isDm && canBan()
8076
}
8177

8278
fun handleEvent(event: RoomMembersModerationEvents) {

features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/RoomMemberListPresenterTests.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.aRoomMemb
3232
import io.element.android.features.roomdetails.members.moderation.FakeRoomMembersModerationPresenter
3333
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
3434
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
35-
import io.element.android.libraries.featureflag.api.FeatureFlagService
36-
import io.element.android.libraries.featureflag.api.FeatureFlags
37-
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
3835
import io.element.android.libraries.matrix.api.core.UserId
3936
import io.element.android.libraries.matrix.api.room.MatrixRoom
4037
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
@@ -241,14 +238,12 @@ private fun TestScope.createPresenter(
241238
coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true),
242239
matrixRoom: MatrixRoom = FakeMatrixRoom(),
243240
roomMemberListDataSource: RoomMemberListDataSource = createDataSource(coroutineDispatchers = coroutineDispatchers),
244-
featureFlagService: FeatureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to true)),
245241
moderationPresenter: FakeRoomMembersModerationPresenter = FakeRoomMembersModerationPresenter(),
246242
navigator: RoomMemberListNavigator = object : RoomMemberListNavigator { }
247243
) = RoomMemberListPresenter(
248244
room = matrixRoom,
249245
roomMemberListDataSource = roomMemberListDataSource,
250246
coroutineDispatchers = coroutineDispatchers,
251-
featureFlagService = featureFlagService,
252247
roomMembersModerationPresenter = moderationPresenter,
253248
navigator = navigator
254249
)

features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/members/moderation/DefaultRoomMembersModerationPresenterTests.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.Moderatio
2828
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationEvents
2929
import io.element.android.libraries.architecture.AsyncAction
3030
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
31-
import io.element.android.libraries.featureflag.api.FeatureFlags
32-
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
3331
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
3432
import io.element.android.libraries.matrix.api.room.RoomMember
3533
import io.element.android.libraries.matrix.api.room.RoomMembershipState
@@ -45,13 +43,6 @@ import kotlinx.coroutines.test.runTest
4543
import org.junit.Test
4644

4745
class DefaultRoomMembersModerationPresenterTests {
48-
@Test
49-
fun `canDisplayModerationActions - when feature flag is disabled returns false`() = runTest {
50-
val featureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to false))
51-
val presenter = createDefaultRoomMembersModerationPresenter(featureFlagService = featureFlagService)
52-
assertThat(presenter.canDisplayModerationActions()).isFalse()
53-
}
54-
5546
@Test
5647
fun `canDisplayModerationActions - when room is DM is false`() = runTest {
5748
val room = FakeMatrixRoom(isDirect = true, isPublic = true, isOneToOne = true).apply {
@@ -309,13 +300,11 @@ class DefaultRoomMembersModerationPresenterTests {
309300

310301
private fun TestScope.createDefaultRoomMembersModerationPresenter(
311302
matrixRoom: FakeMatrixRoom = FakeMatrixRoom(),
312-
featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to true)),
313303
dispatchers: CoroutineDispatchers = testCoroutineDispatchers(),
314304
analyticsService: FakeAnalyticsService = FakeAnalyticsService(),
315305
): DefaultRoomMembersModerationPresenter {
316306
return DefaultRoomMembersModerationPresenter(
317307
room = matrixRoom,
318-
featureFlagService = featureFlagService,
319308
dispatchers = dispatchers,
320309
analyticsService = analyticsService,
321310
)

libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,6 @@ enum class FeatureFlags(
8282
defaultValue = true,
8383
isFinished = false,
8484
),
85-
RoomModeration(
86-
key = "feature.roomModeration",
87-
title = "Room moderation",
88-
description = "Add moderation features to the room for users with permissions",
89-
defaultValue = true,
90-
isFinished = false,
91-
),
9285
RoomDirectorySearch(
9386
key = "feature.roomdirectorysearch",
9487
title = "Room directory search",

libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class StaticFeatureFlagProvider @Inject constructor() :
4141
FeatureFlags.Mentions -> true
4242
FeatureFlags.MarkAsUnread -> true
4343
FeatureFlags.RoomListFilters -> true
44-
FeatureFlags.RoomModeration -> false
4544
FeatureFlags.RoomDirectorySearch -> false
4645
}
4746
} else {

0 commit comments

Comments
 (0)