Remove FF SpaceSettings

This commit is contained in:
Benoit Marty 2026-04-09 10:54:54 +02:00
parent cac4dad920
commit 2a1f706591
7 changed files with 4 additions and 61 deletions

View file

@ -78,9 +78,6 @@ class SecurityAndPrivacyPresenter(
val isKnockEnabled by remember { val isKnockEnabled by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock) featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock)
}.collectAsState(false) }.collectAsState(false)
val isSpaceSettingsEnabled by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings)
}.collectAsState(false)
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) } val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
val homeserverName = remember { matrixClient.userIdServerName() } val homeserverName = remember { matrixClient.userIdServerName() }
@ -248,7 +245,6 @@ class SecurityAndPrivacyPresenter(
saveAction = saveAction.value, saveAction = saveAction.value,
permissions = permissions, permissions = permissions,
isSpace = roomInfo.isSpace, isSpace = roomInfo.isSpace,
isSpaceSettingsEnabled = isSpaceSettingsEnabled,
selectableJoinedSpaces = selectableJoinedSpaces, selectableJoinedSpaces = selectableJoinedSpaces,
spaceSelectionMode = spaceSelectionMode, spaceSelectionMode = spaceSelectionMode,
eventSink = ::handleEvent, eventSink = ::handleEvent,

View file

@ -29,7 +29,6 @@ data class SecurityAndPrivacyState(
val homeserverName: String, val homeserverName: String,
val showEnableEncryptionConfirmation: Boolean, val showEnableEncryptionConfirmation: Boolean,
private val isKnockEnabled: Boolean, private val isKnockEnabled: Boolean,
private val isSpaceSettingsEnabled: Boolean,
val saveAction: AsyncAction<Unit>, val saveAction: AsyncAction<Unit>,
val isSpace: Boolean, val isSpace: Boolean,
private val permissions: SecurityAndPrivacyPermissions, private val permissions: SecurityAndPrivacyPermissions,
@ -37,7 +36,7 @@ data class SecurityAndPrivacyState(
private val spaceSelectionMode: SpaceSelectionMode, private val spaceSelectionMode: SpaceSelectionMode,
val eventSink: (SecurityAndPrivacyEvent) -> Unit val eventSink: (SecurityAndPrivacyEvent) -> Unit
) { ) {
val isSpaceMemberSelectable = isSpaceSettingsEnabled && spaceSelectionMode != SpaceSelectionMode.None val isSpaceMemberSelectable = spaceSelectionMode != SpaceSelectionMode.None
// Show SpaceMember option in two cases: // Show SpaceMember option in two cases:
// - SpaceMember is the current saved value // - SpaceMember is the current saved value

View file

@ -138,7 +138,6 @@ fun aSecurityAndPrivacyState(
isSpace: Boolean = false, isSpace: Boolean = false,
selectableJoinedSpaces: Set<SpaceRoom> = emptySet(), selectableJoinedSpaces: Set<SpaceRoom> = emptySet(),
spaceSelectionMode: SpaceSelectionMode = SpaceSelectionMode.None, spaceSelectionMode: SpaceSelectionMode = SpaceSelectionMode.None,
isSpaceSettingsEnabled: Boolean = true,
eventSink: (SecurityAndPrivacyEvent) -> Unit = {} eventSink: (SecurityAndPrivacyEvent) -> Unit = {}
) = SecurityAndPrivacyState( ) = SecurityAndPrivacyState(
editedSettings = editedSettings, editedSettings = editedSettings,
@ -151,6 +150,5 @@ fun aSecurityAndPrivacyState(
isSpace = isSpace, isSpace = isSpace,
selectableJoinedSpaces = selectableJoinedSpaces.toImmutableSet(), selectableJoinedSpaces = selectableJoinedSpaces.toImmutableSet(),
spaceSelectionMode = spaceSelectionMode, spaceSelectionMode = spaceSelectionMode,
isSpaceSettingsEnabled = isSpaceSettingsEnabled,
eventSink = eventSink, eventSink = eventSink,
) )

View file

@ -416,11 +416,6 @@ class SecurityAndPrivacyPresenterTest {
val presenter = createSecurityAndPrivacyPresenter( val presenter = createSecurityAndPrivacyPresenter(
room = room, room = room,
matrixClient = client, matrixClient = client,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(
FeatureFlags.SpaceSettings.key to true,
)
)
) )
presenter.test { presenter.test {
skipItems(1) skipItems(1)
@ -461,11 +456,6 @@ class SecurityAndPrivacyPresenterTest {
room = room, room = room,
navigator = navigator, navigator = navigator,
matrixClient = client, matrixClient = client,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(
FeatureFlags.SpaceSettings.key to true,
)
)
) )
presenter.test { presenter.test {
skipItems(1) skipItems(1)
@ -587,7 +577,6 @@ class SecurityAndPrivacyPresenterTest {
featureFlagService = FakeFeatureFlagService( featureFlagService = FakeFeatureFlagService(
initialState = mapOf( initialState = mapOf(
FeatureFlags.Knock.key to true, FeatureFlags.Knock.key to true,
FeatureFlags.SpaceSettings.key to true,
) )
) )
) )
@ -633,7 +622,6 @@ class SecurityAndPrivacyPresenterTest {
featureFlagService = FakeFeatureFlagService( featureFlagService = FakeFeatureFlagService(
initialState = mapOf( initialState = mapOf(
FeatureFlags.Knock.key to true, FeatureFlags.Knock.key to true,
FeatureFlags.SpaceSettings.key to true,
) )
) )
) )
@ -859,9 +847,6 @@ class SecurityAndPrivacyPresenterTest {
val presenter = createSecurityAndPrivacyPresenter( val presenter = createSecurityAndPrivacyPresenter(
room = room, room = room,
matrixClient = client, matrixClient = client,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(FeatureFlags.SpaceSettings.key to true)
)
) )
presenter.test { presenter.test {
skipItems(1) skipItems(1)
@ -901,9 +886,6 @@ class SecurityAndPrivacyPresenterTest {
val presenter = createSecurityAndPrivacyPresenter( val presenter = createSecurityAndPrivacyPresenter(
room = room, room = room,
matrixClient = client, matrixClient = client,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(FeatureFlags.SpaceSettings.key to true)
)
) )
presenter.test { presenter.test {
skipItems(1) skipItems(1)
@ -975,7 +957,6 @@ class SecurityAndPrivacyPresenterTest {
featureFlagService = FakeFeatureFlagService( featureFlagService = FakeFeatureFlagService(
initialState = mapOf( initialState = mapOf(
FeatureFlags.Knock.key to true, FeatureFlags.Knock.key to true,
FeatureFlags.SpaceSettings.key to true,
) )
) )
) )

View file

@ -29,8 +29,6 @@ import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.mapState import io.element.android.libraries.core.coroutine.mapState
import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.di.annotations.SessionCoroutineScope
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.featureflag.api.FeatureFlags
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
@ -66,7 +64,6 @@ class SpacePresenter(
private val joinRoom: JoinRoom, private val joinRoom: JoinRoom,
private val acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState>, private val acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState>,
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
private val featureFlagService: FeatureFlagService,
private val spaceService: SpaceService, private val spaceService: SpaceService,
) : Presenter<SpaceState> { ) : Presenter<SpaceState> {
private var children by mutableStateOf<ImmutableList<SpaceRoom>>(persistentListOf()) private var children by mutableStateOf<ImmutableList<SpaceRoom>>(persistentListOf())
@ -99,16 +96,13 @@ class SpacePresenter(
val permissions by room.permissionsAsState(SpacePermissions.DEFAULT) { perms -> val permissions by room.permissionsAsState(SpacePermissions.DEFAULT) { perms ->
perms.spacePermissions() perms.spacePermissions()
} }
val isSpaceSettingsEnabled by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.SpaceSettings)
}.collectAsState(false)
val roomInfo by room.roomInfoFlow.collectAsState() val roomInfo by room.roomInfoFlow.collectAsState()
val canAccessSpaceSettings by remember { val canAccessSpaceSettings by remember {
derivedStateOf { isSpaceSettingsEnabled && permissions.settingsPermissions.hasAny(roomInfo.joinRule) } derivedStateOf { permissions.settingsPermissions.hasAny(roomInfo.joinRule) }
} }
val canEditSpaceGraph by remember { val canEditSpaceGraph by remember {
derivedStateOf { isSpaceSettingsEnabled && permissions.canEditSpaceGraph } derivedStateOf { permissions.canEditSpaceGraph }
} }
val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap<RoomId, AsyncAction<Unit>>()) } val (joinActions, setJoinActions) = remember { mutableStateOf(emptyMap<RoomId, AsyncAction<Unit>>()) }

View file

@ -19,8 +19,6 @@ import io.element.android.features.invite.api.toInviteData
import io.element.android.features.invite.test.InMemorySeenInvitesStore import io.element.android.features.invite.test.InMemorySeenInvitesStore
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.featureflag.api.FeatureFlags
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
@ -75,16 +73,7 @@ class SpacePresenterTest {
} }
@Test @Test
fun `present - canAccessSpaceSettings false when space settings ff is enabled but no permissions`() = runTest { fun `present - canAccessSpaceSettings true when has permissions`() = runTest {
val presenter = createSpacePresenter(spaceSettingsEnabled = true)
presenter.test {
val state = awaitItem()
assertThat(state.canAccessSpaceSettings).isFalse()
}
}
@Test
fun `present - canAccessSpaceSettings true when space settings ff is enabled and has permissions`() = runTest {
val room = FakeBaseRoom( val room = FakeBaseRoom(
roomPermissions = FakeRoomPermissions( roomPermissions = FakeRoomPermissions(
canSendState = { true } canSendState = { true }
@ -92,7 +81,6 @@ class SpacePresenterTest {
) )
val presenter = createSpacePresenter( val presenter = createSpacePresenter(
room = room, room = room,
spaceSettingsEnabled = true,
) )
presenter.test { presenter.test {
skipItems(1) skipItems(1)
@ -627,7 +615,6 @@ class SpacePresenterTest {
lambda = { _, _, _ -> Result.success(Unit) }, lambda = { _, _, _ -> Result.success(Unit) },
), ),
acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState> = Presenter { anAcceptDeclineInviteState() }, acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState> = Presenter { anAcceptDeclineInviteState() },
spaceSettingsEnabled: Boolean = false,
spaceService: FakeSpaceService = FakeSpaceService(), spaceService: FakeSpaceService = FakeSpaceService(),
): SpacePresenter { ): SpacePresenter {
return SpacePresenter( return SpacePresenter(
@ -638,11 +625,6 @@ class SpacePresenterTest {
joinRoom = joinRoom, joinRoom = joinRoom,
acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter,
sessionCoroutineScope = this, sessionCoroutineScope = this,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(
FeatureFlags.SpaceSettings.key to spaceSettingsEnabled,
)
),
spaceService = spaceService, spaceService = spaceService,
) )
} }

View file

@ -77,13 +77,6 @@ enum class FeatureFlags(
defaultValue = { true }, defaultValue = { true },
isFinished = false, isFinished = false,
), ),
SpaceSettings(
key = "feature.spaceSettings",
title = "Space settings",
description = "Allow managing space settings such as details, permissions and privacy.",
defaultValue = { true },
isFinished = false,
),
RoomListSpaceFilters( RoomListSpaceFilters(
key = "feature.roomListSpaceFilters", key = "feature.roomListSpaceFilters",
title = "Room list space filters", title = "Room list space filters",