From a2d3fda68661bde33b70997d6e5c5b99e3880dd3 Mon Sep 17 00:00:00 2001
From: tapframe <85391825+tapframe@users.noreply.github.com>
Date: Thu, 25 Jun 2026 01:45:50 +0530
Subject: [PATCH] ref: reorganize settings page
---
.../composeResources/values/strings.xml | 2 +-
.../settings/AppearanceSettingsPage.kt | 62 +++++++++++++++++--
.../settings/ContentDiscoverySettingsPage.kt | 48 --------------
.../settings/IntegrationsSettingsPage.kt | 3 -
.../app/features/settings/SettingsModels.kt | 14 ++---
.../app/features/settings/SettingsRootPage.kt | 12 ----
.../app/features/settings/SettingsScreen.kt | 16 ++---
.../app/features/settings/SettingsSearch.kt | 4 +-
.../features/settings/StreamsSettingsPage.kt | 3 -
9 files changed, 74 insertions(+), 90 deletions(-)
diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index ff7e6c75b..78f0e206c 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -436,7 +436,7 @@
ACCOUNT
Startup and profile behavior.
ADVANCED
- Home structure and poster styles
+ Home, streams, collections, and detail pages
Download latest release
Check for updates
Manage addons and discovery sources.
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/AppearanceSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/AppearanceSettingsPage.kt
index 157bed8ea..1ac3eb1b6 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/AppearanceSettingsPage.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/AppearanceSettingsPage.kt
@@ -20,9 +20,6 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
-import androidx.compose.material.icons.rounded.Language
-import androidx.compose.material.icons.rounded.Style
-import androidx.compose.material.icons.rounded.Tune
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -50,8 +47,12 @@ import com.nuvio.app.core.ui.ThemeColors
import kotlinx.coroutines.launch
import nuvio.composeapp.generated.resources.Res
import nuvio.composeapp.generated.resources.cd_selected
+import nuvio.composeapp.generated.resources.collections_header
import nuvio.composeapp.generated.resources.compose_settings_page_continue_watching
+import nuvio.composeapp.generated.resources.compose_settings_page_homescreen
+import nuvio.composeapp.generated.resources.compose_settings_page_meta_screen
import nuvio.composeapp.generated.resources.compose_settings_page_poster_customization
+import nuvio.composeapp.generated.resources.compose_settings_page_streams
import nuvio.composeapp.generated.resources.settings_appearance_app_language
import nuvio.composeapp.generated.resources.settings_appearance_app_language_sheet_title
import nuvio.composeapp.generated.resources.settings_appearance_amoled_black
@@ -63,6 +64,10 @@ import nuvio.composeapp.generated.resources.settings_appearance_poster_customiza
import nuvio.composeapp.generated.resources.settings_appearance_section_display
import nuvio.composeapp.generated.resources.settings_appearance_section_home
import nuvio.composeapp.generated.resources.settings_appearance_section_theme
+import nuvio.composeapp.generated.resources.settings_content_discovery_collections_description
+import nuvio.composeapp.generated.resources.settings_content_discovery_homescreen_description
+import nuvio.composeapp.generated.resources.settings_content_discovery_meta_screen_description
+import nuvio.composeapp.generated.resources.compose_settings_root_streams_description
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -79,6 +84,10 @@ internal fun LazyListScope.appearanceSettingsContent(
onLiquidGlassNativeTabBarToggle: (Boolean) -> Unit,
selectedAppLanguage: AppLanguage,
onAppLanguageSelected: (AppLanguage) -> Unit,
+ onHomescreenClick: () -> Unit,
+ onMetaScreenClick: () -> Unit,
+ onStreamsClick: () -> Unit,
+ onCollectionsClick: () -> Unit,
onContinueWatchingClick: () -> Unit,
onPosterCustomizationClick: () -> Unit,
) {
@@ -161,7 +170,6 @@ internal fun LazyListScope.appearanceSettingsContent(
SettingsNavigationRow(
title = stringResource(Res.string.settings_appearance_app_language),
description = stringResource(selectedAppLanguage.labelRes),
- icon = Icons.Rounded.Language,
isTablet = isTablet,
onClick = { showLanguageSheet = true },
)
@@ -186,10 +194,23 @@ internal fun LazyListScope.appearanceSettingsContent(
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
+ SettingsNavigationRow(
+ title = stringResource(Res.string.compose_settings_page_homescreen),
+ description = stringResource(Res.string.settings_content_discovery_homescreen_description),
+ isTablet = isTablet,
+ onClick = onHomescreenClick,
+ )
+ SettingsGroupDivider(isTablet = isTablet)
+ SettingsNavigationRow(
+ title = stringResource(Res.string.collections_header),
+ description = stringResource(Res.string.settings_content_discovery_collections_description),
+ isTablet = isTablet,
+ onClick = onCollectionsClick,
+ )
+ SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = stringResource(Res.string.compose_settings_page_continue_watching),
description = stringResource(Res.string.settings_appearance_continue_watching_description),
- icon = Icons.Rounded.Style,
isTablet = isTablet,
onClick = onContinueWatchingClick,
)
@@ -197,13 +218,42 @@ internal fun LazyListScope.appearanceSettingsContent(
SettingsNavigationRow(
title = stringResource(Res.string.compose_settings_page_poster_customization),
description = stringResource(Res.string.settings_appearance_poster_customization_description),
- icon = Icons.Rounded.Tune,
isTablet = isTablet,
onClick = onPosterCustomizationClick,
)
}
}
}
+ item {
+ SettingsSection(
+ title = stringResource(Res.string.compose_settings_page_streams),
+ isTablet = isTablet,
+ ) {
+ SettingsGroup(isTablet = isTablet) {
+ SettingsNavigationRow(
+ title = stringResource(Res.string.compose_settings_page_streams),
+ description = stringResource(Res.string.compose_settings_root_streams_description),
+ isTablet = isTablet,
+ onClick = onStreamsClick,
+ )
+ }
+ }
+ }
+ item {
+ SettingsSection(
+ title = stringResource(Res.string.compose_settings_page_meta_screen),
+ isTablet = isTablet,
+ ) {
+ SettingsGroup(isTablet = isTablet) {
+ SettingsNavigationRow(
+ title = stringResource(Res.string.compose_settings_page_meta_screen),
+ description = stringResource(Res.string.settings_content_discovery_meta_screen_description),
+ isTablet = isTablet,
+ onClick = onMetaScreenClick,
+ )
+ }
+ }
+ }
}
private data class AppLanguageSheetOption(
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ContentDiscoverySettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ContentDiscoverySettingsPage.kt
index bd2652ca0..e4d923875 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ContentDiscoverySettingsPage.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/ContentDiscoverySettingsPage.kt
@@ -1,26 +1,13 @@
package com.nuvio.app.features.settings
import androidx.compose.foundation.lazy.LazyListScope
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.CollectionsBookmark
-import androidx.compose.material.icons.rounded.Extension
-import androidx.compose.material.icons.rounded.Home
-import androidx.compose.material.icons.rounded.Hub
-import androidx.compose.material.icons.rounded.Tune
import com.nuvio.app.core.build.AppFeaturePolicy
import nuvio.composeapp.generated.resources.Res
import nuvio.composeapp.generated.resources.compose_settings_page_addons
-import nuvio.composeapp.generated.resources.compose_settings_page_homescreen
-import nuvio.composeapp.generated.resources.compose_settings_page_meta_screen
import nuvio.composeapp.generated.resources.compose_settings_page_plugins
-import nuvio.composeapp.generated.resources.collections_header
import nuvio.composeapp.generated.resources.settings_content_discovery_addons_description
import nuvio.composeapp.generated.resources.settings_content_discovery_addons_description_appstore
-import nuvio.composeapp.generated.resources.settings_content_discovery_collections_description
-import nuvio.composeapp.generated.resources.settings_content_discovery_homescreen_description
-import nuvio.composeapp.generated.resources.settings_content_discovery_meta_screen_description
import nuvio.composeapp.generated.resources.settings_content_discovery_plugins_description
-import nuvio.composeapp.generated.resources.settings_content_discovery_section_home
import nuvio.composeapp.generated.resources.settings_content_discovery_section_sources
import org.jetbrains.compose.resources.stringResource
@@ -29,9 +16,6 @@ internal fun LazyListScope.contentDiscoveryContent(
showPluginsEntry: Boolean,
onAddonsClick: () -> Unit,
onPluginsClick: () -> Unit,
- onHomescreenClick: () -> Unit,
- onMetaScreenClick: () -> Unit,
- onCollectionsClick: () -> Unit = {},
) {
item {
SettingsSection(
@@ -48,7 +32,6 @@ internal fun LazyListScope.contentDiscoveryContent(
Res.string.settings_content_discovery_addons_description
},
),
- icon = Icons.Rounded.Extension,
isTablet = isTablet,
onClick = onAddonsClick,
)
@@ -56,7 +39,6 @@ internal fun LazyListScope.contentDiscoveryContent(
SettingsNavigationRow(
title = stringResource(Res.string.compose_settings_page_plugins),
description = stringResource(Res.string.settings_content_discovery_plugins_description),
- icon = Icons.Rounded.Hub,
isTablet = isTablet,
onClick = onPluginsClick,
)
@@ -64,34 +46,4 @@ internal fun LazyListScope.contentDiscoveryContent(
}
}
}
- item {
- SettingsSection(
- title = stringResource(Res.string.settings_content_discovery_section_home),
- isTablet = isTablet,
- ) {
- SettingsGroup(isTablet = isTablet) {
- SettingsNavigationRow(
- title = stringResource(Res.string.compose_settings_page_homescreen),
- description = stringResource(Res.string.settings_content_discovery_homescreen_description),
- icon = Icons.Rounded.Home,
- isTablet = isTablet,
- onClick = onHomescreenClick,
- )
- SettingsNavigationRow(
- title = stringResource(Res.string.compose_settings_page_meta_screen),
- description = stringResource(Res.string.settings_content_discovery_meta_screen_description),
- icon = Icons.Rounded.Tune,
- isTablet = isTablet,
- onClick = onMetaScreenClick,
- )
- SettingsNavigationRow(
- title = stringResource(Res.string.collections_header),
- description = stringResource(Res.string.settings_content_discovery_collections_description),
- icon = Icons.Rounded.CollectionsBookmark,
- isTablet = isTablet,
- onClick = onCollectionsClick,
- )
- }
- }
- }
}
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/IntegrationsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/IntegrationsSettingsPage.kt
index a4999c899..2925674f2 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/IntegrationsSettingsPage.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/IntegrationsSettingsPage.kt
@@ -1,7 +1,5 @@
package com.nuvio.app.features.settings
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.rounded.CloudQueue
import androidx.compose.foundation.lazy.LazyListScope
import nuvio.composeapp.generated.resources.compose_settings_page_debrid
import nuvio.composeapp.generated.resources.Res
@@ -44,7 +42,6 @@ internal fun LazyListScope.integrationsContent(
SettingsNavigationRow(
title = stringResource(Res.string.compose_settings_page_debrid),
description = stringResource(Res.string.settings_integrations_debrid_description),
- icon = Icons.Rounded.CloudQueue,
isTablet = isTablet,
onClick = onDebridClick,
)
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt
index 1fc6ca309..14bc6114f 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsModels.kt
@@ -74,16 +74,16 @@ internal enum class SettingsPage(
category = SettingsCategory.General,
parentPage = Root,
),
- Streams(
- titleRes = Res.string.compose_settings_page_streams,
- category = SettingsCategory.General,
- parentPage = Root,
- ),
Appearance(
titleRes = Res.string.compose_settings_page_appearance,
category = SettingsCategory.General,
parentPage = Root,
),
+ Streams(
+ titleRes = Res.string.compose_settings_page_streams,
+ category = SettingsCategory.General,
+ parentPage = Appearance,
+ ),
Advanced(
titleRes = Res.string.compose_settings_page_advanced,
category = SettingsCategory.Advanced,
@@ -122,12 +122,12 @@ internal enum class SettingsPage(
Homescreen(
titleRes = Res.string.compose_settings_page_homescreen,
category = SettingsCategory.General,
- parentPage = ContentDiscovery,
+ parentPage = Appearance,
),
MetaScreen(
titleRes = Res.string.compose_settings_page_meta_screen,
category = SettingsCategory.General,
- parentPage = ContentDiscovery,
+ parentPage = Appearance,
),
Integrations(
titleRes = Res.string.compose_settings_page_integrations,
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt
index 36f04b12b..1ed8b5d86 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt
@@ -14,7 +14,6 @@ import androidx.compose.material.icons.rounded.Notifications
import androidx.compose.material.icons.rounded.Palette
import androidx.compose.material.icons.rounded.People
import androidx.compose.material.icons.rounded.PlayArrow
-import androidx.compose.material.icons.rounded.Style
import androidx.compose.material.icons.rounded.Tune
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -32,7 +31,6 @@ import nuvio.composeapp.generated.resources.compose_settings_page_integrations
import nuvio.composeapp.generated.resources.compose_settings_page_licenses_attributions
import nuvio.composeapp.generated.resources.compose_settings_page_notifications
import nuvio.composeapp.generated.resources.compose_settings_page_playback
-import nuvio.composeapp.generated.resources.compose_settings_page_streams
import nuvio.composeapp.generated.resources.compose_settings_page_supporters_contributors
import nuvio.composeapp.generated.resources.compose_settings_root_account_description
import nuvio.composeapp.generated.resources.compose_settings_root_appearance_description
@@ -44,7 +42,6 @@ import nuvio.composeapp.generated.resources.compose_settings_root_downloads_titl
import nuvio.composeapp.generated.resources.compose_settings_root_general_section
import nuvio.composeapp.generated.resources.compose_settings_root_integrations_description
import nuvio.composeapp.generated.resources.compose_settings_root_notifications_description
-import nuvio.composeapp.generated.resources.compose_settings_root_streams_description
import nuvio.composeapp.generated.resources.compose_settings_root_switch_profile_description
import nuvio.composeapp.generated.resources.compose_settings_root_switch_profile_title
import nuvio.composeapp.generated.resources.compose_settings_root_trakt_description
@@ -62,7 +59,6 @@ import org.jetbrains.compose.resources.stringResource
internal fun LazyListScope.settingsRootContent(
isTablet: Boolean,
onPlaybackClick: () -> Unit,
- onStreamsClick: () -> Unit,
onAppearanceClick: () -> Unit,
onAdvancedClick: () -> Unit,
onNotificationsClick: () -> Unit,
@@ -156,14 +152,6 @@ internal fun LazyListScope.settingsRootContent(
onClick = onPlaybackClick,
)
SettingsGroupDivider(isTablet = isTablet)
- SettingsNavigationRow(
- title = stringResource(Res.string.compose_settings_page_streams),
- description = stringResource(Res.string.compose_settings_root_streams_description),
- icon = Icons.Rounded.Style,
- isTablet = isTablet,
- onClick = onStreamsClick,
- )
- SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = stringResource(Res.string.compose_settings_page_integrations),
description = stringResource(Res.string.compose_settings_root_integrations_description),
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt
index fab7e7ed3..d822438b2 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt
@@ -545,7 +545,6 @@ private fun MobileSettingsScreen(
settingsRootContent(
isTablet = false,
onPlaybackClick = { onPageChange(SettingsPage.Playback) },
- onStreamsClick = { onPageChange(SettingsPage.Streams) },
onAppearanceClick = { onPageChange(SettingsPage.Appearance) },
onAdvancedClick = { onPageChange(SettingsPage.Advanced) },
onNotificationsClick = { onPageChange(SettingsPage.Notifications) },
@@ -609,6 +608,10 @@ private fun MobileSettingsScreen(
onLiquidGlassNativeTabBarToggle = onLiquidGlassNativeTabBarToggle,
selectedAppLanguage = selectedAppLanguage,
onAppLanguageSelected = onAppLanguageSelected,
+ onHomescreenClick = onHomescreenClick,
+ onMetaScreenClick = onMetaScreenClick,
+ onStreamsClick = { onPageChange(SettingsPage.Streams) },
+ onCollectionsClick = onCollectionsClick,
onContinueWatchingClick = onContinueWatchingClick,
onPosterCustomizationClick = { onPageChange(SettingsPage.PosterCustomization) },
)
@@ -640,9 +643,6 @@ private fun MobileSettingsScreen(
showPluginsEntry = AppFeaturePolicy.pluginsEnabled,
onAddonsClick = onAddonsClick,
onPluginsClick = onPluginsClick,
- onHomescreenClick = onHomescreenClick,
- onMetaScreenClick = onMetaScreenClick,
- onCollectionsClick = onCollectionsClick,
)
SettingsPage.Addons -> addonsSettingsContent()
SettingsPage.Plugins -> if (AppFeaturePolicy.pluginsEnabled) pluginsSettingsContent() else addonsSettingsContent()
@@ -944,7 +944,6 @@ private fun TabletSettingsScreen(
settingsRootContent(
isTablet = true,
onPlaybackClick = { openInlinePage(SettingsPage.Playback) },
- onStreamsClick = { openInlinePage(SettingsPage.Streams) },
onAppearanceClick = { openInlinePage(SettingsPage.Appearance) },
onAdvancedClick = { openInlinePage(SettingsPage.Advanced) },
onNotificationsClick = { openInlinePage(SettingsPage.Notifications) },
@@ -1012,6 +1011,10 @@ private fun TabletSettingsScreen(
onLiquidGlassNativeTabBarToggle = onLiquidGlassNativeTabBarToggle,
selectedAppLanguage = selectedAppLanguage,
onAppLanguageSelected = onAppLanguageSelected,
+ onHomescreenClick = { openInlinePage(SettingsPage.Homescreen) },
+ onMetaScreenClick = { openInlinePage(SettingsPage.MetaScreen) },
+ onStreamsClick = { openInlinePage(SettingsPage.Streams) },
+ onCollectionsClick = onCollectionsClick,
onContinueWatchingClick = { openInlinePage(SettingsPage.ContinueWatching) },
onPosterCustomizationClick = { openInlinePage(SettingsPage.PosterCustomization) },
)
@@ -1043,9 +1046,6 @@ private fun TabletSettingsScreen(
showPluginsEntry = AppFeaturePolicy.pluginsEnabled,
onAddonsClick = { openInlinePage(SettingsPage.Addons) },
onPluginsClick = { openInlinePage(SettingsPage.Plugins) },
- onHomescreenClick = { openInlinePage(SettingsPage.Homescreen) },
- onMetaScreenClick = { openInlinePage(SettingsPage.MetaScreen) },
- onCollectionsClick = onCollectionsClick,
)
SettingsPage.Addons -> addonsSettingsContent()
SettingsPage.Plugins -> if (AppFeaturePolicy.pluginsEnabled) pluginsSettingsContent() else addonsSettingsContent()
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsSearch.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsSearch.kt
index 69ab6a9af..6924857b2 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsSearch.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsSearch.kt
@@ -471,8 +471,8 @@ internal fun settingsSearchEntries(
key = "collections",
title = collectionsPage,
description = stringResource(Res.string.settings_content_discovery_collections_description),
- page = contentDiscoveryPage,
- section = stringResource(Res.string.settings_content_discovery_section_home),
+ page = layoutPage,
+ section = stringResource(Res.string.settings_appearance_section_home),
category = generalCategory,
icon = Icons.Rounded.CollectionsBookmark,
target = SettingsSearchTarget.Collections,
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/StreamsSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/StreamsSettingsPage.kt
index 7943b55a4..38117df1d 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/StreamsSettingsPage.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/StreamsSettingsPage.kt
@@ -18,7 +18,6 @@ import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Delete
-import androidx.compose.material.icons.rounded.Style
import androidx.compose.material.icons.rounded.Visibility
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
@@ -118,14 +117,12 @@ internal fun LazyListScope.streamsSettingsContent(isTablet: Boolean) {
SettingsNavigationRow(
title = stringResource(Res.string.settings_stream_badge_position_title),
description = badgePlacementLabel,
- icon = Icons.Rounded.Style,
isTablet = isTablet,
onClick = { showBadgePositionDialog = true },
)
SettingsNavigationRow(
title = stringResource(Res.string.settings_stream_badge_urls_title),
description = badgeRulesPreview(currentRules),
- icon = Icons.Rounded.Style,
isTablet = isTablet,
onClick = { showBadgeImportDialog = true },
)