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
| 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