Skip to content

Commit a79289c

Browse files
committed
feat: enhance navigation updates and lane information handling
- Updated NavForwardingManager to include NavigationUpdatesOptions for improved navigation updates. - Enhanced ObjectTranslationUtil to extract and map lane information from StepInfo, including lane directions and recommendations. - Refactored multiple method signatures in iOS modules for consistency and clarity.
1 parent d3745c9 commit a79289c

6 files changed

Lines changed: 175 additions & 200 deletions

File tree

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,29 @@
1414
package com.google.android.react.navsdk;
1515

1616
import android.content.Context;
17+
import android.util.DisplayMetrics;
18+
import com.google.android.libraries.navigation.NavigationUpdatesOptions;
19+
import com.google.android.libraries.navigation.NavigationUpdatesOptions.GeneratedStepImagesType;
1720
import com.google.android.libraries.navigation.Navigator;
1821

1922
/** Starts and stops the forwarding of turn-by-turn nav info from Nav SDK. */
2023
public class NavForwardingManager {
2124
/** Registers a service to receive navigation updates from nav info */
2225
public static void startNavForwarding(
2326
Navigator navigator, Context context, INavigationCallback navigationCallback) {
27+
28+
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
29+
30+
NavigationUpdatesOptions options =
31+
NavigationUpdatesOptions.builder()
32+
.setNumNextStepsToPreview(Integer.MAX_VALUE)
33+
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
34+
.setDisplayMetrics(metrics)
35+
.build();
36+
2437
boolean success =
2538
navigator.registerServiceForNavUpdates(
26-
context.getPackageName(),
27-
NavInfoReceivingService.class.getName(),
28-
/* numNextStepsToPreview= */ Integer.MAX_VALUE); // Send all remaining steps.
39+
context.getPackageName(), NavInfoReceivingService.class.getName(), options);
2940
if (success) {
3041
navigationCallback.logDebugInfo("Successfully registered service for nav updates");
3142
} else {

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.android.gms.maps.model.Marker;
2525
import com.google.android.gms.maps.model.Polygon;
2626
import com.google.android.gms.maps.model.Polyline;
27+
import com.google.android.libraries.mapsplatform.turnbyturn.model.Lane;
28+
import com.google.android.libraries.mapsplatform.turnbyturn.model.LaneDirection;
2729
import com.google.android.libraries.mapsplatform.turnbyturn.model.StepInfo;
2830
import com.google.android.libraries.navigation.AlternateRoutesStrategy;
2931
import com.google.android.libraries.navigation.DisplayOptions;
@@ -103,6 +105,32 @@ public static WritableMap getMapFromStepInfo(StepInfo stepInfo) {
103105
map.putString("exitNumber", stepInfo.getExitNumber());
104106
map.putString("fullRoadName", stepInfo.getFullRoadName());
105107
map.putString("instruction", stepInfo.getFullInstructionText());
108+
109+
List<Lane> lanes = stepInfo.getLanes();
110+
if (lanes != null) {
111+
WritableArray lanesArr = Arguments.createArray();
112+
113+
for (Lane lane : lanes) {
114+
WritableArray dirArr = Arguments.createArray();
115+
116+
List<LaneDirection> dirs = lane.laneDirections();
117+
if (dirs != null) {
118+
for (LaneDirection dir : dirs) {
119+
WritableMap dirMap = Arguments.createMap();
120+
dirMap.putInt("laneShape", dir.laneShape());
121+
dirMap.putBoolean("recommended", dir.isRecommended());
122+
dirArr.pushMap(dirMap);
123+
}
124+
}
125+
126+
WritableMap laneMap = Arguments.createMap();
127+
laneMap.putArray("laneDirections", dirArr);
128+
lanesArr.pushMap(laneMap);
129+
}
130+
131+
map.putArray("lanes", lanesArr);
132+
}
133+
106134
return map;
107135
}
108136

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

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
118118
});
119119
}
120120

121-
RCT_EXPORT_METHOD(addMarker
122-
: (NSDictionary *)markerOptions resolver
123-
: (RCTPromiseResolveBlock)resolve rejecter
124-
: (RCTPromiseRejectBlock)reject) {
121+
RCT_EXPORT_METHOD(addMarker : (NSDictionary *)markerOptions resolver : (RCTPromiseResolveBlock)
122+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
125123
dispatch_async(dispatch_get_main_queue(), ^{
126124
if (self->_viewController) {
127125
[self->_viewController addMarker:markerOptions
@@ -134,10 +132,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
134132
});
135133
}
136134

137-
RCT_EXPORT_METHOD(addCircle
138-
: (NSDictionary *)circleOptions resolver
139-
: (RCTPromiseResolveBlock)resolve rejecter
140-
: (RCTPromiseRejectBlock)reject) {
135+
RCT_EXPORT_METHOD(addCircle : (NSDictionary *)circleOptions resolver : (RCTPromiseResolveBlock)
136+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
141137
dispatch_async(dispatch_get_main_queue(), ^{
142138
if (self->_viewController) {
143139
[self->_viewController addCircle:circleOptions
@@ -150,10 +146,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
150146
});
151147
}
152148

153-
RCT_EXPORT_METHOD(addPolyline
154-
: (NSDictionary *)polylineOptions resolver
155-
: (RCTPromiseResolveBlock)resolve rejecter
156-
: (RCTPromiseRejectBlock)reject) {
149+
RCT_EXPORT_METHOD(addPolyline : (NSDictionary *)polylineOptions resolver : (RCTPromiseResolveBlock)
150+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
157151
dispatch_async(dispatch_get_main_queue(), ^{
158152
if (self->_viewController) {
159153
[self->_viewController addPolyline:polylineOptions
@@ -166,10 +160,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
166160
});
167161
}
168162

169-
RCT_EXPORT_METHOD(addPolygon
170-
: (NSDictionary *)polygonOptions resolver
171-
: (RCTPromiseResolveBlock)resolve rejecter
172-
: (RCTPromiseRejectBlock)reject) {
163+
RCT_EXPORT_METHOD(addPolygon : (NSDictionary *)polygonOptions resolver : (RCTPromiseResolveBlock)
164+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
173165
dispatch_async(dispatch_get_main_queue(), ^{
174166
if (self->_viewController) {
175167
[self->_viewController addPolygon:polygonOptions
@@ -278,10 +270,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
278270
});
279271
}
280272

281-
RCT_EXPORT_METHOD(setZoomLevel
282-
: (nonnull NSNumber *)level resolver
283-
: (RCTPromiseResolveBlock)resolve rejecter
284-
: (RCTPromiseRejectBlock)reject) {
273+
RCT_EXPORT_METHOD(setZoomLevel : (nonnull NSNumber *)level resolver : (RCTPromiseResolveBlock)
274+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
285275
dispatch_async(dispatch_get_main_queue(), ^{
286276
if (self->_viewController) {
287277
[self->_viewController setZoomLevel:level];
@@ -315,9 +305,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
315305
});
316306
}
317307

318-
RCT_EXPORT_METHOD(getCameraPosition
319-
: (RCTPromiseResolveBlock)resolve rejecter
320-
: (RCTPromiseRejectBlock)reject) {
308+
RCT_EXPORT_METHOD(getCameraPosition : (RCTPromiseResolveBlock)
309+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
321310
dispatch_async(dispatch_get_main_queue(), ^{
322311
if (self->_viewController) {
323312
[self->_viewController getCameraPosition:^(NSDictionary *result) {
@@ -329,9 +318,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
329318
});
330319
}
331320

332-
RCT_EXPORT_METHOD(getMyLocation
333-
: (RCTPromiseResolveBlock)resolve rejecter
334-
: (RCTPromiseRejectBlock)reject) {
321+
RCT_EXPORT_METHOD(getMyLocation : (RCTPromiseResolveBlock)resolve rejecter : (RCTPromiseRejectBlock)
322+
reject) {
335323
dispatch_async(dispatch_get_main_queue(), ^{
336324
if (self->_viewController) {
337325
[self->_viewController getMyLocation:^(NSDictionary *_Nullable result) {
@@ -343,9 +331,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
343331
});
344332
}
345333

346-
RCT_EXPORT_METHOD(getUiSettings
347-
: (RCTPromiseResolveBlock)resolve rejecter
348-
: (RCTPromiseRejectBlock)reject) {
334+
RCT_EXPORT_METHOD(getUiSettings : (RCTPromiseResolveBlock)resolve rejecter : (RCTPromiseRejectBlock)
335+
reject) {
349336
dispatch_async(dispatch_get_main_queue(), ^{
350337
if (self->_viewController) {
351338
[self->_viewController getUiSettings:^(NSDictionary *_Nullable result) {
@@ -357,9 +344,8 @@ + (void)unregisterNavAutoModuleReadyCallback {
357344
});
358345
}
359346

360-
RCT_EXPORT_METHOD(isMyLocationEnabled
361-
: (RCTPromiseResolveBlock)resolve rejecter
362-
: (RCTPromiseRejectBlock)reject) {
347+
RCT_EXPORT_METHOD(isMyLocationEnabled : (RCTPromiseResolveBlock)
348+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
363349
dispatch_async(dispatch_get_main_queue(), ^{
364350
if (self->_viewController) {
365351
[self->_viewController isMyLocationEnabled:^(BOOL result) {
@@ -379,20 +365,16 @@ + (void)unregisterNavAutoModuleReadyCallback {
379365
});
380366
}
381367

382-
RCT_EXPORT_METHOD(isAutoScreenAvailable
383-
: (RCTPromiseResolveBlock)resolve rejecter
384-
: (RCTPromiseRejectBlock)reject) {
368+
RCT_EXPORT_METHOD(isAutoScreenAvailable : (RCTPromiseResolveBlock)
369+
resolve rejecter : (RCTPromiseRejectBlock)reject) {
385370
dispatch_async(dispatch_get_main_queue(), ^{
386371
BOOL hasViewController = self->_viewController != nil;
387372
resolve([NSNumber numberWithBool:hasViewController]);
388373
});
389374
}
390375

391-
RCT_EXPORT_METHOD(setPadding
392-
: (nonnull NSNumber *)top left
393-
: (nonnull NSNumber *)left bottom
394-
: (nonnull NSNumber *)bottom right
395-
: (nonnull NSNumber *)right) {
376+
RCT_EXPORT_METHOD(setPadding : (nonnull NSNumber *)top left : (nonnull NSNumber *)
377+
left bottom : (nonnull NSNumber *)bottom right : (nonnull NSNumber *)right) {
396378
dispatch_async(dispatch_get_main_queue(), ^{
397379
if (self->_viewController) {
398380
[self->_viewController setPadding:UIEdgeInsetsMake(top.floatValue, left.floatValue,

0 commit comments

Comments
 (0)