summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun@mapbox.com>2017-12-14 12:15:36 +0100
committerGitHub <noreply@github.com>2017-12-14 12:15:36 +0100
commit4525ff714adb483a213638e251c38156bd7fa04e (patch)
tree219d81100d530b958ddf834b633da8969b96813f
parent7012c1b683ec5cc56da48dd4020d79834810c225 (diff)
downloadqtlocation-mapboxgl-4525ff714adb483a213638e251c38156bd7fa04e.tar.gz
Post camera listener invocations (#10690)
* [android] - post camera listener invocations * remove jvm unit test
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java127
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcherTest.java87
2 files changed, 81 insertions, 133 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java
index f046744c31..605c8912e2 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java
@@ -1,5 +1,6 @@
package com.mapbox.mapboxsdk.maps;
+import android.os.Handler;
import android.support.annotation.NonNull;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -9,10 +10,16 @@ import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveCanceledListener;
import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveListener;
import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener;
+/**
+ * Class responsible for dispatching camera change events to registered listeners.
+ */
class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, MapboxMap.OnCameraMoveListener,
MapboxMap.OnCameraMoveCanceledListener, OnCameraIdleListener {
+ private final Handler handler = new Handler();
+
private boolean idle = true;
+ private int moveStartedReason;
private final CopyOnWriteArrayList<OnCameraMoveStartedListener> onCameraMoveStarted = new CopyOnWriteArrayList<>();
private final CopyOnWriteArrayList<OnCameraMoveCanceledListener> onCameraMoveCanceled = new CopyOnWriteArrayList<>();
@@ -24,6 +31,74 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M
private OnCameraMoveListener onCameraMoveListener;
private OnCameraIdleListener onCameraIdleListener;
+ private final Runnable onCameraMoveStartedRunnable = new Runnable() {
+ @Override
+ public void run() {
+ // deprecated API
+ if (onCameraMoveStartedListener != null) {
+ onCameraMoveStartedListener.onCameraMoveStarted(moveStartedReason);
+ }
+
+ // new API
+ if (!onCameraMoveStarted.isEmpty()) {
+ for (OnCameraMoveStartedListener cameraMoveStartedListener : onCameraMoveStarted) {
+ cameraMoveStartedListener.onCameraMoveStarted(moveStartedReason);
+ }
+ }
+ }
+ };
+
+ private final Runnable onCameraMoveRunnable = new Runnable() {
+ @Override
+ public void run() {
+ // deprecated API
+ if (onCameraMoveListener != null && !idle) {
+ onCameraMoveListener.onCameraMove();
+ }
+
+ // new API
+ if (!onCameraMove.isEmpty() && !idle) {
+ for (OnCameraMoveListener cameraMoveListener : onCameraMove) {
+ cameraMoveListener.onCameraMove();
+ }
+ }
+ }
+ };
+
+ private final Runnable onCameraMoveCancelRunnable = new Runnable() {
+ @Override
+ public void run() {
+ // deprecated API
+ if (onCameraMoveCanceledListener != null && !idle) {
+ onCameraMoveCanceledListener.onCameraMoveCanceled();
+ }
+
+ // new API
+ if (!onCameraMoveCanceled.isEmpty() && !idle) {
+ for (OnCameraMoveCanceledListener cameraMoveCanceledListener : onCameraMoveCanceled) {
+ cameraMoveCanceledListener.onCameraMoveCanceled();
+ }
+ }
+ }
+ };
+
+ private final Runnable onCameraIdleRunnable = new Runnable() {
+ @Override
+ public void run() {
+ // deprecated API
+ if (onCameraIdleListener != null) {
+ onCameraIdleListener.onCameraIdle();
+ }
+
+ // new API
+ if (!onCameraIdle.isEmpty()) {
+ for (OnCameraIdleListener cameraIdleListener : onCameraIdle) {
+ cameraIdleListener.onCameraIdle();
+ }
+ }
+ }
+ };
+
@Deprecated
void setOnCameraMoveStartedListener(OnCameraMoveStartedListener onCameraMoveStartedListener) {
this.onCameraMoveStartedListener = onCameraMoveStartedListener;
@@ -45,70 +120,30 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M
}
@Override
- public void onCameraMoveStarted(int reason) {
+ public void onCameraMoveStarted(final int reason) {
if (!idle) {
return;
}
idle = false;
-
- // deprecated API
- if (onCameraMoveStartedListener != null) {
- onCameraMoveStartedListener.onCameraMoveStarted(reason);
- }
-
- // new API
- if (!onCameraMoveStarted.isEmpty()) {
- for (OnCameraMoveStartedListener cameraMoveStartedListener : onCameraMoveStarted) {
- cameraMoveStartedListener.onCameraMoveStarted(reason);
- }
- }
+ moveStartedReason = reason;
+ handler.post(onCameraMoveStartedRunnable);
}
@Override
public void onCameraMove() {
- // deprecated API
- if (onCameraMoveListener != null && !idle) {
- onCameraMoveListener.onCameraMove();
- }
-
- // new API
- if (!onCameraMove.isEmpty() && !idle) {
- for (OnCameraMoveListener cameraMoveListener : onCameraMove) {
- cameraMoveListener.onCameraMove();
- }
- }
+ handler.post(onCameraMoveRunnable);
}
@Override
public void onCameraMoveCanceled() {
- // deprecated API
- if (onCameraMoveCanceledListener != null && !idle) {
- onCameraMoveCanceledListener.onCameraMoveCanceled();
- }
-
- // new API
- if (!onCameraMoveCanceled.isEmpty() && !idle) {
- for (OnCameraMoveCanceledListener cameraMoveCanceledListener : onCameraMoveCanceled) {
- cameraMoveCanceledListener.onCameraMoveCanceled();
- }
- }
+ handler.post(onCameraMoveCancelRunnable);
}
@Override
public void onCameraIdle() {
if (!idle) {
idle = true;
- // deprecated API
- if (onCameraIdleListener != null) {
- onCameraIdleListener.onCameraIdle();
- }
-
- // new API
- if (!onCameraIdle.isEmpty()) {
- for (OnCameraIdleListener cameraIdleListener : onCameraIdle) {
- cameraIdleListener.onCameraIdle();
- }
- }
+ handler.post(onCameraIdleRunnable);
}
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcherTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcherTest.java
deleted file mode 100644
index 090d274fe7..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcherTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.mapbox.mapboxsdk.maps;
-
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class CameraChangeDispatcherTest {
-
- @Test
- public void testSetCameraIdleListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraIdleListener listener = mock(MapboxMap.OnCameraIdleListener.class);
- dispatcher.setOnCameraIdleListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraIdle();
- verify(listener).onCameraIdle();
- }
-
- @Test
- public void testSetCameraMoveStartedListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveStartedListener listener = mock(MapboxMap.OnCameraMoveStartedListener.class);
- dispatcher.setOnCameraMoveStartedListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- verify(listener).onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- }
-
- @Test
- public void testSetCameraMoveCancelListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveCanceledListener listener = mock(MapboxMap.OnCameraMoveCanceledListener.class);
- dispatcher.setOnCameraMoveCanceledListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraMoveCanceled();
- verify(listener).onCameraMoveCanceled();
- }
-
- @Test
- public void testSetCameraMoveListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveListener listener = mock(MapboxMap.OnCameraMoveListener.class);
- dispatcher.setOnCameraMoveListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraMove();
- verify(listener).onCameraMove();
- }
-
- @Test
- public void testAddCameraIdleListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraIdleListener listener = mock(MapboxMap.OnCameraIdleListener.class);
- dispatcher.addOnCameraIdleListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraIdle();
- verify(listener).onCameraIdle();
- }
-
- @Test
- public void testAddCameraMoveStartedListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveStartedListener listener = mock(MapboxMap.OnCameraMoveStartedListener.class);
- dispatcher.addOnCameraMoveStartedListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- verify(listener).onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- }
-
- @Test
- public void testAddCameraMoveCancelListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveCanceledListener listener = mock(MapboxMap.OnCameraMoveCanceledListener.class);
- dispatcher.addOnCameraMoveCancelListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraMoveCanceled();
- verify(listener).onCameraMoveCanceled();
- }
-
- @Test
- public void testAddCameraMoveListener() {
- CameraChangeDispatcher dispatcher = new CameraChangeDispatcher();
- MapboxMap.OnCameraMoveListener listener = mock(MapboxMap.OnCameraMoveListener.class);
- dispatcher.addOnCameraMoveListener(listener);
- dispatcher.onCameraMoveStarted(MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE);
- dispatcher.onCameraMove();
- verify(listener).onCameraMove();
- }
-}