Skip to content

Commit 4e64ab8

Browse files
feat: add onMapClick API for mapViewCallbacks (#125)
1 parent 6a41c44 commit 4e64ab8

File tree

11 files changed

+72
-23
lines changed

11 files changed

+72
-23
lines changed

SampleApp/src/app.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import {
4141
NavigationInitErrorCode,
4242
RouteStatus,
4343
} from 'react-native-navigation-sdk/components/navigation/types';
44-
import {Location} from 'react-native-navigation-sdk/components/shared/types';
44+
import {LatLng, Location} from 'react-native-navigation-sdk/components/shared/types';
4545
import Snackbar from 'react-native-snackbar';
4646
import MapsControls from './mapsControls';
4747
import NavigationControls from './navigationControls';
@@ -306,6 +306,9 @@ const App: React.FC = (): ReactElement => {
306306
onMarkerInfoWindowTapped: (marker: Marker) => {
307307
console.log('onMarkerInfoWindowTapped: ', marker);
308308
},
309+
onMapClick: (latLng: LatLng) => {
310+
console.log("onMapClick: ", latLng);
311+
},
309312
};
310313

311314
const termsAndConditionsDialogOptions: TermsAndConditionsDialogOptions = {

SampleApp/src/navigationControls.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ const NavigationControls: React.FC<NavigationControlsProps> = ({
5959
useState(true);
6060
const [backgroundLocationUpdatesEnabled, setBackgroundLocationUpdatesEnabled] =
6161
useState(false);
62+
const [etaCardEnabled, setEtaCardEnabled] =
63+
useState(true);
6264

6365
const [latitude, onLatChanged] = useState('');
6466
const [longitude, onLngChanged] = useState('');
@@ -195,6 +197,12 @@ const NavigationControls: React.FC<NavigationControlsProps> = ({
195197
navigationViewController.setRecenterButtonEnabled(isOn);
196198
};
197199

200+
const toggleEtaCardEnabled = (isOn: boolean) => {
201+
console.log('toggleEtaCardEnabled:', isOn);
202+
setEtaCardEnabled(isOn);
203+
navigationViewController.setFooterEnabled(isOn);
204+
};
205+
198206
const showRouteOverview = () => {
199207
console.log('showRouteOverview');
200208
navigationViewController.showRouteOverview();
@@ -377,6 +385,15 @@ const NavigationControls: React.FC<NavigationControlsProps> = ({
377385
}}
378386
/>
379387
</View>
388+
<View style={styles.rowContainer}>
389+
<Text>Footer enabled</Text>
390+
<Switch
391+
value={etaCardEnabled}
392+
onValueChange={() => {
393+
toggleEtaCardEnabled(!etaCardEnabled);
394+
}}
395+
/>
396+
</View>
380397
<View style={styles.rowContainer}>
381398
<Text>Night mode </Text>
382399
<SelectDropdown

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
*/
1414
package com.google.android.react.navsdk;
1515

16+
import android.location.Location;
1617
import com.google.android.gms.maps.model.Circle;
1718
import com.google.android.gms.maps.model.GroundOverlay;
19+
import com.google.android.gms.maps.model.LatLng;
1820
import com.google.android.gms.maps.model.Marker;
1921
import com.google.android.gms.maps.model.Polygon;
2022
import com.google.android.gms.maps.model.Polyline;
21-
import android.location.Location;
2223
import com.google.android.libraries.mapsplatform.turnbyturn.model.NavInfo;
2324
import com.google.android.libraries.navigation.ArrivalEvent;
2425
import com.google.android.libraries.navigation.Navigator;
@@ -65,4 +66,6 @@ public interface INavigationCallback {
6566
void onGroundOverlayClick(GroundOverlay overlay);
6667

6768
void onMarkerInfoWindowTapped(Marker marker);
69+
70+
void onMapClick(LatLng latLng);
6871
}

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

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,46 +11,41 @@
1111
* express or implied. See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
*/
14-
1514
package com.google.android.react.navsdk;
1615

17-
import com.facebook.react.bridge.UiThreadUtil;
1816
import android.Manifest.permission;
1917
import android.annotation.SuppressLint;
2018
import android.content.pm.PackageManager;
2119
import android.graphics.Color;
2220
import android.location.Location;
2321
import android.os.Bundle;
24-
import android.util.Log;
2522
import android.view.LayoutInflater;
2623
import android.view.View;
2724
import android.view.ViewGroup;
2825
import androidx.annotation.NonNull;
2926
import androidx.annotation.Nullable;
30-
import androidx.appcompat.app.AppCompatActivity;
3127
import androidx.core.app.ActivityCompat;
3228
import androidx.fragment.app.Fragment;
3329
import androidx.lifecycle.Observer;
34-
3530
import com.facebook.react.bridge.ReadableArray;
31+
import com.facebook.react.bridge.UiThreadUtil;
3632
import com.google.android.gms.maps.CameraUpdateFactory;
3733
import com.google.android.gms.maps.GoogleMap;
3834
import com.google.android.gms.maps.OnMapReadyCallback;
39-
import com.google.android.gms.maps.UiSettings;
4035
import com.google.android.gms.maps.model.BitmapDescriptor;
4136
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
4237
import com.google.android.gms.maps.model.CameraPosition;
4338
import com.google.android.gms.maps.model.Circle;
44-
import com.google.android.gms.maps.model.Marker;
45-
import com.google.android.gms.maps.model.Polygon;
46-
import com.google.android.gms.maps.model.Polyline;
47-
import com.google.android.gms.maps.model.GroundOverlay;
4839
import com.google.android.gms.maps.model.CircleOptions;
40+
import com.google.android.gms.maps.model.GroundOverlay;
4941
import com.google.android.gms.maps.model.GroundOverlayOptions;
5042
import com.google.android.gms.maps.model.LatLng;
5143
import com.google.android.gms.maps.model.MapStyleOptions;
44+
import com.google.android.gms.maps.model.Marker;
5245
import com.google.android.gms.maps.model.MarkerOptions;
46+
import com.google.android.gms.maps.model.Polygon;
5347
import com.google.android.gms.maps.model.PolygonOptions;
48+
import com.google.android.gms.maps.model.Polyline;
5449
import com.google.android.gms.maps.model.PolylineOptions;
5550
import com.google.android.libraries.mapsplatform.turnbyturn.model.NavInfo;
5651
import com.google.android.libraries.navigation.ArrivalEvent;
@@ -61,32 +56,22 @@
6156
import com.google.android.libraries.navigation.Navigator;
6257
import com.google.android.libraries.navigation.RoadSnappedLocationProvider;
6358
import com.google.android.libraries.navigation.RoadSnappedLocationProvider.LocationListener;
64-
import com.google.android.libraries.navigation.RouteSegment;
65-
import com.google.android.libraries.navigation.RoutingOptions;
6659
import com.google.android.libraries.navigation.SimulationOptions;
6760
import com.google.android.libraries.navigation.SpeedAlertOptions;
6861
import com.google.android.libraries.navigation.SpeedAlertSeverity;
6962
import com.google.android.libraries.navigation.StylingOptions;
7063
import com.google.android.libraries.navigation.SupportNavigationFragment;
7164
import com.google.android.libraries.navigation.TermsAndConditionsCheckOption;
72-
import com.google.android.libraries.navigation.TimeAndDistance;
7365
import com.google.android.libraries.navigation.Waypoint;
74-
75-
import org.json.JSONArray;
76-
import org.json.JSONException;
77-
import org.json.JSONObject;
78-
7966
import java.io.BufferedReader;
8067
import java.io.IOException;
8168
import java.io.InputStream;
8269
import java.io.InputStreamReader;
8370
import java.net.HttpURLConnection;
8471
import java.net.URL;
8572
import java.util.ArrayList;
86-
import java.util.HashMap;
8773
import java.util.List;
8874
import java.util.Map;
89-
import java.util.UUID;
9075
import java.util.concurrent.Executors;
9176

9277
/**
@@ -739,6 +724,14 @@ public void onInfoWindowClick(Marker marker) {
739724
navigationCallback.onMarkerInfoWindowTapped(marker);
740725
}
741726
});
727+
728+
mGoogleMap.setOnMapClickListener(
729+
new GoogleMap.OnMapClickListener() {
730+
@Override
731+
public void onMapClick(LatLng latLng) {
732+
navigationCallback.onMapClick(latLng);
733+
}
734+
});
742735
}
743736
});
744737

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,15 @@ public void onMapReady() {
583583
sendCommandToReactNative("onMapReady", null);
584584
}
585585

586+
@Override
587+
public void onMapClick(LatLng latLng) {
588+
CatalystInstance catalystInstance = reactContext.getCatalystInstance();
589+
590+
WritableNativeArray params = new WritableNativeArray();
591+
params.pushMap(ObjectTranslationUtil.getMapFromLatLng(latLng));
592+
catalystInstance.callFunction(Constants.JAVASCRIPT_FLAG, "onMapClick", params);
593+
}
594+
586595
@Override
587596
public void onRecenterButtonClick() {
588597
sendCommandToReactNative("onRecenterButtonClick", null);

components/maps/mapView/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ export interface MapViewCallbacks {
156156
* Callback invoked when tapping on a marker's info window.
157157
*/
158158
onMarkerInfoWindowTapped?(args: Marker): void;
159+
160+
/**
161+
* Callback invoked when there is a click on the map view.
162+
* @param latLng position where the click occurred.
163+
*/
164+
onMapClick?(latLng: LatLng): void;
159165
}
160166

161167
export interface MapViewController {

components/navigation/navigationView/index.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
Polygon,
3131
Polyline,
3232
} from '../../maps/types';
33-
import {Location} from '../../shared/types';
33+
import {LatLng, Location} from '../../shared/types';
3434
import {NavViewManager, commands, sendCommand} from '../../shared/viewManager';
3535
import {NavigationInitErrorCode} from '../types';
3636
import NavHelper from './navHelper';
@@ -76,6 +76,13 @@ export default class NavigationView extends React.Component<NavigationViewProps>
7676
}
7777
};
7878

79+
onMapClick = (latLng: LatLng) => {
80+
if (this.props.mapViewCallbacks != null &&
81+
this.props.mapViewCallbacks.onMapClick) {
82+
this.props.mapViewCallbacks.onMapClick(latLng);
83+
}
84+
};
85+
7986
/**
8087
* A callback function that gets invoked when navigation information is ready.
8188
*

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ + (id)allocWithZone:(NSZone *)zone {
5252
@"onPolygonClick",
5353
@"onCircleClick",
5454
@"logDebugInfo",
55+
@"onMapClick",
5556
];
5657
}
5758

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
3535
- (void)onNavigationInitError:(NSNumber *)errorCode;
3636
- (void)onStartGuidance;
3737
- (void)onMapReady;
38+
- (void)onMapClick:(NSDictionary *)latLngMap;
3839
- (void)onRecenterButtonClick;
3940
- (void)onRouteStatusResult:(GMSRouteStatus)routeStatus;
4041
- (void)onReroutingRequestedByOffRoute;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ - (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)mark
6464
[callbacks onMarkerInfoWindowTapped:marker];
6565
}
6666

67+
- (void) mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate{
68+
[callbacks onMapClick: [ObjectTranslationUtil transformCoordinateToDictionary: coordinate]];
69+
}
70+
71+
6772
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
6873
[callbacks onMarkerClick:marker];
6974
return FALSE;

0 commit comments

Comments
 (0)