From 5f027ce683062144f73e7cc75729ead5e98fdb5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=A0s?= <86352901+LucasVbr@users.noreply.github.com> Date: Mon, 13 Jan 2025 18:15:07 +0100 Subject: [PATCH] feat: Add Filter Data class and filter method --- .../java/fr/univpau/queezer/data/Filter.kt | 23 +++++++++++++++++++ .../view/components/GameCardItemList.kt | 2 +- .../queezer/view/screens/ScoreScreen.kt | 11 ++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/fr/univpau/queezer/data/Filter.kt diff --git a/app/src/main/java/fr/univpau/queezer/data/Filter.kt b/app/src/main/java/fr/univpau/queezer/data/Filter.kt new file mode 100644 index 0000000..c91bfb9 --- /dev/null +++ b/app/src/main/java/fr/univpau/queezer/data/Filter.kt @@ -0,0 +1,23 @@ +package fr.univpau.queezer.data + +data class Filter( + val date: DateFilter = DateFilter.DESCENDING, + val mode : List = listOf(GameMode.TITLE, GameMode.ARTIST, GameMode.ALL), + val nbTitle : Int? = null, +) + +fun filterGames(filter: Filter, games: List): List { + return games.filter { game -> + filter.mode.contains(game.settings.gameMode) && (filter.nbTitle == null || game.playlist.tracks.size == filter.nbTitle) + }.sortedBy { game -> + when (filter.date) { + DateFilter.ASCENDING -> game.date.time + DateFilter.DESCENDING -> -game.date.time + } + } +} + +enum class DateFilter { + ASCENDING, + DESCENDING +} \ No newline at end of file diff --git a/app/src/main/java/fr/univpau/queezer/view/components/GameCardItemList.kt b/app/src/main/java/fr/univpau/queezer/view/components/GameCardItemList.kt index 69850ee..af86f9a 100644 --- a/app/src/main/java/fr/univpau/queezer/view/components/GameCardItemList.kt +++ b/app/src/main/java/fr/univpau/queezer/view/components/GameCardItemList.kt @@ -18,7 +18,7 @@ fun GameCardItemList(games: List) { .fillMaxWidth() .padding(horizontal = 16.dp) .verticalScroll(rememberScrollState()), - + verticalArrangement = Arrangement.spacedBy(16.dp), ) { for (game in games) GameCardItem(game) diff --git a/app/src/main/java/fr/univpau/queezer/view/screens/ScoreScreen.kt b/app/src/main/java/fr/univpau/queezer/view/screens/ScoreScreen.kt index 6ae4e42..53d9193 100644 --- a/app/src/main/java/fr/univpau/queezer/view/screens/ScoreScreen.kt +++ b/app/src/main/java/fr/univpau/queezer/view/screens/ScoreScreen.kt @@ -1,5 +1,6 @@ package fr.univpau.queezer.view.screens +import android.util.Log import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -18,6 +19,8 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -26,7 +29,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavHostController import fr.univpau.queezer.R +import fr.univpau.queezer.data.Filter import fr.univpau.queezer.data.Game +import fr.univpau.queezer.data.filterGames import fr.univpau.queezer.view.components.GameCardItemList import fr.univpau.queezer.viewmodel.GameViewModel import kotlin.math.max @@ -35,11 +40,15 @@ import kotlin.math.max @Composable fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel) { val context = LocalContext.current + val filter = remember { mutableStateOf(Filter()) } val games: List = gameViewModel.games.observeAsState().value ?: emptyList() val nbGames = games.size; val averageSuccessRate = games.sumOf { it.score }.div(max(games.size, 1)) + val filteredGames = filterGames(filter.value, games) + Log.i("ScoreScreen", "filteredGames: $filteredGames") + Scaffold( topBar = { CenterAlignedTopAppBar( @@ -91,7 +100,7 @@ fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel) // Todo add filters - GameCardItemList(games) + GameCardItemList(filteredGames) } }