Skip to content

Code-API

Diese Seite beschreibt die zentralen Klassen, Objekte, Composables und öffentlichen Funktionen der App.

Daten- und Repository-Schicht

DashboardDataSource

Vertrag für alle Konfigurations- und Netzwerkzugriffe des ViewModels.

Funktion Zweck
suspend fun getSavedConfigUrl(): String gespeicherte URL lesen
suspend fun getSelectedProfileId(): String gespeicherte Profil-ID lesen
suspend fun getReloadConfigBeforeRefresh(): Boolean Debug-Refresh-Option lesen
suspend fun getThemeMode(): AppThemeMode Theme-Modus lesen
suspend fun getCustomThemeColors(): CustomThemeColors gespeicherte Custom-Farben lesen
suspend fun saveConfigUrl(url: String) URL persistieren
suspend fun saveSelectedProfileId(profileId: String) Profil-ID persistieren
suspend fun saveReloadConfigBeforeRefresh(enabled: Boolean) Debug-Option persistieren
suspend fun saveThemeMode(mode: AppThemeMode) Theme-Modus persistieren
suspend fun saveCustomThemeColors(colors: CustomThemeColors) Custom-Farben persistieren
suspend fun loadCachedConfig(): DashboardConfig? lokale Config aus Cache lesen
suspend fun downloadConfigSource(url: String): DashboardRepository.ConfigSourceResult direkte Config oder index.json laden
suspend fun downloadProfileConfig(indexUrl: String, profileId: String): DashboardConfig Profil aus index.json laden
suspend fun importAndCacheConfigFromUri(uri: Uri): DashboardConfig Datei importieren
suspend fun importThemeTemplateFromUri(uri: Uri, baseColors: CustomThemeColors): ThemeTemplateImportResult Farb-Template importieren
suspend fun fetchStatus(widget, defaults, sharedStatusRequests) Status für ein Widget laden
suspend fun fetchStatuses(widgets, defaults, sharedStatusRequests) Status für mehrere Widgets laden
suspend fun triggerRequestAction(request, defaults) Action-Request ausführen

DashboardRepository

Implementiert DashboardDataSource.

Zusatzfunktion:

Funktion Zweck
suspend fun downloadAndCacheConfig(url: String): DashboardConfig direkte Dashboard-JSON laden, validieren und cachen

Wichtige interne Verantwortungen:

  • URL-Validierung
  • Index- und Config-Parsing
  • Konfigurationsvalidierung
  • Shared-Request-Deduplizierung
  • Request-Resolving

AppPreferences

Funktion Zweck
suspend fun getConfigUrl(): String gespeicherte Config-URL lesen
suspend fun getSelectedProfileId(): String gespeicherte Profil-ID lesen
suspend fun getReloadConfigBeforeRefresh(): Boolean Debug-Refresh lesen
suspend fun getThemeMode(): AppThemeMode Theme-Modus lesen
suspend fun getCustomThemeColors(): CustomThemeColors Custom-Farben lesen
suspend fun saveConfigUrl(url: String) URL setzen oder löschen
suspend fun saveSelectedProfileId(profileId: String) Profil-ID setzen oder löschen
suspend fun saveReloadConfigBeforeRefresh(enabled: Boolean) Debug-Refresh persistieren
suspend fun saveThemeMode(mode: AppThemeMode) Theme-Modus persistieren
suspend fun saveCustomThemeColors(colors: CustomThemeColors) Custom-Farben persistieren

ConfigCache

Funktion Zweck
suspend fun read(): String? lokale JSON-Datei lesen
suspend fun write(rawJson: String) lokale JSON-Datei schreiben

SmartHomeHttpClient

Funktion Zweck
suspend fun execute(request: ResolvedRequest): EndpointExecutionResult final aufgelösten HTTP-Request ausführen und JSON, Text oder PNG erkennen

ViewModel-Schicht

DashboardViewModel

Zentrale Zustandsmaschine der App.

Öffentliche Bedienfunktionen

Funktion Zweck
fun refreshAll() alle Widgets neu laden
fun openSettings() Einstellungsseite öffnen
fun closeSettings() Einstellungsseite schliessen
fun updateConfigUrlDraft(value: String) URL-Eingabe aktualisieren
fun updateReloadConfigBeforeRefresh(enabled: Boolean) Debug-Refresh umschalten
fun updateThemeMode(mode: AppThemeMode) Theme-Modus ändern
fun updateCustomThemeColor(role: ThemeColorRole, argb: Int) eine Custom-Farbe setzen
fun selectTab(tabId: String) aktiven Tab wechseln
fun saveAndLoadConfigurationFromDraft() URL laden, direkte Config oder index.json behandeln
fun updateSelectedConfigProfile(profileId: String) Auswahl im Profildialog ändern
fun dismissConfigProfileDialog() Profildialog schliessen
fun confirmConfigProfileDialog() ausgewähltes Profil laden
fun importConfigurationFromFile(uri: Uri) Konfigurationsdatei importieren
fun importThemeTemplateFromFile(uri: Uri) Farb-Template importieren
fun onWidgetTap(widgetId: String) Tap-Verhalten für alle Widget-Typen
fun dismissSliderDialog() Slider-Dialog schliessen
fun dismissSelectDialog() Select-Dialog schliessen
fun dismissShutterDialog() Rollladen-Dialog schliessen
fun updateSliderDialogValue(value: Float) Slider-Dialogwert ändern
fun confirmSliderDialog() Sliderwert bestätigen
fun updateSelectDialogValue(value: String) Select-Wahl ändern
fun confirmSelectDialog() Select-Wahl bestätigen
fun updateShutterDialogValue(value: Float) Rollladen-Slider ändern, falls vorhanden
fun confirmShutterDialog() Rollladen-Sliderwert senden, falls vorhanden
fun executeShutterUp() Hoch-Kommando senden
fun executeShutterStop() Stop-Kommando senden
fun executeShutterDown() Runter-Kommando senden
fun consumeMessage() Snackbar-/User-Message quittieren
fun consumeBrowserUrl() Browser-Open-Event quittieren

Entwicklerrelevante interne Funktionen

Funktion Zweck
internal fun applyConfig(config: DashboardConfig) Basissnapshots und Tabs aus neuer Config aufbauen

Resolver und Utilities

WidgetPresentationResolver

Funktion Zweck
fun baseSnapshot(widget: WidgetConfig): WidgetSnapshot leeren Start-Snapshot für ein Widget erzeugen
fun resolve(widget, payload, imageBytes): WidgetSnapshot Statusantwort in renderbaren Snapshot umwandeln

JsonPathResolver

Funktion Zweck
fun read(root, path): JsonElement? JSON-Element über Pfad lesen
fun readAsString(root, path): String? JSON-Wert als String lesen
fun stringify(element): String? JSON-Element in Textform bringen

JsonTemplateResolver

Funktion Zweck
fun resolve(template, root): String {{path}}-Template gegen JSON auflösen

JsonPathUpdater

Funktion Zweck
fun upsert(root, path, value): JsonElement? JSON-Pfad in Objektstruktur setzen oder anlegen

RequestValueBindingResolver

Funktion Zweck
fun apply(request, bindings, value): EndpointRequestConfig Request mit Wert in Body, Header oder Query anreichern

SliderActionRequestResolver

Funktion Zweck
fun apply(request, sliderConfig, sliderValue): EndpointRequestConfig Slider-Action-Request aus Slider-Konfiguration bauen
fun apply(request, valueBindings, sliderValue): EndpointRequestConfig Slider-Action-Request aus expliziten Bindings bauen

SelectActionRequestResolver

Funktion Zweck
fun apply(request, valueBindings, selectedValue): EndpointRequestConfig Select-Action-Request mit ausgewähltem Wert bauen

Weitere Utilities

Element Funktion Zweck
UrlPolicy fun isAllowed(url: String): Boolean URL-Regeln prüfen
SliderValueFormatter fun formatForDisplay(value: Double?): String? numerische Darstellung für UI
SliderValueFormatter fun formatForRequest(value: Double): String numerische Darstellung für Requests
TimeFormatter fun format(instant: Instant?): String? Zeitstempel für die kompakte Kopfzeile formatieren
WidgetSize fun fromRaw(value: String): WidgetSize Grössenstring wie 2/1 oder full/1 parsen
DashboardConfig fun resolvedTabs(): List<ResolvedDashboardTab> Tabs und Gruppen in Laufzeitstruktur auflösen

UI und Composables

Bildschirm- und Theme-Entry-Points

Composable Zweck
JsonSmartHomeDashboardTheme(...) App-Theme anwenden
DashboardScreen(...) Hauptscreen rendern und ViewModel-Zustände konsumieren

Grid und Hauptkomponenten

Composable Zweck
DashboardGrid(...) Widgets in variables Raster packen und rendern
SettingsScreen(...) Reiter für Konfiguration, Farben und Debug
ConfigProfilePickerDialog(...) Profilwahl für index.json
SliderActionDialog(...) Slider-Dialog
SelectActionDialog(...) Select-Dialog
ShutterControlDialog(...) Rollladen-Dialog

Gemeinsame Dialogbausteine

Composable Zweck
ActionDialogTitle(title) einheitlicher Dialogtitel
ActionDialogDismissButton(...) Abbrechen-/Schliessen-Button
ActionDialogConfirmButton(...) bestätigender Button
ActionDialogLoadingButton(...) Busy-Button für laufende Kommandos
ActionDialogSliderSection(...) gemeinsamer Sliderblock in Dialogen

Wichtige Datenklassen für UI-Zustand

Typ Rolle
DashboardUiState gesamter Screen-Zustand
CustomThemeColors gespeicherte Custom-Farbpalette
SliderDialogUiState Zustand des Slider-Dialogs
SelectDialogUiState Zustand des Select-Dialogs
ShutterDialogUiState Zustand des Rollladen-Dialogs
ConfigProfileDialogUiState Zustand des Profil-Dialogs
WidgetSnapshot renderbare Widget-Sicht inklusive Status, Fehler und Bilddaten

Wo neu Features ansetzen

Erweiterung Ort
neues JSON-Feld DashboardConfig.kt
neu Validierungsregel DashboardRepository.kt
neu Snapshot-Logik WidgetPresentationResolver.kt
neu Request-Binding-Art RequestValueBindingResolver.kt
neues Widget-Rendering DashboardGrid.kt
neuer Dialog ui/components/* plus DashboardViewModel.kt

Siehe auch