diff --git a/android/app/src/main/java/dev/dettmer/simplenotes/ui/settings/screens/SyncSettingsScreen.kt b/android/app/src/main/java/dev/dettmer/simplenotes/ui/settings/screens/SyncSettingsScreen.kt
index efc2167..3d340c0 100644
--- a/android/app/src/main/java/dev/dettmer/simplenotes/ui/settings/screens/SyncSettingsScreen.kt
+++ b/android/app/src/main/java/dev/dettmer/simplenotes/ui/settings/screens/SyncSettingsScreen.kt
@@ -32,9 +32,11 @@ import dev.dettmer.simplenotes.ui.settings.components.SettingsSectionHeader
import dev.dettmer.simplenotes.ui.settings.components.SettingsSwitch
/**
- * Sync settings screen - Configurable Sync Triggers
- * v1.5.0: Jetpack Compose Settings Redesign
- * v1.6.0: Individual toggle for each sync trigger (onSave, onResume, WiFi-Connect, Periodic, Boot)
+ * Sync settings screen β Restructured for v1.8.0
+ *
+ * Two clear sections:
+ * 1. Sync Triggers (all 5 triggers grouped logically)
+ * 2. Network & Performance (WiFi-only + Parallel Downloads)
*/
@Composable
fun SyncSettingsScreen(
@@ -50,13 +52,9 @@ fun SyncSettingsScreen(
val triggerBoot by viewModel.triggerBoot.collectAsState()
val syncInterval by viewModel.syncInterval.collectAsState()
- // π v1.8.0: Parallel Downloads
val maxParallelDownloads by viewModel.maxParallelDownloads.collectAsState()
-
- // π v1.7.0: WiFi-only sync
val wifiOnlySync by viewModel.wifiOnlySync.collectAsState()
- // Check if server is configured
val isServerConfigured = viewModel.isServerConfigured()
SettingsScaffold(
@@ -71,7 +69,7 @@ fun SyncSettingsScreen(
) {
Spacer(modifier = Modifier.height(8.dp))
- // π v1.6.0: Offline Mode Warning if server not configured
+ // ββ Offline Mode Warning ββ
if (!isServerConfigured) {
SettingsInfoCard(
text = stringResource(R.string.sync_offline_mode_message),
@@ -89,37 +87,14 @@ fun SyncSettingsScreen(
}
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- // π v1.7.0: NETZWERK-EINSCHRΓNKUNG Section (Global fΓΌr alle Trigger)
+ // SECTION 1: SYNC TRIGGERS
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- SettingsSectionHeader(text = stringResource(R.string.sync_section_network))
-
- // WiFi-Only Sync Toggle - Gilt fΓΌr ALLE Trigger auΓer WiFi-Connect
- SettingsSwitch(
- title = stringResource(R.string.sync_wifi_only_title),
- subtitle = stringResource(R.string.sync_wifi_only_subtitle),
- checked = wifiOnlySync,
- onCheckedChange = { viewModel.setWifiOnlySync(it) },
- icon = Icons.Default.Wifi,
- enabled = isServerConfigured
- )
-
- // Info-Hinweis dass WiFi-Connect davon ausgenommen ist
- if (wifiOnlySync && isServerConfigured) {
- SettingsInfoCard(
- text = stringResource(R.string.sync_wifi_only_hint)
- )
- }
-
- SettingsDivider()
-
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- // SOFORT-SYNC Section
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ SettingsSectionHeader(text = stringResource(R.string.sync_section_triggers))
+ // ββ Sofort-Sync ββ
SettingsSectionHeader(text = stringResource(R.string.sync_section_instant))
- // onSave Trigger
SettingsSwitch(
title = stringResource(R.string.sync_trigger_on_save_title),
subtitle = stringResource(R.string.sync_trigger_on_save_subtitle),
@@ -129,7 +104,6 @@ fun SyncSettingsScreen(
enabled = isServerConfigured
)
- // onResume Trigger
SettingsSwitch(
title = stringResource(R.string.sync_trigger_on_resume_title),
subtitle = stringResource(R.string.sync_trigger_on_resume_subtitle),
@@ -139,15 +113,11 @@ fun SyncSettingsScreen(
enabled = isServerConfigured
)
- SettingsDivider()
-
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- // HINTERGRUND-SYNC Section
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ Spacer(modifier = Modifier.height(4.dp))
+ // ββ Hintergrund-Sync ββ
SettingsSectionHeader(text = stringResource(R.string.sync_section_background))
- // WiFi-Connect Trigger
SettingsSwitch(
title = stringResource(R.string.sync_trigger_wifi_connect_title),
subtitle = stringResource(R.string.sync_trigger_wifi_connect_subtitle),
@@ -157,7 +127,6 @@ fun SyncSettingsScreen(
enabled = isServerConfigured
)
- // Periodic Trigger
SettingsSwitch(
title = stringResource(R.string.sync_trigger_periodic_title),
subtitle = stringResource(R.string.sync_trigger_periodic_subtitle),
@@ -167,7 +136,7 @@ fun SyncSettingsScreen(
enabled = isServerConfigured
)
- // Periodic Interval Selection (only visible if periodic trigger is enabled)
+ // Interval-Auswahl (nur sichtbar wenn Periodic aktiv)
if (triggerPeriodic && isServerConfigured) {
Spacer(modifier = Modifier.height(8.dp))
@@ -198,15 +167,6 @@ fun SyncSettingsScreen(
Spacer(modifier = Modifier.height(8.dp))
}
- SettingsDivider()
-
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- // ADVANCED Section (Boot Sync)
- // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
- SettingsSectionHeader(text = stringResource(R.string.sync_section_advanced))
-
- // Boot Trigger
SettingsSwitch(
title = stringResource(R.string.sync_trigger_boot_title),
subtitle = stringResource(R.string.sync_trigger_boot_subtitle),
@@ -215,10 +175,47 @@ fun SyncSettingsScreen(
icon = Icons.Default.SettingsInputAntenna,
enabled = isServerConfigured
)
-
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ // ββ Info Card ββ
+ val manualHintText = if (isServerConfigured) {
+ stringResource(R.string.sync_manual_hint)
+ } else {
+ stringResource(R.string.sync_manual_hint_disabled)
+ }
+
+ SettingsInfoCard(
+ text = manualHintText
+ )
+
+ SettingsDivider()
+
+ // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ // SECTION 2: NETZWERK & PERFORMANCE
+ // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+ SettingsSectionHeader(text = stringResource(R.string.sync_section_network_performance))
+
+ // WiFi-Only Toggle
+ SettingsSwitch(
+ title = stringResource(R.string.sync_wifi_only_title),
+ subtitle = stringResource(R.string.sync_wifi_only_subtitle),
+ checked = wifiOnlySync,
+ onCheckedChange = { viewModel.setWifiOnlySync(it) },
+ icon = Icons.Default.Wifi,
+ enabled = isServerConfigured
+ )
+
+ if (wifiOnlySync && isServerConfigured) {
+ SettingsInfoCard(
+ text = stringResource(R.string.sync_wifi_only_hint)
+ )
+ }
+
Spacer(modifier = Modifier.height(8.dp))
- // π v1.8.0: Max Parallel Downloads
+ // Parallel Downloads
val parallelOptions = listOf(
RadioOption(
value = 1,
@@ -253,19 +250,6 @@ fun SyncSettingsScreen(
selectedValue = maxParallelDownloads,
onValueSelected = { viewModel.setMaxParallelDownloads(it) }
)
-
- SettingsDivider()
-
- // Manual Sync Info
- val manualHintText = if (isServerConfigured) {
- stringResource(R.string.sync_manual_hint)
- } else {
- stringResource(R.string.sync_manual_hint_disabled)
- }
-
- SettingsInfoCard(
- text = manualHintText
- )
Spacer(modifier = Modifier.height(16.dp))
}
diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml
index 5a70579..f3831c6 100644
--- a/android/app/src/main/res/values-de/strings.xml
+++ b/android/app/src/main/res/values-de/strings.xml
@@ -291,6 +291,10 @@
π‘ Hintergrund-Sync
βοΈ Erweitert
+
+ Sync-AuslΓΆser
+ Netzwerk & Performance
+
π‘ Der WiFi-Connect Trigger ist davon nicht betroffen \u2013 er synchronisiert immer wenn WiFi verbunden wird.
Sync funktioniert nur wenn WLAN verbunden ist
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 46a6cd5..3fe061f 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -291,6 +291,10 @@
π‘ Background Sync
βοΈ Advanced
+
+ Sync Triggers
+ Network & Performance
+
π‘ WiFi-Connect Trigger is not affected by this setting \u2013 it always syncs when WiFi is connected.
Sync only works when WiFi is connected