Skip to content

Commit a6fa22e

Browse files
feat: add display options to navigation (#370)
1 parent dbb679e commit a6fa22e

File tree

9 files changed

+157
-38
lines changed

9 files changed

+157
-38
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,13 @@ try {
204204
avoidTolls: false,
205205
};
206206

207-
await navigationController.setDestinations([waypoint], routingOptions);
207+
const displayOptions: DisplayOptions = {
208+
showDestinationMarkers: true,
209+
showStopSigns: true,
210+
showTrafficLights: true,
211+
};
212+
213+
await navigationController.setDestinations([waypoint], routingOptions, displayOptions);
208214
await navigationController.startGuidance();
209215
} catch (error) {
210216
console.error('Error starting navigation', error);

android/src/main/java/com/google/android/react/navsdk/NavModule.java

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -403,31 +403,20 @@ private void createWaypoint(Map map) {
403403
}
404404

405405
@ReactMethod
406-
public void setDestination(ReadableMap waypoint, @Nullable ReadableMap routingOptions) {
407-
pendingRoute = null; // reset pendingRoute.
408-
mWaypoints.clear(); // reset waypoints
409-
createWaypoint(waypoint.toHashMap());
410-
411-
if (routingOptions != null) {
412-
pendingRoute =
413-
mNavigator.setDestination(
414-
mWaypoints.get(0),
415-
ObjectTranslationUtil.getRoutingOptionsFromMap(routingOptions.toHashMap()));
416-
} else {
417-
pendingRoute = mNavigator.setDestination(mWaypoints.get(0));
418-
}
419-
420-
setOnResultListener(
421-
new IRouteStatusResult() {
422-
@Override
423-
public void onResult(Navigator.RouteStatus code) {
424-
sendCommandToReactNative("onRouteStatusResult", code.toString());
425-
}
426-
});
406+
public void setDestination(
407+
ReadableMap waypoint,
408+
@Nullable ReadableMap routingOptions,
409+
@Nullable ReadableMap displayOptions) {
410+
WritableArray array = new WritableNativeArray();
411+
array.pushMap(waypoint);
412+
setDestinations(array, routingOptions, displayOptions);
427413
}
428414

429415
@ReactMethod
430-
public void setDestinations(ReadableArray waypoints, @Nullable ReadableMap routingOptions) {
416+
public void setDestinations(
417+
ReadableArray waypoints,
418+
@Nullable ReadableMap routingOptions,
419+
@Nullable ReadableMap displayOptions) {
431420
if (mNavigator == null) {
432421
// TODO: HANDLE THIS
433422
return;
@@ -443,10 +432,18 @@ public void setDestinations(ReadableArray waypoints, @Nullable ReadableMap routi
443432
}
444433

445434
if (routingOptions != null) {
446-
pendingRoute =
447-
mNavigator.setDestinations(
448-
mWaypoints,
449-
ObjectTranslationUtil.getRoutingOptionsFromMap(routingOptions.toHashMap()));
435+
if (displayOptions != null) {
436+
pendingRoute =
437+
mNavigator.setDestinations(
438+
mWaypoints,
439+
ObjectTranslationUtil.getRoutingOptionsFromMap(routingOptions.toHashMap()),
440+
ObjectTranslationUtil.getDisplayOptionsFromMap(displayOptions.toHashMap()));
441+
} else {
442+
pendingRoute =
443+
mNavigator.setDestinations(
444+
mWaypoints,
445+
ObjectTranslationUtil.getRoutingOptionsFromMap(routingOptions.toHashMap()));
446+
}
450447
} else {
451448
pendingRoute = mNavigator.setDestinations(mWaypoints);
452449
}

android/src/main/java/com/google/android/react/navsdk/ObjectTranslationUtil.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.android.gms.maps.model.Polyline;
2727
import com.google.android.libraries.mapsplatform.turnbyturn.model.StepInfo;
2828
import com.google.android.libraries.navigation.AlternateRoutesStrategy;
29+
import com.google.android.libraries.navigation.DisplayOptions;
2930
import com.google.android.libraries.navigation.NavigationRoadStretchRenderingData;
3031
import com.google.android.libraries.navigation.RouteSegment;
3132
import com.google.android.libraries.navigation.RoutingOptions;
@@ -105,6 +106,24 @@ public static WritableMap getMapFromStepInfo(StepInfo stepInfo) {
105106
return map;
106107
}
107108

109+
public static DisplayOptions getDisplayOptionsFromMap(Map map) {
110+
DisplayOptions options = new DisplayOptions();
111+
112+
if (map.containsKey("showDestinationMarkers")) {
113+
options.hideDestinationMarkers(!CollectionUtil.getBool("showDestinationMarkers", map, true));
114+
}
115+
116+
if (map.containsKey("showStopSigns")) {
117+
options.showStopSigns(CollectionUtil.getBool("showStopSigns", map, false));
118+
}
119+
120+
if (map.containsKey("showTrafficLights")) {
121+
options.showTrafficLights(CollectionUtil.getBool("showTrafficLights", map, false));
122+
}
123+
124+
return options;
125+
}
126+
108127
public static RoutingOptions getRoutingOptionsFromMap(Map map) {
109128
RoutingOptions options = new RoutingOptions();
110129

example/src/controls/navigationControls.tsx

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
type Waypoint,
3333
type CameraPosition,
3434
type NavigationController,
35+
type DisplayOptions,
3536
} from '@googlemaps/react-native-navigation-sdk';
3637
import SelectDropdown from 'react-native-select-dropdown';
3738

@@ -103,7 +104,17 @@ const NavigationControls: React.FC<NavigationControlsProps> = ({
103104
avoidTolls: false,
104105
};
105106

106-
navigationController.setDestination(waypoint, routingOptions);
107+
const displayOptions: DisplayOptions = {
108+
showDestinationMarkers: true,
109+
showStopSigns: true,
110+
showTrafficLights: true,
111+
};
112+
113+
navigationController.setDestination(
114+
waypoint,
115+
routingOptions,
116+
displayOptions
117+
);
107118
};
108119

109120
const initWaypointToCameraLocation = async () => {
@@ -135,7 +146,17 @@ const NavigationControls: React.FC<NavigationControlsProps> = ({
135146
avoidTolls: false,
136147
};
137148

138-
navigationController.setDestinations(waypoints, routingOptions);
149+
const displayOptions: DisplayOptions = {
150+
showDestinationMarkers: true,
151+
showStopSigns: true,
152+
showTrafficLights: true,
153+
};
154+
155+
navigationController.setDestinations(
156+
waypoints,
157+
routingOptions,
158+
displayOptions
159+
);
139160
};
140161

141162
const setFollowingPerspective = (index: CameraPerspective) => {

ios/react-native-navigation-sdk/NavModule.m

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,16 +325,22 @@ - (void)showTermsAndConditionsDialog {
325325

326326
RCT_EXPORT_METHOD(setDestination
327327
: (nonnull NSDictionary *)waypoint routingOptions
328-
: (NSDictionary *)routingOptions resolve
328+
: (NSDictionary *)routingOptions displayOptions
329+
: (NSDictionary *)displayOptions resolve
329330
: (RCTPromiseResolveBlock)resolve rejecter
330331
: (RCTPromiseRejectBlock)reject) {
331332
NSArray *waypoints = @[ waypoint ];
332-
[self setDestinations:waypoints routingOptions:routingOptions resolve:resolve rejecter:reject];
333+
[self setDestinations:waypoints
334+
routingOptions:routingOptions
335+
displayOptions:displayOptions
336+
resolve:resolve
337+
rejecter:reject];
333338
}
334339

335340
RCT_EXPORT_METHOD(setDestinations
336341
: (nonnull NSArray *)waypoints routingOptions
337-
: (NSDictionary *)routingOptions resolve
342+
: (NSDictionary *)routingOptions displayOptions
343+
: (NSDictionary *)displayOptions resolve
338344
: (RCTPromiseResolveBlock)resolve rejecter
339345
: (RCTPromiseRejectBlock)reject) {
340346
__weak typeof(self) weakSelf = self;
@@ -350,6 +356,10 @@ - (void)showTermsAndConditionsDialog {
350356
return;
351357
}
352358

359+
if (displayOptions != NULL) {
360+
[self setDisplayOptionsToViews:displayOptions];
361+
}
362+
353363
strongSelf->_destinations = [[NSMutableArray alloc] init];
354364

355365
for (NSDictionary *wp in waypoints) {
@@ -400,6 +410,22 @@ - (void)showTermsAndConditionsDialog {
400410
});
401411
}
402412

413+
- (void)setDisplayOptionsToViews:(NSDictionary *)options {
414+
for (NavViewController *viewController in [NavViewModule sharedInstance]
415+
.viewControllers.allValues) {
416+
if (options[@"showDestinationMarkers"] != nil) {
417+
[viewController
418+
setShowDestinationMarkersEnabled:[options[@"showDestinationMarkers"] boolValue]];
419+
}
420+
if (options[@"showStopSigns"] != nil) {
421+
[viewController setShowStopSignsEnabled:[options[@"showStopSigns"] boolValue]];
422+
}
423+
if (options[@"showTrafficLights"] != nil) {
424+
[viewController setShowTrafficLightsEnabled:[options[@"showTrafficLights"] boolValue]];
425+
}
426+
}
427+
}
428+
403429
+ (GMSNavigationRoutingOptions *)getRoutingOptions:(NSDictionary *)options {
404430
GMSNavigationMutableRoutingOptions *routingOptions = [[GMSNavigationMutableRoutingOptions alloc]
405431
initWithRoutingStrategy:(GMSNavigationRoutingStrategy)[options[@"routingStrategy"] intValue]];

ios/react-native-navigation-sdk/NavViewController.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ typedef void (^OnArrayResult)(NSArray *_Nullable result);
5151
- (void)setCompassEnabled:(BOOL)isEnabled;
5252
- (void)setMyLocationButtonEnabled:(BOOL)isEnabled;
5353
- (void)setMyLocationEnabled:(BOOL)isEnabled;
54+
- (void)setShowDestinationMarkersEnabled:(BOOL)isEnabled;
55+
- (void)setShowTrafficLightsEnabled:(BOOL)isEnabled;
56+
- (void)setShowStopSignsEnabled:(BOOL)isEnabled;
5457
- (void)setRotateGesturesEnabled:(BOOL)isEnabled;
5558
- (void)setScrollGesturesEnabled:(BOOL)isEnabled;
5659
- (void)setScrollGesturesEnabledDuringRotateOrZoom:(BOOL)isEnabled;

ios/react-native-navigation-sdk/NavViewController.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,18 @@ - (void)setMyLocationButtonEnabled:(BOOL)isEnabled {
251251
[_mapView.settings setMyLocationButton:isEnabled];
252252
}
253253

254+
- (void)setShowDestinationMarkersEnabled:(BOOL)isEnabled {
255+
[_mapView.settings setShowsDestinationMarkers:isEnabled];
256+
}
257+
258+
- (void)setShowTrafficLightsEnabled:(BOOL)isEnabled {
259+
[_mapView.settings setShowsTrafficLights:isEnabled];
260+
}
261+
262+
- (void)setShowStopSignsEnabled:(BOOL)isEnabled {
263+
[_mapView.settings setShowsStopSigns:isEnabled];
264+
}
265+
254266
- (void)setMyLocationEnabled:(BOOL)isEnabled {
255267
_mapView.myLocationEnabled = isEnabled;
256268
}

src/navigation/navigation/types.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ export interface RoutingOptions {
6161
*/
6262
avoidHighways?: boolean;
6363
}
64+
65+
/**
66+
* Defines the options used by the Navigator for dislaying different elements.
67+
*/
68+
export interface DisplayOptions {
69+
/**
70+
* Configures whether destination markers are shown during navigation.
71+
* If true, destination markers are shown.
72+
*/
73+
showDestinationMarkers?: boolean;
74+
/**
75+
* Configures whether stop signs are shown during navigation.
76+
* If true, stop signs are shown.
77+
*/
78+
showStopSigns?: boolean;
79+
/**
80+
* Configures whether traffic lights are shown during navigation.
81+
* If true, traffic lights are shown.
82+
*/
83+
showTrafficLights?: boolean;
84+
}
85+
6486
/**
6587
* Defines triggering thresholds for different severity levels of speed alerts, represented by
6688
* SpeedAlertSeverity.
@@ -292,7 +314,8 @@ export interface NavigationController {
292314
*/
293315
setDestination(
294316
waypoint: Waypoint,
295-
routingOptions?: RoutingOptions
317+
routingOptions?: RoutingOptions,
318+
displayOptions?: DisplayOptions
296319
): Promise<void>;
297320

298321
/**
@@ -303,7 +326,8 @@ export interface NavigationController {
303326
*/
304327
setDestinations(
305328
waypoints: Waypoint[],
306-
routingOptions?: RoutingOptions
329+
routingOptions?: RoutingOptions,
330+
displayOptions?: DisplayOptions
307331
): Promise<void>;
308332

309333
/**

src/navigation/navigation/useNavigationController.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
type SpeedAlertOptions,
3131
type LocationSimulationOptions,
3232
TaskRemovedBehavior,
33+
type DisplayOptions,
3334
} from './types';
3435
import { getRouteStatusFromStringValue } from '../navigationView';
3536
import { useMemo } from 'react';
@@ -93,16 +94,26 @@ export const useNavigationController = (
9394

9495
setDestination: async (
9596
waypoint: Waypoint,
96-
routingOptions?: RoutingOptions
97+
routingOptions?: RoutingOptions,
98+
displayOptions?: DisplayOptions
9799
) => {
98-
return await NavModule.setDestination(waypoint, routingOptions);
100+
return await NavModule.setDestination(
101+
waypoint,
102+
routingOptions,
103+
displayOptions
104+
);
99105
},
100106

101107
setDestinations: async (
102108
waypoints: Waypoint[],
103-
routingOptions?: RoutingOptions
109+
routingOptions?: RoutingOptions,
110+
displayOptions?: DisplayOptions
104111
) => {
105-
return await NavModule.setDestinations(waypoints, routingOptions);
112+
return await NavModule.setDestinations(
113+
waypoints,
114+
routingOptions,
115+
displayOptions
116+
);
106117
},
107118

108119
continueToNextDestination: async () => {

0 commit comments

Comments
 (0)