From bda11ffd2667dd52fe03ec909975a2f2e108fb1c Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 12 Jun 2022 10:28:26 -0700 Subject: [PATCH] Position Config mockup --- .../Views/Settings/PositionConfig.swift | 183 +++++++++++++++++- 1 file changed, 180 insertions(+), 3 deletions(-) diff --git a/MeshtasticApple/Views/Settings/PositionConfig.swift b/MeshtasticApple/Views/Settings/PositionConfig.swift index 57fab303..fc5c5c22 100644 --- a/MeshtasticApple/Views/Settings/PositionConfig.swift +++ b/MeshtasticApple/Views/Settings/PositionConfig.swift @@ -7,21 +7,198 @@ import SwiftUI +enum GpsUpdateIntervals: Int, CaseIterable, Identifiable { + + case thirtySeconds = 0 + case oneMinute = 60 + case fiveMinutes = 300 + case tenMinutes = 600 + case fifteenMinutes = 900 + case thirtyMinutes = 1800 + case oneHour = 3600 + case maxInt32 = 2147483647 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + + case .thirtySeconds: + return "Thirty Seconds" + case .oneMinute: + return "One Minute" + case .fiveMinutes: + return "Five Minutes" + case .tenMinutes: + return "Ten Minutes" + case .fifteenMinutes: + return "Fifteen Minutes" + case .thirtyMinutes: + return "Thirty Minutes" + case .oneHour: + return "One Hour" + case .maxInt32: + return "On Boot Only" + } + } + } +} + +enum GpsAttemptTimes: Int, CaseIterable, Identifiable { + + case thirtySeconds = 0 + case oneMinute = 60 + case fiveMinutes = 300 + case tenMinutes = 600 + case fifteenMinutes = 900 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + + case .thirtySeconds: + return "Thirty Seconds" + case .oneMinute: + return "One Minute" + case .fiveMinutes: + return "Five Minutes" + case .tenMinutes: + return "Ten Minutes" + case .fifteenMinutes: + return "Fifteen Minutes" + } + } + } +} + +enum PositionBroadcastIntervals: Int, CaseIterable, Identifiable { + + case thirtySeconds = 30 + case oneMinute = 60 + case fiveMinutes = 300 + case tenMinutes = 600 + case fifteenMinutes = 0 + case thirtyMinutes = 1800 + case oneHour = 3600 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + + case .thirtySeconds: + return "Thirty Seconds" + case .oneMinute: + return "One Minute" + case .fiveMinutes: + return "Five Minutes" + case .tenMinutes: + return "Ten Minutes" + case .fifteenMinutes: + return "Fifteen Minutes" + case .thirtyMinutes: + return "Thirty Minutes" + case .oneHour: + return "One Hour" + } + } + } +} + struct PositionConfig: View { @Environment(\.managedObjectContext) var context @EnvironmentObject var bleManager: BLEManager + @State var smartPositionEnabled = true + @State var deviceGpsEnabled = true + @State var fixedPosition = false + @State var gpsUpdateInterval: Int32 = 0 + @State var gpsAttemptTime: Int32 = 0 + @State var positionBroadcastSeconds: Int32 = 0 + var body: some View { VStack { Form { - Section(header: Text("Heading")) { - + + Section(header: Text("Device GPS Options")) { + Toggle(isOn: $deviceGpsEnabled) { + + Label("Device GPS Enabled", systemImage: "location") + } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + if deviceGpsEnabled { + + Picker("GPS Update Interval", selection: $gpsUpdateInterval) { + ForEach(GpsUpdateIntervals.allCases) { ui in + Text(ui.description) + } + } + .pickerStyle(DefaultPickerStyle()) + + Text("How often should we try to get a GPS position.") + .font(.caption) + .listRowSeparator(.visible) + + Picker("GPS Attempt Time", selection: $gpsAttemptTime) { + ForEach(GpsAttemptTimes.allCases) { at in + Text(at.description) + } + } + .pickerStyle(DefaultPickerStyle()) + + Text("How long should we try to get our position during each GPS Update Interval attempt?") + .font(.caption) + .listRowSeparator(.visible) + + + } else { + + Toggle(isOn: $fixedPosition) { + + Label("Fixed Position", systemImage: "location.square.fill") + } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + if fixedPosition { + + Text("Set to current location here") + .font(.caption) + .listRowSeparator(.visible) + } + + } + } + Section(header: Text("Position Packet Options")) { + + Toggle(isOn: $smartPositionEnabled) { + + Label("Smart Position Broadcast", systemImage: "location.fill.viewfinder") + } + .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + if !smartPositionEnabled { + + Picker("Position Broadcast Interval", selection: $positionBroadcastSeconds) { + ForEach(PositionBroadcastIntervals.allCases) { at in + Text(at.description) + } + } + .pickerStyle(DefaultPickerStyle()) + + Text("We should send our position this often (but only if it has changed significantly)") + .font(.caption) + .listRowSeparator(.visible) + + } + } + Section(header: Text("Position Flags")) { + Text("TODO") + .font(.caption) + .listRowSeparator(.visible) } - } } .navigationTitle("Position Config")