From 6b6b521c157dfe03797b1dec64f8a615e73a8dfa Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Thu, 21 Sep 2023 20:46:37 -0600 Subject: - [ios] Add direction arrows to reports. - [ios] Use scales for marker sizes and labels. - [ios] Fix builds in Xcode 15. --- iosApp/iosApp.xcodeproj/project.pbxproj | 6 ++- .../iosApp/Assets.xcassets/Angle0.imageset/0 2.svg | 60 ++++++++++++++++++++++ .../Assets.xcassets/Angle0.imageset/Contents.json | 21 ++++++++ .../Assets.xcassets/Angle135.imageset/135.svg | 60 ++++++++++++++++++++++ .../Angle135.imageset/Contents.json | 21 ++++++++ .../Assets.xcassets/Angle180.imageset/180.svg | 60 ++++++++++++++++++++++ .../Angle180.imageset/Contents.json | 21 ++++++++ .../Assets.xcassets/Angle225.imageset/225.svg | 60 ++++++++++++++++++++++ .../Angle225.imageset/Contents.json | 21 ++++++++ .../Assets.xcassets/Angle270.imageset/270.svg | 60 ++++++++++++++++++++++ .../Angle270.imageset/Contents.json | 21 ++++++++ .../Assets.xcassets/Angle315.imageset/315.svg | 60 ++++++++++++++++++++++ .../Angle315.imageset/Contents.json | 21 ++++++++ .../iosApp/Assets.xcassets/Angle45.imageset/45.svg | 60 ++++++++++++++++++++++ .../Assets.xcassets/Angle45.imageset/Contents.json | 21 ++++++++ .../iosApp/Assets.xcassets/Angle90.imageset/90.svg | 59 +++++++++++++++++++++ .../Assets.xcassets/Angle90.imageset/Contents.json | 21 ++++++++ .../Details/Reports/UnitReportsViewModel.swift | 49 ++++++++++-------- iosApp/iosApp/Map/MapViewController.swift | 36 ++++++++----- iosApp/iosApp/Shared/Constants.swift | 19 +++++++ iosApp/iosApp/Shared/MarkerTransformations.swift | 19 +++++++ iosApp/iosApp/Units/UnitsViewModel.swift | 2 +- shared/build.gradle.kts | 5 ++ .../mx/trackermap/TrackerMap/utils/ReportDates.kt | 12 +++++ 24 files changed, 758 insertions(+), 37 deletions(-) create mode 100644 iosApp/iosApp/Assets.xcassets/Angle0.imageset/0 2.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle0.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle135.imageset/135.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle135.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle180.imageset/180.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle180.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle225.imageset/225.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle225.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle270.imageset/270.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle270.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle315.imageset/315.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle315.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle45.imageset/45.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle45.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/Angle90.imageset/90.svg create mode 100644 iosApp/iosApp/Assets.xcassets/Angle90.imageset/Contents.json create mode 100644 iosApp/iosApp/Shared/Constants.swift diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index 2ba44a3..f79521b 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -30,6 +30,7 @@ E36A5A8627B4BFC40070DED5 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = E36A5A8527B4BFC40070DED5 /* FirebaseMessaging */; }; E36DF77B27AB740C003C561C /* MapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E36DF77927AB740C003C561C /* MapViewController.swift */; }; E36DF77C27AB740C003C561C /* MapViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36DF77A27AB740C003C561C /* MapViewController.xib */; }; + E37F5CA92ABD26DE00EA3234 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = E37F5CA82ABD26DE00EA3234 /* Constants.swift */; }; E38F241527A242870069FC45 /* Inject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241427A242870069FC45 /* Inject.swift */; }; E38F241727A242C70069FC45 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241627A242C70069FC45 /* Resolver.swift */; }; E38F241C27A26DD70069FC45 /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38F241B27A26DD70069FC45 /* RootViewModel.swift */; }; @@ -104,6 +105,7 @@ E36A5A8927B4C8BB0070DED5 /* iosApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iosApp.entitlements; sourceTree = ""; }; E36DF77927AB740C003C561C /* MapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapViewController.swift; sourceTree = ""; }; E36DF77A27AB740C003C561C /* MapViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MapViewController.xib; sourceTree = ""; }; + E37F5CA82ABD26DE00EA3234 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; E38F241427A242870069FC45 /* Inject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inject.swift; sourceTree = ""; }; E38F241627A242C70069FC45 /* Resolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Resolver.swift; sourceTree = ""; }; E38F241B27A26DD70069FC45 /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; @@ -290,6 +292,7 @@ E3B5740727F68F5F0018AFCF /* XlsxFile.swift */, E3B5740927F69F750018AFCF /* ShareViewController.swift */, E3F5F2782AB8080E008A47A7 /* OfflineBanner.swift */, + E37F5CA82ABD26DE00EA3234 /* Constants.swift */, ); path = Shared; sourceTree = ""; @@ -430,6 +433,7 @@ E33A236527A530F300DD647F /* SmallLabelStyle.swift in Sources */, E39ABC4327A4E88C00965D05 /* UnitsViewModel.swift in Sources */, E360251B27BCA8A600958B21 /* AccountViewModel.swift in Sources */, + E37F5CA92ABD26DE00EA3234 /* Constants.swift in Sources */, E34A2F4827A7878200AD8AEB /* HyperlinkText.swift in Sources */, E3B5740827F68F5F0018AFCF /* XlsxFile.swift in Sources */, 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, diff --git a/iosApp/iosApp/Assets.xcassets/Angle0.imageset/0 2.svg b/iosApp/iosApp/Assets.xcassets/Angle0.imageset/0 2.svg new file mode 100644 index 0000000..efe814f --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle0.imageset/0 2.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle0.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle0.imageset/Contents.json new file mode 100644 index 0000000..be69468 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle0.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "0 2.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle135.imageset/135.svg b/iosApp/iosApp/Assets.xcassets/Angle135.imageset/135.svg new file mode 100644 index 0000000..a7c625b --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle135.imageset/135.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle135.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle135.imageset/Contents.json new file mode 100644 index 0000000..1e01d4c --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle135.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "135.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle180.imageset/180.svg b/iosApp/iosApp/Assets.xcassets/Angle180.imageset/180.svg new file mode 100644 index 0000000..4df8b75 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle180.imageset/180.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle180.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle180.imageset/Contents.json new file mode 100644 index 0000000..cca2175 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle180.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "180.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle225.imageset/225.svg b/iosApp/iosApp/Assets.xcassets/Angle225.imageset/225.svg new file mode 100644 index 0000000..35d4080 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle225.imageset/225.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle225.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle225.imageset/Contents.json new file mode 100644 index 0000000..1b49b8a --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle225.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "225.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle270.imageset/270.svg b/iosApp/iosApp/Assets.xcassets/Angle270.imageset/270.svg new file mode 100644 index 0000000..23562a0 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle270.imageset/270.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle270.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle270.imageset/Contents.json new file mode 100644 index 0000000..9eab5a3 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle270.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "270.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle315.imageset/315.svg b/iosApp/iosApp/Assets.xcassets/Angle315.imageset/315.svg new file mode 100644 index 0000000..a501605 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle315.imageset/315.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle315.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle315.imageset/Contents.json new file mode 100644 index 0000000..fed8257 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle315.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "315.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle45.imageset/45.svg b/iosApp/iosApp/Assets.xcassets/Angle45.imageset/45.svg new file mode 100644 index 0000000..1ce060e --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle45.imageset/45.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle45.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle45.imageset/Contents.json new file mode 100644 index 0000000..a785b47 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle45.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "45.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/Angle90.imageset/90.svg b/iosApp/iosApp/Assets.xcassets/Angle90.imageset/90.svg new file mode 100644 index 0000000..de994b5 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle90.imageset/90.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/Angle90.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/Angle90.imageset/Contents.json new file mode 100644 index 0000000..c84e36d --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/Angle90.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "90.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Details/Reports/UnitReportsViewModel.swift b/iosApp/iosApp/Details/Reports/UnitReportsViewModel.swift index 0132685..3a99f16 100644 --- a/iosApp/iosApp/Details/Reports/UnitReportsViewModel.swift +++ b/iosApp/iosApp/Details/Reports/UnitReportsViewModel.swift @@ -19,6 +19,7 @@ import Foundation import Combine import shared +@MainActor class UnitReportsViewModel: ObservableObject { @Inject var reportController: ReportController @Inject var geofencesController: GeofencesController @@ -38,25 +39,27 @@ class UnitReportsViewModel: ObservableObject { } @Published var periodType: ReportDates.PeriodTypes = .today { didSet { - switch periodType { - case .today: - reportPeriod = ReportDates.ReportPeriodToday() - case .last24: - reportPeriod = ReportDates.ReportPeriodLast24() - case .yesterday: - reportPeriod = ReportDates.ReportPeriodYesterday() - case .thisWeek: - reportPeriod = ReportDates.ReportPeriodThisWeek() - case .last7: - reportPeriod = ReportDates.ReportPeriodLast7() - case .thisMonth: - reportPeriod = ReportDates.ReportPeriodThisMonth() - case .last30: - reportPeriod = ReportDates.ReportPeriodLast30() - case .custom: - reportPeriod = ReportDates.ReportPeriodCustom(from: nil, to: nil) - default: - reportPeriod = ReportDates.ReportPeriodToday() + Task { @MainActor in + switch periodType { + case .today: + reportPeriod = ReportDates.ReportPeriodToday() + case .last24: + reportPeriod = ReportDates.ReportPeriodLast24() + case .yesterday: + reportPeriod = ReportDates.ReportPeriodYesterday() + case .thisWeek: + reportPeriod = ReportDates.ReportPeriodThisWeek() + case .last7: + reportPeriod = ReportDates.ReportPeriodLast7() + case .thisMonth: + reportPeriod = ReportDates.ReportPeriodThisMonth() + case .last30: + reportPeriod = ReportDates.ReportPeriodLast30() + case .custom: + reportPeriod = ReportDates.ReportPeriodCustom(from: nil, to: nil) + default: + reportPeriod = ReportDates.ReportPeriodToday() + } } } } @@ -136,11 +139,15 @@ class UnitReportsViewModel: ObservableObject { } func setReport (report: ReportController.Report) { - self.report = report + Task { @MainActor in + self.report = report + } } private func setGeofences(geofences: [Int: Geofence]) { - self.geofences = geofences + Task { @MainActor in + self.geofences = geofences + } } func fetchReport(xlsx: Bool = false) { diff --git a/iosApp/iosApp/Map/MapViewController.swift b/iosApp/iosApp/Map/MapViewController.swift index a320781..f424389 100644 --- a/iosApp/iosApp/Map/MapViewController.swift +++ b/iosApp/iosApp/Map/MapViewController.swift @@ -224,14 +224,14 @@ class OurMaplyViewController: MaplyViewController { Float(marker.latitude)) } - let fontSize = 11.0 + let fontSize = Constants.markerLabelTextSize let colorReport = UIColor(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0) let colorLabel = UIColor.darkGray let colorLabelOutline = UIColor.white let vectorDesc: [AnyHashable : Any] = [ kMaplyColor: colorReport, - kMaplyVecWidth: 12.0, + kMaplyVecWidth: Constants.reportLineWidth, kMaplyWideVecImpl: kMaplyWideVecImplPerf ] @@ -248,26 +248,26 @@ class OurMaplyViewController: MaplyViewController { screenMarker.layoutImportance = .greatestFiniteMagnitude screenMarker.loc = MaplyCoordinateMakeWithDegrees(Float(marker.longitude), Float(marker.latitude)) - var type: Marker.Type_ = .default_ + var image: UIImage if isReport { // For reports, position, start and end icons must be different switch i { - case markers.startIndex: type = .reportStart - case markers.endIndex - 1: type = .reportEnd - default: type = .reportPosition + case markers.startIndex: image = getIcon(markerType: .reportStart) + case markers.endIndex - 1: image = getIcon(markerType: .reportEnd) + default: image = getIcon(forDirection: points[i], to: points[i + 1]) } } else { - type = marker.type + image = getIcon(markerType: marker.type) } - screenMarker.image = getIcon(markerType: type) + screenMarker.image = image - var size = 50.0 + var size = Constants.markerSize if isReport { // For reports, position, start and end sizes must be different switch i { - case markers.startIndex: size = 40.0 - case markers.endIndex - 1: size = 40.0 - default: size = 22.0 + case markers.startIndex: size = Constants.markerSize + case markers.endIndex - 1: size = Constants.markerSize + default: size = Constants.vertexsize } } screenMarker.size = CGSize(width: size, height: size) @@ -342,14 +342,14 @@ class OurMaplyViewController: MaplyViewController { func display(geofences: [Geofence]) { clear(geofences: true) - let fontSize = 11.0 + let fontSize = Constants.geofenceLabelTextSize let colorFill = UIColor(red: 0.10, green: 0.46, blue: 0.82, alpha: 1.00) let colorLabel = UIColor(red: 0.10, green: 0.46, blue: 0.82, alpha: 1.00) let colorLabelOutline = UIColor.white let vectorDesc: [AnyHashable : Any] = [ kMaplyColor: colorFill, - kMaplyVecWidth: 12.0, + kMaplyVecWidth: Constants.geofenceLineWidth, kMaplyWideVecImpl: kMaplyWideVecImplPerf ] @@ -439,4 +439,12 @@ class OurMaplyViewController: MaplyViewController { return UIImage(named: MarkerTransformations .markerTypeToImageName(markerType: markerType))! } + + private func getIcon(forDirection a: MaplyCoordinate, to b: MaplyCoordinate) -> UIImage { + let vectorX = b.x - a.x + let vectorY = b.y - a.y + let angleRad = atan2(vectorY, vectorX) + return UIImage(named: MarkerTransformations + .angleToImageName(rad: angleRad))! + } } diff --git a/iosApp/iosApp/Shared/Constants.swift b/iosApp/iosApp/Shared/Constants.swift new file mode 100644 index 0000000..de82b0b --- /dev/null +++ b/iosApp/iosApp/Shared/Constants.swift @@ -0,0 +1,19 @@ +// +// Constants.swift +// iosApp +// +// Created by Ivan Avalos on 21/09/23. +// Copyright © 2023 orgName. All rights reserved. +// + +import Foundation +import UIKit + +struct Constants { + static var markerSize = 14.0 * UIScreen.main.scale + static var vertexsize = 8.0 * UIScreen.main.scale + static var markerLabelTextSize = UIFont.smallSystemFontSize + static var geofenceLabelTextSize = UIFont.smallSystemFontSize + static var geofenceLineWidth = 4.0 * UIScreen.main.scale + static var reportLineWidth = 4.0 * UIScreen.main.scale +} diff --git a/iosApp/iosApp/Shared/MarkerTransformations.swift b/iosApp/iosApp/Shared/MarkerTransformations.swift index 1e51907..c496d76 100644 --- a/iosApp/iosApp/Shared/MarkerTransformations.swift +++ b/iosApp/iosApp/Shared/MarkerTransformations.swift @@ -50,4 +50,23 @@ class MarkerTransformations { } return imageName } + + static let STEP = Float.pi / 8 + + static func angleToImageName(rad: Float) -> String { + var imageName: String + switch rad { + case 0.0 ..< STEP: imageName = "Angle0" + case STEP ..< STEP * 3: imageName = "Angle45" + case STEP * 3 ..< STEP * 5: imageName = "Angle90" + case STEP * 5 ..< STEP * 7: imageName = "Angle135" + case STEP * 7 ..< STEP * 9: imageName = "Angle180" + case STEP * 9 ..< STEP * 11: imageName = "Angle225" + case STEP * 11 ..< STEP * 13: imageName = "Angle270" + case STEP * 13 ..< STEP * 15: imageName = "Angle315" + case STEP * 15 ..< STEP * 16: imageName = "Angle0" + default: imageName = angleToImageName(rad: Float.pi * 2 + rad) + } + return imageName + } } diff --git a/iosApp/iosApp/Units/UnitsViewModel.swift b/iosApp/iosApp/Units/UnitsViewModel.swift index b12291e..52e0c39 100644 --- a/iosApp/iosApp/Units/UnitsViewModel.swift +++ b/iosApp/iosApp/Units/UnitsViewModel.swift @@ -106,8 +106,8 @@ class UnitsViewModel: ObservableObject { print("Positions") Task { @MainActor in self.units = units + updateSelectedUnit() } - updateSelectedUnit() } private func setGeofences(geofences: [Int: Geofence]) { diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 67acdb8..6517f7f 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -19,6 +19,11 @@ kotlin { ).forEach { it.binaries.framework { baseName = "shared" + + // Fix builds in Xcode 15 + if (System.getenv("XCODE_VERSION_MAJOR") == "1500") { + linkerOpts += "-ld64" + } } } diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt index d261d07..9f3a142 100644 --- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt +++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt @@ -23,6 +23,18 @@ import kotlinx.datetime.* @DelicateCoroutinesApi class ReportDates { + // Don't remove! Used by iOS + enum class PeriodTypes { + TODAY, + LAST_24, + YESTERDAY, + THIS_WEEK, + LAST_7, + THIS_MONTH, + LAST_30, + CUSTOM + } + sealed class ReportPeriod { val timezone = TimeZone.currentSystemDefault() private val clock = Clock.System -- cgit v1.2.3