Add tiles above labels setting, add delete cached tiles button

This commit is contained in:
Garth Vander Houwen 2023-05-07 08:01:16 -07:00
parent 7b39ba5e9e
commit d16708b337
8 changed files with 90 additions and 14 deletions

View file

@ -103,6 +103,7 @@
DDB75A142A0593E2006ED576 /* OfflineTileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB75A132A0593E2006ED576 /* OfflineTileManager.swift */; };
DDB75A162A0594AD006ED576 /* TileOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB75A152A0594AD006ED576 /* TileOverlay.swift */; };
DDB75A1A2A05EB67006ED576 /* alpha.png in Resources */ = {isa = PBXBuildFile; fileRef = DDB75A192A05EB67006ED576 /* alpha.png */; };
DDB75A1C2A076DFA006ED576 /* TilesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB75A1B2A076DFA006ED576 /* TilesView.swift */; };
DDC2E15826CE248E0042C5E4 /* MeshtasticApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC2E15726CE248E0042C5E4 /* MeshtasticApp.swift */; };
DDC2E15C26CE248F0042C5E4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDC2E15B26CE248F0042C5E4 /* Assets.xcassets */; };
DDC2E15F26CE248F0042C5E4 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDC2E15E26CE248F0042C5E4 /* Preview Assets.xcassets */; };
@ -291,6 +292,7 @@
DDB75A132A0593E2006ED576 /* OfflineTileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OfflineTileManager.swift; sourceTree = "<group>"; };
DDB75A152A0594AD006ED576 /* TileOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TileOverlay.swift; sourceTree = "<group>"; };
DDB75A192A05EB67006ED576 /* alpha.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = alpha.png; sourceTree = "<group>"; };
DDB75A1B2A076DFA006ED576 /* TilesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TilesView.swift; sourceTree = "<group>"; };
DDBA45EC299ED78100DEEDDC /* MeshtasticDataModelV8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV8.xcdatamodel; sourceTree = "<group>"; };
DDC2E15426CE248E0042C5E4 /* Meshtastic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Meshtastic.app; sourceTree = BUILT_PRODUCTS_DIR; };
DDC2E15726CE248E0042C5E4 /* MeshtasticApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticApp.swift; sourceTree = "<group>"; };
@ -399,6 +401,7 @@
DD964FC32974767D007C176F /* MapViewFitExtension.swift */,
DD2AD8A7296D2DF9001FF0E7 /* MapViewSwiftUI.swift */,
DDDB443529F6287000EE2349 /* MapButtons.swift */,
DDB75A1B2A076DFA006ED576 /* TilesView.swift */,
);
path = Custom;
sourceTree = "<group>";
@ -1004,6 +1007,7 @@
DD2160AF28C5552500C17253 /* MQTTConfig.swift in Sources */,
DDDB444229F8A88700EE2349 /* Double.swift in Sources */,
DD5E520F298EE33B00D21B61 /* cannedmessages.pb.swift in Sources */,
DDB75A1C2A076DFA006ED576 /* TilesView.swift in Sources */,
DDB75A162A0594AD006ED576 /* TileOverlay.swift in Sources */,
DDF924CA26FBB953009FE055 /* ConnectedDevice.swift in Sources */,
DD3CC6BE28E4CD9800FA9159 /* BatteryGauge.swift in Sources */,

View file

@ -14,11 +14,13 @@ extension UserDefaults {
case preferredPeripheralId
case provideLocation
case provideLocationInterval
case mapLayer
case meshMapRecentering
case meshMapShowNodeHistory
case meshMapShowRouteLines
case enableOfflineMaps
case mapTileServer
case mapTilesAboveLabels
}
func reset() {
@ -121,4 +123,13 @@ extension UserDefaults {
UserDefaults.standard.set(newValue, forKey: "mapTileServer")
}
}
static var mapTilesAboveLabels: Bool {
get {
UserDefaults.standard.bool(forKey: "mapTilesAboveLabels")
}
set {
UserDefaults.standard.set(newValue, forKey: "mapTilesAboveLabels")
}
}
}

View file

@ -105,7 +105,7 @@ struct MapViewSwiftUI: UIViewRepresentable {
if !UserDefaults.enableOfflineMapsMBTiles {
let overlay = TileOverlay()
overlay.canReplaceMapContent = false
mapView.addOverlay(overlay, level: .aboveLabels)
mapView.addOverlay(overlay, level: UserDefaults.mapTilesAboveLabels ? .aboveLabels : .aboveRoads)
}
case .satellite:
mapView.mapType = .satellite

View file

@ -0,0 +1,48 @@
//
// TilesView.swift
// Meshtastic
//
// Copyright(c) Garth Vander Houwen on 5/6/23.
//
import SwiftUI
import MapKit
struct TilesView: View {
@ObservedObject var tileManager = OfflineTileManager.shared
@State var totalDownloadedTileSize = ""
var body: some View {
Button(action: {
tileManager.removeAll()
totalDownloadedTileSize = tileManager.getAllDownloadedSize()
print("delete all tiles")
}) {
HStack {
Image(systemName: "trash")
.foregroundColor(.red)
Text("\("map.tiles.delete".localized) (\(totalDownloadedTileSize))")
.foregroundColor(.red)
Spacer()
}
}
.onAppear(perform: {
totalDownloadedTileSize = tileManager.getAllDownloadedSize()
})
Divider()
}
}
// MARK: Previews
struct TilesView_Previews: PreviewProvider {
static var previews: some View {
TilesView()
.previewLayout(.fixed(width: 300, height: 80))
.environment(\.colorScheme, .light)
}
}

View file

@ -22,6 +22,7 @@ struct NodeMap: View {
@State var enableOfflineMaps: Bool = UserDefaults.enableOfflineMaps
@State var mapTileServer: String = UserDefaults.mapTileServer
@State var enableOfflineMapsMBTiles: Bool = UserDefaults.enableOfflineMapsMBTiles
@State var mapTilesAboveLabels: Bool = UserDefaults.mapTilesAboveLabels
@FetchRequest(sortDescriptors: [NSSortDescriptor(key: "time", ascending: true)],
predicate: NSPredicate(format: "time >= %@ && nodePosition != nil", Calendar.current.startOfDay(for: Date()) as NSDate), animation: .none)
@ -143,11 +144,12 @@ struct NodeMap: View {
.onTapGesture {
self.enableOfflineMaps.toggle()
UserDefaults.enableOfflineMaps = self.enableOfflineMaps
if !self.enableOfflineMaps {
if self.selectedMapLayer == .offline {
self.selectedMapLayer = .standard
}
}
}
// Text("If you have shared a MBTiles file with meshtastic it will be loaded.")
// .font(.caption)
// .foregroundColor(.gray)
if UserDefaults.enableOfflineMaps {
VStack {
@ -168,6 +170,20 @@ struct NodeMap: View {
UserDefaults.mapTileServer = newMapTileServer
}
}
Text("A tile server will be used (defaults to wikimedia OSM) to load and cache map tiles as you browse the Offline map type.")
.font(.caption)
.foregroundColor(.gray)
Divider()
Toggle(isOn: $mapTilesAboveLabels) {
Text("Tiles above Labels")
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
.onTapGesture {
self.mapTilesAboveLabels.toggle()
UserDefaults.mapTilesAboveLabels = self.mapTilesAboveLabels
}
Divider()
TilesView()
}
Toggle(isOn: $enableOfflineMapsMBTiles) {
Text("Enable MB Tiles")
@ -177,6 +193,9 @@ struct NodeMap: View {
self.enableOfflineMapsMBTiles.toggle()
UserDefaults.enableOfflineMapsMBTiles = self.enableOfflineMapsMBTiles
}
Text("The latest MBTiles file shared with meshtastic will be loaded into the map.")
.font(.caption)
.foregroundColor(.gray)
}
}
}

View file

@ -138,9 +138,7 @@
"lora.config"="LoRa Einstellungen";
"map"="Mesh Karte";
"map.centering"="Centering";
"map.tiles.download"="Download Tiles";
"map.tiles.delete"="Delete Tiles";
"map.tiles.downloading"="Downloading Tiles";
"map.tiles.delete"="Delete Cached Tiles";
"map.recentering"="Automatic Re-centering";
"map.type"="kartentyp";
"map.usertrackingmode"="User tracking mode";

View file

@ -139,9 +139,7 @@
"map"="Mesh Map";
"map.type"="Default Type";
"map.centering"="Centering Mode";
"map.tiles.download"="Download Tiles";
"map.tiles.delete"="Delete Tiles";
"map.tiles.downloading"="Downloading Tiles";
"map.tiles.delete"="Delete Cached Tiles";
"map.recentering"="Automatic Re-centering";
"map.usertrackingmode"="User tracking mode";
"map.usertrackingmode.follow"="Follow";

View file

@ -138,9 +138,7 @@
"lora.config"="LoRa 配置";
"map"="Mesh 地图";
"map.centering"="Centering";
"map.tiles.download"="Download Tiles";
"map.tiles.delete"="Delete Tiles";
"map.tiles.downloading"="Downloading Tiles";
"map.tiles.delete"="Delete Cached Tiles";
"map.recentering"="Automatic Re-centering";
"map.type"="地图类型";
"map.usertrackingmode"="User tracking mode";