Skip to content

Commit b4cce3e

Browse files
feat(mapview): add compassEnabled prop for iOS and Android (#74)
* feat(mapview): add compassEnabled prop for iOS and Android * feat(mapview): support compassEnabled on web --------- Co-authored-by: Jovanni Lo <lodev09@gmail.com>
1 parent 91108a0 commit b4cce3e

15 files changed

Lines changed: 56 additions & 5 deletions

android/src/main/java/com/luggmaps/LuggMapView.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
6464
private var scrollEnabled: Boolean = true
6565
private var rotateEnabled: Boolean = true
6666
private var pitchEnabled: Boolean = true
67+
private var compassEnabled: Boolean = true
6768
private var userLocationEnabled: Boolean = false
6869
private var userLocationButtonEnabled: Boolean = false
6970
private var poiEnabled: Boolean = true
@@ -186,6 +187,7 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
186187
provider?.setScrollEnabled(scrollEnabled)
187188
provider?.setRotateEnabled(rotateEnabled)
188189
provider?.setPitchEnabled(pitchEnabled)
190+
provider?.setCompassEnabled(compassEnabled)
189191
provider?.setUserLocationEnabled(userLocationEnabled)
190192
provider?.setUserLocationButtonEnabled(userLocationButtonEnabled)
191193
provider?.setMapType(mapType)
@@ -243,6 +245,12 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
243245
provider?.setPitchEnabled(enabled)
244246
}
245247

248+
fun setCompassEnabled(enabled: Boolean) {
249+
if (compassEnabled == enabled) return
250+
compassEnabled = enabled
251+
provider?.setCompassEnabled(enabled)
252+
}
253+
246254
fun setUserLocationEnabled(enabled: Boolean) {
247255
if (userLocationEnabled == enabled) return
248256
userLocationEnabled = enabled

android/src/main/java/com/luggmaps/LuggMapViewManager.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ class LuggMapViewManager :
132132
view.setPitchEnabled(value)
133133
}
134134

135+
@ReactProp(name = "compassEnabled", defaultBoolean = true)
136+
override fun setCompassEnabled(view: LuggMapView, value: Boolean) {
137+
view.setCompassEnabled(value)
138+
}
139+
135140
@ReactProp(name = "userLocationEnabled", defaultBoolean = false)
136141
override fun setUserLocationEnabled(view: LuggMapView, value: Boolean) {
137142
view.setUserLocationEnabled(value)

android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class GoogleMapProvider(private val context: Context) :
108108
private var scrollEnabled: Boolean = true
109109
private var rotateEnabled: Boolean = true
110110
private var pitchEnabled: Boolean = true
111+
private var compassEnabled: Boolean = true
111112
private var userLocationEnabled: Boolean = false
112113
private var userLocationButtonEnabled: Boolean = false
113114

@@ -458,6 +459,11 @@ class GoogleMapProvider(private val context: Context) :
458459
googleMap?.uiSettings?.isTiltGesturesEnabled = enabled
459460
}
460461

462+
override fun setCompassEnabled(enabled: Boolean) {
463+
compassEnabled = enabled
464+
googleMap?.uiSettings?.isCompassEnabled = enabled
465+
}
466+
461467
@SuppressLint("MissingPermission")
462468
override fun setUserLocationEnabled(enabled: Boolean) {
463469
userLocationEnabled = enabled
@@ -1197,6 +1203,7 @@ class GoogleMapProvider(private val context: Context) :
11971203
isScrollGesturesEnabled = scrollEnabled
11981204
isRotateGesturesEnabled = rotateEnabled
11991205
isTiltGesturesEnabled = pitchEnabled
1206+
isCompassEnabled = compassEnabled
12001207
isMyLocationButtonEnabled = userLocationButtonEnabled
12011208
}
12021209
}

android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ interface MapProvider {
3030
fun setScrollEnabled(enabled: Boolean)
3131
fun setRotateEnabled(enabled: Boolean)
3232
fun setPitchEnabled(enabled: Boolean)
33+
fun setCompassEnabled(enabled: Boolean)
3334
fun setUserLocationEnabled(enabled: Boolean)
3435
fun setUserLocationButtonEnabled(enabled: Boolean)
3536
fun setMapType(value: String)

docs/MAPVIEW.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { MapView } from '@lugg/maps';
3232
| `scrollEnabled` | `boolean` | `true` | Enable scroll/pan gestures |
3333
| `rotateEnabled` | `boolean` | `true` | Enable rotation gestures |
3434
| `pitchEnabled` | `boolean` | `true` | Enable pitch/tilt gestures |
35+
| `compassEnabled` | `boolean` | `true` | Show compass on the map (rotate control on web) |
3536
| `edgeInsets` | `EdgeInsets` | - | Map content edge insets |
3637
| `userLocationEnabled` | `boolean` | `false` | Show current user location on the map |
3738
| `userLocationButtonEnabled` | `boolean` | `false` | Show native my-location button (Android only) |

example/bare/ios/Podfile.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ PODS:
66
- hermes-engine (250829098.0.10):
77
- hermes-engine/Pre-built (= 250829098.0.10)
88
- hermes-engine/Pre-built (250829098.0.10)
9-
- LuggMaps (1.0.0-beta.13):
9+
- LuggMaps (1.0.0-beta.14):
1010
- GoogleMaps
1111
- hermes-engine
1212
- RCTRequired
@@ -2072,7 +2072,7 @@ PODS:
20722072
- ReactCommon/turbomodule/core
20732073
- ReactNativeDependencies
20742074
- Yoga
2075-
- RNTrueSheet (3.9.0-beta.1):
2075+
- RNTrueSheet (3.11.0-beta.10):
20762076
- hermes-engine
20772077
- RCTRequired
20782078
- RCTTypeSafety
@@ -2427,7 +2427,7 @@ SPEC CHECKSUMS:
24272427
FBLazyVector: 24e62c765683b8d89006a88a2c8f5cf019f0074d
24282428
GoogleMaps: 0608099d4870cac8754bdba9b6953db543432438
24292429
hermes-engine: a43fcac5345a0a468667778019547c5fd282c6e2
2430-
LuggMaps: 3b5eb2799949c9fa7fb821747a394cb66170ca64
2430+
LuggMaps: b69f00e83f91bd2e00fb32341dff2d2cc57e794a
24312431
RCTDeprecation: a4c521821fab57cbb125b36effe84d897d0dfa12
24322432
RCTRequired: 9f3a7e5645d4bc3f551593de7550bb66ab6e42bc
24332433
RCTSwiftUI: 239ed2eb9e73de5a6f518810630f0c95e01c8702
@@ -2504,10 +2504,10 @@ SPEC CHECKSUMS:
25042504
RNReanimated: f735b1747a7a93bda7ca102c6d37a3cf54b6d5e8
25052505
RNScreens: 991cc417cd396602a6cf59a42139e5a9d91462a9
25062506
RNSVG: 04044c3abcf177fd674a1a3d13097efa1adebcbe
2507-
RNTrueSheet: 6c809ea25633bc602542a06ff60e9cf71464a10c
2507+
RNTrueSheet: 5eae7c5e0ecfb056c2c6394d5429d3061a5180e8
25082508
RNWorklets: 4931990f73bc8f347586918b2e13f11dfadf3b75
25092509
Yoga: 77dfa8673de2874e1855002ae59c68b8be9b007b
25102510

25112511
PODFILE CHECKSUM: a8c918957730cfd546eb917e7563885b57095460
25122512

2513-
COCOAPODS: 1.16.2
2513+
COCOAPODS: 1.15.2

example/shared/src/screens/HomeScreen.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ const HomeContent = ({ onMarkerPress: onMarkerPressProp }: HomeProps) => {
242242
geojson={geojson}
243243
animatedPosition={controlSheetRef.current?.animatedPosition}
244244
userLocationEnabled={locationPermission}
245+
compassEnabled={false}
245246
onReady={handleMapReady}
246247
onPress={handlePress}
247248
onLongPress={handleLongPress}

ios/LuggMapView.mm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ @implementation LuggMapView {
3939
BOOL _scrollEnabled;
4040
BOOL _rotateEnabled;
4141
BOOL _pitchEnabled;
42+
BOOL _compassEnabled;
4243
BOOL _userLocationEnabled;
4344
LuggMapViewMapType _mapType;
4445
LuggMapViewTheme _theme;
@@ -68,6 +69,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
6869
_scrollEnabled = YES;
6970
_rotateEnabled = YES;
7071
_pitchEnabled = YES;
72+
_compassEnabled = YES;
7173
_userLocationEnabled = NO;
7274
_poiEnabled = NO;
7375
_poiFilterMode = LuggMapViewPoiFilterMode::Including;
@@ -281,6 +283,7 @@ - (void)applyProps {
281283
[_provider setScrollEnabled:_scrollEnabled];
282284
[_provider setRotateEnabled:_rotateEnabled];
283285
[_provider setPitchEnabled:_pitchEnabled];
286+
[_provider setCompassEnabled:_compassEnabled];
284287
[_provider setUserLocationEnabled:_userLocationEnabled];
285288
[_provider setMapType:_mapType];
286289
[_provider setTheme:_theme];
@@ -323,6 +326,10 @@ - (void)updateProps:(Props::Shared const &)props
323326
_pitchEnabled = newViewProps.pitchEnabled;
324327
[_provider setPitchEnabled:_pitchEnabled];
325328
}
329+
if (newViewProps.compassEnabled != prevViewProps.compassEnabled) {
330+
_compassEnabled = newViewProps.compassEnabled;
331+
[_provider setCompassEnabled:_compassEnabled];
332+
}
326333
if (newViewProps.userLocationEnabled != prevViewProps.userLocationEnabled) {
327334
_userLocationEnabled = newViewProps.userLocationEnabled;
328335
[_provider setUserLocationEnabled:_userLocationEnabled];

ios/core/AppleMapProvider.mm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ - (void)setPitchEnabled:(BOOL)enabled {
245245
_mapView.pitchEnabled = enabled;
246246
}
247247

248+
- (void)setCompassEnabled:(BOOL)enabled {
249+
_mapView.showsCompass = enabled;
250+
}
251+
248252
- (void)setUserLocationEnabled:(BOOL)enabled {
249253
_mapView.showsUserLocation = enabled;
250254
}

ios/core/GoogleMapProvider.mm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ - (void)setPitchEnabled:(BOOL)enabled {
166166
_mapView.settings.tiltGestures = enabled;
167167
}
168168

169+
- (void)setCompassEnabled:(BOOL)enabled {
170+
_mapView.settings.compassButton = enabled;
171+
}
172+
169173
- (void)setUserLocationEnabled:(BOOL)enabled {
170174
_mapView.myLocationEnabled = enabled;
171175
}

0 commit comments

Comments
 (0)