feat(settings): Enhance settings navigation with dynamic section visibility

This commit is contained in:
tapframe 2026-04-01 18:45:15 +05:30
parent 0fed9edc18
commit 63b8ca01e0
3 changed files with 79 additions and 62 deletions

View file

@ -1,6 +1,7 @@
package com.nuvio.app.features.settings
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.AccountCircle
import androidx.compose.material.icons.rounded.Settings
import androidx.compose.ui.graphics.vector.ImageVector
@ -8,6 +9,7 @@ internal enum class SettingsCategory(
val label: String,
val icon: ImageVector,
) {
Account("Account", Icons.Rounded.AccountCircle),
General("General", Icons.Rounded.Settings),
}

View file

@ -17,70 +17,76 @@ internal fun LazyListScope.settingsRootContent(
onIntegrationsClick: () -> Unit,
onAccountClick: () -> Unit,
onSwitchProfileClick: (() -> Unit)? = null,
showAccountSection: Boolean = true,
showGeneralSection: Boolean = true,
) {
item {
SettingsSection(
title = "ACCOUNT",
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
if (onSwitchProfileClick != null) {
if (showAccountSection) {
item {
SettingsSection(
title = "ACCOUNT",
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
if (onSwitchProfileClick != null) {
SettingsNavigationRow(
title = "Switch Profile",
description = "Change to a different profile.",
icon = Icons.Rounded.People,
isTablet = isTablet,
onClick = onSwitchProfileClick,
)
SettingsGroupDivider(isTablet = isTablet)
}
SettingsNavigationRow(
title = "Switch Profile",
description = "Change to a different profile.",
icon = Icons.Rounded.People,
title = "Account",
description = "Manage your account, sign out, or delete.",
icon = Icons.Rounded.AccountCircle,
isTablet = isTablet,
onClick = onSwitchProfileClick,
onClick = onAccountClick,
)
SettingsGroupDivider(isTablet = isTablet)
}
SettingsNavigationRow(
title = "Account",
description = "Manage your account, sign out, or delete.",
icon = Icons.Rounded.AccountCircle,
isTablet = isTablet,
onClick = onAccountClick,
)
}
}
}
item {
SettingsSection(
title = "GENERAL",
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
SettingsNavigationRow(
title = "Playback",
description = "Control player behavior and viewing defaults.",
icon = Icons.Rounded.PlayArrow,
isTablet = isTablet,
onClick = onPlaybackClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Appearance",
description = "Tune home presentation and visual preferences.",
icon = Icons.Rounded.Palette,
isTablet = isTablet,
onClick = onAppearanceClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Content & Discovery",
description = "Manage addons and discovery sources.",
icon = Icons.Rounded.Extension,
isTablet = isTablet,
onClick = onContentDiscoveryClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Integrations",
description = "Connect TMDB, Trakt, and MDBList services.",
icon = Icons.Rounded.Link,
isTablet = isTablet,
onClick = onIntegrationsClick,
)
if (showGeneralSection) {
item {
SettingsSection(
title = "GENERAL",
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
SettingsNavigationRow(
title = "Playback",
description = "Control player behavior and viewing defaults.",
icon = Icons.Rounded.PlayArrow,
isTablet = isTablet,
onClick = onPlaybackClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Appearance",
description = "Tune home presentation and visual preferences.",
icon = Icons.Rounded.Palette,
isTablet = isTablet,
onClick = onAppearanceClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Content & Discovery",
description = "Manage addons and discovery sources.",
icon = Icons.Rounded.Extension,
isTablet = isTablet,
onClick = onContentDiscoveryClick,
)
SettingsGroupDivider(isTablet = isTablet)
SettingsNavigationRow(
title = "Integrations",
description = "Connect TMDB, Trakt, and MDBList services.",
icon = Icons.Rounded.Link,
isTablet = isTablet,
onClick = onIntegrationsClick,
)
}
}
}
}

View file

@ -300,12 +300,19 @@ private fun TabletSettingsScreen(
HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant)
Spacer(modifier = Modifier.height(10.dp))
SettingsSidebarItem(
label = activeCategory.label,
icon = activeCategory.icon,
selected = true,
onClick = { selectedCategory = activeCategory.name },
)
SettingsCategory.entries.forEach { category ->
SettingsSidebarItem(
label = category.label,
icon = category.icon,
selected = category == activeCategory,
onClick = {
selectedCategory = category.name
if (page != SettingsPage.Root) {
onPageChange(SettingsPage.Root)
}
},
)
}
}
}
@ -336,6 +343,8 @@ private fun TabletSettingsScreen(
onIntegrationsClick = { onPageChange(SettingsPage.Integrations) },
onAccountClick = onAccountClick,
onSwitchProfileClick = onSwitchProfile,
showAccountSection = activeCategory == SettingsCategory.Account,
showGeneralSection = activeCategory == SettingsCategory.General,
)
SettingsPage.Playback -> playbackSettingsContent(
isTablet = true,