From 8f5ea76ab85771953c494b18d04864fb67a828e1 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 20 Feb 2024 12:36:20 +0100 Subject: [PATCH] RoomListFilters: add feature flag --- .../roomlist/impl/filters/RoomListFiltersPresenter.kt | 6 ++++++ .../features/roomlist/impl/filters/RoomListFiltersState.kt | 1 + .../roomlist/impl/filters/RoomListFiltersStateProvider.kt | 7 ++++++- .../features/roomlist/impl/filters/RoomListFiltersView.kt | 5 +++++ .../roomlist/impl/filters/RoomListFiltersPresenterTests.kt | 5 +++++ .../android/libraries/featureflag/api/FeatureFlags.kt | 7 +++++++ .../featureflag/impl/StaticFeatureFlagProvider.kt | 1 + 7 files changed, 31 insertions(+), 1 deletion(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt index 1a4cf365b4..28f4ad5879 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenter.kt @@ -18,11 +18,14 @@ package io.element.android.features.roomlist.impl.filters import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.collections.immutable.toPersistentList import javax.inject.Inject @@ -30,10 +33,12 @@ import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as Matrix class RoomListFiltersPresenter @Inject constructor( private val roomListService: RoomListService, + private val featureFlagService: FeatureFlagService, ) : Presenter { @Composable override fun present(): RoomListFiltersState { + val isFeatureEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.RoomListFilters).collectAsState(false) var unselectedFilters: Set by rememberSaveable { mutableStateOf(RoomListFilter.entries.toSet()) } @@ -81,6 +86,7 @@ class RoomListFiltersPresenter @Inject constructor( return RoomListFiltersState( unselectedFilters = unselectedFilters.toPersistentList(), selectedFilters = selectedFilters.toPersistentList(), + isFeatureEnabled = isFeatureEnabled, eventSink = ::handleEvents ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt index 8f7a6907be..688c08162c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersState.kt @@ -21,6 +21,7 @@ import kotlinx.collections.immutable.ImmutableList data class RoomListFiltersState( val unselectedFilters: ImmutableList, val selectedFilters: ImmutableList, + val isFeatureEnabled: Boolean, val eventSink: (RoomListFiltersEvents) -> Unit, ) { val showClearFilterButton = selectedFilters.isNotEmpty() diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt index 6467e11562..4c9f5dcc0c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt @@ -29,14 +29,19 @@ class RoomListFiltersStateProvider : PreviewParameterProvider = RoomListFilter.entries.toImmutableList(), selectedFilters: ImmutableList = persistentListOf(), + isFeatureEnabled: Boolean = true, ) = RoomListFiltersState( unselectedFilters = unselectedFilters, selectedFilters = selectedFilters, + isFeatureEnabled = isFeatureEnabled, ) {} diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt index 12ff8ae46a..6876e0661f 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt @@ -41,12 +41,17 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.Text +import timber.log.Timber @Composable fun RoomListFiltersView( state: RoomListFiltersState, modifier: Modifier = Modifier ) { + if (!state.isFeatureEnabled) { + Timber.d("RoomListFiltersView: Feature is disabled, hide the view") + return + } fun onClearFiltersClicked() { state.eventSink(RoomListFiltersEvents.ClearSelectedFilters) diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt index b9a9f82922..f161dd8d5f 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersPresenterTests.kt @@ -20,6 +20,8 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService import io.element.android.tests.testutils.awaitLastSequentialItem @@ -45,6 +47,7 @@ class RoomListFiltersPresenterTests { RoomListFilter.Favourites, ) } + cancelAndIgnoreRemainingEvents() } } @@ -114,8 +117,10 @@ class RoomListFiltersPresenterTests { fun createRoomListFiltersPresenter( roomListService: RoomListService = FakeRoomListService(), + featureFlagService: FeatureFlagService = FakeFeatureFlagService(), ): RoomListFiltersPresenter { return RoomListFiltersPresenter( roomListService = roomListService, + featureFlagService = featureFlagService, ) } 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 3c56c81fae..80e88dc469 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, ), + RoomListFilters( + key = "feature.roomlistfilters", + title = "Room list filters", + description = "Allow user to filter the room list", + 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 8462a33ba5..8b68d7e3da 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.SecureStorage -> true FeatureFlags.MarkAsUnread -> false + FeatureFlags.RoomListFilters -> false } } else { false