summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukasz.paczos@mapbox.com>2019-04-02 10:48:42 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-04-02 10:57:05 +0200
commitd049d68f68218ad623934014753c082080f9b3b2 (patch)
treea4a917fe2a2b407b8007d63697b8dbeff7139317
parent50e02666f089a49217d9a1db1b5f38847a02d39a (diff)
downloadqtlocation-mapboxgl-upstream/lp-camera-callbacks-after-destroyed-14020.tar.gz
[android] clear camera callbacks' message queue when the map is destroyedupstream/lp-camera-callbacks-after-destroyed-14020
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java8
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.kt150
3 files changed, 88 insertions, 71 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 b3472ac81e..a1fd4e7e3e 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
@@ -142,6 +142,14 @@ class CameraChangeDispatcher implements MapboxMap.OnCameraMoveStartedListener, M
}
}
+ void onDestroy() {
+ handler.removeCallbacksAndMessages(null);
+ onCameraMoveStarted.clear();
+ onCameraMoveCanceled.clear();
+ onCameraMove.clear();
+ onCameraIdle.clear();
+ }
+
private static class CameraChangeHandler extends Handler {
private WeakReference<CameraChangeDispatcher> dispatcherWeakReference;
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
index 87b74254f2..95d5c29b61 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
@@ -176,6 +176,7 @@ public final class MapboxMap {
if (style != null) {
style.clear();
}
+ cameraChangeDispatcher.onDestroy();
}
/**
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.kt
index a0873e97ff..2d68612c70 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.kt
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.kt
@@ -15,31 +15,33 @@ import org.robolectric.RobolectricTestRunner
@RunWith(RobolectricTestRunner::class)
class MapboxMapTest {
- private lateinit var mapboxMap: MapboxMap
-
- private lateinit var nativeMapView: NativeMapView
-
- private lateinit var transform: Transform
-
- @Before
- fun setup() {
- val cameraChangeDispatcher = spyk<CameraChangeDispatcher>()
- nativeMapView = mockk(relaxed = true)
- transform = mockk(relaxed = true)
- mapboxMap = MapboxMap(nativeMapView, transform, mockk(relaxed = true), null, null, cameraChangeDispatcher)
- every { nativeMapView.isDestroyed } returns false
- every { nativeMapView.nativePtr } returns 5
- mapboxMap.injectLocationComponent(spyk())
- mapboxMap.setStyle(Style.MAPBOX_STREETS)
- mapboxMap.onFinishLoadingStyle()
- }
-
- @Test
- fun testTransitionOptions() {
- val expected = TransitionOptions(100, 200)
- mapboxMap.style?.transition = expected
- verify { nativeMapView.transitionOptions = expected }
- }
+ private lateinit var mapboxMap: MapboxMap
+
+ private lateinit var nativeMapView: NativeMapView
+
+ private lateinit var transform: Transform
+
+ private lateinit var cameraChangeDispatcher: CameraChangeDispatcher
+
+ @Before
+ fun setup() {
+ cameraChangeDispatcher = spyk()
+ nativeMapView = mockk(relaxed = true)
+ transform = mockk(relaxed = true)
+ mapboxMap = MapboxMap(nativeMapView, transform, mockk(relaxed = true), null, null, cameraChangeDispatcher)
+ every { nativeMapView.isDestroyed } returns false
+ every { nativeMapView.nativePtr } returns 5
+ mapboxMap.injectLocationComponent(spyk())
+ mapboxMap.setStyle(Style.MAPBOX_STREETS)
+ mapboxMap.onFinishLoadingStyle()
+ }
+
+ @Test
+ fun testTransitionOptions() {
+ val expected = TransitionOptions(100, 200)
+ mapboxMap.style?.transition = expected
+ verify { nativeMapView.transitionOptions = expected }
+ }
@Test
fun testMoveCamera() {
@@ -51,52 +53,52 @@ class MapboxMapTest {
verify { transform.moveCamera(mapboxMap, update, callback) }
}
- @Test
- fun testMinZoom() {
- mapboxMap.setMinZoomPreference(10.0)
- verify { transform.minZoom = 10.0 }
- }
-
- @Test
- fun testMaxZoom() {
- mapboxMap.setMaxZoomPreference(10.0)
- verify { transform.maxZoom = 10.0 }
- }
-
- @Test
- fun testFpsListener() {
- val fpsChangedListener = mockk<MapboxMap.OnFpsChangedListener>()
- mapboxMap.onFpsChangedListener = fpsChangedListener
- assertEquals("Listener should match", fpsChangedListener, mapboxMap.onFpsChangedListener)
- }
-
- @Test
- fun testTilePrefetch() {
- mapboxMap.prefetchesTiles = true
- verify { nativeMapView.prefetchTiles = true }
- }
-
- @Test
- fun testCameraForLatLngBounds() {
- val bounds = LatLngBounds.Builder().include(LatLng()).include(LatLng(1.0, 1.0)).build()
- mapboxMap.setLatLngBoundsForCameraTarget(bounds)
- verify { nativeMapView.setLatLngBounds(bounds) }
- }
-
- @Test(expected = IllegalArgumentException::class)
- fun testAnimateCameraChecksDurationPositive() {
- mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(LatLng(30.0, 30.0)), 0, null)
- }
-
- @Test(expected = IllegalArgumentException::class)
- fun testEaseCameraChecksDurationPositive() {
- mapboxMap.easeCamera(CameraUpdateFactory.newLatLng(LatLng(30.0, 30.0)), 0, null)
- }
-
- @Test
- fun testGetNativeMapPtr() {
- assertEquals(5, mapboxMap.nativeMapPtr)
- }
+ @Test
+ fun testMinZoom() {
+ mapboxMap.setMinZoomPreference(10.0)
+ verify { transform.minZoom = 10.0 }
+ }
+
+ @Test
+ fun testMaxZoom() {
+ mapboxMap.setMaxZoomPreference(10.0)
+ verify { transform.maxZoom = 10.0 }
+ }
+
+ @Test
+ fun testFpsListener() {
+ val fpsChangedListener = mockk<MapboxMap.OnFpsChangedListener>()
+ mapboxMap.onFpsChangedListener = fpsChangedListener
+ assertEquals("Listener should match", fpsChangedListener, mapboxMap.onFpsChangedListener)
+ }
+
+ @Test
+ fun testTilePrefetch() {
+ mapboxMap.prefetchesTiles = true
+ verify { nativeMapView.prefetchTiles = true }
+ }
+
+ @Test
+ fun testCameraForLatLngBounds() {
+ val bounds = LatLngBounds.Builder().include(LatLng()).include(LatLng(1.0, 1.0)).build()
+ mapboxMap.setLatLngBoundsForCameraTarget(bounds)
+ verify { nativeMapView.setLatLngBounds(bounds) }
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun testAnimateCameraChecksDurationPositive() {
+ mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(LatLng(30.0, 30.0)), 0, null)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun testEaseCameraChecksDurationPositive() {
+ mapboxMap.easeCamera(CameraUpdateFactory.newLatLng(LatLng(30.0, 30.0)), 0, null)
+ }
+
+ @Test
+ fun testGetNativeMapPtr() {
+ assertEquals(5, mapboxMap.nativeMapPtr)
+ }
@Test
fun testNativeMapIsNotCalledOnStateSave() {
@@ -104,4 +106,10 @@ class MapboxMapTest {
mapboxMap.onSaveInstanceState(mockk(relaxed = true))
verify { nativeMapView wasNot Called }
}
+
+ @Test
+ fun testCameraChangeDispatcherCleared() {
+ mapboxMap.onDestroy()
+ verify { cameraChangeDispatcher.onDestroy() }
+ }
} \ No newline at end of file