react-native-google-maps-plus 1.0.2 → 1.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +127 -11
  2. package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +359 -139
  3. package/android/src/main/java/com/rngooglemapsplus/LocationHandler.kt +44 -44
  4. package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +19 -0
  5. package/android/src/main/java/com/rngooglemapsplus/{MapMarker.kt → MapMarkerBuilder.kt} +7 -6
  6. package/android/src/main/java/com/rngooglemapsplus/{MapPolygon.kt → MapPolygonBuilder.kt} +4 -18
  7. package/android/src/main/java/com/rngooglemapsplus/{MapPolyline.kt → MapPolylineBuilder.kt.kt} +4 -19
  8. package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +145 -129
  9. package/android/src/main/java/com/rngooglemapsplus/extensions/RNCameraExtension.kt +19 -0
  10. package/android/src/main/java/com/rngooglemapsplus/extensions/RNLocationPriorityExtension.kt +12 -0
  11. package/android/src/main/java/com/rngooglemapsplus/extensions/RNMapCircleExtension.kt +14 -0
  12. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolygonExtension.kt +20 -0
  13. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolylineExtension.kt +21 -0
  14. package/android/src/main/java/com/rngooglemapsplus/extensions/RNUserInterfaceExtension.kt +12 -0
  15. package/android/src/main/java/com/rngooglemapsplus/{Color.kt → extensions/StringExtension.kt} +1 -1
  16. package/android/src/main/java/com/rngooglemapsplus/extensions/ThrowableExtension.kt +38 -0
  17. package/ios/GoogleMapViewImpl.swift +348 -150
  18. package/ios/LocationHandler.swift +29 -69
  19. package/ios/MapCircleBuilder.swift +20 -0
  20. package/ios/{MapMarker.swift → MapMarkerBuilder.swift} +11 -42
  21. package/ios/MapPolygonBuilder.swift +20 -0
  22. package/ios/MapPolylineBuilder.swift +24 -0
  23. package/ios/PermissionHandler.swift +1 -1
  24. package/ios/RNGoogleMapsPlusModule.swift +1 -1
  25. package/ios/RNGoogleMapsPlusView.swift +159 -168
  26. package/ios/extensions/RNCamera+Extension.swift +22 -0
  27. package/ios/extensions/RNCircle+Extension.swift +24 -0
  28. package/ios/extensions/RNIOSLocationAccuracy+Extensions.swift +19 -0
  29. package/ios/extensions/RNMarker+Extension.swift +24 -0
  30. package/ios/{MapPolygon.swift → extensions/RNPolygon+Extension.swift.swift} +7 -23
  31. package/ios/extensions/RNPolyline+Extension.swift.swift +62 -0
  32. package/ios/extensions/RNUserInterface+Extension.swift +16 -0
  33. package/ios/{Color.swift → extensions/String+Extensions.swift} +20 -20
  34. package/lib/module/types.js +14 -0
  35. package/lib/module/types.js.map +1 -1
  36. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +21 -12
  37. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
  38. package/lib/typescript/src/types.d.ts +59 -3
  39. package/lib/typescript/src/types.d.ts.map +1 -1
  40. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +233 -69
  41. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +40 -22
  42. package/nitrogen/generated/android/c++/JRNAndroidLocationConfig.hpp +63 -0
  43. package/nitrogen/generated/android/c++/JRNAndroidLocationPriority.hpp +65 -0
  44. package/nitrogen/generated/android/c++/JRNCircle.hpp +84 -0
  45. package/nitrogen/generated/android/c++/JRNIOSLocationAccuracy.hpp +65 -0
  46. package/nitrogen/generated/android/c++/JRNIOSLocationConfig.hpp +59 -0
  47. package/nitrogen/generated/android/c++/JRNInitialProps.hpp +66 -0
  48. package/nitrogen/generated/android/c++/JRNLocationConfig.hpp +65 -0
  49. package/nitrogen/generated/android/c++/JRNMapType.hpp +68 -0
  50. package/nitrogen/generated/android/c++/JRNMapUiSettings.hpp +93 -0
  51. package/nitrogen/generated/android/c++/JRNMarker.hpp +4 -4
  52. package/nitrogen/generated/android/c++/JRNPolygon.hpp +8 -4
  53. package/nitrogen/generated/android/c++/JRNPolyline.hpp +8 -4
  54. package/nitrogen/generated/android/c++/views/JHybridRNGoogleMapsPlusViewStateUpdater.cpp +40 -4
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +89 -11
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationConfig.kt +35 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNAndroidLocationPriority.kt +23 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNCircle.kt +50 -0
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationAccuracy.kt +23 -0
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNIOSLocationConfig.kt +32 -0
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNInitialProps.kt +35 -0
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNLocationConfig.kt +32 -0
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapType.kt +24 -0
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapUiSettings.kt +59 -0
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMarker.kt +1 -1
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolygon.kt +4 -1
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNPolyline.kt +4 -1
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/views/HybridRNGoogleMapsPlusViewManager.kt +7 -1
  69. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +296 -45
  70. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Umbrella.hpp +27 -0
  71. package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +131 -37
  72. package/nitrogen/generated/ios/c++/views/HybridRNGoogleMapsPlusViewComponent.mm +61 -16
  73. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +20 -11
  74. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +378 -45
  75. package/nitrogen/generated/ios/swift/RNAndroidLocationConfig.swift +93 -0
  76. package/nitrogen/generated/ios/swift/RNAndroidLocationPriority.swift +48 -0
  77. package/nitrogen/generated/ios/swift/RNCircle.swift +198 -0
  78. package/nitrogen/generated/ios/swift/RNIOSLocationAccuracy.swift +48 -0
  79. package/nitrogen/generated/ios/swift/RNIOSLocationConfig.swift +70 -0
  80. package/nitrogen/generated/ios/swift/RNInitialProps.swift +107 -0
  81. package/nitrogen/generated/ios/swift/RNLocationConfig.swift +84 -0
  82. package/nitrogen/generated/ios/swift/RNMapType.swift +52 -0
  83. package/nitrogen/generated/ios/swift/RNMapUiSettings.swift +277 -0
  84. package/nitrogen/generated/ios/swift/RNMarker.swift +17 -5
  85. package/nitrogen/generated/ios/swift/RNPolygon.swift +40 -5
  86. package/nitrogen/generated/ios/swift/RNPolyline.swift +40 -5
  87. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +20 -2
  88. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +59 -26
  89. package/nitrogen/generated/shared/c++/RNAndroidLocationConfig.hpp +77 -0
  90. package/nitrogen/generated/shared/c++/RNAndroidLocationPriority.hpp +64 -0
  91. package/nitrogen/generated/shared/c++/RNCircle.hpp +98 -0
  92. package/nitrogen/generated/shared/c++/RNIOSLocationAccuracy.hpp +64 -0
  93. package/nitrogen/generated/shared/c++/RNIOSLocationConfig.hpp +73 -0
  94. package/nitrogen/generated/shared/c++/RNInitialProps.hpp +78 -0
  95. package/nitrogen/generated/shared/c++/RNLocationConfig.hpp +76 -0
  96. package/nitrogen/generated/shared/c++/RNMapType.hpp +88 -0
  97. package/nitrogen/generated/shared/c++/RNMapUiSettings.hpp +107 -0
  98. package/nitrogen/generated/shared/c++/RNMarker.hpp +6 -6
  99. package/nitrogen/generated/shared/c++/RNPolygon.hpp +10 -6
  100. package/nitrogen/generated/shared/c++/RNPolyline.hpp +10 -6
  101. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +138 -30
  102. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +27 -13
  103. package/nitrogen/generated/shared/json/RNGoogleMapsPlusViewConfig.json +10 -1
  104. package/package.json +5 -5
  105. package/src/RNGoogleMapsPlusView.nitro.ts +25 -11
  106. package/src/types.ts +67 -3
  107. package/ios/MapPolyline.swift +0 -83
@@ -2,43 +2,43 @@ import CoreLocation
2
2
  import Foundation
3
3
  import UIKit
4
4
 
5
+ private let kCLLocationAccuracyDefault: CLLocationAccuracy =
6
+ kCLLocationAccuracyBest
7
+ private let kCLDistanceFilterNoneDefault: CLLocationDistance =
8
+ kCLDistanceFilterNone
9
+
5
10
  final class LocationHandler: NSObject, CLLocationManagerDelegate {
6
11
 
7
12
  private let manager = CLLocationManager()
8
- private var priority: Int = Priority.highAccuracy.rawValue
9
- private var interval: TimeInterval = 5.0
10
- private var minUpdateInterval: TimeInterval = 5.0
11
- private var distanceFilterMeters: CLLocationDistance = kCLDistanceFilterNone
13
+
14
+ var desiredAccuracy: CLLocationAccuracy? = kCLLocationAccuracyDefault {
15
+ didSet {
16
+ if let desiredAccuracy = desiredAccuracy {
17
+ manager.desiredAccuracy = desiredAccuracy
18
+ } else {
19
+ manager.desiredAccuracy = kCLLocationAccuracyBest
20
+ }
21
+ }
22
+ }
23
+
24
+ var distanceFilterMeters: CLLocationDistance? = kCLDistanceFilterNoneDefault {
25
+ didSet {
26
+ if let distanceFilterMeters = distanceFilterMeters {
27
+ manager.distanceFilter = distanceFilterMeters
28
+ } else {
29
+ manager.distanceFilter = kCLDistanceFilterNone
30
+ }
31
+ }
32
+ }
12
33
 
13
34
  var onUpdate: ((CLLocation) -> Void)?
14
35
  var onError: ((_ error: RNLocationErrorCode) -> Void)?
15
36
 
16
- private var lastEmit: Date?
17
-
18
37
  override init() {
19
38
  super.init()
20
39
  manager.delegate = self
21
40
  manager.pausesLocationUpdatesAutomatically = true
22
41
  manager.activityType = .other
23
- applyPriority()
24
- }
25
-
26
- func setPriority(_ priority: Int) {
27
- self.priority = priority
28
- applyPriority()
29
- }
30
-
31
- func setInterval(_ seconds: Int) {
32
- self.interval = max(0, TimeInterval(seconds))
33
- }
34
-
35
- func setFastestInterval(_ seconds: Int) {
36
- self.minUpdateInterval = max(0, TimeInterval(seconds))
37
- }
38
-
39
- func setDistanceFilter(_ meters: Double) {
40
- self.distanceFilterMeters = meters >= 0 ? meters : kCLDistanceFilterNone
41
- manager.distanceFilter = distanceFilterMeters
42
42
  }
43
43
 
44
44
  func showLocationDialog() {
@@ -110,36 +110,13 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
110
110
  }
111
111
  }
112
112
 
113
- private func applyPriority() {
114
- guard let p = Priority(rawValue: priority) else {
115
- manager.desiredAccuracy = kCLLocationAccuracyBest
116
- return
117
- }
118
- switch p {
119
- case .highAccuracy:
120
- manager.desiredAccuracy = kCLLocationAccuracyBest
121
- case .balanced:
122
- manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
123
- case .lowPower:
124
- manager.desiredAccuracy = kCLLocationAccuracyHundredMeters
125
- case .passive:
126
- manager.desiredAccuracy = kCLLocationAccuracyKilometer
127
- }
128
- }
129
-
130
113
  private func startUpdates() {
131
- manager.distanceFilter = distanceFilterMeters
114
+ manager.desiredAccuracy = desiredAccuracy ?? kCLLocationAccuracyDefault
115
+ manager.distanceFilter =
116
+ distanceFilterMeters ?? kCLDistanceFilterNoneDefault
132
117
  manager.startUpdatingLocation()
133
118
  }
134
119
 
135
- private func shouldEmit(now: Date) -> Bool {
136
- if let last = lastEmit {
137
- let delta = now.timeIntervalSince(last)
138
- if delta < minUpdateInterval { return false }
139
- }
140
- return true
141
- }
142
-
143
120
  func locationManager(
144
121
  _ manager: CLLocationManager,
145
122
  didFailWithError error: Error
@@ -166,12 +143,7 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
166
143
  didUpdateLocations locations: [CLLocation]
167
144
  ) {
168
145
  guard let loc = locations.last else { return }
169
- let now = Date()
170
-
171
- if shouldEmit(now: now) {
172
- lastEmit = now
173
- onUpdate?(loc)
174
- }
146
+ onUpdate?(loc)
175
147
  }
176
148
 
177
149
  private static func topMostViewController() -> UIViewController? {
@@ -191,15 +163,3 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
191
163
  }
192
164
 
193
165
  }
194
-
195
- extension LocationHandler {
196
- enum Priority: Int {
197
- case highAccuracy = 100
198
- /// Android: PRIORITY_BALANCED_POWER_ACCURACY
199
- case balanced = 102
200
- /// Android: PRIORITY_LOW_POWER
201
- case lowPower = 104
202
- /// Android: PRIORITY_PASSIVE
203
- case passive = 105
204
- }
205
- }
@@ -0,0 +1,20 @@
1
+ import GoogleMaps
2
+
3
+ final class MapCircleBuilder {
4
+
5
+ func buildCircle(_ c: RNCircle) -> GMSCircle {
6
+ let circle = GMSCircle()
7
+ circle.position = CLLocationCoordinate2D(
8
+ latitude: c.center.latitude,
9
+ longitude: c.center.longitude
10
+ )
11
+ if let r = c.radius { circle.radius = r }
12
+ if let fc = c.fillColor?.toUIColor() { circle.fillColor = fc }
13
+ if let sc = c.strokeColor?.toUIColor() { circle.strokeColor = sc }
14
+ if let sw = c.strokeWidth { circle.strokeWidth = CGFloat(sw) }
15
+ if let pr = c.pressable { circle.isTappable = pr }
16
+ if let zi = c.zIndex { circle.zIndex = Int32(zi) }
17
+
18
+ return circle
19
+ }
20
+ }
@@ -2,7 +2,7 @@ import GoogleMaps
2
2
  import SVGKit
3
3
  import UIKit
4
4
 
5
- final class MapMarkerOptions {
5
+ final class MapMarkerBuilder {
6
6
  private let iconCache = NSCache<NSString, UIImage>()
7
7
  private var tasks: [String: Task<Void, Never>] = [:]
8
8
  private let queue = DispatchQueue(
@@ -18,7 +18,6 @@ final class MapMarkerOptions {
18
18
  longitude: m.coordinate.longitude
19
19
  )
20
20
  )
21
- marker.zIndex = Int32(m.zIndex)
22
21
  marker.userData = m.id
23
22
  marker.tracksViewChanges = true
24
23
  marker.icon = icon
@@ -26,6 +25,7 @@ final class MapMarkerOptions {
26
25
  x: m.anchor?.x ?? 0.5,
27
26
  y: m.anchor?.y ?? 0.5
28
27
  )
28
+ if let zi = m.zIndex { marker.zIndex = Int32(zi) }
29
29
  DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) { [weak marker] in
30
30
  marker?.tracksViewChanges = false
31
31
  }
@@ -71,24 +71,17 @@ final class MapMarkerOptions {
71
71
 
72
72
  @MainActor
73
73
  func updateMarker(_ prev: RNMarker, _ next: RNMarker, _ m: GMSMarker) {
74
- if prev.coordinate.latitude != next.coordinate.latitude
75
- || prev.coordinate.longitude != next.coordinate.longitude {
76
- m.position = CLLocationCoordinate2D(
77
- latitude: next.coordinate.latitude,
78
- longitude: next.coordinate.longitude
79
- )
80
- }
74
+ m.position = CLLocationCoordinate2D(
75
+ latitude: next.coordinate.latitude,
76
+ longitude: next.coordinate.longitude
77
+ )
81
78
 
82
- if prev.zIndex != next.zIndex {
83
- m.zIndex = Int32(next.zIndex)
84
- }
79
+ if let zi = next.zIndex { m.zIndex = Int32(zi) }
85
80
 
86
- if prev.anchor?.x != next.anchor?.x || prev.anchor?.y != next.anchor?.y {
87
- m.groundAnchor = CGPoint(
88
- x: next.anchor?.x ?? 0.5,
89
- y: next.anchor?.y ?? 0.5
90
- )
91
- }
81
+ m.groundAnchor = CGPoint(
82
+ x: next.anchor?.x ?? 0.5,
83
+ y: next.anchor?.y ?? 0.5
84
+ )
92
85
 
93
86
  if !prev.markerStyleEquals(next) {
94
87
  buildIconAsync(next.id, next) { img in
@@ -181,27 +174,3 @@ final class MapMarkerOptions {
181
174
  }
182
175
 
183
176
  }
184
-
185
- extension RNMarker {
186
- func markerEquals(_ b: RNMarker) -> Bool {
187
- id == b.id && zIndex == b.zIndex
188
- && coordinate.latitude == b.coordinate.latitude
189
- && coordinate.longitude == b.coordinate.longitude
190
- && anchor?.x == b.anchor?.x && anchor?.y == b.anchor?.y
191
- && markerStyleEquals(b)
192
- }
193
-
194
- func markerStyleEquals(_ b: RNMarker) -> Bool {
195
- width == b.width && height == b.height
196
- && iconSvg == b.iconSvg
197
- }
198
-
199
- func styleHash() -> NSString {
200
- var hasher = Hasher()
201
- hasher.combine(width)
202
- hasher.combine(height)
203
- hasher.combine(iconSvg)
204
- return String(hasher.finalize()) as NSString
205
- }
206
-
207
- }
@@ -0,0 +1,20 @@
1
+ import GoogleMaps
2
+
3
+ final class MapPolygonBuilder {
4
+
5
+ func buildPolygon(_ p: RNPolygon) -> GMSPolygon {
6
+ let path = GMSMutablePath()
7
+ p.coordinates.forEach {
8
+ path.add(
9
+ CLLocationCoordinate2D(latitude: $0.latitude, longitude: $0.longitude)
10
+ )
11
+ }
12
+ let pg = GMSPolygon(path: path)
13
+ if let fc = p.fillColor?.toUIColor() { pg.fillColor = fc }
14
+ if let sc = p.strokeColor?.toUIColor() { pg.strokeColor = sc }
15
+ if let sw = p.strokeWidth { pg.strokeWidth = CGFloat(sw) }
16
+ if let pr = p.pressable { pg.isTappable = pr }
17
+ if let zi = p.zIndex { pg.zIndex = Int32(zi) }
18
+ return pg
19
+ }
20
+ }
@@ -0,0 +1,24 @@
1
+ import GoogleMaps
2
+
3
+ final class MapPolylineBuilder {
4
+ func buildPolyline(_ p: RNPolyline) -> GMSPolyline {
5
+ let path = GMSMutablePath()
6
+ p.coordinates.forEach {
7
+ path.add(
8
+ CLLocationCoordinate2D(latitude: $0.latitude, longitude: $0.longitude)
9
+ )
10
+ }
11
+ let pl = GMSPolyline(path: path)
12
+ if let w = p.width { pl.strokeWidth = CGFloat(w) }
13
+ if let c = p.color?.toUIColor() { pl.strokeColor = c }
14
+ if let cap = p.lineCap {
15
+ /// pl.lineCap = mapLineCap(cap)
16
+ }
17
+ if let join = p.lineJoin {
18
+ /// pl.strokeJoin = mapLineJoin(join)
19
+ }
20
+ if let pr = p.pressable { pl.isTappable = pr }
21
+ if let zi = p.zIndex { pl.zIndex = Int32(zi) }
22
+ return pl
23
+ }
24
+ }
@@ -14,7 +14,7 @@ final class PermissionHandler: NSObject, CLLocationManagerDelegate {
14
14
  }
15
15
 
16
16
  func requestLocationPermission()
17
- -> NitroModules.Promise<RNLocationPermissionResult> {
17
+ -> NitroModules.Promise<RNLocationPermissionResult> {
18
18
  let promise = NitroModules.Promise<RNLocationPermissionResult>()
19
19
 
20
20
  let status = manager.authorizationStatus
@@ -16,7 +16,7 @@ final class RNGoogleMapsPlusModule: HybridRNGoogleMapsPlusModuleSpec {
16
16
  }
17
17
 
18
18
  func requestLocationPermission()
19
- -> NitroModules.Promise<RNLocationPermissionResult> {
19
+ -> NitroModules.Promise<RNLocationPermissionResult> {
20
20
  return permissionHandler.requestLocationPermission()
21
21
  }
22
22