Merge pull request #2422 from element-hq/feature/fga/room_list_filters

[Feature] Room list filters
This commit is contained in:
ganfra 2024-02-22 22:59:28 +01:00 committed by GitHub
commit 0f563d712a
45 changed files with 765 additions and 37 deletions

View file

@ -0,0 +1,57 @@
/*
* Copyright (c) 2024 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem.modifiers
import androidx.compose.animation.animateColorAsState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.graphics.BlendMode
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.graphicsLayer
@Composable
fun horizontalFadingEdgesBrush(
showLeft: Boolean,
showRight: Boolean,
percent: Float = 0.1f,
): Brush {
val leftColor by animateColorAsState(
targetValue = if (showLeft) Color.Transparent else Color.White,
label = "AnimateLeftColor",
)
val rightColor by animateColorAsState(
targetValue = if (showRight) Color.Transparent else Color.White,
label = "AnimateRightColor",
)
return Brush.horizontalGradient(
0f to leftColor,
percent to Color.White,
1f - percent to Color.White,
1f to rightColor
)
}
fun Modifier.fadingEdge(brush: Brush) = this
.graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen)
.drawWithContent {
drawContent()
drawRect(brush = brush, blendMode = BlendMode.DstIn)
}

View file

@ -75,4 +75,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,
),
}

View file

@ -40,6 +40,7 @@ class StaticFeatureFlagProvider @Inject constructor() :
FeatureFlags.PinUnlock -> true
FeatureFlags.Mentions -> true
FeatureFlags.MarkAsUnread -> false
FeatureFlags.RoomListFilters -> false
}
} else {
false

View file

@ -57,6 +57,11 @@ sealed interface RoomListFilter {
*/
data object Unread : RoomListFilter
/**
* A filter that matches rooms that are marked as favorite.
*/
data object Favorite : RoomListFilter
/**
* A filter that matches either Group or People rooms.
*/

View file

@ -31,5 +31,6 @@ fun RoomListFilter.toRustFilter(): RoomListEntriesDynamicFilterKind {
RoomListFilter.None -> RoomListEntriesDynamicFilterKind.None
is RoomListFilter.NormalizedMatchRoomName -> RoomListEntriesDynamicFilterKind.NormalizedMatchRoomName(pattern)
RoomListFilter.Unread -> RoomListEntriesDynamicFilterKind.Unread
RoomListFilter.Favorite -> RoomListEntriesDynamicFilterKind.Favourite
}
}

View file

@ -52,6 +52,7 @@ object TestTags {
* Room list / Home screen.
*/
val homeScreenSettings = TestTag("home_screen-settings")
val homeScreenClearFilters = TestTag("home_screen-clear_filters")
/**
* Room detail screen.