meldestelle/docs/99_Journal/2026-04-18_DeviceInitialization-PlugAndPlay.md

3.0 KiB

Journal: Feature-Modul device-initialization (Plug-and-Play)

Datum: 18. April 2026 Agent: 🏗️ [Lead Architect] / 🎨 [Frontend Expert]

🎯 Zielsetzung

Umstellung des Onboarding-Prozesses auf die neue Plug-and-Play Struktur (ADR-0024). Ziel ist die Kapselung der Geräte-Initialisierung in ein autarkes Feature-Modul mit sauberem State-Management.

🛠️ Durchgeführte Änderungen

1. Neues Feature-Modul: device-initialization

  • Erstellung von frontend/features/device-initialization.
  • Implementierung der Multiplatform-Struktur (Common + JVM).
  • Domain: DeviceInitializationSettings, NetworkRole, DeviceInitializationValidator.
  • Presentation: DeviceInitializationViewModel (StateFlow-basiert), DeviceInitializationUiState.
  • DI: DeviceInitializationModule.kt für Koin.

2. UI-Refactoring

  • Extraktion der UI aus OnboardingScreen in zustandslose Composables.
  • DeviceInitializationScreen im commonMain für den Rahmen.
  • DeviceInitializationConfig.jvm.kt im jvmMain für plattformspezifische UI (z.B. JFileChooser).
  • Umstellung der Nomenklatur von "Onboarding" auf "Geräte-Initialisierung" (DeviceInitialization).

3. Integration in Desktop-Shell

  • Registrierung des Moduls in settings.gradle.kts.
  • Abhängigkeit in meldestelle-desktop/build.gradle.kts hinzugefügt.
  • Koin-Modul in main.kt registriert.
  • DesktopApp.kt und DesktopMainLayout.kt auf das neue ViewModel und den neuen Screen umgestellt.
  • Einführung des DeviceInitializationSettingsManager.

⚠️ Bekannte Themen (Cleanup)

  • Die alten Klassen OnboardingScreen, OnboardingSettings, OnboardingValidator und SettingsManager in at.mocode.desktop.screens.onboarding sind noch vorhanden und müssen in einer folgenden Session gelöscht werden, sobald die Referenzen stabil sind.
  • IDE-Referenzfehler bei neuen KMP-Modulen erfordern oft einen Gradle-Sync/Rebuild.

🏁 Fazit

Der erste Schritt des "Schritt-für-Schritt"-Umbaus ist abgeschlossen. Die Startseite der App folgt nun dem Plug-and-Play Prinzip und ist fachlich präzise benannt.

🧹 Update (Nach-Korrektur)

  • ViewModel-Fix: DeviceInitializationViewModel erbt nun von androidx.lifecycle.ViewModel, was die Integration in koinViewModel ermöglicht.
  • DesktopMainLayout: Syntaxfehler beim koinViewModel-Aufruf behoben und Typos (geraetName -> deviceName) korrigiert. Unbenutzter settings-Parameter entfernt.
  • Multiplatform-Härtung: DeviceInitializationSettingsManager und DeviceInitializationConfig auf expect/actual umgestellt.
  • Beta-Warnungen: @file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") hinzugefügt, um Compiler-Warnungen in den Domain-Klassen zu unterdrücken.
  • WASM-Komplettierung: DeviceInitializationSettingsManager nutzt nun localStorage im Web. DeviceInitializationConfig wurde für WasmJS funktional implementiert (Basis-Konfiguration).
  • UI-Cleanup: Code-Duplikate in der Desktop-Konfiguration durch MsSettingsField reduziert.