From ad54477d114b45e972e419018a0033cdb2ebc45d Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Sat, 30 May 2026 11:39:10 +0300 Subject: [PATCH] feat: add segmented buttons to friends screen --- .../friends/presentation/FriendsScreen.kt | 6 ++-- .../friends/presentation/RootFriendsScreen.kt | 32 ++++++++++++------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/FriendsScreen.kt b/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/FriendsScreen.kt index 92a126ea..c0de48c3 100644 --- a/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/FriendsScreen.kt +++ b/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/FriendsScreen.kt @@ -38,6 +38,7 @@ import dev.meloda.fast.ui.theme.LocalThemeConfig import dev.meloda.fast.ui.util.ImmutableList import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.debounce +import kotlin.time.Duration.Companion.milliseconds @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -47,7 +48,6 @@ fun FriendsScreen( orderType: String, padding: PaddingValues, tabIndex: Int, - onSessionExpiredLogOutButtonClicked: () -> Unit = {}, onPhotoClicked: (url: String) -> Unit = {}, onMessageClicked: (userid: Long) -> Unit = {}, setCanScrollBackward: (Boolean) -> Unit = {}, @@ -100,13 +100,13 @@ fun FriendsScreen( LaunchedEffect(listState) { snapshotFlow { listState.firstVisibleItemIndex } - .debounce(250L) + .debounce(250L.milliseconds) .collectLatest(viewModel::setScrollIndex) } LaunchedEffect(listState) { snapshotFlow { listState.firstVisibleItemScrollOffset } - .debounce(250L) + .debounce(250L.milliseconds) .collectLatest(viewModel::setScrollOffset) } diff --git a/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/RootFriendsScreen.kt b/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/RootFriendsScreen.kt index c69d89dc..488f0945 100644 --- a/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/RootFriendsScreen.kt +++ b/feature/friends/src/main/kotlin/dev/meloda/fast/friends/presentation/RootFriendsScreen.kt @@ -9,12 +9,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.Scaffold @@ -34,7 +33,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -47,11 +45,14 @@ import dev.meloda.fast.model.BaseError import dev.meloda.fast.ui.R import dev.meloda.fast.ui.components.ActionInvokeDismiss import dev.meloda.fast.ui.components.MaterialDialog +import dev.meloda.fast.ui.components.SegmentedButtonItem +import dev.meloda.fast.ui.components.SegmentedButtonsRow import dev.meloda.fast.ui.components.SelectionType import dev.meloda.fast.ui.model.TabItem import dev.meloda.fast.ui.theme.LocalHazeState import dev.meloda.fast.ui.theme.LocalThemeConfig import dev.meloda.fast.ui.util.ImmutableList +import dev.meloda.fast.ui.util.buildImmutableList import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class) @@ -189,16 +190,24 @@ fun FriendsRoute( ), modifier = Modifier.fillMaxWidth(), actions = { - IconButton( - onClick = { - showOrderDialog = true - } - ) { - Icon( - painter = painterResource(R.drawable.ic_filter_list_round_24), - contentDescription = null + val items = buildImmutableList { + add( + SegmentedButtonItem( + "filter", + R.drawable.ic_filter_list_round_24 + ) ) } + + SegmentedButtonsRow( + modifier = Modifier.padding(end = 8.dp), + items = items, + onClick = { index -> + when (items[index].key) { + "filter" -> showOrderDialog = true + } + } + ) } ) PrimaryTabRow( @@ -234,7 +243,6 @@ fun FriendsRoute( orderType = orderType, padding = padding, tabIndex = index, - onSessionExpiredLogOutButtonClicked = { onError(BaseError.SessionExpired) }, onPhotoClicked = onPhotoClicked, onMessageClicked = onMessageClicked, setCanScrollBackward = { canScrollBackward = it },