Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ This project follows
follow [GitHub's directions](https://help.github.com/articles/generating-ssh-keys/)
to generate an SSH key.
- `git clone [email protected]:<your_name_here>/googlemaps/react-native-navigation-sdk.git`
- `git remote add upstream [email protected]:googlemaps/react-native-sdk.git` (So that you
- `git remote add upstream [email protected]:googlemaps/react-native-navigation-sdk.git` (So that you
fetch from the master repository, not your clone, when running `git fetch`
et al.)

#### Create branch

1. `git fetch upstream`
2. `git checkout upstream/master -b <name_of_your_branch>`
2. `git checkout upstream/main -b <name_of_your_branch>`
3. Start coding!

#### Commit changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,15 @@
public class Constants {
public static final String LAT_FIELD_KEY = "lat";
public static final String LNG_FIELD_KEY = "lng";

public static final String URI_KEY = "uri";

public static final String X_KEY = "x";
public static final String Y_KEY = "y";

public static final String CAMERA_POSITION_KEY = "cameraPosition";
public static final String TARGET_KEY = "target";
public static final String BEARING_KEY = "bearing";
public static final String TILT_KEY = "tilt";
public static final String ZOOM_KEY = "zoom";
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/
package com.google.android.react.navsdk;

import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.LatLng;
Expand All @@ -36,4 +37,8 @@ public interface INavigationViewCallback {
void onMarkerInfoWindowTapped(Marker marker);

void onMapClick(LatLng latLng);

void onMapDrag(CameraPosition cameraPosition);

void onMapDragEnd(CameraPosition cameraPosition);
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ public void setupMapListeners(INavigationViewCallback navigationViewCallback) {
mGoogleMap.setOnInfoWindowClickListener(
marker -> mNavigationViewCallback.onMarkerInfoWindowTapped(marker));
mGoogleMap.setOnMapClickListener(latLng -> mNavigationViewCallback.onMapClick(latLng));
mGoogleMap.setOnCameraMoveListener(
() -> mNavigationViewCallback.onMapDrag(mGoogleMap.getCameraPosition()));
mGoogleMap.setOnCameraIdleListener(
() -> mNavigationViewCallback.onMapDragEnd(mGoogleMap.getCameraPosition()));
}

public GoogleMap getGoogleMap() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.LatLng;
Expand Down Expand Up @@ -128,6 +129,24 @@ public void onMapClick(LatLng latLng) {
emitEvent("onMapClick", ObjectTranslationUtil.getMapFromLatLng(latLng));
}

@Override
public void onMapDrag(CameraPosition cameraPosition) {
WritableMap map = Arguments.createMap();
map.putMap(
Constants.CAMERA_POSITION_KEY,
ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
emitEvent("onMapDrag", map);
}

@Override
public void onMapDragEnd(CameraPosition cameraPosition) {
WritableMap map = Arguments.createMap();
map.putMap(
Constants.CAMERA_POSITION_KEY,
ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
emitEvent("onMapDragEnd", map);
}

public MapViewController getMapController() {
return mMapViewController;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.facebook.react.uimanager.events.EventDispatcher;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.LatLng;
Expand Down Expand Up @@ -188,6 +189,24 @@ public void onMapClick(LatLng latLng) {
emitEvent("onMapClick", ObjectTranslationUtil.getMapFromLatLng(latLng));
}

@Override
public void onMapDrag(CameraPosition cameraPosition) {
WritableMap map = Arguments.createMap();
map.putMap(
Constants.CAMERA_POSITION_KEY,
ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
emitEvent("onMapDrag", ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
}

@Override
public void onMapDragEnd(CameraPosition cameraPosition) {
WritableMap map = Arguments.createMap();
map.putMap(
Constants.CAMERA_POSITION_KEY,
ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
emitEvent("onMapDragEnd", ObjectTranslationUtil.getMapFromCameraPosition(cameraPosition));
}

@Override
public void onDestroy() {
super.onDestroy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,8 @@ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
MapBuilder.of("registrationName", "onPromptVisibilityChanged"))
.put("onMapReady", MapBuilder.of("registrationName", "onMapReady"))
.put("onMapClick", MapBuilder.of("registrationName", "onMapClick"))
.put("onMapDrag", MapBuilder.of("registrationName", "onMapDrag"))
.put("onMapDragEnd", MapBuilder.of("registrationName", "onMapDragEnd"))
.put("onMarkerClick", MapBuilder.of("registrationName", "onMarkerClick"))
.put("onPolylineClick", MapBuilder.of("registrationName", "onPolylineClick"))
.put("onPolygonClick", MapBuilder.of("registrationName", "onPolygonClick"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/
package com.google.android.react.navsdk;

import android.graphics.Point;
import android.location.Location;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
Expand All @@ -22,14 +23,18 @@
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.bridge.WritableMap;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.Polygon;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.VisibleRegion;
import java.util.HashMap;
import java.util.Map;

Expand Down Expand Up @@ -75,12 +80,7 @@ public void getCameraPosition(Integer viewId, final Promise promise) {
return;
}

LatLng target = cp.target;
WritableMap map = Arguments.createMap();
map.putDouble("bearing", cp.bearing);
map.putDouble("tilt", cp.tilt);
map.putDouble("zoom", cp.zoom);
map.putMap("target", ObjectTranslationUtil.getMapFromLatLng(target));
WritableMap map = ObjectTranslationUtil.getMapFromCameraPosition(cp);

promise.resolve(map);
});
Expand Down Expand Up @@ -110,6 +110,116 @@ public void getMyLocation(Integer viewId, final Promise promise) {
});
}

@ReactMethod
public void coordinateForPoint(Integer viewId, ReadableMap pointMap, final Promise promise) {
UiThreadUtil.runOnUiThread(
() -> {
if (mNavViewManager.getGoogleMap(viewId) == null) {
promise.reject(JsErrors.NO_MAP_ERROR_CODE, JsErrors.NO_MAP_ERROR_MESSAGE);
return;
}

try {
float density = getReactApplicationContext().getResources().getDisplayMetrics().density;
int x = (int) density * CollectionUtil.getInt("x", pointMap.toHashMap(), 0);
int y = (int) density * CollectionUtil.getInt("y", pointMap.toHashMap(), 0);
Point point = new Point(x, y);
LatLng latLng =
mNavViewManager.getGoogleMap(viewId).getProjection().fromScreenLocation(point);

promise.resolve(ObjectTranslationUtil.getMapFromLatLng(latLng));
} catch (Exception e) {
promise.resolve(null);
return;
}
});
}

@ReactMethod
public void pointForCoordinate(Integer viewId, ReadableMap latLngMap, final Promise promise) {
UiThreadUtil.runOnUiThread(
() -> {
if (mNavViewManager.getGoogleMap(viewId) == null) {
promise.reject(JsErrors.NO_MAP_ERROR_CODE, JsErrors.NO_MAP_ERROR_MESSAGE);
return;
}

LatLng latLng = ObjectTranslationUtil.getLatLngFromMap(latLngMap.toHashMap());
Point point =
mNavViewManager.getGoogleMap(viewId).getProjection().toScreenLocation(latLng);
float density = getReactApplicationContext().getResources().getDisplayMetrics().density;
point.x = (int) (point.x / density);
point.y = (int) (point.y / density);

promise.resolve(ObjectTranslationUtil.getMapFromPoint(point));
});
}

@ReactMethod
public void fitBounds(Integer viewId, ReadableMap boundsOptions, final Promise promise) {
UiThreadUtil.runOnUiThread(
() -> {
if (mNavViewManager.getGoogleMap(viewId) == null) {
promise.reject(JsErrors.NO_MAP_ERROR_CODE, JsErrors.NO_MAP_ERROR_MESSAGE);
return;
}

LatLng northEast =
ObjectTranslationUtil.getLatLngFromMap(
boundsOptions.getMap("bounds").getMap("northEast").toHashMap());
LatLng southWest =
ObjectTranslationUtil.getLatLngFromMap(
boundsOptions.getMap("bounds").getMap("southWest").toHashMap());

if (northEast == null || southWest == null) {
promise.resolve(null);
return;
}

ReadableMap paddingMap = boundsOptions.getMap("padding");
if (paddingMap != null) {
double density =
getReactApplicationContext().getResources().getDisplayMetrics().density;
int left = (int) (paddingMap.getInt("left") * density);
int top = (int) (paddingMap.getInt("top") * density);
int right = (int) (paddingMap.getInt("right") * density);
int bottom = (int) (paddingMap.getInt("bottom") * density);
mNavViewManager.getGoogleMap(viewId).setPadding(left, top, right, bottom);
}

CameraUpdate cameraUpdate =
CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southWest, northEast), 0);
mNavViewManager.getGoogleMap(viewId).animateCamera(cameraUpdate);

promise.resolve(null);
});
}

@ReactMethod
public void getBounds(Integer viewId, final Promise promise) {
UiThreadUtil.runOnUiThread(
() -> {
if (mNavViewManager.getGoogleMap(viewId) == null) {
promise.reject(JsErrors.NO_MAP_ERROR_CODE, JsErrors.NO_MAP_ERROR_MESSAGE);
return;
}

VisibleRegion visibleRegion =
mNavViewManager.getGoogleMap(viewId).getProjection().getVisibleRegion();
LatLng northEast = visibleRegion.farRight;
LatLng southWest = visibleRegion.nearLeft;

WritableMap northEastMap = ObjectTranslationUtil.getMapFromLatLng(northEast);
WritableMap southWestMap = ObjectTranslationUtil.getMapFromLatLng(southWest);

WritableMap map = Arguments.createMap();
map.putMap("northEast", northEastMap);
map.putMap("southWest", southWestMap);

promise.resolve(map);
});
}

@ReactMethod
public void getUiSettings(Integer viewId, final Promise promise) {
UiThreadUtil.runOnUiThread(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@
*/
package com.google.android.react.navsdk;

import android.graphics.Point;
import android.location.Location;
import android.os.Build;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.LatLng;
Expand Down Expand Up @@ -79,6 +81,23 @@ public static WritableMap getMapFromLatLng(LatLng latLng) {
return map;
}

public static WritableMap getMapFromPoint(Point point) {
WritableMap map = Arguments.createMap();
map.putDouble(Constants.X_KEY, point.x);
map.putDouble(Constants.Y_KEY, point.y);
return map;
}

public static WritableMap getMapFromCameraPosition(CameraPosition cameraPosition) {
WritableMap map = Arguments.createMap();
map.putMap(Constants.TARGET_KEY, getMapFromLatLng(cameraPosition.target));
map.putDouble(Constants.BEARING_KEY, cameraPosition.bearing);
map.putDouble(Constants.TILT_KEY, cameraPosition.tilt);
map.putDouble(Constants.ZOOM_KEY, cameraPosition.zoom);

return map;
}

public static WritableMap getMapFromWaypoint(Waypoint waypoint) {
WritableMap map = Arguments.createMap();

Expand Down
10 changes: 1 addition & 9 deletions example/ios/SampleApp.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -643,10 +643,6 @@
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "SampleApp/Info-CarPlay.plist";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"CARPLAY=1",
);
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down Expand Up @@ -674,12 +670,8 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = SampleApp/SampleApp.entitlements;
CURRENT_PROJECT_VERSION = 1;
INFOPLIST_FILE = "SampleApp/Info-CarPlay.plist";
INFOPLIST_FILE = SampleApp/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"CARPLAY=1",
);
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down
Loading
Loading