RoomDirectory : branch feature flag

This commit is contained in:
ganfra 2024-03-27 12:57:50 +01:00
parent 425eadd98f
commit b3ffc13824
4 changed files with 19 additions and 10 deletions

View file

@ -24,11 +24,14 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.featureflag.api.FeatureFlags
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import javax.inject.Inject import javax.inject.Inject
class RoomListSearchPresenter @Inject constructor( class RoomListSearchPresenter @Inject constructor(
private val dataSource: RoomListSearchDataSource, private val dataSource: RoomListSearchDataSource,
private val featureFlagService: FeatureFlagService,
) : Presenter<RoomListSearchState> { ) : Presenter<RoomListSearchState> {
@Composable @Composable
override fun present(): RoomListSearchState { override fun present(): RoomListSearchState {
@ -63,12 +66,14 @@ class RoomListSearchPresenter @Inject constructor(
} }
} }
val isRoomDirectorySearchEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.RoomDirectorySearch).collectAsState(initial = false)
val searchResults by dataSource.roomSummaries.collectAsState(initial = persistentListOf()) val searchResults by dataSource.roomSummaries.collectAsState(initial = persistentListOf())
return RoomListSearchState( return RoomListSearchState(
isSearchActive = isSearchActive, isSearchActive = isSearchActive,
query = searchQuery, query = searchQuery,
results = searchResults, results = searchResults,
isRoomDirectorySearchEnabled = isRoomDirectorySearchEnabled,
eventSink = ::handleEvents eventSink = ::handleEvents
) )
} }

View file

@ -23,5 +23,8 @@ data class RoomListSearchState(
val isSearchActive: Boolean, val isSearchActive: Boolean,
val query: String, val query: String,
val results: ImmutableList<RoomListRoomSummary>, val results: ImmutableList<RoomListRoomSummary>,
val isRoomDirectorySearchEnabled: Boolean,
val eventSink: (RoomListSearchEvents) -> Unit val eventSink: (RoomListSearchEvents) -> Unit
) ) {
val displayRoomDirectorySearch = query.isEmpty() && isRoomDirectorySearchEnabled
}

View file

@ -26,6 +26,7 @@ class RoomListSearchStateProvider : PreviewParameterProvider<RoomListSearchState
override val values: Sequence<RoomListSearchState> override val values: Sequence<RoomListSearchState>
get() = sequenceOf( get() = sequenceOf(
aRoomListSearchState(), aRoomListSearchState(),
aRoomListSearchState(isRoomDirectorySearchEnabled = true),
aRoomListSearchState( aRoomListSearchState(
isSearchActive = true, isSearchActive = true,
query = "Test", query = "Test",
@ -38,10 +39,12 @@ fun aRoomListSearchState(
isSearchActive: Boolean = false, isSearchActive: Boolean = false,
query: String = "", query: String = "",
results: ImmutableList<RoomListRoomSummary> = persistentListOf(), results: ImmutableList<RoomListRoomSummary> = persistentListOf(),
isRoomDirectorySearchEnabled: Boolean = false,
eventSink: (RoomListSearchEvents) -> Unit = { }, eventSink: (RoomListSearchEvents) -> Unit = { },
) = RoomListSearchState( ) = RoomListSearchState(
isSearchActive = isSearchActive, isSearchActive = isSearchActive,
query = query, query = query,
results = results, results = results,
isRoomDirectorySearchEnabled = isRoomDirectorySearchEnabled,
eventSink = eventSink, eventSink = eventSink,
) )

View file

@ -26,8 +26,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.QrCode
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TextFieldDefaults
@ -133,8 +131,8 @@ private fun RoomListSearchContent(
val focusRequester = FocusRequester() val focusRequester = FocusRequester()
TextField( TextField(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.focusRequester(focusRequester), .focusRequester(focusRequester),
value = filter, value = filter,
singleLine = true, singleLine = true,
onValueChange = { state.eventSink(RoomListSearchEvents.QueryChanged(it)) }, onValueChange = { state.eventSink(RoomListSearchEvents.QueryChanged(it)) },
@ -173,14 +171,14 @@ private fun RoomListSearchContent(
) { padding -> ) { padding ->
Column( Column(
modifier = Modifier modifier = Modifier
.padding(padding) .padding(padding)
.consumeWindowInsets(padding) .consumeWindowInsets(padding)
) { ) {
if(state.query.isEmpty()){ if (state.displayRoomDirectorySearch) {
RoomDirectorySearchButton( RoomDirectorySearchButton(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 24.dp, horizontal = 16.dp), .padding(vertical = 24.dp, horizontal = 16.dp),
onClick = onRoomDirectorySearchClicked onClick = onRoomDirectorySearchClicked
) )
} }