From f2585b342cc49bc8d04e6a4feed8f6aa07f1274d Mon Sep 17 00:00:00 2001 From: Brad Leege Date: Thu, 14 Jul 2016 14:11:43 -0700 Subject: [PATCH] [android] #5682 - Adding NaN and Infinite checks to trackGestureDragEndEvent() and trackGestureEvent() --- .../com/mapbox/mapboxsdk/maps/MapView.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index f78fc50eb..aca0e416b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -1441,6 +1441,17 @@ public class MapView extends FrameLayout { private void trackGestureEvent(@NonNull String gestureId, @NonNull float xCoordinate, @NonNull float yCoordinate) { LatLng tapLatLng = fromScreenLocation(new PointF(xCoordinate, yCoordinate)); + // NaN and Infinite checks to prevent JSON errors at send to server time + if (Double.isNaN(tapLatLng.getLatitude()) || Double.isNaN(tapLatLng.getLongitude())) { + Log.d(MapView.class.getSimpleName(), "trackGestureEvent() has a NaN lat or lon. Returning."); + return; + } + + if (Double.isInfinite(tapLatLng.getLatitude()) || Double.isInfinite(tapLatLng.getLongitude())) { + Log.d(MapView.class.getSimpleName(), "trackGestureEvent() has an Infinite lat or lon. Returning."); + return; + } + Hashtable evt = new Hashtable<>(); evt.put(MapboxEvent.ATTRIBUTE_EVENT, MapboxEvent.TYPE_MAP_CLICK); evt.put(MapboxEvent.ATTRIBUTE_CREATED, MapboxEventManager.generateCreateDate()); @@ -1462,6 +1473,17 @@ public class MapView extends FrameLayout { private void trackGestureDragEndEvent(@NonNull float xCoordinate, @NonNull float yCoordinate) { LatLng tapLatLng = fromScreenLocation(new PointF(xCoordinate, yCoordinate)); + // NaN and Infinite checks to prevent JSON errors at send to server time + if (Double.isNaN(tapLatLng.getLatitude()) || Double.isNaN(tapLatLng.getLongitude())) { + Log.d(MapView.class.getSimpleName(), "trackGestureDragEndEvent() has a NaN lat or lon. Returning."); + return; + } + + if (Double.isInfinite(tapLatLng.getLatitude()) || Double.isInfinite(tapLatLng.getLongitude())) { + Log.d(MapView.class.getSimpleName(), "trackGestureDragEndEvent() has an Infinite lat or lon. Returning."); + return; + } + Hashtable evt = new Hashtable<>(); evt.put(MapboxEvent.ATTRIBUTE_EVENT, MapboxEvent.TYPE_MAP_DRAGEND); evt.put(MapboxEvent.ATTRIBUTE_CREATED, MapboxEventManager.generateCreateDate());