RoomListFilters: add feature flag
This commit is contained in:
@@ -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<RoomListFiltersState> {
|
||||
|
||||
@Composable
|
||||
override fun present(): RoomListFiltersState {
|
||||
val isFeatureEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.RoomListFilters).collectAsState(false)
|
||||
var unselectedFilters: Set<RoomListFilter> 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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import kotlinx.collections.immutable.ImmutableList
|
||||
data class RoomListFiltersState(
|
||||
val unselectedFilters: ImmutableList<RoomListFilter>,
|
||||
val selectedFilters: ImmutableList<RoomListFilter>,
|
||||
val isFeatureEnabled: Boolean,
|
||||
val eventSink: (RoomListFiltersEvents) -> Unit,
|
||||
) {
|
||||
val showClearFilterButton = selectedFilters.isNotEmpty()
|
||||
|
||||
@@ -29,14 +29,19 @@ class RoomListFiltersStateProvider : PreviewParameterProvider<RoomListFiltersSta
|
||||
aRoomListFiltersState(
|
||||
selectedFilters = persistentListOf(RoomListFilter.Rooms, RoomListFilter.Favourites),
|
||||
unselectedFilters = persistentListOf(RoomListFilter.Unread),
|
||||
)
|
||||
),
|
||||
aRoomListFiltersState(
|
||||
isFeatureEnabled = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
fun aRoomListFiltersState(
|
||||
unselectedFilters: ImmutableList<RoomListFilter> = RoomListFilter.entries.toImmutableList(),
|
||||
selectedFilters: ImmutableList<RoomListFilter> = persistentListOf(),
|
||||
isFeatureEnabled: Boolean = true,
|
||||
) = RoomListFiltersState(
|
||||
unselectedFilters = unselectedFilters,
|
||||
selectedFilters = selectedFilters,
|
||||
isFeatureEnabled = isFeatureEnabled,
|
||||
) {}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ class StaticFeatureFlagProvider @Inject constructor() :
|
||||
FeatureFlags.Mentions -> true
|
||||
FeatureFlags.SecureStorage -> true
|
||||
FeatureFlags.MarkAsUnread -> false
|
||||
FeatureFlags.RoomListFilters -> false
|
||||
}
|
||||
} else {
|
||||
false
|
||||
|
||||
Reference in New Issue
Block a user