diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java index 9c79ffcbd9..d8763e321d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java @@ -53,22 +53,35 @@ public class InfoWindow { mIsVisible = false; mView = new WeakReference<>(view); - // default behavior: close it when clicking on the tooltip: - view.setOnTouchListener(new View.OnTouchListener() { + view.setOnClickListener(new View.OnClickListener() { @Override - public boolean onTouch(View v, MotionEvent e) { - if (e.getAction() == MotionEvent.ACTION_UP) { + public void onClick(View v) { + MapboxMap mapboxMap = mMapboxMap.get(); + if (mapboxMap != null) { + MapboxMap.OnInfoWindowClickListener onInfoWindowClickListener = mapboxMap.getOnInfoWindowClickListener(); boolean handledDefaultClick = false; - MapboxMap.OnInfoWindowClickListener onInfoWindowClickListener = - mMapboxMap.get().getOnInfoWindowClickListener(); if (onInfoWindowClickListener != null) { - handledDefaultClick = onInfoWindowClickListener.onMarkerClick(getBoundMarker()); + handledDefaultClick = onInfoWindowClickListener.onInfoWindowClick(getBoundMarker()); } if (!handledDefaultClick) { + // default behavior: close it when clicking on the tooltip: close(); } } + } + }); + + view.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + MapboxMap mapboxMap = mMapboxMap.get(); + if (mapboxMap != null) { + MapboxMap.OnInfoWindowLongClickListener listener = mapboxMap.getOnInfoWindowLongClickListener(); + if (listener != null) { + listener.onInfoWindowLongClick(getBoundMarker()); + } + } return true; } }); @@ -179,11 +192,10 @@ public class InfoWindow { if (mIsVisible) { mIsVisible = false; View view = mView.get(); - if (view != null) { + if (view != null && view.getParent() != null) { ((ViewGroup) view.getParent()).removeView(view); - setBoundMarker(null); - onClose(); } + onClose(); } return this; } @@ -210,7 +222,12 @@ public class InfoWindow { private void onClose() { MapboxMap mapboxMap = mMapboxMap.get(); if (mapboxMap != null) { + MapboxMap.OnInfoWindowCloseListener listener = mapboxMap.getOnInfoWindowCloseListener(); + if (listener != null) { + listener.onInfoWindowClose(getBoundMarker()); + } mapboxMap.deselectMarker(getBoundMarker()); + setBoundMarker(null); } } @@ -237,4 +254,8 @@ public class InfoWindow { } } + boolean isVisible() { + return mIsVisible; + } + } |