feat(v1.8.0): IMPL_006 Sync Progress UI - Complete Implementation

- Add SyncProgress.kt: Data class for entire sync lifecycle UI state
- Add SyncPhase enum: IDLE, PREPARING, UPLOADING, DOWNLOADING, IMPORTING_MARKDOWN, COMPLETED, ERROR
- Rewrite SyncStateManager.kt: SyncProgress (StateFlow) is single source of truth
- Remove pre-set phases: CHECKING_SERVER and SAVING cause flickering
- UPLOADING phase only set when actual uploads happen
- DOWNLOADING phase only set when actual downloads happen
- IMPORTING_MARKDOWN phase only set when feature enabled
- Add onProgress callback to uploadLocalNotes() with uploadedCount/totalToUpload
- Add onProgress callback to downloadRemoteNotes() for actual downloads only
- Progress display: x/y for uploads (known total), count for downloads (unknown)
- Add SyncProgressBanner.kt: Unified banner (replaces dual system)
- Update SyncStatusBanner.kt: Kept for legacy compatibility, only COMPLETED/ERROR
- Update MainViewModel.kt: Remove _syncMessage, add syncProgress StateFlow
- Update MainScreen.kt: Use only SyncProgressBanner (unified)
- Update ComposeMainActivity.kt: Auto-hide COMPLETED (2s), ERROR (4s) via lifecycle
- Add strings.xml (DE+EN): sync_phase_* and sync_wifi_only_error
- Banner appears instantly on sync button click (PREPARING phase)
- Silent auto-sync (onResume) completely silent, errors always shown
- No misleading counters when nothing to sync

Closes #IMPL_006
This commit is contained in:
inventory69
2026-02-09 10:38:47 +01:00
parent bf7a74ec30
commit df37d2a47c
10 changed files with 536 additions and 94 deletions

View File

@@ -76,6 +76,16 @@
<!-- 🆕 v1.8.0 (IMPL_022): Sync-Banner Löschungsanzahl -->
<string name="sync_deleted_on_server_count">%d auf Server gelöscht</string>
<!-- 🆕 v1.8.0 (IMPL_006): Sync-Phasen Strings -->
<string name="sync_phase_preparing">Synchronisiere…</string>
<string name="sync_phase_checking">Prüfe Server…</string>
<string name="sync_phase_uploading">Hochladen…</string>
<string name="sync_phase_downloading">Herunterladen…</string>
<string name="sync_phase_importing_markdown">Markdown importieren…</string>
<string name="sync_phase_saving">Speichern…</string>
<string name="sync_phase_completed">Sync abgeschlossen</string>
<string name="sync_phase_error">Sync fehlgeschlagen</string>
<!-- ============================= -->
<!-- DELETE DIALOGS -->
<!-- ============================= -->
@@ -242,6 +252,7 @@
<string name="sync_section_advanced">⚙️ Erweitert</string>
<string name="sync_wifi_only_hint">💡 Der WiFi-Connect Trigger ist davon nicht betroffen \u2013 er synchronisiert immer wenn WiFi verbunden wird.</string>
<string name="sync_wifi_only_error">Sync funktioniert nur wenn WLAN verbunden ist</string>
<string name="sync_trigger_on_save_title">Nach dem Speichern</string>
<string name="sync_trigger_on_save_subtitle">Sync sofort nach jeder Änderung</string>

View File

@@ -83,6 +83,16 @@
<!-- 🆕 v1.8.0 (IMPL_022): Sync banner deletion count -->
<string name="sync_deleted_on_server_count">%d deleted on server</string>
<!-- 🆕 v1.8.0 (IMPL_006): Sync phase strings -->
<string name="sync_phase_preparing">Synchronizing…</string>
<string name="sync_phase_checking">Checking server…</string>
<string name="sync_phase_uploading">Uploading…</string>
<string name="sync_phase_downloading">Downloading…</string>
<string name="sync_phase_importing_markdown">Importing Markdown…</string>
<string name="sync_phase_saving">Saving…</string>
<string name="sync_phase_completed">Sync complete</string>
<string name="sync_phase_error">Sync failed</string>
<!-- ============================= -->
<!-- DELETE DIALOGS -->
<!-- ============================= -->
@@ -249,6 +259,7 @@
<string name="sync_section_advanced">⚙️ Advanced</string>
<string name="sync_wifi_only_hint">💡 WiFi-Connect Trigger is not affected by this setting \u2013 it always syncs when WiFi is connected.</string>
<string name="sync_wifi_only_error">Sync only works when WiFi is connected</string>
<string name="sync_trigger_on_save_title">After Saving</string>
<string name="sync_trigger_on_save_subtitle">Sync immediately after each change</string>