From 4bfd70bf3b514285183f8626b6cf66d2c1821f4d Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Thu, 11 Jul 2024 23:52:35 -0700 Subject: [PATCH] Environment display for sensor data --- Localizable.xcstrings | 6 ++++++ Meshtastic/Extensions/UserDefaults.swift | 4 ++++ Meshtastic/Views/Nodes/Helpers/NodeDetail.swift | 16 ++++++++++++++-- Meshtastic/Views/Settings/AppSettings.swift | 9 +++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 37a38619..94efd577 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -6963,6 +6963,9 @@ }, "Enter DFU Mode" : { + }, + "environment" : { + }, "Environment" : { @@ -22388,6 +22391,9 @@ }, "Waypoint Options" : { + }, + "Weather Conditions" : { + }, "Web Flasher" : { diff --git a/Meshtastic/Extensions/UserDefaults.swift b/Meshtastic/Extensions/UserDefaults.swift index b94a0776..afc51ffb 100644 --- a/Meshtastic/Extensions/UserDefaults.swift +++ b/Meshtastic/Extensions/UserDefaults.swift @@ -71,6 +71,7 @@ extension UserDefaults { case channelMessageNotifications case modemPreset case firmwareVersion + case environmentEnableWeatherKit case testIntEnum } @@ -161,6 +162,9 @@ extension UserDefaults { @UserDefault(.firmwareVersion, defaultValue: "0.0.0") static var firmwareVersion: String + + @UserDefault(.environmentEnableWeatherKit, defaultValue: false) + static var environmentEnableWeatherKit: Bool @UserDefault(.testIntEnum, defaultValue: .one) static var testIntEnum: TestIntEnum diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index 67ebe71e..c9196364 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -10,6 +10,7 @@ import CoreLocation import OSLog struct NodeDetail: View { + private let gridItemLayout = Array(repeating: GridItem(.flexible(), spacing: 10), count: 2) private static let relativeFormatter: RelativeDateTimeFormatter = { let formatter = RelativeDateTimeFormatter() formatter.unitsStyle = .full @@ -157,9 +158,20 @@ struct NodeDetail: View { } } } - if node.hasPositions || node.hasEnvironmentMetrics { + if node.hasPositions && UserDefaults.environmentEnableWeatherKit || node.hasEnvironmentMetrics { Section("Environment") { - LocalWeatherConditions(location: node.latestPosition?.nodeLocation) + if !node.hasEnvironmentMetrics { + LocalWeatherConditions(location: node.latestPosition?.nodeLocation) + } else { + VStack { + LazyVGrid(columns: gridItemLayout) { + WeatherConditionsCompactWidget(temperature: String(node.latestEnvironmentMetrics?.temperature.formattedTemperature() ?? "99°"), symbolName: "cloud.sun", description: "TEMP") + HumidityCompactWidget(humidity: Int(node.latestEnvironmentMetrics?.relativeHumidity ?? 0), dewPoint: "99°") + PressureCompactWidget(pressure: String(node.latestEnvironmentMetrics?.barometricPressure ?? 0.0), unit: "mbar") + // WindCompactWidget(speed: windSpeed, gust: windGust, direction: windCompassDirection) + } + } + } } } Section("Logs") { diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index 8716c1a3..d99d510b 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -12,6 +12,7 @@ struct AppSettings: View { @State var totalDownloadedTileSize = "" @State private var isPresentingCoreDataResetConfirm = false @State private var isPresentingDeleteMapTilesConfirm = false + @AppStorage("environmentEnableWeatherKit") private var environmentEnableWeatherKit: Bool = true var body: some View { VStack { Form { @@ -23,6 +24,14 @@ struct AppSettings: View { } } } + Section(header: Text("environment")) { + VStack(alignment: .leading) { + Toggle(isOn: $environmentEnableWeatherKit) { + Label("Weather Conditions", systemImage: "cloud.sun") + } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + } + } Section(header: Text("App Data")) { Button { isPresentingCoreDataResetConfirm = true