From 945677b9d142200b79d3d03b4148b02d406f6d97 Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Fri, 17 Jun 2022 19:34:38 +0200 Subject: [PATCH] Add setting to change the grid row count for "Your playlists" --- .../vimusic/ui/components/themed/Dialog.kt | 10 ++++--- .../vimusic/ui/screens/HomeScreen.kt | 4 +-- .../vimusic/ui/screens/SettingsScreen.kt | 28 ++++++++++++++++--- .../settings/AppearanceSettingsScreen.kt | 13 +++++++-- .../it/vfsfitvnm/vimusic/utils/Preferences.kt | 1 + 5 files changed, 44 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Dialog.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Dialog.kt index ff4f9e1..73076a2 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Dialog.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/Dialog.kt @@ -225,14 +225,16 @@ inline fun DefaultDialog( } } + @Composable -inline fun > EnumValueSelectorDialog( +inline fun ValueSelectorDialog( noinline onDismiss: () -> Unit, title: String, selectedValue: T, + values: List, crossinline onValueSelected: (T) -> Unit, modifier: Modifier = Modifier, - crossinline valueText: (T) -> String = Enum::name + crossinline valueText: (T) -> String = { it.toString() } ) { val typography = LocalTypography.current val colorPalette = LocalColorPalette.current @@ -258,7 +260,7 @@ inline fun > EnumValueSelectorDialog( modifier = Modifier .verticalScroll(rememberScrollState()) ) { - enumValues().forEach { value -> + values.forEach { value -> Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(16.dp), @@ -331,4 +333,4 @@ inline fun > EnumValueSelectorDialog( ) } } -} +} \ No newline at end of file diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/HomeScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/HomeScreen.kt index 28c99bf..c498e76 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/HomeScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/HomeScreen.kt @@ -221,10 +221,10 @@ fun HomeScreen() { item { LazyHorizontalGrid( - rows = GridCells.Fixed(2), + rows = GridCells.Fixed(preferences.yourPlaylistsGridRowCount), contentPadding = PaddingValues(horizontal = 16.dp), modifier = Modifier - .height(248.dp) + .height(124.dp * preferences.yourPlaylistsGridRowCount) ) { item { Column( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/SettingsScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/SettingsScreen.kt index 15fda8d..d98a54c 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/SettingsScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/SettingsScreen.kt @@ -1,7 +1,7 @@ package it.vfsfitvnm.vimusic.ui.screens import androidx.annotation.DrawableRes -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.* import androidx.compose.foundation.* import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* @@ -18,8 +18,8 @@ import androidx.compose.ui.unit.dp import it.vfsfitvnm.route.* import it.vfsfitvnm.vimusic.R import it.vfsfitvnm.vimusic.ui.components.TopAppBar -import it.vfsfitvnm.vimusic.ui.components.themed.EnumValueSelectorDialog import it.vfsfitvnm.vimusic.ui.components.themed.Switch +import it.vfsfitvnm.vimusic.ui.components.themed.ValueSelectorDialog import it.vfsfitvnm.vimusic.ui.screens.settings.* import it.vfsfitvnm.vimusic.ui.styling.LocalColorPalette import it.vfsfitvnm.vimusic.ui.styling.LocalTypography @@ -230,24 +230,44 @@ fun SettingsScreen() { } @Composable -inline fun > EnumValueSelectorEntry( +inline fun > EnumValueSelectorSettingsEntry( title: String, selectedValue: T, crossinline onValueSelected: (T) -> Unit, modifier: Modifier = Modifier, crossinline valueText: (T) -> String = Enum::name +) { + ValueSelectorSettingsEntry( + title = title, + selectedValue = selectedValue, + values = enumValues().toList(), + onValueSelected =onValueSelected, + modifier = modifier, + valueText = valueText + ) +} + +@Composable +inline fun ValueSelectorSettingsEntry( + title: String, + selectedValue: T, + values: List, + crossinline onValueSelected: (T) -> Unit, + modifier: Modifier = Modifier, + crossinline valueText: (T) -> String = { it.toString() } ) { var isShowingDialog by remember { mutableStateOf(false) } if (isShowingDialog) { - EnumValueSelectorDialog( + ValueSelectorDialog( onDismiss = { isShowingDialog = false }, title = title, selectedValue = selectedValue, + values = values, onValueSelected = onValueSelected, valueText = valueText ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettingsScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettingsScreen.kt index 75920d8..35a1f58 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettingsScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/AppearanceSettingsScreen.kt @@ -77,7 +77,7 @@ fun AppearanceSettingsScreen() { ) } - EnumValueSelectorEntry( + EnumValueSelectorSettingsEntry( title = "Theme mode", selectedValue = preferences.colorPaletteMode, onValueSelected = { @@ -85,13 +85,22 @@ fun AppearanceSettingsScreen() { } ) - EnumValueSelectorEntry( + EnumValueSelectorSettingsEntry( title = "Thumbnail roundness", selectedValue = preferences.thumbnailRoundness, onValueSelected = { preferences.thumbnailRoundness = it } ) + + ValueSelectorSettingsEntry( + title = "\"Your playlists\" grid row count", + selectedValue = preferences.yourPlaylistsGridRowCount, + values = listOf(1, 2, 3), + onValueSelected = { + preferences.yourPlaylistsGridRowCount = it + } + ) } } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt index 6f341db..1058ed5 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/Preferences.kt @@ -27,6 +27,7 @@ class Preferences(holder: SharedPreferences) : SharedPreferences by holder { var displayLikeButtonInNotification by preference("displayLikeButtonInNotification", false) var persistentQueue by preference("persistentQueue", false) var skipSilence by preference("skipSilence", false) + var yourPlaylistsGridRowCount by preference("yourPlaylistsGridRowCount", 2) } val Context.preferences: Preferences