fix(android) detekt: extract SettingsList helper
SettingsScreen was still 75/60 after the dialog extraction. Extracted the Column-of-cards body into SettingsList so the main composable only holds state collection, LaunchedEffect, and the Scaffold shell. Also fixed the helper's state-param type — SettingsViewModel uses SettingsState not SettingsUiState. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -91,44 +91,15 @@ fun SettingsScreen(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
) { inner ->
|
) { inner ->
|
||||||
Column(
|
SettingsList(
|
||||||
modifier = Modifier
|
inner = inner,
|
||||||
.fillMaxSize()
|
state = state,
|
||||||
.padding(inner)
|
themeMode = themeMode,
|
||||||
.verticalScroll(rememberScrollState())
|
onPickTheme = themeVm::setThemeMode,
|
||||||
.padding(16.dp),
|
onNavToRequests = { navController.navigate(Requests) },
|
||||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
onNavToAdmin = { navController.navigate(Admin) },
|
||||||
) {
|
onSignOutClick = { showSignOutConfirm = true },
|
||||||
AccountCard(
|
)
|
||||||
username = state.username,
|
|
||||||
isAdmin = state.isAdmin,
|
|
||||||
serverUrl = state.serverUrl,
|
|
||||||
)
|
|
||||||
NavTile(
|
|
||||||
icon = Lucide.ListMusic,
|
|
||||||
title = "My requests",
|
|
||||||
subtitle = "Track what you've asked Minstrel to add",
|
|
||||||
onClick = { navController.navigate(Requests) },
|
|
||||||
)
|
|
||||||
if (state.isAdmin) {
|
|
||||||
NavTile(
|
|
||||||
icon = Lucide.Shield,
|
|
||||||
title = "Admin",
|
|
||||||
subtitle = "Manage requests, quarantine, and users",
|
|
||||||
onClick = { navController.navigate(Admin) },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
ProfileCard()
|
|
||||||
PasswordCard()
|
|
||||||
ListenBrainzCard()
|
|
||||||
AppearanceCard(themeMode = themeMode, onPick = themeVm::setThemeMode)
|
|
||||||
StorageCard()
|
|
||||||
AboutCard()
|
|
||||||
SignOutButton(
|
|
||||||
isSigningOut = state.isSigningOut,
|
|
||||||
onSignOut = { showSignOutConfirm = true },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (showSignOutConfirm) {
|
if (showSignOutConfirm) {
|
||||||
SignOutConfirmDialog(
|
SignOutConfirmDialog(
|
||||||
@@ -141,6 +112,53 @@ fun SettingsScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun SettingsList(
|
||||||
|
inner: androidx.compose.foundation.layout.PaddingValues,
|
||||||
|
state: SettingsState,
|
||||||
|
themeMode: ThemeMode,
|
||||||
|
onPickTheme: (ThemeMode) -> Unit,
|
||||||
|
onNavToRequests: () -> Unit,
|
||||||
|
onNavToAdmin: () -> Unit,
|
||||||
|
onSignOutClick: () -> Unit,
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(inner)
|
||||||
|
.verticalScroll(rememberScrollState())
|
||||||
|
.padding(16.dp),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
|
) {
|
||||||
|
AccountCard(
|
||||||
|
username = state.username,
|
||||||
|
isAdmin = state.isAdmin,
|
||||||
|
serverUrl = state.serverUrl,
|
||||||
|
)
|
||||||
|
NavTile(
|
||||||
|
icon = Lucide.ListMusic,
|
||||||
|
title = "My requests",
|
||||||
|
subtitle = "Track what you've asked Minstrel to add",
|
||||||
|
onClick = onNavToRequests,
|
||||||
|
)
|
||||||
|
if (state.isAdmin) {
|
||||||
|
NavTile(
|
||||||
|
icon = Lucide.Shield,
|
||||||
|
title = "Admin",
|
||||||
|
subtitle = "Manage requests, quarantine, and users",
|
||||||
|
onClick = onNavToAdmin,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
ProfileCard()
|
||||||
|
PasswordCard()
|
||||||
|
ListenBrainzCard()
|
||||||
|
AppearanceCard(themeMode = themeMode, onPick = onPickTheme)
|
||||||
|
StorageCard()
|
||||||
|
AboutCard()
|
||||||
|
SignOutButton(isSigningOut = state.isSigningOut, onSignOut = onSignOutClick)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SignOutConfirmDialog(onConfirm: () -> Unit, onDismiss: () -> Unit) {
|
private fun SignOutConfirmDialog(onConfirm: () -> Unit, onDismiss: () -> Unit) {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
|
|||||||
Reference in New Issue
Block a user