From 2c44e13653e0162d66ac6665426a74cc816f962f Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Sun, 30 Jan 2022 00:11:52 -0600 Subject: Added device icon and actions to DeviceRow --- iosApp/Localizable.strings | 5 + iosApp/iosApp.xcodeproj/project.pbxproj | 6 +- .../UserInterfaceState.xcuserstate | Bin 47814 -> 47744 bytes .../MapAnimal.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapAnimal.imageset/animal.svg | 7 + .../MapArrow.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapArrow.imageset/arrow.svg | 4 + .../MapBicycle.imageset/Contents.json | 21 +++ .../MapBicycle.imageset/bicycle.svg | 7 + .../Assets.xcassets/MapBoat.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapBoat.imageset/boat.svg | 7 + .../Assets.xcassets/MapBus.imageset/Contents.json | 21 +++ .../iosApp/Assets.xcassets/MapBus.imageset/bus.svg | 7 + .../Assets.xcassets/MapCar.imageset/Contents.json | 21 +++ .../iosApp/Assets.xcassets/MapCar.imageset/car.svg | 7 + .../MapCrane.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapCrane.imageset/crane.svg | 7 + .../MapDefault.imageset/Contents.json | 21 +++ .../MapDefault.imageset/default.svg | 7 + .../MapHelicopter.imageset/Contents.json | 21 +++ .../MapHelicopter.imageset/helicopter.svg | 7 + .../MapMotorcycle.imageset/Contents.json | 21 +++ .../MapMotorcycle.imageset/motorcycle.svg | 7 + .../MapOffroad.imageset/Contents.json | 21 +++ .../MapOffroad.imageset/offroad.svg | 7 + .../MapPerson.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapPerson.imageset/person.svg | 7 + .../MapPickup.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapPickup.imageset/pickup.svg | 7 + .../MapPlane.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapPlane.imageset/plane.svg | 7 + .../MapScooter.imageset/Contents.json | 21 +++ .../MapScooter.imageset/scooter.svg | 7 + .../Assets.xcassets/MapShip.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapShip.imageset/ship.svg | 7 + .../MapTractor.imageset/Contents.json | 21 +++ .../MapTractor.imageset/tractor.svg | 7 + .../MapTrain.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapTrain.imageset/train.svg | 7 + .../Assets.xcassets/MapTram.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapTram.imageset/tram.svg | 7 + .../MapTrolleybus.imageset/Contents.json | 21 +++ .../MapTrolleybus.imageset/trolleybus.svg | 7 + .../MapTruck.imageset/Contents.json | 21 +++ .../Assets.xcassets/MapTruck.imageset/truck.svg | 7 + .../Assets.xcassets/MapVan.imageset/Contents.json | 21 +++ .../iosApp/Assets.xcassets/MapVan.imageset/van.svg | 7 + iosApp/iosApp/Devices/DeviceRow.swift | 190 +++++++++++++-------- iosApp/iosApp/Devices/DevicesView.swift | 16 +- iosApp/iosApp/Shared/MarkerTransformations.swift | 40 +++++ 50 files changed, 793 insertions(+), 77 deletions(-) create mode 100644 iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/animal.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapArrow.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapArrow.imageset/arrow.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/bicycle.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapBoat.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapBoat.imageset/boat.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapBus.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapBus.imageset/bus.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapCar.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapCar.imageset/car.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapCrane.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapCrane.imageset/crane.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapDefault.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapDefault.imageset/default.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/helicopter.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/motorcycle.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/offroad.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapPerson.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapPerson.imageset/person.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapPickup.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapPickup.imageset/pickup.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapPlane.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapPlane.imageset/plane.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapScooter.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapScooter.imageset/scooter.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapShip.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapShip.imageset/ship.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapTractor.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapTractor.imageset/tractor.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapTrain.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapTrain.imageset/train.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapTram.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapTram.imageset/tram.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/trolleybus.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapTruck.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapTruck.imageset/truck.svg create mode 100644 iosApp/iosApp/Assets.xcassets/MapVan.imageset/Contents.json create mode 100644 iosApp/iosApp/Assets.xcassets/MapVan.imageset/van.svg create mode 100644 iosApp/iosApp/Shared/MarkerTransformations.swift diff --git a/iosApp/Localizable.strings b/iosApp/Localizable.strings index aee6a31..30f2ac8 100644 --- a/iosApp/Localizable.strings +++ b/iosApp/Localizable.strings @@ -16,3 +16,8 @@ "devices" = "Devices"; "map" = "Map"; "search" = "Search"; + +"details" = "Details"; +"reports" = "Reports"; +"commands" = "Commands"; +"select-action" = "Select an action"; diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index 6eeaa69..a0d5793 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ E33A236027A4FD2C00DD647F /* MapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E33A235F27A4FD2C00DD647F /* MapView.swift */; }; E33A236327A5014600DD647F /* SwiftUIX in Frameworks */ = {isa = PBXBuildFile; productRef = E33A236227A5014600DD647F /* SwiftUIX */; }; E33A236527A530F300DD647F /* SmallLabelStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E33A236427A530F300DD647F /* SmallLabelStyle.swift */; }; + E33A236727A64E4500DD647F /* MarkerTransformations.swift in Sources */ = {isa = PBXBuildFile; fileRef = E33A236627A64E4500DD647F /* MarkerTransformations.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 */; }; @@ -35,7 +36,7 @@ 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; E33A235F27A4FD2C00DD647F /* MapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapView.swift; sourceTree = ""; }; E33A236427A530F300DD647F /* SmallLabelStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallLabelStyle.swift; sourceTree = ""; }; - E37361C827A39A4200306B21 /* WhirlyGlobeMaplyComponent.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WhirlyGlobeMaplyComponent.framework; sourceTree = ""; }; + E33A236627A64E4500DD647F /* MarkerTransformations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerTransformations.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 = ""; }; @@ -105,7 +106,6 @@ 7555FFB0242A642200829871 /* Frameworks */ = { isa = PBXGroup; children = ( - E37361C827A39A4200306B21 /* WhirlyGlobeMaplyComponent.framework */, ); name = Frameworks; sourceTree = ""; @@ -153,6 +153,7 @@ E38F241627A242C70069FC45 /* Resolver.swift */, E38F241F27A27B550069FC45 /* LoadingView.swift */, E33A236427A530F300DD647F /* SmallLabelStyle.swift */, + E33A236627A64E4500DD647F /* MarkerTransformations.swift */, ); path = Shared; sourceTree = ""; @@ -258,6 +259,7 @@ files = ( E38F241727A242C70069FC45 /* Resolver.swift in Sources */, E33A236027A4FD2C00DD647F /* MapView.swift in Sources */, + E33A236727A64E4500DD647F /* MarkerTransformations.swift in Sources */, E38F241527A242870069FC45 /* Inject.swift in Sources */, E39ABC4827A4EDEC00965D05 /* DeviceRow.swift in Sources */, E38F241C27A26DD70069FC45 /* RootViewModel.swift in Sources */, diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate index 821a1e3..95d87bd 100644 Binary files a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate and b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/avalos.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/Contents.json new file mode 100644 index 0000000..52185f2 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "animal.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/animal.svg b/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/animal.svg new file mode 100644 index 0000000..a077029 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapAnimal.imageset/animal.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/Contents.json new file mode 100644 index 0000000..58372bf --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "arrow.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/arrow.svg b/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/arrow.svg new file mode 100644 index 0000000..1aed6e0 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapArrow.imageset/arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/Contents.json new file mode 100644 index 0000000..c2c34bb --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bicycle.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/bicycle.svg b/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/bicycle.svg new file mode 100644 index 0000000..4eb82ea --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBicycle.imageset/bicycle.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/Contents.json new file mode 100644 index 0000000..7638406 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "boat.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/boat.svg b/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/boat.svg new file mode 100644 index 0000000..f1620ca --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBoat.imageset/boat.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapBus.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapBus.imageset/Contents.json new file mode 100644 index 0000000..08eac12 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBus.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "bus.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapBus.imageset/bus.svg b/iosApp/iosApp/Assets.xcassets/MapBus.imageset/bus.svg new file mode 100644 index 0000000..2f3b923 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapBus.imageset/bus.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapCar.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapCar.imageset/Contents.json new file mode 100644 index 0000000..99d7aad --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapCar.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "car.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapCar.imageset/car.svg b/iosApp/iosApp/Assets.xcassets/MapCar.imageset/car.svg new file mode 100644 index 0000000..da5b555 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapCar.imageset/car.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/Contents.json new file mode 100644 index 0000000..76c7751 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "crane.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/crane.svg b/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/crane.svg new file mode 100644 index 0000000..6b66b77 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapCrane.imageset/crane.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/Contents.json new file mode 100644 index 0000000..cb6c01f --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "default.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/default.svg b/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/default.svg new file mode 100644 index 0000000..f2e9790 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapDefault.imageset/default.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/Contents.json new file mode 100644 index 0000000..46ef9f8 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "helicopter.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/helicopter.svg b/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/helicopter.svg new file mode 100644 index 0000000..f9c8241 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapHelicopter.imageset/helicopter.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/Contents.json new file mode 100644 index 0000000..52e8181 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "motorcycle.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/motorcycle.svg b/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/motorcycle.svg new file mode 100644 index 0000000..d8d18f1 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapMotorcycle.imageset/motorcycle.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/Contents.json new file mode 100644 index 0000000..edae916 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "offroad.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/offroad.svg b/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/offroad.svg new file mode 100644 index 0000000..51c9c81 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapOffroad.imageset/offroad.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/Contents.json new file mode 100644 index 0000000..e422019 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "person.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/person.svg b/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/person.svg new file mode 100644 index 0000000..124bbaf --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPerson.imageset/person.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/Contents.json new file mode 100644 index 0000000..004cfb7 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "pickup.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/pickup.svg b/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/pickup.svg new file mode 100644 index 0000000..50bf57b --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPickup.imageset/pickup.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/Contents.json new file mode 100644 index 0000000..65ca743 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "plane.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/plane.svg b/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/plane.svg new file mode 100644 index 0000000..a46eb74 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapPlane.imageset/plane.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/Contents.json new file mode 100644 index 0000000..1155efa --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "scooter.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/scooter.svg b/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/scooter.svg new file mode 100644 index 0000000..c7b531c --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapScooter.imageset/scooter.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapShip.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapShip.imageset/Contents.json new file mode 100644 index 0000000..3fd9cd4 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapShip.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ship.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapShip.imageset/ship.svg b/iosApp/iosApp/Assets.xcassets/MapShip.imageset/ship.svg new file mode 100644 index 0000000..f94a6bb --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapShip.imageset/ship.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/Contents.json new file mode 100644 index 0000000..0774718 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "tractor.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/tractor.svg b/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/tractor.svg new file mode 100644 index 0000000..96643ef --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTractor.imageset/tractor.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/Contents.json new file mode 100644 index 0000000..6ff5ee7 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "train.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/train.svg b/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/train.svg new file mode 100644 index 0000000..e4b10ac --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTrain.imageset/train.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapTram.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapTram.imageset/Contents.json new file mode 100644 index 0000000..c04e17e --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTram.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "tram.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapTram.imageset/tram.svg b/iosApp/iosApp/Assets.xcassets/MapTram.imageset/tram.svg new file mode 100644 index 0000000..70a0307 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTram.imageset/tram.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/Contents.json new file mode 100644 index 0000000..b1013a6 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "trolleybus.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/trolleybus.svg b/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/trolleybus.svg new file mode 100644 index 0000000..344ae8d --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTrolleybus.imageset/trolleybus.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/Contents.json new file mode 100644 index 0000000..c95213a --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "truck.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/truck.svg b/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/truck.svg new file mode 100644 index 0000000..708744d --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapTruck.imageset/truck.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Assets.xcassets/MapVan.imageset/Contents.json b/iosApp/iosApp/Assets.xcassets/MapVan.imageset/Contents.json new file mode 100644 index 0000000..c7b02d6 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapVan.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "van.svg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosApp/iosApp/Assets.xcassets/MapVan.imageset/van.svg b/iosApp/iosApp/Assets.xcassets/MapVan.imageset/van.svg new file mode 100644 index 0000000..3394b88 --- /dev/null +++ b/iosApp/iosApp/Assets.xcassets/MapVan.imageset/van.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/iosApp/iosApp/Devices/DeviceRow.swift b/iosApp/iosApp/Devices/DeviceRow.swift index 5fc4e11..f8c8053 100644 --- a/iosApp/iosApp/Devices/DeviceRow.swift +++ b/iosApp/iosApp/Devices/DeviceRow.swift @@ -12,94 +12,138 @@ import shared struct DeviceRow: View { var unit: UnitInformation + enum Action { + case details + case reports + case commands + } + var callback: (Action) -> () + + @State var isSheet: Bool = false + var body: some View { - VStack { - HStack { - /* Status icon */ - switch (unit.getStatus()) { - case .online: - Image(systemName: "circle.fill") - .foregroundColor(.systemGreen) - .imageScale(.small) - case .offline: - Image(systemName: "circle.fill") - .foregroundColor(.systemRed) - .imageScale(.small) - default: - EmptyView() + let row = HStack { + /* Device icon */ + let category = Marker.companion.categoryToMarkerType(category: unit.device.category) + Image(MarkerTransformations.markerTypeToImageName(markerType: category)) + .padding(5.0) + + VStack { + HStack { + /* Status icon */ + switch (unit.getStatus()) { + case .online: + Image(systemName: "circle.fill") + .foregroundColor(.systemGreen) + .imageScale(.small) + case .offline: + Image(systemName: "circle.fill") + .foregroundColor(.systemRed) + .imageScale(.small) + default: + EmptyView() + } + + /* Engine stop */ + switch (unit.getEngineStop()) { + case .on: + Image(systemName: "lock.fill") + .foregroundColor(.systemRed) + .imageScale(.small) + case .off: + Image(systemName: "lock.open.fill") + .foregroundColor(.systemGreen) + .imageScale(.small) + default: + EmptyView() + } + + /* Device name */ + Text(unit.device.name) + Spacer() } + .padding(.bottom, 5.0) - /* Engine stop */ - switch (unit.getEngineStop()) { - case .on: - Image(systemName: "lock.fill") - .foregroundColor(.systemRed) - .imageScale(.small) - case .off: - Image(systemName: "lock.open.fill") - .foregroundColor(.systemGreen) - .imageScale(.small) - default: - EmptyView() + /* Driver */ + if let contact = unit.device.contact { + HStack { + Label(contact, systemImage: "person") + .labelStyle(SmallLabelStyle()) + Spacer() + } } - /* Device name */ - Text(unit.device.name) - Spacer() - } - .padding(.bottom, 5.0) - - /* Driver */ - if let contact = unit.device.contact { - HStack { - Label(contact, systemImage: "person") - .labelStyle(SmallLabelStyle()) - Spacer() + /* Speed */ + if let speed = unit.position?.speed { + HStack { + Label(Formatter.companion.formatSpeed( + speed: Double(truncating: speed), + unit: .kmh), + systemImage: "speedometer") + .labelStyle(SmallLabelStyle()) + Spacer() + } } - } - - /* Speed */ - if let speed = unit.position?.speed { - HStack { - Label(Formatter.companion.formatSpeed( - speed: Double(truncating: speed), - unit: .kmh), - systemImage: "speedometer") - .labelStyle(SmallLabelStyle()) - Spacer() + + /* Address */ + if let address = unit.position?.address { + HStack { + Label(address, systemImage: "mappin.and.ellipse") + .labelStyle(SmallLabelStyle()) + Spacer() + } } - } - - /* Address */ - if let address = unit.position?.address { - HStack { - Label(address, systemImage: "mappin.and.ellipse") - .labelStyle(SmallLabelStyle()) - Spacer() + + /* Hourmeter */ + if let hourmeter = unit.position?.attributes["hours"] { + if let hourmeter = Serialization.companion.longOrNull(json: hourmeter) { + HStack { + Label(Formatter.companion.formatHours( + millis: Int64(truncating: hourmeter)), + systemImage: "timer") + .labelStyle(SmallLabelStyle()) + Spacer() + } + } } - } - - /* Hourmeter */ - if let hourmeter = unit.position?.attributes["hours"] { - if let hourmeter = Serialization.companion.longOrNull(json: hourmeter) { + + /* Date time */ + if let datetime = unit.position?.fixTime { HStack { - Label(Formatter.companion.formatHours( - millis: Int64(truncating: hourmeter)), - systemImage: "timer") + Label(Formatter.companion.formatDate(str: datetime), + systemImage: "calendar") .labelStyle(SmallLabelStyle()) Spacer() } } } - - /* Date time */ - if let datetime = unit.position?.fixTime { - HStack { - Label(Formatter.companion.formatDate(str: datetime), - systemImage: "calendar") - .labelStyle(SmallLabelStyle()) - Spacer() + } + + /* Device actions */ + if #available(iOS 15, *) { + row.swipeActions(edge: .trailing, allowsFullSwipe: false) { + Button { callback(.commands) } label: { + Label("commands", systemImage: "paperplane") } + + Button { callback(.reports) } label: { + Label("reports", systemImage: "clock") + } + + Button { callback(.details) } label: { + Label("details", systemImage: "info.circle") + } + } + } else { + row.onLongPressGesture { + self.isSheet = true + } + .actionSheet(isPresented: $isSheet) { + ActionSheet(title: Text("select-action"), message: nil, buttons: [ + .default(Text("details")) { callback(.details) }, + .default(Text("reports")) { callback(.reports) }, + .default(Text("commands")) { callback(.commands) } + ]) } } } diff --git a/iosApp/iosApp/Devices/DevicesView.swift b/iosApp/iosApp/Devices/DevicesView.swift index 7271a70..07951fd 100644 --- a/iosApp/iosApp/Devices/DevicesView.swift +++ b/iosApp/iosApp/Devices/DevicesView.swift @@ -12,9 +12,21 @@ struct DevicesView: View { @StateObject var unitsViewModel: UnitsViewModel var body: some View { - List(unitsViewModel.units, id: \.device.id) { unit in - DeviceRow(unit: unit) + List(selection: $unitsViewModel.selectedUnit) { + ForEach(unitsViewModel.units, id: \.device.id) { unit in + DeviceRow(unit: unit, callback: { action in + switch action { + case .details: + print ("Selected details of \(unit.device.name)") + case .reports: + print ("Selected reports of \(unit.device.name)") + case .commands: + print ("Selected commands of \(unit.device.name)") + } + }) + } } + .navigationTitle("devices") .toolbar { ToolbarItem(placement: .navigationBarLeading) { diff --git a/iosApp/iosApp/Shared/MarkerTransformations.swift b/iosApp/iosApp/Shared/MarkerTransformations.swift new file mode 100644 index 0000000..b4aaa90 --- /dev/null +++ b/iosApp/iosApp/Shared/MarkerTransformations.swift @@ -0,0 +1,40 @@ +// +// MarkerTransformations.swift +// iosApp +// +// Created by Iván on 29/01/22. +// Copyright © 2022 orgName. All rights reserved. +// + +import SwiftUI +import shared + +class MarkerTransformations { + static func markerTypeToImageName(markerType: Marker.Type_) -> String { + var imageName = "MapDefault" + switch markerType { + case .animal: imageName = "MapAnimal" + case .bicycle: imageName = "MapBicycle" + case .boat: imageName = "MapBoat" + case .bus: imageName = "MapBus" + case .car: imageName = "MapCar" + case .crane: imageName = "MapCrane" + case .helicopter: imageName = "MapHelicopter" + case .motorcycle: imageName = "MapMotorcycle" + case .offroad: imageName = "MapOffroad" + case .person: imageName = "MapPerson" + case .pickup: imageName = "MapPickup" + case .plane: imageName = "MapPlane" + case .scooter: imageName = "MapScooter" + case .ship: imageName = "MapShip" + case .tractor: imageName = "MapTractor" + case .train: imageName = "MapTrain" + case .tram: imageName = "MapTram" + case .trolleybus: imageName = "MapTrolleybus" + case .truck: imageName = "MapTruck" + case .van: imageName = "MapVan" + default: break + } + return imageName + } +} -- cgit v1.2.3