From 9bb5ee933534e21b80066840ef8bd9bd6cfbaf8c Mon Sep 17 00:00:00 2001 From: Joshua Pirihi Date: Sat, 25 Dec 2021 14:48:01 +1300 Subject: [PATCH] Add map type selector to the settings tab --- .../UserInterfaceState.xcuserstate | Bin 40835 -> 48402 bytes .../Map/Custom/PositionAnnotationView.swift | 7 ++- MeshtasticClient/Views/Map/MapView.swift | 56 +++++++++++++----- MeshtasticClient/Views/Nodes/NodeMap.swift | 7 ++- .../Views/Settings/AppSettings.swift | 40 +++++++++++++ 5 files changed, 89 insertions(+), 21 deletions(-) diff --git a/Meshtastic Client.xcodeproj/project.xcworkspace/xcuserdata/joshuapirihi.xcuserdatad/UserInterfaceState.xcuserstate b/Meshtastic Client.xcodeproj/project.xcworkspace/xcuserdata/joshuapirihi.xcuserdatad/UserInterfaceState.xcuserstate index 5d4768a39ba9b50dbd71b8cd1573204eba8a6ae0..c864b6bced4699ee3447fb57884461b74e50ef5e 100644 GIT binary patch literal 48402 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 E0693kA^-pY delta 19889 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 let mapViewDelegate = MapViewDelegate() - + + //observe changes to the key in UserDefaults + @AppStorage("meshMapType") var type: String = "hybrid" + func makeUIView(context: Context) -> MKMapView { + let map = MKMapView(frame: .zero) + map.userTrackingMode = .follow - map.mapType = .satellite + + let region = MKCoordinateRegion( center: map.centerCoordinate, latitudinalMeters: CLLocationDistance(exactly: 500)!, longitudinalMeters: CLLocationDistance(exactly: 500)!) + map.setRegion(map.regionThatFits(region), animated: false) + + //self.updateMapType(map) + map.register(PositionAnnotationView.self, forAnnotationViewWithReuseIdentifier: NSStringFromClass(PositionAnnotationView.self)) + return map } func updateUIView(_ view: MKMapView, context: Context) { view.delegate = mapViewDelegate // (1) This should be set in makeUIView, but it is getting reset to `nil` view.translatesAutoresizingMaskIntoConstraints = false // (2) In the absence of this, we get constraints error on rotation; and again, it seems one should do this in makeUIView, but has to be here - //addRoute(to: view) - showNodePositions(to: view) + + self.updateMapType(view) + + self.showNodePositions(to: view) + } + + func updateMapType(_ map: MKMapView) { + + switch self.type { + case "satellite": + map.mapType = .satellite + break + case "standard": + map.mapType = .standard + break + case "hybrid": + map.mapType = .hybrid + break + default: + map.mapType = .hybrid + } } } private extension MapView { - //func addRoute(to view: MKMapView) { - // if !view.overlays.isEmpty { - // view.removeOverlays(view.overlays) - // } - //guard let route = route else { return } - //let mapRect = route.boundingMapRect - //view.setVisibleMapRect(mapRect, edgePadding: UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10), animated: true) - //view.addOverlay(route) - //} func showNodePositions(to view: MKMapView) { + + //clear any existing annotations if !view.annotations.isEmpty { view.removeAnnotations(view.annotations) } for node in self.nodes { //try and get the last position - if (node.positions?.count ?? 0) > 0 { + if (node.positions?.count ?? 0) > 0 && (node.positions!.lastObject as! PositionEntity).coordinate != nil { let annotation = PositionAnnotation() - annotation.coordinate = (node.positions!.lastObject as! PositionEntity).coordinate ?? CLLocationCoordinate2D(latitude: 0, longitude: 0) + annotation.coordinate = (node.positions!.lastObject as! PositionEntity).coordinate! annotation.title = node.user?.longName ?? "Unknown" annotation.shortName = node.user?.shortName?.uppercased() ?? "???" diff --git a/MeshtasticClient/Views/Nodes/NodeMap.swift b/MeshtasticClient/Views/Nodes/NodeMap.swift index 88211a53..c2cca6e3 100644 --- a/MeshtasticClient/Views/Nodes/NodeMap.swift +++ b/MeshtasticClient/Views/Nodes/NodeMap.swift @@ -16,11 +16,15 @@ struct NodeMap: View { @Environment(\.managedObjectContext) var context @EnvironmentObject var bleManager: BLEManager + //@AppStorage("meshMapType") var meshMapType: String = "hybrid" + @State private var showLabels: Bool = false @State private var annotationItems: [MapLocation] = [] @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \NodeInfoEntity.lastHeard, ascending: false)], animation: .default) + + private var locationNodes: FetchedResults var annotations: [MapLocation] = [MapLocation]() @@ -72,8 +76,7 @@ struct NodeMap: View { }*/ - MapView(nodes: self.locationNodes) - + MapView(nodes: self.locationNodes)//.environmentObject(userSettings) //} .frame(maxHeight: .infinity) .ignoresSafeArea(.all, edges: [.leading, .trailing]) diff --git a/MeshtasticClient/Views/Settings/AppSettings.swift b/MeshtasticClient/Views/Settings/AppSettings.swift index d541e3d8..3710d2eb 100644 --- a/MeshtasticClient/Views/Settings/AppSettings.swift +++ b/MeshtasticClient/Views/Settings/AppSettings.swift @@ -2,6 +2,7 @@ import Foundation import Combine import SwiftUI import SwiftProtobuf +import MapKit enum KeyboardType: Int, CaseIterable, Identifiable { @@ -30,6 +31,28 @@ enum KeyboardType: Int, CaseIterable, Identifiable { } } +enum MeshMapType: String, CaseIterable, Identifiable { + + case satellite = "satellite" + case hybrid = "hybrid" + case standard = "standard" + + var id: String { self.rawValue } + + var description: String { + get { + switch self { + case .satellite: + return "Satellite" + case .standard: + return "Standard" + case .hybrid: + return "Hybrid" + } + } + } +} + class UserSettings: ObservableObject { // @Published var meshtasticUsername: String { // didSet { @@ -61,6 +84,14 @@ class UserSettings: ObservableObject { UserDefaults.standard.set(meshActivityLog, forKey: "meshActivityLog") } } + + @Published var meshMapType: String { + didSet { + UserDefaults.standard.set(meshMapType, forKey: "meshMapType") + } + } + + init() { @@ -70,6 +101,7 @@ class UserSettings: ObservableObject { //self.provideLocation = UserDefaults.standard.object(forKey: "provideLocation") as? Bool ?? false self.keyboardType = UserDefaults.standard.object(forKey: "keyboardType") as? Int ?? 0 self.meshActivityLog = UserDefaults.standard.object(forKey: "meshActivityLog") as? Bool ?? false + self.meshMapType = UserDefaults.standard.string(forKey: "meshMapType") ?? "hybrid" } } @@ -140,6 +172,14 @@ struct AppSettings: View { .listRowSeparator(.visible) } } + Section(header: Text("MAP OPTIONS")) { + Picker("Map Type", selection: $userSettings.meshMapType) { + ForEach(MeshMapType.allCases) { map in + Text(map.description) + } + } + .pickerStyle(DefaultPickerStyle()) + } } } .navigationTitle("App Settings")