[android] added map touch listeners api based on lists

This commit is contained in:
paczos
2017-12-13 17:54:20 +01:00
committed by Łukasz Paczos
parent f545d21df0
commit 44363d4826
3 changed files with 220 additions and 12 deletions

View File

@@ -26,6 +26,8 @@ import com.mapbox.services.android.telemetry.MapboxTelemetry;
import com.mapbox.services.android.telemetry.utils.MathUtils;
import com.mapbox.services.android.telemetry.utils.TelemetryUtils;
import java.util.concurrent.CopyOnWriteArrayList;
import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE;
/**
@@ -53,6 +55,11 @@ final class MapGestureDetector {
private MapboxMap.OnFlingListener onFlingListener;
private MapboxMap.OnScrollListener onScrollListener;
private final CopyOnWriteArrayList<MapboxMap.OnMapClickListener> onMapClickListenerList = new CopyOnWriteArrayList<>();
private final CopyOnWriteArrayList<MapboxMap.OnMapLongClickListener> onMapLongClickListenerList = new CopyOnWriteArrayList<>();
private final CopyOnWriteArrayList<MapboxMap.OnFlingListener> onFlingListenerList = new CopyOnWriteArrayList<>();
private final CopyOnWriteArrayList<MapboxMap.OnScrollListener> onScrollListenerList = new CopyOnWriteArrayList<>();
private PointF focalPoint;
private boolean twoTap;
@@ -359,6 +366,10 @@ final class MapGestureDetector {
if (onMapClickListener != null) {
onMapClickListener.onMapClick(projection.fromScreenLocation(tapPoint));
}
for (MapboxMap.OnMapClickListener listener : onMapClickListenerList) {
listener.onMapClick(projection.fromScreenLocation(tapPoint));
}
}
MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent(
@@ -374,6 +385,13 @@ final class MapGestureDetector {
onMapLongClickListener.onMapLongClick(
projection.fromScreenLocation(new PointF(motionEvent.getX(), motionEvent.getY())));
}
if (!quickZoom) {
for (MapboxMap.OnMapLongClickListener listener : onMapLongClickListenerList) {
listener.onMapLongClick(
projection.fromScreenLocation(new PointF(motionEvent.getX(), motionEvent.getY())));
}
}
}
@Override
@@ -415,6 +433,10 @@ final class MapGestureDetector {
if (onFlingListener != null) {
onFlingListener.onFling();
}
for (MapboxMap.OnFlingListener listener : onFlingListenerList) {
listener.onFling();
}
return true;
}
@@ -452,6 +474,10 @@ final class MapGestureDetector {
if (onScrollListener != null) {
onScrollListener.onScroll();
}
for (MapboxMap.OnScrollListener listener : onScrollListenerList) {
listener.onScroll();
}
return true;
}
}
@@ -844,4 +870,36 @@ final class MapGestureDetector {
void setOnScrollListener(MapboxMap.OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
void addOnMapClickListener(MapboxMap.OnMapClickListener onMapClickListener) {
onMapClickListenerList.add(onMapClickListener);
}
void removeOnMapClickListener(MapboxMap.OnMapClickListener onMapClickListener) {
onMapClickListenerList.remove(onMapClickListener);
}
void addOnMapLongClickListener(MapboxMap.OnMapLongClickListener onMapLongClickListener) {
onMapLongClickListenerList.add(onMapLongClickListener);
}
void removeOnMapLongClickListener(MapboxMap.OnMapLongClickListener onMapLongClickListener) {
onMapLongClickListenerList.remove(onMapLongClickListener);
}
void addOnFlingListener(MapboxMap.OnFlingListener onFlingListener) {
onFlingListenerList.add(onFlingListener);
}
void removeOnFlingListener(MapboxMap.OnFlingListener onFlingListener) {
onFlingListenerList.remove(onFlingListener);
}
void addOnScrollListener(MapboxMap.OnScrollListener onScrollListener) {
onScrollListenerList.add(onScrollListener);
}
void removeOnScrollListener(MapboxMap.OnScrollListener onScrollListener) {
onScrollListenerList.remove(onScrollListener);
}
}

View File

@@ -908,24 +908,64 @@ public class MapView extends FrameLayout {
private class RegisterTouchListener implements MapboxMap.OnRegisterTouchListener {
@Override
public void onRegisterMapClickListener(MapboxMap.OnMapClickListener listener) {
public void onSetMapClickListener(MapboxMap.OnMapClickListener listener) {
mapGestureDetector.setOnMapClickListener(listener);
}
@Override
public void onRegisterMapLongClickListener(MapboxMap.OnMapLongClickListener listener) {
public void onAddMapClickListener(MapboxMap.OnMapClickListener listener) {
mapGestureDetector.addOnMapClickListener(listener);
}
@Override
public void onRemoveMapClickListener(MapboxMap.OnMapClickListener listener) {
mapGestureDetector.removeOnMapClickListener(listener);
}
@Override
public void onSetMapLongClickListener(MapboxMap.OnMapLongClickListener listener) {
mapGestureDetector.setOnMapLongClickListener(listener);
}
@Override
public void onRegisterScrollListener(MapboxMap.OnScrollListener listener) {
public void onAddMapLongClickListener(MapboxMap.OnMapLongClickListener listener) {
mapGestureDetector.addOnMapLongClickListener(listener);
}
@Override
public void onRemoveMapLongClickListener(MapboxMap.OnMapLongClickListener listener) {
mapGestureDetector.removeOnMapLongClickListener(listener);
}
@Override
public void onSetScrollListener(MapboxMap.OnScrollListener listener) {
mapGestureDetector.setOnScrollListener(listener);
}
@Override
public void onRegisterFlingListener(MapboxMap.OnFlingListener listener) {
public void onAddScrollListener(MapboxMap.OnScrollListener listener) {
mapGestureDetector.addOnScrollListener(listener);
}
@Override
public void onRemoveScrollListener(MapboxMap.OnScrollListener listener) {
mapGestureDetector.removeOnScrollListener(listener);
}
@Override
public void onSetFlingListener(MapboxMap.OnFlingListener listener) {
mapGestureDetector.setOnFlingListener(listener);
}
@Override
public void onAddFlingListener(MapboxMap.OnFlingListener listener) {
mapGestureDetector.addOnFlingListener(listener);
}
@Override
public void onRemoveFlingListener(MapboxMap.OnFlingListener listener) {
mapGestureDetector.removeOnFlingListener(listener);
}
}
private static class MapZoomControllerListener implements ZoomButtonsController.OnZoomListener {

View File

@@ -1902,9 +1902,34 @@ public final class MapboxMap {
*
* @param listener The callback that's invoked when the map is scrolled.
* To unset the callback, use null.
*
* @deprecated Use {@link #addOnScrollListener(OnScrollListener)} instead.
*/
@Deprecated
public void setOnScrollListener(@Nullable OnScrollListener listener) {
onRegisterTouchListener.onRegisterScrollListener(listener);
onRegisterTouchListener.onSetScrollListener(listener);
}
/**
* Adds a callback that's invoked when the map is scrolled.
*
* @param listener The callback that's invoked when the map is scrolled.
* To unset the callback, use null.
*
*/
public void addOnScrollListener(@Nullable OnScrollListener listener) {
onRegisterTouchListener.onAddScrollListener(listener);
}
/**
* Removes a callback that's invoked when the map is scrolled.
*
* @param listener The callback that's invoked when the map is scrolled.
* To unset the callback, use null.
*
*/
public void removeOnScrollListener(@Nullable OnScrollListener listener) {
onRegisterTouchListener.onRemoveScrollListener(listener);
}
/**
@@ -1912,9 +1937,32 @@ public final class MapboxMap {
*
* @param listener The callback that's invoked when the map is flinged.
* To unset the callback, use null.
*
* @deprecated Use {@link #addOnFlingListener(OnFlingListener)} instead.
*/
@Deprecated
public void setOnFlingListener(@Nullable OnFlingListener listener) {
onRegisterTouchListener.onRegisterFlingListener(listener);
onRegisterTouchListener.onSetFlingListener(listener);
}
/**
* Adds a callback that's invoked when the map is flinged.
*
* @param listener The callback that's invoked when the map is flinged.
* To unset the callback, use null.
*/
public void addOnFlingListener(@Nullable OnFlingListener listener) {
onRegisterTouchListener.onAddFlingListener(listener);
}
/**
* Removes a callback that's invoked when the map is flinged.
*
* @param listener The callback that's invoked when the map is flinged.
* To unset the callback, use null.
*/
public void removeOnFlingListener(@Nullable OnFlingListener listener) {
onRegisterTouchListener.onRemoveFlingListener(listener);
}
/**
@@ -1922,9 +1970,32 @@ public final class MapboxMap {
*
* @param listener The callback that's invoked when the user clicks on the map view.
* To unset the callback, use null.
*
* @deprecated Use {@link #addOnMapClickListener(OnMapClickListener)} instead.
*/
@Deprecated
public void setOnMapClickListener(@Nullable OnMapClickListener listener) {
onRegisterTouchListener.onRegisterMapClickListener(listener);
onRegisterTouchListener.onSetMapClickListener(listener);
}
/**
* Adds a callback that's invoked when the user clicks on the map view.
*
* @param listener The callback that's invoked when the user clicks on the map view.
* To unset the callback, use null.
*/
public void addOnMapClickListener(@Nullable OnMapClickListener listener) {
onRegisterTouchListener.onAddMapClickListener(listener);
}
/**
* Removes a callback that's invoked when the user clicks on the map view.
*
* @param listener The callback that's invoked when the user clicks on the map view.
* To unset the callback, use null.
*/
public void removeOnMapClickListener(@Nullable OnMapClickListener listener) {
onRegisterTouchListener.onRemoveMapClickListener(listener);
}
/**
@@ -1932,9 +2003,32 @@ public final class MapboxMap {
*
* @param listener The callback that's invoked when the user long clicks on the map view.
* To unset the callback, use null.
*
* @deprecated Use {@link #addOnMapLongClickListener(OnMapLongClickListener)} instead.
*/
@Deprecated
public void setOnMapLongClickListener(@Nullable OnMapLongClickListener listener) {
onRegisterTouchListener.onRegisterMapLongClickListener(listener);
onRegisterTouchListener.onSetMapLongClickListener(listener);
}
/**
* Adds a callback that's invoked when the user long clicks on the map view.
*
* @param listener The callback that's invoked when the user long clicks on the map view.
* To unset the callback, use null.
*/
public void addOnMapLongClickListener(@Nullable OnMapLongClickListener listener) {
onRegisterTouchListener.onAddMapLongClickListener(listener);
}
/**
* Removes a callback that's invoked when the user long clicks on the map view.
*
* @param listener The callback that's invoked when the user long clicks on the map view.
* To unset the callback, use null.
*/
public void removeOnMapLongClickListener(@Nullable OnMapLongClickListener listener) {
onRegisterTouchListener.onRemoveMapLongClickListener(listener);
}
/**
@@ -2304,13 +2398,29 @@ public final class MapboxMap {
* related to touch and click events.
*/
interface OnRegisterTouchListener {
void onRegisterMapClickListener(OnMapClickListener listener);
void onSetMapClickListener(OnMapClickListener listener);
void onRegisterMapLongClickListener(OnMapLongClickListener listener);
void onAddMapClickListener(OnMapClickListener listener);
void onRegisterScrollListener(OnScrollListener listener);
void onRemoveMapClickListener(OnMapClickListener listener);
void onRegisterFlingListener(OnFlingListener listener);
void onSetMapLongClickListener(OnMapLongClickListener listener);
void onAddMapLongClickListener(OnMapLongClickListener listener);
void onRemoveMapLongClickListener(OnMapLongClickListener listener);
void onSetScrollListener(OnScrollListener listener);
void onAddScrollListener(OnScrollListener listener);
void onRemoveScrollListener(OnScrollListener listener);
void onSetFlingListener(OnFlingListener listener);
void onAddFlingListener(OnFlingListener listener);
void onRemoveFlingListener(OnFlingListener listener);
}
/**