Skip to content

Commit 094b4c8

Browse files
authored
Merge pull request #5960 from element-hq/feature/fga/fix_space_ff_disabled
Ensure space feature is enabled
2 parents cf4e54f + fed2b10 commit 094b4c8

28 files changed

+57
-109
lines changed

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
2828
import io.element.android.libraries.architecture.Presenter
2929
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
3030
import io.element.android.libraries.designsystem.utils.snackbar.collectSnackbarMessageAsState
31-
import io.element.android.libraries.featureflag.api.FeatureFlagService
32-
import io.element.android.libraries.featureflag.api.FeatureFlags
3331
import io.element.android.libraries.indicator.api.IndicatorService
3432
import io.element.android.libraries.matrix.api.MatrixClient
3533
import io.element.android.libraries.matrix.api.sync.SyncService
@@ -48,7 +46,6 @@ class HomePresenter(
4846
private val homeSpacesPresenter: Presenter<HomeSpacesState>,
4947
private val logoutPresenter: Presenter<DirectLogoutState>,
5048
private val rageshakeFeatureAvailability: RageshakeFeatureAvailability,
51-
private val featureFlagService: FeatureFlagService,
5249
private val sessionStore: SessionStore,
5350
private val announcementService: AnnouncementService,
5451
) : Presenter<HomeState> {
@@ -69,9 +66,6 @@ class HomePresenter(
6966
val canReportBug by remember { rageshakeFeatureAvailability.isAvailable() }.collectAsState(false)
7067
val roomListState = roomListPresenter.present()
7168
val homeSpacesState = homeSpacesPresenter.present()
72-
val isSpaceFeatureEnabled by remember {
73-
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Space)
74-
}.collectAsState(initial = false)
7569
var currentHomeNavigationBarItemOrdinal by rememberSaveable { mutableIntStateOf(HomeNavigationBarItem.Chats.ordinal) }
7670
val currentHomeNavigationBarItem by remember {
7771
derivedStateOf {
@@ -117,7 +111,6 @@ class HomePresenter(
117111
snackbarMessage = snackbarMessage,
118112
canReportBug = canReportBug,
119113
directLogoutState = directLogoutState,
120-
isSpaceFeatureEnabled = isSpaceFeatureEnabled,
121114
eventSink = ::handleEvent,
122115
)
123116
}

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeState.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,9 @@ data class HomeState(
2929
val snackbarMessage: SnackbarMessage?,
3030
val canReportBug: Boolean,
3131
val directLogoutState: DirectLogoutState,
32-
val isSpaceFeatureEnabled: Boolean,
3332
val eventSink: (HomeEvents) -> Unit,
3433
) {
3534
val displayActions = currentHomeNavigationBarItem == HomeNavigationBarItem.Chats
3635
val displayRoomListFilters = currentHomeNavigationBarItem == HomeNavigationBarItem.Chats && roomListState.displayFilters
37-
val showNavigationBar = isSpaceFeatureEnabled && homeSpacesState.spaceRooms.isNotEmpty()
36+
val showNavigationBar = homeSpacesState.spaceRooms.isNotEmpty()
3837
}

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeStateProvider.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ open class HomeStateProvider : PreviewParameterProvider<HomeState> {
3131
aHomeState(hasNetworkConnection = false),
3232
aHomeState(snackbarMessage = SnackbarMessage(CommonStrings.common_verification_complete)),
3333
aHomeState(
34-
isSpaceFeatureEnabled = true,
3534
roomListState = aRoomListState(
3635
// Add more rooms to see the blur effect under the NavigationBar
3736
contentState = aRoomsContentState(
@@ -42,7 +41,6 @@ open class HomeStateProvider : PreviewParameterProvider<HomeState> {
4241
homeSpacesState = aHomeSpacesState(),
4342
),
4443
aHomeState(
45-
isSpaceFeatureEnabled = true,
4644
currentHomeNavigationBarItem = HomeNavigationBarItem.Spaces,
4745
),
4846
) + RoomListStateProvider().values.map {
@@ -60,7 +58,6 @@ internal fun aHomeState(
6058
roomListState: RoomListState = aRoomListState(),
6159
homeSpacesState: HomeSpacesState = aHomeSpacesState(),
6260
canReportBug: Boolean = true,
63-
isSpaceFeatureEnabled: Boolean = false,
6461
directLogoutState: DirectLogoutState = aDirectLogoutState(),
6562
eventSink: (HomeEvents) -> Unit = {}
6663
) = HomeState(
@@ -73,6 +70,5 @@ internal fun aHomeState(
7370
currentHomeNavigationBarItem = currentHomeNavigationBarItem,
7471
roomListState = roomListState,
7572
homeSpacesState = homeSpacesState,
76-
isSpaceFeatureEnabled = isSpaceFeatureEnabled,
7773
eventSink = eventSink,
7874
)

features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,10 @@ private fun HomeScaffold(
179179
displayFilters = state.displayRoomListFilters,
180180
filtersState = roomListState.filtersState,
181181
canReportBug = state.canReportBug,
182-
modifier = if (state.isSpaceFeatureEnabled) {
183-
Modifier.hazeEffect(
184-
state = hazeState,
185-
style = HazeMaterials.thick(),
186-
)
187-
} else {
188-
Modifier.background(ElementTheme.colors.bgCanvasDefault)
189-
}
182+
modifier = Modifier.hazeEffect(
183+
state = hazeState,
184+
style = HazeMaterials.thick(),
185+
)
190186
)
191187
},
192188
bottomBar = {

features/home/impl/src/test/kotlin/io/element/android/features/home/impl/HomePresenterTest.kt

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
2222
import io.element.android.features.rageshake.test.logs.FakeAnnouncementService
2323
import io.element.android.libraries.architecture.Presenter
2424
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
25-
import io.element.android.libraries.featureflag.api.FeatureFlagService
26-
import io.element.android.libraries.featureflag.api.FeatureFlags
27-
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
2825
import io.element.android.libraries.indicator.api.IndicatorService
2926
import io.element.android.libraries.indicator.test.FakeIndicatorService
3027
import io.element.android.libraries.matrix.api.MatrixClient
@@ -35,7 +32,6 @@ import io.element.android.libraries.matrix.test.AN_EXCEPTION
3532
import io.element.android.libraries.matrix.test.A_USER_ID
3633
import io.element.android.libraries.matrix.test.A_USER_NAME
3734
import io.element.android.libraries.matrix.test.FakeMatrixClient
38-
import io.element.android.libraries.matrix.test.core.aBuildMeta
3935
import io.element.android.libraries.matrix.test.sync.FakeSyncService
4036
import io.element.android.libraries.sessionstorage.api.SessionStore
4137
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
@@ -54,8 +50,6 @@ class HomePresenterTest {
5450
@get:Rule
5551
val warmUpRule = WarmUpRule()
5652

57-
private val isSpaceEnabled = FeatureFlags.Space.defaultValue(aBuildMeta())
58-
5953
@Test
6054
fun `present - should start with no user and then load user with success`() = runTest {
6155
val matrixClient = FakeMatrixClient(
@@ -79,7 +73,6 @@ class HomePresenterTest {
7973
moleculeFlow(RecompositionMode.Immediate) {
8074
presenter.present()
8175
}.test {
82-
if (isSpaceEnabled) skipItems(1)
8376
val initialState = awaitItem()
8477
assertThat(initialState.currentUserAndNeighbors.first()).isEqualTo(
8578
MatrixUser(A_USER_ID, null, null)
@@ -91,8 +84,7 @@ class HomePresenterTest {
9184
MatrixUser(A_USER_ID, A_USER_NAME, AN_AVATAR_URL)
9285
)
9386
assertThat(withUserState.showAvatarIndicator).isFalse()
94-
assertThat(withUserState.isSpaceFeatureEnabled).isEqualTo(isSpaceEnabled)
95-
assertThat(withUserState.showNavigationBar).isEqualTo(isSpaceEnabled)
87+
assertThat(withUserState.showNavigationBar).isTrue()
9688
}
9789
}
9890

@@ -114,23 +106,6 @@ class HomePresenterTest {
114106
}
115107
}
116108

117-
@Test
118-
fun `present - space feature enabled`() = runTest {
119-
val presenter = createHomePresenter(
120-
featureFlagService = FakeFeatureFlagService(
121-
initialState = mapOf(FeatureFlags.Space.key to true),
122-
),
123-
sessionStore = InMemorySessionStore(
124-
updateUserProfileResult = { _, _, _ -> },
125-
),
126-
)
127-
presenter.test {
128-
skipItems(1)
129-
val initialState = awaitItem()
130-
assertThat(initialState.isSpaceFeatureEnabled).isTrue()
131-
}
132-
}
133-
134109
@Test
135110
fun `present - show avatar indicator`() = runTest {
136111
val indicatorService = FakeIndicatorService()
@@ -143,7 +118,6 @@ class HomePresenterTest {
143118
moleculeFlow(RecompositionMode.Immediate) {
144119
presenter.present()
145120
}.test {
146-
if (isSpaceEnabled) skipItems(1)
147121
val initialState = awaitItem()
148122
assertThat(initialState.showAvatarIndicator).isFalse()
149123
indicatorService.setShowRoomListTopBarIndicator(true)
@@ -168,7 +142,6 @@ class HomePresenterTest {
168142
moleculeFlow(RecompositionMode.Immediate) {
169143
presenter.present()
170144
}.test {
171-
if (isSpaceEnabled) skipItems(1)
172145
val initialState = awaitItem()
173146
assertThat(initialState.currentUserAndNeighbors.first()).isEqualTo(MatrixUser(matrixClient.sessionId))
174147
// No new state is coming
@@ -189,7 +162,6 @@ class HomePresenterTest {
189162
moleculeFlow(RecompositionMode.Immediate) {
190163
presenter.present()
191164
}.test {
192-
if (isSpaceEnabled) skipItems(1)
193165
val initialState = awaitItem()
194166
assertThat(initialState.currentHomeNavigationBarItem).isEqualTo(HomeNavigationBarItem.Chats)
195167
initialState.eventSink(HomeEvents.SelectHomeNavigationBarItem(HomeNavigationBarItem.Spaces))
@@ -207,16 +179,12 @@ class HomePresenterTest {
207179
sessionStore = InMemorySessionStore(
208180
updateUserProfileResult = { _, _, _ -> },
209181
),
210-
featureFlagService = FakeFeatureFlagService(
211-
initialState = mapOf(FeatureFlags.Space.key to true),
212-
),
213182
homeSpacesPresenter = homeSpacesPresenter,
214183
announcementService = FakeAnnouncementService(
215184
showAnnouncementResult = {},
216185
)
217186
)
218187
presenter.test {
219-
skipItems(1)
220188
val initialState = awaitItem()
221189
assertThat(initialState.currentHomeNavigationBarItem).isEqualTo(HomeNavigationBarItem.Chats)
222190
assertThat(initialState.showNavigationBar).isTrue()
@@ -241,7 +209,6 @@ internal fun createHomePresenter(
241209
snackbarDispatcher: SnackbarDispatcher = SnackbarDispatcher(),
242210
rageshakeFeatureAvailability: RageshakeFeatureAvailability = RageshakeFeatureAvailability { flowOf(false) },
243211
indicatorService: IndicatorService = FakeIndicatorService(),
244-
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
245212
homeSpacesPresenter: Presenter<HomeSpacesState> = Presenter { aHomeSpacesState() },
246213
sessionStore: SessionStore = InMemorySessionStore(),
247214
announcementService: AnnouncementService = FakeAnnouncementService(),
@@ -250,11 +217,10 @@ internal fun createHomePresenter(
250217
syncService = syncService,
251218
snackbarDispatcher = snackbarDispatcher,
252219
indicatorService = indicatorService,
253-
logoutPresenter = { aDirectLogoutState() },
254220
roomListPresenter = { aRoomListState() },
255221
homeSpacesPresenter = homeSpacesPresenter,
222+
logoutPresenter = { aDirectLogoutState() },
256223
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
257-
featureFlagService = featureFlagService,
258224
sessionStore = sessionStore,
259225
announcementService = announcementService,
260226
)

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,6 @@ enum class FeatureFlags(
7070
defaultValue = { false },
7171
isFinished = false,
7272
),
73-
Space(
74-
key = "feature.space",
75-
title = "Spaces",
76-
defaultValue = { true },
77-
isFinished = true,
78-
),
7973
SpaceSettings(
8074
key = "feature.spaceSettings",
8175
title = "Space settings",

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ class DefaultFeatureFlagService(
2525
private val featuresProvider: FeaturesProvider,
2626
) : FeatureFlagService {
2727
override fun isFeatureEnabledFlow(feature: Feature): Flow<Boolean> {
28-
return providers.filter { it.hasFeature(feature) }
29-
.maxByOrNull(FeatureFlagProvider::priority)
30-
?.isFeatureEnabledFlow(feature)
31-
?: flowOf(feature.defaultValue(buildMeta))
28+
return if (feature.isFinished) {
29+
flowOf(feature.defaultValue(buildMeta))
30+
} else {
31+
providers.filter { it.hasFeature(feature) }
32+
.maxByOrNull(FeatureFlagProvider::priority)
33+
?.isFeatureEnabledFlow(feature)
34+
?: flowOf(feature.defaultValue(buildMeta))
35+
}
3236
}
3337

3438
override suspend fun setFeatureEnabled(feature: Feature, enabled: Boolean): Boolean {
Lines changed: 2 additions & 2 deletions
Loading
Lines changed: 2 additions & 2 deletions
Loading
Lines changed: 2 additions & 2 deletions
Loading

0 commit comments

Comments
 (0)