From ae4c2b34f4180b803ce782927f734d899b45fe24 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Sat, 2 May 2026 21:38:56 +0200 Subject: [PATCH] feat(search): update genre selection to support multiple selections in SearchScreen --- .../libraries/components/LibrariesContent.kt | 28 ++++---- .../ui/screen/library/LibraryScreen.kt | 64 ++++++++++--------- .../library/components/LibraryTopBar.kt | 10 ++- 3 files changed, 59 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/libraries/components/LibrariesContent.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/libraries/components/LibrariesContent.kt index 480b2a36..ed6daed8 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/libraries/components/LibrariesContent.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/libraries/components/LibrariesContent.kt @@ -1,6 +1,7 @@ package hu.bbara.purefin.ui.screen.libraries.components import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -16,18 +17,21 @@ fun LibrariesContent( onLibrarySelected: (LibraryUiModel) -> Unit, modifier: Modifier = Modifier, ) { - LazyVerticalGrid( - modifier = modifier, - columns = GridCells.Adaptive(minSize = 160.dp), - contentPadding = PaddingValues(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(16.dp), - ) { - items(items, key = { it.id }) { item -> - LibraryListItem( - uiModel = item, - onClick = { onLibrarySelected(item) } - ) + BoxWithConstraints(modifier = modifier) { + val minCellSize = if (maxWidth >= 600.dp) 220.dp else 160.dp + + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = minCellSize), + contentPadding = PaddingValues(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + items(items, key = { it.id }) { item -> + LibraryListItem( + uiModel = item, + onClick = { onLibrarySelected(item) } + ) + } } } } diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/library/LibraryScreen.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/library/LibraryScreen.kt index 5c02e522..4dc27edf 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/library/LibraryScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/library/LibraryScreen.kt @@ -2,6 +2,7 @@ package hu.bbara.purefin.ui.screen.library import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -67,39 +68,42 @@ internal fun LibraryPosterGrid( modifier: Modifier = Modifier, viewModel: LibraryViewModel = hiltViewModel() ) { - LazyVerticalGrid( - columns = GridCells.Adaptive(minSize = 120.dp), - contentPadding = PaddingValues(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(16.dp), - modifier = modifier.background(MaterialTheme.colorScheme.background) - ) { - items(libraryItems, key = { item -> item.id }) { item -> - MediaImageCard( - imageUrl = item.primaryImageUrl, - title = item.primaryText, - subtitle = item.secondaryText, - onClick = { + BoxWithConstraints(modifier = modifier.background(MaterialTheme.colorScheme.background)) { + val minCellSize = if (maxWidth >= 600.dp) 220.dp else 120.dp + + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = minCellSize), + contentPadding = PaddingValues(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + items(libraryItems, key = { item -> item.id }) { item -> + MediaImageCard( + imageUrl = item.primaryImageUrl, + title = item.primaryText, + subtitle = item.secondaryText, + onClick = { + when (item) { + is MovieUiModel -> viewModel.onMovieSelected(item.id) + is SeriesUiModel -> viewModel.onSeriesSelected(item.id) + is EpisodeUiModel -> Unit + } + } + ) { when (item) { - is MovieUiModel -> viewModel.onMovieSelected(item.id) - is SeriesUiModel -> viewModel.onSeriesSelected(item.id) - is EpisodeUiModel -> Unit + is MovieUiModel, is EpisodeUiModel -> { + WatchStateBadge( + size = 28, + modifier = Modifier + .align(Alignment.TopEnd) + .padding(8.dp), + watched = item.watched, + started = (item.progress ?: 0f) > 0f + ) + } + else -> Unit } } - ) { - when (item) { - is MovieUiModel, is EpisodeUiModel -> { - WatchStateBadge( - size = 28, - modifier = Modifier - .align(Alignment.TopEnd) - .padding(8.dp), - watched = item.watched, - started = (item.progress ?: 0f) > 0f - ) - } - else -> Unit - } } } } diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/library/components/LibraryTopBar.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/library/components/LibraryTopBar.kt index 59635ceb..398928bc 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/library/components/LibraryTopBar.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/library/components/LibraryTopBar.kt @@ -1,7 +1,8 @@ package hu.bbara.purefin.ui.screen.library.components -import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.ArrowBack +import androidx.compose.material.icons.outlined.FilterAlt import androidx.compose.runtime.Composable import hu.bbara.purefin.ui.screen.home.components.DefaultTopBar import hu.bbara.purefin.ui.screen.home.components.DefaultTopBarIconButton @@ -17,6 +18,13 @@ fun LibraryTopBar( contentDescription = "Back", onClick = onBack, ) + }, + rightActions = { + DefaultTopBarIconButton( + imageVector = Icons.Outlined.FilterAlt, + contentDescription = "Search", + onClick = {}, + ) } ) }