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 }, )