From a9b1ad2b4062d2d76ec91a6094aefc436bc56263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9?= <83401001+and1mon@users.noreply.github.com> Date: Sat, 18 Oct 2025 14:14:45 +0200 Subject: [PATCH] Add dock rows setting to choose how many rows to display on the home screen (#1520) --- .../widgets/clock/parts/FavoritesPartProvider.kt | 5 +++-- .../settings/homescreen/HomescreenSettingsScreen.kt | 12 ++++++++++++ .../homescreen/HomescreenSettingsScreenVM.kt | 7 +++++++ core/i18n/src/main/res/values-de/strings.xml | 3 ++- core/i18n/src/main/res/values/strings.xml | 3 ++- .../launcher2/preferences/LauncherSettingsData.kt | 1 + .../de/mm20/launcher2/preferences/ui/UiSettings.kt | 11 +++++++++++ 7 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/FavoritesPartProvider.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/FavoritesPartProvider.kt index 98c7a8053..6e083e032 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/FavoritesPartProvider.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/FavoritesPartProvider.kt @@ -38,15 +38,16 @@ class FavoritesPartProvider : PartProvider, KoinComponent { it.columnCount } }.collectAsState(0) + val dockRows by uiSettings.dockRows.collectAsState(1) val excludeCalendar by remember { widgetRepository.exists(CalendarWidget.Type) }.collectAsState( true ) - val favorites by remember(columns, excludeCalendar) { + val favorites by remember(columns, dockRows, excludeCalendar) { favoritesService.getFavorites( excludeTypes = if (excludeCalendar) listOf("calendar", "tag") else listOf("tag"), minPinnedLevel = PinnedLevel.FrequentlyUsed, - limit = columns + limit = columns * dockRows ) }.collectAsState(emptyList()) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt index de896f097..9c070d6a6 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreen.kt @@ -75,6 +75,7 @@ fun HomescreenSettingsScreen() { val context = LocalContext.current val dock by viewModel.dock.collectAsStateWithLifecycle(null) + val dockRows by viewModel.dockRows.collectAsStateWithLifecycle(1) val fixedRotation by viewModel.fixedRotation.collectAsStateWithLifecycle(null) val widgetsOnHomeScreen by viewModel.widgetsOnHomeScreen.collectAsStateWithLifecycle(null) val editButton by viewModel.widgetEditButton.collectAsStateWithLifecycle(null) @@ -123,6 +124,17 @@ fun HomescreenSettingsScreen() { viewModel.setDock(it) }, ) + AnimatedVisibility(dock == true) { + SliderPreference( + title = stringResource(R.string.preference_clockwidget_dock_rows), + value = dockRows, + min = 1, + max = 4, + onValueChanged = { + viewModel.setDockRows(it) + } + ) + } SwitchPreference( title = stringResource(R.string.preference_widgets_on_home_screen), summary = stringResource(R.string.preference_widgets_on_home_screen_summary), diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt index fec61653d..e1cd58c2c 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/homescreen/HomescreenSettingsScreenVM.kt @@ -131,6 +131,13 @@ class HomescreenSettingsScreenVM( uiSettings.setDock(dock) } + val dockRows = uiSettings.dockRows + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), 1) + + fun setDockRows(rows: Int) { + uiSettings.setDockRows(rows) + } + val fixedRotation = uiSettings.orientation.map { it != ScreenOrientation.Auto } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null) diff --git a/core/i18n/src/main/res/values-de/strings.xml b/core/i18n/src/main/res/values-de/strings.xml index 5d8dbeef5..21a2979c8 100644 --- a/core/i18n/src/main/res/values-de/strings.xml +++ b/core/i18n/src/main/res/values-de/strings.xml @@ -322,7 +322,8 @@ App-Shortcuts durchsuchen Favoriten Dock - Die erste Zeile der Favoriten anzeigen + Favoriten im Dock anzeigen + Dock-Zeilen Symbolgröße Währungsrechner Regelmäßig Wechselkurse herunterladen, um Währungen umzurechnen diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 12b9fc2ae..f75da5768 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -598,7 +598,8 @@ Date Show the current date Dock - Show the first row of pinned items + Show pinned items in dock + Dock rows Media Show media controls when there is an active media session Battery diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/LauncherSettingsData.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/LauncherSettingsData.kt index e307f64b5..46f7fc776 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/LauncherSettingsData.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/LauncherSettingsData.kt @@ -56,6 +56,7 @@ data class LauncherSettingsData internal constructor( val clockWidgetAlignment: ClockWidgetAlignment = ClockWidgetAlignment.Bottom, val homeScreenDock: Boolean = false, + val homeScreenDockRows: Int = 1, val homeScreenWidgets: Boolean = false, val favoritesEnabled: Boolean = true, diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/ui/UiSettings.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/ui/UiSettings.kt index 2849c7ae0..48c4808af 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/ui/UiSettings.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/ui/UiSettings.kt @@ -357,6 +357,17 @@ class UiSettings internal constructor( } } + val dockRows + get() = launcherDataStore.data.map { + it.homeScreenDockRows + }.distinctUntilChanged() + + fun setDockRows(rows: Int) { + launcherDataStore.update { + it.copy(homeScreenDockRows = rows) + } + } + val homeScreenWidgets get() = launcherDataStore.data.map { it.homeScreenWidgets