Remove Room moderation feature flag (#2678)
* Remove the feature flag * Add changelog * Increase login timeout for Maestro
This commit is contained in:
parent
a303c8951a
commit
fcf1e6be27
9 changed files with 6 additions and 48 deletions
|
|
@ -2,4 +2,4 @@ appId: ${MAESTRO_APP_ID}
|
||||||
---
|
---
|
||||||
- extendedWaitUntil:
|
- extendedWaitUntil:
|
||||||
visible: "Confirm that it's you"
|
visible: "Confirm that it's you"
|
||||||
timeout: 10000
|
timeout: 20000
|
||||||
|
|
|
||||||
1
changelog.d/2678.misc
Normal file
1
changelog.d/2678.misc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Enable room moderation feature.
|
||||||
|
|
@ -78,10 +78,6 @@ class RoomDetailsPresenter @Inject constructor(
|
||||||
val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } }
|
val roomTopic by remember { derivedStateOf { roomInfo?.topic ?: room.topic } }
|
||||||
val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } }
|
val isFavorite by remember { derivedStateOf { roomInfo?.isFavorite.orFalse() } }
|
||||||
|
|
||||||
val isRoomModerationEnabled by produceState(initialValue = false) {
|
|
||||||
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
|
|
||||||
}
|
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings)
|
canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings)
|
||||||
if (canShowNotificationSettings.value) {
|
if (canShowNotificationSettings.value) {
|
||||||
|
|
@ -147,7 +143,7 @@ class RoomDetailsPresenter @Inject constructor(
|
||||||
leaveRoomState = leaveRoomState,
|
leaveRoomState = leaveRoomState,
|
||||||
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
|
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
|
||||||
isFavorite = isFavorite,
|
isFavorite = isFavorite,
|
||||||
displayRolesAndPermissionsSettings = isRoomModerationEnabled && !room.isDm && isUserAdmin,
|
displayRolesAndPermissionsSettings = !room.isDm && isUserAdmin,
|
||||||
eventSink = ::handleEvents,
|
eventSink = ::handleEvents,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.RoomMembe
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
||||||
|
|
@ -50,7 +48,6 @@ class RoomMemberListPresenter @AssistedInject constructor(
|
||||||
private val room: MatrixRoom,
|
private val room: MatrixRoom,
|
||||||
private val roomMemberListDataSource: RoomMemberListDataSource,
|
private val roomMemberListDataSource: RoomMemberListDataSource,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
private val coroutineDispatchers: CoroutineDispatchers,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
private val roomMembersModerationPresenter: RoomMembersModerationPresenter,
|
private val roomMembersModerationPresenter: RoomMembersModerationPresenter,
|
||||||
@Assisted private val navigator: RoomMemberListNavigator,
|
@Assisted private val navigator: RoomMemberListNavigator,
|
||||||
) : Presenter<RoomMemberListState> {
|
) : Presenter<RoomMemberListState> {
|
||||||
|
|
@ -74,15 +71,7 @@ class RoomMemberListPresenter @AssistedInject constructor(
|
||||||
value = room.canInvite().getOrElse { false }
|
value = room.canInvite().getOrElse { false }
|
||||||
}
|
}
|
||||||
|
|
||||||
val isRoomModerationEnabled by produceState(initialValue = false) {
|
val roomModerationState = roomMembersModerationPresenter.present()
|
||||||
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
|
|
||||||
}
|
|
||||||
|
|
||||||
val roomModerationState = if (isRoomModerationEnabled) {
|
|
||||||
roomMembersModerationPresenter.present()
|
|
||||||
} else {
|
|
||||||
remember { roomMembersModerationPresenter.dummyState() }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure we load the latest data when entering this screen
|
// Ensure we load the latest data when entering this screen
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,6 @@ import io.element.android.libraries.architecture.runUpdatingState
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.core.extensions.finally
|
import io.element.android.libraries.core.extensions.finally
|
||||||
import io.element.android.libraries.di.RoomScope
|
import io.element.android.libraries.di.RoomScope
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||||
|
|
@ -51,7 +49,6 @@ import javax.inject.Inject
|
||||||
@ContributesBinding(RoomScope::class)
|
@ContributesBinding(RoomScope::class)
|
||||||
class DefaultRoomMembersModerationPresenter @Inject constructor(
|
class DefaultRoomMembersModerationPresenter @Inject constructor(
|
||||||
private val room: MatrixRoom,
|
private val room: MatrixRoom,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
private val dispatchers: CoroutineDispatchers,
|
private val dispatchers: CoroutineDispatchers,
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
) : RoomMembersModerationPresenter {
|
) : RoomMembersModerationPresenter {
|
||||||
|
|
@ -61,9 +58,8 @@ class DefaultRoomMembersModerationPresenter @Inject constructor(
|
||||||
private suspend fun canKick() = room.canKick().getOrDefault(false)
|
private suspend fun canKick() = room.canKick().getOrDefault(false)
|
||||||
|
|
||||||
override suspend fun canDisplayModerationActions(): Boolean {
|
override suspend fun canDisplayModerationActions(): Boolean {
|
||||||
val isRoomModerationEnabled = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration)
|
|
||||||
val isDm = room.isDm && room.isEncrypted
|
val isDm = room.isDm && room.isEncrypted
|
||||||
return isRoomModerationEnabled && !isDm && (canBan() || canKick())
|
return !isDm && (canBan() || canKick())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -76,7 +72,7 @@ class DefaultRoomMembersModerationPresenter @Inject constructor(
|
||||||
val unbanUserAsyncAction = remember { mutableStateOf(AsyncAction.Uninitialized as AsyncAction<Unit>) }
|
val unbanUserAsyncAction = remember { mutableStateOf(AsyncAction.Uninitialized as AsyncAction<Unit>) }
|
||||||
|
|
||||||
val canDisplayBannedUsers by produceState(initialValue = false) {
|
val canDisplayBannedUsers by produceState(initialValue = false) {
|
||||||
value = featureFlagService.isFeatureEnabled(FeatureFlags.RoomModeration) && !room.isDm && canBan()
|
value = !room.isDm && canBan()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: RoomMembersModerationEvents) {
|
fun handleEvent(event: RoomMembersModerationEvents) {
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.aRoomMemb
|
||||||
import io.element.android.features.roomdetails.members.moderation.FakeRoomMembersModerationPresenter
|
import io.element.android.features.roomdetails.members.moderation.FakeRoomMembersModerationPresenter
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
|
|
@ -241,14 +238,12 @@ private fun TestScope.createPresenter(
|
||||||
coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true),
|
coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true),
|
||||||
matrixRoom: MatrixRoom = FakeMatrixRoom(),
|
matrixRoom: MatrixRoom = FakeMatrixRoom(),
|
||||||
roomMemberListDataSource: RoomMemberListDataSource = createDataSource(coroutineDispatchers = coroutineDispatchers),
|
roomMemberListDataSource: RoomMemberListDataSource = createDataSource(coroutineDispatchers = coroutineDispatchers),
|
||||||
featureFlagService: FeatureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to true)),
|
|
||||||
moderationPresenter: FakeRoomMembersModerationPresenter = FakeRoomMembersModerationPresenter(),
|
moderationPresenter: FakeRoomMembersModerationPresenter = FakeRoomMembersModerationPresenter(),
|
||||||
navigator: RoomMemberListNavigator = object : RoomMemberListNavigator { }
|
navigator: RoomMemberListNavigator = object : RoomMemberListNavigator { }
|
||||||
) = RoomMemberListPresenter(
|
) = RoomMemberListPresenter(
|
||||||
room = matrixRoom,
|
room = matrixRoom,
|
||||||
roomMemberListDataSource = roomMemberListDataSource,
|
roomMemberListDataSource = roomMemberListDataSource,
|
||||||
coroutineDispatchers = coroutineDispatchers,
|
coroutineDispatchers = coroutineDispatchers,
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
roomMembersModerationPresenter = moderationPresenter,
|
roomMembersModerationPresenter = moderationPresenter,
|
||||||
navigator = navigator
|
navigator = navigator
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,6 @@ import io.element.android.features.roomdetails.impl.members.moderation.Moderatio
|
||||||
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationEvents
|
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationEvents
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
import io.element.android.libraries.matrix.api.room.RoomMembershipState
|
||||||
|
|
@ -45,13 +43,6 @@ import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class DefaultRoomMembersModerationPresenterTests {
|
class DefaultRoomMembersModerationPresenterTests {
|
||||||
@Test
|
|
||||||
fun `canDisplayModerationActions - when feature flag is disabled returns false`() = runTest {
|
|
||||||
val featureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to false))
|
|
||||||
val presenter = createDefaultRoomMembersModerationPresenter(featureFlagService = featureFlagService)
|
|
||||||
assertThat(presenter.canDisplayModerationActions()).isFalse()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `canDisplayModerationActions - when room is DM is false`() = runTest {
|
fun `canDisplayModerationActions - when room is DM is false`() = runTest {
|
||||||
val room = FakeMatrixRoom(isDirect = true, isPublic = true, isOneToOne = true).apply {
|
val room = FakeMatrixRoom(isDirect = true, isPublic = true, isOneToOne = true).apply {
|
||||||
|
|
@ -309,13 +300,11 @@ class DefaultRoomMembersModerationPresenterTests {
|
||||||
|
|
||||||
private fun TestScope.createDefaultRoomMembersModerationPresenter(
|
private fun TestScope.createDefaultRoomMembersModerationPresenter(
|
||||||
matrixRoom: FakeMatrixRoom = FakeMatrixRoom(),
|
matrixRoom: FakeMatrixRoom = FakeMatrixRoom(),
|
||||||
featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService(initialState = mapOf(FeatureFlags.RoomModeration.key to true)),
|
|
||||||
dispatchers: CoroutineDispatchers = testCoroutineDispatchers(),
|
dispatchers: CoroutineDispatchers = testCoroutineDispatchers(),
|
||||||
analyticsService: FakeAnalyticsService = FakeAnalyticsService(),
|
analyticsService: FakeAnalyticsService = FakeAnalyticsService(),
|
||||||
): DefaultRoomMembersModerationPresenter {
|
): DefaultRoomMembersModerationPresenter {
|
||||||
return DefaultRoomMembersModerationPresenter(
|
return DefaultRoomMembersModerationPresenter(
|
||||||
room = matrixRoom,
|
room = matrixRoom,
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
dispatchers = dispatchers,
|
dispatchers = dispatchers,
|
||||||
analyticsService = analyticsService,
|
analyticsService = analyticsService,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -82,13 +82,6 @@ enum class FeatureFlags(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
isFinished = false,
|
isFinished = false,
|
||||||
),
|
),
|
||||||
RoomModeration(
|
|
||||||
key = "feature.roomModeration",
|
|
||||||
title = "Room moderation",
|
|
||||||
description = "Add moderation features to the room for users with permissions",
|
|
||||||
defaultValue = true,
|
|
||||||
isFinished = false,
|
|
||||||
),
|
|
||||||
RoomDirectorySearch(
|
RoomDirectorySearch(
|
||||||
key = "feature.roomdirectorysearch",
|
key = "feature.roomdirectorysearch",
|
||||||
title = "Room directory search",
|
title = "Room directory search",
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ class StaticFeatureFlagProvider @Inject constructor() :
|
||||||
FeatureFlags.Mentions -> true
|
FeatureFlags.Mentions -> true
|
||||||
FeatureFlags.MarkAsUnread -> true
|
FeatureFlags.MarkAsUnread -> true
|
||||||
FeatureFlags.RoomListFilters -> true
|
FeatureFlags.RoomListFilters -> true
|
||||||
FeatureFlags.RoomModeration -> false
|
|
||||||
FeatureFlags.RoomDirectorySearch -> false
|
FeatureFlags.RoomDirectorySearch -> false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue