SettingsScreen: adjust style

This commit is contained in:
Pierre-Yves Nicolas
2026-04-02 13:07:10 +02:00
parent 4aae5accae
commit 7a9e4203ed

View File

@@ -31,6 +31,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Folder import androidx.compose.material.icons.filled.Folder
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedButton
@@ -42,6 +43,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalResources
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -108,28 +110,28 @@ private fun SettingsContent(
Column( Column(
modifier modifier
.fillMaxSize() .fillMaxSize()
.padding(20.dp) .padding(vertical = 8.dp, horizontal = 24.dp)
.verticalScroll(rememberScrollState()) .verticalScroll(rememberScrollState())
) { ) {
val context = LocalResources.current
Text(stringResource(R.string.settings_section_scan), style = MaterialTheme.typography.titleLarge) Text(stringResource(R.string.settings_section_scan), style = MaterialTheme.typography.titleLarge)
Spacer(Modifier.height(32.dp)) Spacer(Modifier.height(16.dp))
Text(stringResource(R.string.color_mode_default), style = MaterialTheme.typography.titleMedium) RadioButtonGroup(
R.string.color_mode_default,
DefaultColorMode.entries.forEach { mode -> DefaultColorMode.entries,
Row(verticalAlignment = Alignment.CenterVertically) { onClick = onDefaultColorModeChanged,
RadioButton( label = { t -> context.getString(t.labelResource) },
selected = uiState.defaultColorMode == mode, selectedValue = uiState.defaultColorMode
onClick = { onDefaultColorModeChanged(mode) },
) )
Text(stringResource(mode.labelResource))
}
}
Spacer(Modifier.height(32.dp)) Spacer(Modifier.height(16.dp))
HorizontalDivider()
Spacer(Modifier.height(16.dp))
Text(stringResource(R.string.settings_section_export), style = MaterialTheme.typography.titleLarge) Text(stringResource(R.string.settings_section_export), style = MaterialTheme.typography.titleLarge)
Spacer(Modifier.height(32.dp)) Spacer(Modifier.height(16.dp))
DirectorySettingItem( DirectorySettingItem(
label = stringResource(R.string.export_directory), label = stringResource(R.string.export_directory),
@@ -149,38 +151,51 @@ private fun SettingsContent(
} }
} }
Spacer(Modifier.height(32.dp)) Spacer(Modifier.height(16.dp))
Text(stringResource(R.string.export_quality), style = MaterialTheme.typography.titleMedium) RadioButtonGroup(
R.string.export_quality,
ExportQuality.entries.reversed().forEach { quality -> ExportQuality.entries.reversed(),
Row(verticalAlignment = Alignment.CenterVertically) { onClick = onExportQualityChanged,
RadioButton( label = { t -> context.getString(t.labelResource) },
selected = uiState.exportQuality == quality, selectedValue = uiState.exportQuality
onClick = { onExportQualityChanged(quality) },
) )
Text(stringResource(quality.labelResource))
}
}
Spacer(Modifier.height(32.dp)) Spacer(Modifier.height(32.dp))
Text(stringResource(R.string.export_format), style = MaterialTheme.typography.titleMedium) RadioButtonGroup(
R.string.export_format,
Row(verticalAlignment = Alignment.CenterVertically) { ExportFormat.entries,
RadioButton( onClick = onExportFormatChanged,
selected = uiState.exportFormat == ExportFormat.PDF, label = { t -> t.name},
onClick = { onExportFormatChanged(ExportFormat.PDF) }, selectedValue = uiState.exportFormat
) )
Text("PDF")
} }
}
Row(verticalAlignment = Alignment.CenterVertically) { @Composable
fun <T: Enum<T>> RadioButtonGroup(
title: Int,
entries: List<T>,
onClick: (T) -> Unit,
label: (T) -> String,
selectedValue: T,
) {
Text(stringResource(title), style = MaterialTheme.typography.titleMedium)
entries.forEach { t ->
Row(
modifier = Modifier
.fillMaxWidth()
.clickable { onClick(t) }
.padding(vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton( RadioButton(
selected = uiState.exportFormat == ExportFormat.JPEG, selected = selectedValue == t,
onClick = { onExportFormatChanged(ExportFormat.JPEG) }, onClick = null,
modifier = Modifier.padding(horizontal = 8.dp, vertical = 0.dp)
) )
Text("JPEG") Text(label(t))
} }
} }
} }
@@ -230,6 +245,7 @@ fun DirectorySettingItem(
} }
@Preview @Preview
@Preview(heightDp = 780)
@Composable @Composable
fun SettingsScreenPreviewWithoutDir() { fun SettingsScreenPreviewWithoutDir() {
SettingsScreenPreview(SettingsUiState()) SettingsScreenPreview(SettingsUiState())