aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-09-21 20:46:37 -0600
committerIván Ávalos <avalos@disroot.org>2023-09-21 20:46:37 -0600
commit6b6b521c157dfe03797b1dec64f8a615e73a8dfa (patch)
treeb14ea8b0b7be260e548566e8afb4a985d4d191c0
parent9f9c6b247900a3a08e2b2322896d4f185a12d047 (diff)
downloadetbsa-trackermap-mobile-6b6b521c157dfe03797b1dec64f8a615e73a8dfa.tar.gz
etbsa-trackermap-mobile-6b6b521c157dfe03797b1dec64f8a615e73a8dfa.tar.bz2
etbsa-trackermap-mobile-6b6b521c157dfe03797b1dec64f8a615e73a8dfa.zip
- [ios] Add direction arrows to reports.
- [ios] Use scales for marker sizes and labels. - [ios] Fix builds in Xcode 15.
-rw-r--r--iosApp/iosApp.xcodeproj/project.pbxproj6
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle0.imageset/0 2.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle0.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle135.imageset/135.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle135.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle180.imageset/180.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle180.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle225.imageset/225.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle225.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle270.imageset/270.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle270.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle315.imageset/315.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle315.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle45.imageset/45.svg60
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle45.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle90.imageset/90.svg59
-rw-r--r--iosApp/iosApp/Assets.xcassets/Angle90.imageset/Contents.json21
-rw-r--r--iosApp/iosApp/Details/Reports/UnitReportsViewModel.swift49
-rw-r--r--iosApp/iosApp/Map/MapViewController.swift36
-rw-r--r--iosApp/iosApp/Shared/Constants.swift19
-rw-r--r--iosApp/iosApp/Shared/MarkerTransformations.swift19
-rw-r--r--iosApp/iosApp/Units/UnitsViewModel.swift2
-rw-r--r--shared/build.gradle.kts5
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt12
24 files changed, 758 insertions, 37 deletions
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 = "<group>"; };
E36DF77927AB740C003C561C /* MapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapViewController.swift; sourceTree = "<group>"; };
E36DF77A27AB740C003C561C /* MapViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MapViewController.xib; sourceTree = "<group>"; };
+ E37F5CA82ABD26DE00EA3234 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
E38F241427A242870069FC45 /* Inject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inject.swift; sourceTree = "<group>"; };
E38F241627A242C70069FC45 /* Resolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Resolver.swift; sourceTree = "<group>"; };
E38F241B27A26DD70069FC45 /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = "<group>"; };
@@ -290,6 +292,7 @@
E3B5740727F68F5F0018AFCF /* XlsxFile.swift */,
E3B5740927F69F750018AFCF /* ShareViewController.swift */,
E3F5F2782AB8080E008A47A7 /* OfflineBanner.swift */,
+ E37F5CA82ABD26DE00EA3234 /* Constants.swift */,
);
path = Shared;
sourceTree = "<group>";
@@ -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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="0.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="15.12"
+ inkscape:cx="13.85582"
+ inkscape:cy="17.195767"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(90,3.1749477,3.17515)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 5.8618164,3.1756595 2.9355056,1.4857149 V 2.5830814 L 0.24432832,2.5826243 c 0,0 -2e-8,0.395052 -2e-8,0.592578 0,0.1972212 0,0.5916636 0,0.5916636 l 2.6911773,4.572e-4 v 1.0973665 z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="135.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="21.382909"
+ inkscape:cx="8.6283863"
+ inkscape:cy="10.896553"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(-45,3.175293,3.1743164)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 1.2760955,1.2748867 2.1503383,4.5390721 2.9262936,3.7631168 4.82892,5.6663897 c 0,0 0.279344,-0.279344 0.419016,-0.4190159 C 5.3873924,5.1079173 5.6663053,4.8290044 5.6663053,4.8290044 L 3.763679,2.9257315 4.5396343,2.1497762 Z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="180.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="21.382909"
+ inkscape:cx="8.6283863"
+ inkscape:cy="10.896553"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(-90,3.17515,3.1746617)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 0.4887696,3.1743545 3.4150803,4.8642991 V 3.7669326 l 2.6911772,4.571e-4 c 0,0 0,-0.395052 0,-0.592578 0,-0.1972212 0,-0.5916636 0,-0.5916636 L 3.4150803,2.5826909 V 1.4853244 Z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="225.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="21.382909"
+ inkscape:cx="8.6283863"
+ inkscape:cy="10.896553"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(-135,3.175579,3.175007)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 1.2758633,5.074895 4.5400487,4.2006522 3.7640934,3.4246969 5.6673663,1.5220705 c 0,0 -0.279344,-0.279344 -0.4190159,-0.419016 C 5.1088939,0.96359809 4.829981,0.68468519 4.829981,0.68468519 L 2.9267081,2.5873115 2.1507528,1.8113562 Z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="270.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="21.382909"
+ inkscape:cx="8.6283863"
+ inkscape:cy="10.896553"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(-180,3.1756382,3.17515)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="m 3.1758193,5.8620185 1.6899446,-2.9263106 -1.0973665,0 4.571e-4,-2.6911772 c 0,0 -0.395052,0 -0.592578,-7e-8 -0.1972212,7e-8 -0.5916636,7e-8 -0.5916636,7e-8 l -4.572e-4,2.6911771 -1.0973665,0 z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="315.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="21.382909"
+ inkscape:cx="8.6283863"
+ inkscape:cy="11.972178"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(135,3.1754952,3.1754952)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 5.0756692,5.0756154 4.2014264,1.81143 3.4254711,2.5873853 1.5228447,0.68411246 c 0,0 -0.279344,0.27934395 -0.419016,0.41901584 C 0.96437228,1.2425848 0.68545938,1.5214977 0.68545938,1.5214977 L 2.5880857,3.4247706 1.8121304,4.2007259 Z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="45.svg"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="15.12"
+ inkscape:cx="13.062169"
+ inkscape:cy="10.780423"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012;stroke-dasharray:none"
+ transform="rotate(45,3.1743164,3.1743164)">
+ <path
+ style="color:#000000;fill:#008000;stroke-width:1.00012;stroke-linecap:square;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 5.0744368,1.2758094 1.8102513,2.1500524 2.5862066,2.9260077 0.80607031,4.7066972 1.2250863,5.1257132 1.6434556,5.5440825 3.4235919,3.7633929 4.1995472,4.5393483 Z"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+</svg>
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499999 6.35"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="90.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="px"
+ inkscape:zoom="15.12"
+ inkscape:cx="17.956349"
+ inkscape:cy="11.177249"
+ inkscape:window-width="1920"
+ inkscape:window-height="1008"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="path1"
+ style="stroke-width:1.00012499;stroke-dasharray:none">
+ <path
+ style="color:#000000;fill:#008000;stroke-linecap:square;stroke-width:1.00012499;stroke-dasharray:none"
+ d="M 6.1057692,3.175 A 2.9307692,2.9307692 0 0 1 3.175,6.1057692 2.9307692,2.9307692 0 0 1 0.24423075,3.175 2.9307692,2.9307692 0 0 1 3.175,0.24423075 2.9307692,2.9307692 0 0 1 6.1057692,3.175 Z"
+ id="path6" />
+ <path
+ style="color:#000000;fill:#1a1a1a;stroke-linecap:square;stroke-width:0;stroke-dasharray:none"
+ d="M 3.1757813,0 C 1.4251716,0 0,1.4251716 0,3.1757813 c 0,1.7506096 1.4251716,3.1738281 3.1757813,3.1738281 1.7506096,0 3.1738281,-1.4232185 3.1738281,-3.1738281 C 6.3496094,1.4251716 4.9263909,0 3.1757813,0 Z m 0,0.48828125 c 1.4866254,0 2.6855468,1.20087455 2.6855468,2.68750005 0,1.4866254 -1.1989214,2.6855468 -2.6855468,2.6855468 -1.4866255,0 -2.68750005,-1.1989214 -2.68750005,-2.6855468 0,-1.4866255 1.20087455,-2.68750005 2.68750005,-2.68750005 z"
+ id="path7" />
+ </g>
+ <path
+ id="path5"
+ style="fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:0;stroke-linecap:square;stroke-dasharray:none"
+ d="M 3.1754573,0.48828127 1.4855127,3.414592 H 2.5828792 V 5.9667127 H 3.1754573 3.7671208 V 3.414592 h 1.0973665 z"
+ sodipodi:nodetypes="ccccscccc" />
+ </g>
+</svg>
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