forked from fritob/Camper-Monitor
Drei Dateien aus solar-integration wurden beim Zusammenführen mit dev_watch übersehen, weil sie fälschlich als "identisch zwischen den Branches" eingestuft wurden: * DemoData.isEnabled kannte nur noch den Umgebungsvariablen-Weg (CAMPER_DEMO=1). Der Schalter in den Einstellungen – der einzige Weg, Demo-Daten auf einem lokal installierten Build ohne Xcode-Verbindung einzuschalten – fehlte ganz, SettingsView.swift war nie zusammengeführt worden. * LevelSetupView.swift fehlte der komplette Abschnitt "Fahrzeuggrafik" – die Kachel-Auswahl zwischen den VehicleGraphicStyle-Varianten (Vanster/California). Das Feld existierte im Modell und wurde beim Rendern gelesen, war aber nirgends einstellbar. * DeviceCard.swift zeigte die Nivellierungs-Kachel wie jedes andere Gerät (Hauptwert + Nebenwerte) statt der grossen Front/Heck- und Links/Rechts-Anzeige mit Richtungsbuchstaben. Anlass: Im Testbuild fehlte deshalb sowohl der Demo-Modus als auch die Fahrzeuggrafik-Auswahl. Als Konsequenz systematisch alle beim Merge als "bereits identisch" eingestuften Dateien erneut gegengeprüft – keine weiteren Lücken gefunden. Build (App + Watch) und Protokoll-Tests grün. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
66 lines
2.7 KiB
Swift
66 lines
2.7 KiB
Swift
import SwiftUI
|
||
|
||
/// App-weite Einstellungen. Bewusst knapp gehalten – was ein einzelnes Gerät
|
||
/// betrifft, steht bei diesem Gerät.
|
||
struct SettingsView: View {
|
||
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
|
||
#if DEBUG
|
||
@AppStorage(DemoData.enabledKey) private var demoModeEnabled = false
|
||
#endif
|
||
@Environment(PhoneWatchLink.self) private var watch
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
var body: some View {
|
||
NavigationStack {
|
||
List {
|
||
#if DEBUG
|
||
Section {
|
||
Toggle("Demo-Modus", isOn: $demoModeEnabled)
|
||
} header: {
|
||
Text("Entwicklung")
|
||
} footer: {
|
||
Text("Füllt die App mit erfundenen Fahrzeugen und Messwerten, um "
|
||
+ "Ansichten ohne echte Sensoren zu prüfen. Wirkt erst nach "
|
||
+ "einem Neustart der App – einmal beenden (im App-Umschalter "
|
||
+ "nach oben wischen) und wieder öffnen.")
|
||
}
|
||
#endif
|
||
|
||
Section {
|
||
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
|
||
} header: {
|
||
Text("Fehlersuche")
|
||
} footer: {
|
||
Text("Zeigt bei jedem Gerät die technischen Angaben: erkanntes "
|
||
+ "Protokoll, Bluetooth-Merkmale, gesendete Befehle und die "
|
||
+ "Rohdaten der letzten Antwort. Für den Alltag nicht nötig – "
|
||
+ "hilfreich, wenn ein Gerät sich nicht wie erwartet verhält.\n\n"
|
||
+ "Meldet ein Gerät einen Fehler, werden die Angaben ohnehin "
|
||
+ "eingeblendet, auch wenn das hier ausgeschaltet ist.")
|
||
}
|
||
|
||
Section {
|
||
LabeledContent("Apple Watch", value: watch.statusText)
|
||
} footer: {
|
||
Text("Die Uhr zeigt die Werte dieses iPhones und steuert die "
|
||
+ "Kühlbox darüber – sie funkt nicht selbst zu den Geräten. "
|
||
+ "Dafür muss diese App laufen; im Hintergrund liefern "
|
||
+ "Neigungsmesser, BMS und Kühlbox weiter, die "
|
||
+ "Victron-Werbedaten erst wieder im Vordergrund.")
|
||
}
|
||
}
|
||
.navigationTitle("Einstellungen")
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
.toolbar {
|
||
ToolbarItem(placement: .confirmationAction) {
|
||
Button("Fertig") { dismiss() }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
enum AppSettings {
|
||
static let showDiagnosticsKey = "showDiagnostics"
|
||
}
|