From 6890ab7861fb28c08d340924034ef7b553778e38 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 16 Mar 2021 14:26:39 +0200 Subject: [PATCH 01/12] [deps] Bump gl-native to v10.0.0-beta.17, common to v10.0.2 --- buildSrc/src/main/kotlin/Project.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/Project.kt b/buildSrc/src/main/kotlin/Project.kt index ee366d0814..7236d421b4 100644 --- a/buildSrc/src/main/kotlin/Project.kt +++ b/buildSrc/src/main/kotlin/Project.kt @@ -66,8 +66,8 @@ object Versions { const val mapboxGestures = "0.7.0" const val mapboxJavaServices = "5.4.1" const val mapboxBase = "0.5.0" - const val mapboxGlNative = "10.0.0-beta.16" - const val mapboxCommon = "10.0.0-beta.12" + const val mapboxGlNative = "10.0.0-beta.17" + const val mapboxCommon = "10.0.2" const val mapboxAndroidCore = "3.1.1" const val mapboxAndroidTelemetry = "6.2.2" const val androidxCore = "1.3.1" From d83d995919c79f737664e24b828a71de2c69f78e Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 16 Mar 2021 14:52:51 +0200 Subject: [PATCH 02/12] [deps] Bump minSdkVersion from 19 to 21. --- buildSrc/src/main/kotlin/Project.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/Project.kt b/buildSrc/src/main/kotlin/Project.kt index 7236d421b4..09dc81e666 100644 --- a/buildSrc/src/main/kotlin/Project.kt +++ b/buildSrc/src/main/kotlin/Project.kt @@ -1,5 +1,5 @@ object AndroidVersions { - const val minSdkVersion = 19 + const val minSdkVersion = 21 const val targetSdkVersion = 28 const val compileSdkVersion = 28 } From d28029ad61b10ea59fbcd881e943ec4e5b37535d Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Tue, 16 Mar 2021 15:21:13 +0200 Subject: [PATCH 03/12] Rename jumpTo to setCamera, rename setFreeCameraOptions to setCamera, add getDragCameraOptions API. --- .../testapp/gestures/GestureActivityTest.kt | 12 ++-- .../observable/ObservableExtensionTest.kt | 2 +- .../testapp/overlay/MapOverlayPluginTest.kt | 2 +- .../examples/AddOneMarkerSymbolActivity.kt | 2 +- .../CameraPredefinedAnimatorsActivity.kt | 8 +-- .../examples/DistanceExpressionActivity.kt | 2 +- .../testapp/examples/FillExtrusionActivity.kt | 2 +- .../examples/GeoJsonLayerInStackActivity.kt | 2 +- .../maps/testapp/examples/GesturesActivity.kt | 4 +- .../maps/testapp/examples/InsetMapActivity.kt | 2 +- .../testapp/examples/LegacyOfflineActivity.kt | 2 +- .../examples/LocationComponentActivity.kt | 2 +- .../LocationComponentAnimationActivity.kt | 8 +-- .../examples/LocationTrackingActivity.kt | 6 +- .../maps/testapp/examples/MultiMapActivity.kt | 2 +- .../testapp/examples/PolygonHolesActivity.kt | 10 ++-- .../testapp/examples/SimpleMapActivity.kt | 2 +- .../examples/SpaceStationLocationActivity.kt | 2 +- .../StyleCirclesCategoricallyActivity.kt | 2 +- .../examples/WithinExpressionActivity.kt | 2 +- .../customlayer/CustomLayerActivity.kt | 2 +- .../customlayer/NativeCustomLayerActivity.kt | 2 +- .../TriangleCustomLayerActivity.kt | 2 +- .../sky/SkyLayerSnapshotterActivity.kt | 2 +- .../examples/terrain/SantaCatalinaActivity.kt | 4 +- .../maps/testapp/wallpaper/MapWallpaper.kt | 4 +- .../animation/CameraAnimationsPluginImpl.kt | 2 +- .../CameraAnimationsPluginImplTest.kt | 22 +++---- .../maps/plugin/gestures/GesturePluginTest.kt | 2 +- .../LocationCameraAnimatorCoordinator.kt | 2 +- .../plugin/location/LocationPluginImpl.kt | 2 +- .../location/LocationCameraControllerTest.kt | 12 ++-- .../plugin/overlay/MapOverlayPluginImpl.kt | 2 +- .../plugin/overlay/MapOverlayPluginTest.kt | 2 +- .../plugin/delegates/MapTransformDelegate.kt | 22 +++++-- .../java/com/mapbox/maps/MapController.kt | 2 +- .../main/java/com/mapbox/maps/MapboxMap.kt | 27 ++++++--- .../java/com/mapbox/maps/NativeMapImpl.kt | 45 +++----------- .../main/java/com/mapbox/maps/Snapshotter.kt | 15 +++-- .../maps/plugin/MapCameraDelegateImpl.kt | 2 +- .../java/com/mapbox/maps/MapboxMapTest.kt | 10 ++-- .../java/com/mapbox/maps/NativeMapTest.kt | 60 +------------------ .../maps/plugin/MapCameraDelegateImplTest.kt | 2 +- 43 files changed, 135 insertions(+), 188 deletions(-) diff --git a/app/src/androidTest/java/com/mapbox/maps/testapp/gestures/GestureActivityTest.kt b/app/src/androidTest/java/com/mapbox/maps/testapp/gestures/GestureActivityTest.kt index c5d5801a43..c022b2ea63 100644 --- a/app/src/androidTest/java/com/mapbox/maps/testapp/gestures/GestureActivityTest.kt +++ b/app/src/androidTest/java/com/mapbox/maps/testapp/gestures/GestureActivityTest.kt @@ -53,7 +53,7 @@ class GestureActivityTest : BaseMapTest() { rule.scenario.onActivity { it.runOnUiThread { // zoom in so we can move vertically - mapboxMap.jumpTo(CameraOptions.Builder().zoom(4.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(4.0).build()) initialCameraPosition = mapboxMap.getCameraOptions(null) mapView.getGesturesPlugin().quickZoomEnabled = false } @@ -128,7 +128,7 @@ class GestureActivityTest : BaseMapTest() { rule.scenario.onActivity { it.runOnUiThread { // zoom in so we can move vertically - mapboxMap.jumpTo(CameraOptions.Builder().zoom(4.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(4.0).build()) initialCameraPosition = mapboxMap.getCameraOptions(null) mapView.getGesturesPlugin().quickZoomEnabled = false } @@ -164,7 +164,7 @@ class GestureActivityTest : BaseMapTest() { var initialZoom: Double? = null rule.scenario.onActivity { it.runOnUiThread { - mapboxMap.jumpTo(CameraOptions.Builder().zoom(4.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(4.0).build()) initialZoom = mapboxMap.getCameraOptions(null).zoom } } @@ -235,7 +235,7 @@ class GestureActivityTest : BaseMapTest() { fun doubleTap_interrupted_moveStillEnabled() { rule.scenario.onActivity { it.runOnUiThread { - mapboxMap.jumpTo(CameraOptions.Builder().zoom(4.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(4.0).build()) } } @@ -252,7 +252,7 @@ class GestureActivityTest : BaseMapTest() { rule.scenario.onActivity { it.runOnUiThread { // zoom in so we can move vertically - mapboxMap.jumpTo(CameraOptions.Builder().zoom(4.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(4.0).build()) initialCameraPosition = mapboxMap.getCameraOptions(null) mapView.getGesturesPlugin().quickZoomEnabled = false } @@ -286,7 +286,7 @@ class GestureActivityTest : BaseMapTest() { fun quickZoom_roundTripping() { rule.scenario.onActivity { it.runOnUiThread { - mapboxMap.jumpTo(CameraOptions.Builder().zoom(3.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(3.0).build()) } } onView(withId(R.id.mapView)).perform(quickScale(300f, withVelocity = false, duration = 750L)) diff --git a/app/src/androidTest/java/com/mapbox/maps/testapp/observable/ObservableExtensionTest.kt b/app/src/androidTest/java/com/mapbox/maps/testapp/observable/ObservableExtensionTest.kt index 2b973cea63..84c93f37ca 100644 --- a/app/src/androidTest/java/com/mapbox/maps/testapp/observable/ObservableExtensionTest.kt +++ b/app/src/androidTest/java/com/mapbox/maps/testapp/observable/ObservableExtensionTest.kt @@ -45,7 +45,7 @@ class ObservableExtensionTest : BaseMapTest() { rule.scenario.onActivity { it.runOnUiThread { mapboxMap.subscribeResourceRequest(observer) - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder().center(Point.fromLngLat(0.0, 0.0)).zoom(16.0).build() ) } diff --git a/app/src/androidTest/java/com/mapbox/maps/testapp/overlay/MapOverlayPluginTest.kt b/app/src/androidTest/java/com/mapbox/maps/testapp/overlay/MapOverlayPluginTest.kt index 5570389da4..01f3dbc954 100644 --- a/app/src/androidTest/java/com/mapbox/maps/testapp/overlay/MapOverlayPluginTest.kt +++ b/app/src/androidTest/java/com/mapbox/maps/testapp/overlay/MapOverlayPluginTest.kt @@ -158,7 +158,7 @@ class MapOverlayPluginTest : BaseMapTest() { mapOverlayPlugin.reframe { assertNotNull(it) - mapboxMap.jumpTo(it!!) + mapboxMap.setCamera(it!!) val currentCameraOptions = mapboxMap.getCameraOptions(EdgeInsets(0.0, 0.0, 0.0, 0.0)) assertEquals(currentCameraOptions.center!!.latitude(), it.center!!.latitude(), 0.01) assertEquals(currentCameraOptions.center!!.longitude(), it.center!!.longitude(), 0.01) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/AddOneMarkerSymbolActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/AddOneMarkerSymbolActivity.kt index 1572e3c5c4..63e960dd6e 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/AddOneMarkerSymbolActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/AddOneMarkerSymbolActivity.kt @@ -24,7 +24,7 @@ class AddOneMarkerSymbolActivity : AppCompatActivity() { setContentView(R.layout.activity_simple_map) mapView.getMapboxMap().also { - it.jumpTo( + it.setCamera( CameraOptions.Builder() .center(Point.fromLngLat(LONGITUDE, LATITUDE)) .zoom(8.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/CameraPredefinedAnimatorsActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/CameraPredefinedAnimatorsActivity.kt index c9a4a14427..63cb0b24ec 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/CameraPredefinedAnimatorsActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/CameraPredefinedAnimatorsActivity.kt @@ -43,7 +43,7 @@ class CameraPredefinedAnimatorsActivity : AppCompatActivity() { cameraAnimationsPlugin = mapView.getCameraAnimationsPlugin() mapboxMap.loadStyle( style(Style.MAPBOX_STREETS) { - mapboxMap.jumpTo(START_CAMERA_POSITION) + mapboxMap.setCamera(START_CAMERA_POSITION) } ) initSpinner() @@ -61,7 +61,7 @@ class CameraPredefinedAnimatorsActivity : AppCompatActivity() { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { stopAnimation() - mapboxMap.jumpTo(START_CAMERA_POSITION) + mapboxMap.setCamera(START_CAMERA_POSITION) when (position) { 0 -> { CameraAnimatorsFactory.setDefaultAnimatorOptions { @@ -124,7 +124,7 @@ class CameraPredefinedAnimatorsActivity : AppCompatActivity() { } private fun resetCameraPosition() { - mapboxMap.jumpTo(START_CAMERA_POSITION) + mapboxMap.setCamera(START_CAMERA_POSITION) } private fun stopAnimation() { @@ -135,7 +135,7 @@ class CameraPredefinedAnimatorsActivity : AppCompatActivity() { private fun playAnimation(itemId: Int) { stopAnimation() when (itemId) { - R.id.menu_action_jump_to -> mapboxMap.jumpTo(START_CAMERA_POSITION) + R.id.menu_action_jump_to -> mapboxMap.setCamera(START_CAMERA_POSITION) R.id.menu_action_ease_to -> mapboxMap.easeTo( EASE_TO_TARGET_CAMERA_POSITION, mapAnimationOptions { diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/DistanceExpressionActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/DistanceExpressionActivity.kt index 0c5ac26236..7b60bd26f7 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/DistanceExpressionActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/DistanceExpressionActivity.kt @@ -30,7 +30,7 @@ class DistanceExpressionActivity : AppCompatActivity() { val circle = TurfTransformation.circle(center, RADIUS, TurfConstants.UNIT_METERS) // Setup camera position above Georgetown - mapView.getMapboxMap().jumpTo(CameraOptions.Builder().center(center).zoom(16.0).build()) + mapView.getMapboxMap().setCamera(CameraOptions.Builder().center(center).zoom(16.0).build()) mapView.getMapboxMap().loadStyle( style(Style.MAPBOX_STREETS) { diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/FillExtrusionActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/FillExtrusionActivity.kt index c4c5669fea..809bb322e2 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/FillExtrusionActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/FillExtrusionActivity.kt @@ -29,7 +29,7 @@ class FillExtrusionActivity : AppCompatActivity() { setContentView(R.layout.activity_fill_extrusion) val mapboxMap = (mapView as MapView).getMapboxMap() - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(Point.fromLngLat(-74.0066, 40.7135)) .pitch(45.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/GeoJsonLayerInStackActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/GeoJsonLayerInStackActivity.kt index f842dd9bb3..f1d37b9a14 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/GeoJsonLayerInStackActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/GeoJsonLayerInStackActivity.kt @@ -36,7 +36,7 @@ class GeoJsonLayerInStackActivity : AppCompatActivity() { } ) - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(Point.fromLngLat(-84.381546, 33.749909)) .zoom(8.471903) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/GesturesActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/GesturesActivity.kt index de6f9d4c2b..a67f18ea35 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/GesturesActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/GesturesActivity.kt @@ -38,7 +38,7 @@ class GesturesActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_gestures) mapboxMap = mapView.getMapboxMap() - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(Point.fromLngLat(-0.11968, 51.50325)) .zoom(15.0) @@ -239,7 +239,7 @@ class GesturesActivity : AppCompatActivity() { focalPointLatLng = Point.fromLngLat(-0.12968, 51.50325) // TODO add marker // marker = mapboxMap.addMarker(MarkerOptions().position(focalPointLatLng)) - mapboxMap.jumpTo(CameraOptions.Builder().center(focalPointLatLng).zoom(16.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().center(focalPointLatLng).zoom(16.0).build()) recalculateFocalPoint() } else { // TODO add marker diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/InsetMapActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/InsetMapActivity.kt index 59e2258185..3185c8f348 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/InsetMapActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/InsetMapActivity.kt @@ -110,7 +110,7 @@ class InsetMapActivity : AppCompatActivity(), OnCameraChangeListener { .bearing(mainCameraPosition.bearing) .center(mainCameraPosition.center) .build() - insetMapboxMap.jumpTo(insetCameraPosition) + insetMapboxMap.setCamera(insetCameraPosition) insetMapboxMap.getStyle { style -> updateInsetMapLineLayerBounds(style) } } diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/LegacyOfflineActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/LegacyOfflineActivity.kt index 77dcdba99c..14e0c518bb 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/LegacyOfflineActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/LegacyOfflineActivity.kt @@ -78,7 +78,7 @@ class LegacyOfflineActivity : AppCompatActivity() { // create mapView mapView = MapView(this@LegacyOfflineActivity).also { mapview -> val mapboxMap = mapview.getMapboxMap() - mapboxMap.jumpTo(CameraOptions.Builder().zoom(zoom).center(point).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(zoom).center(point).build()) mapboxMap.loadStyleUri(styleUrl) } setContentView(mapView) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentActivity.kt index 31c5a0d09e..c90a720ee8 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentActivity.kt @@ -25,7 +25,7 @@ class LocationComponentActivity : AppCompatActivity() { private lateinit var locationPermissionHelper: LocationPermissionHelper private val onIndicatorPositionChangedListener = OnIndicatorPositionChangedListener { // Jump to the current indicator position - mapView.getMapboxMap().jumpTo(CameraOptions.Builder().center(it).build()) + mapView.getMapboxMap().setCamera(CameraOptions.Builder().center(it).build()) // Set the gestures plugin's focal point to the current indicator location. mapView.getGesturesPlugin().focalPoint = mapView.getMapboxMap().pixelForCoordinate(it) } diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt index fbcb4ed826..d2d8692a79 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt @@ -86,11 +86,11 @@ class LocationComponentAnimationActivity : AppCompatActivity() { loadStyleUri( Style.MAPBOX_STREETS ) { - jumpTo( + setCamera( CameraOptions.Builder() - .zoom(14.0) - .center(Point.fromLngLat(POINT_LNG, POINT_LAT)) - .build() + .zoom(14.0) + .center(Point.fromLngLat(POINT_LNG, POINT_LAT)) + .build() ) mapView.getLocationComponentPlugin().apply { setLocationProvider(FakeLocationProvider()) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationTrackingActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationTrackingActivity.kt index b032533bab..a3f41cc22c 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationTrackingActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationTrackingActivity.kt @@ -27,11 +27,11 @@ class LocationTrackingActivity : AppCompatActivity() { private lateinit var locationPermissionHelper: LocationPermissionHelper private val onIndicatorBearingChangedListener = OnIndicatorBearingChangedListener { - mapView.getMapboxMap().jumpTo(CameraOptions.Builder().bearing(it).build()) + mapView.getMapboxMap().setCamera(CameraOptions.Builder().bearing(it).build()) } private val onIndicatorPositionChangedListener = OnIndicatorPositionChangedListener { - mapView.getMapboxMap().jumpTo(CameraOptions.Builder().center(it).build()) + mapView.getMapboxMap().setCamera(CameraOptions.Builder().center(it).build()) mapView.getGesturesPlugin().focalPoint = mapView.getMapboxMap().pixelForCoordinate(it) } @@ -57,7 +57,7 @@ class LocationTrackingActivity : AppCompatActivity() { } private fun onMapReady() { - mapView.getMapboxMap().jumpTo( + mapView.getMapboxMap().setCamera( CameraOptions.Builder() .zoom(14.0) .build() diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/MultiMapActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/MultiMapActivity.kt index b068087917..5e1bb89dad 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/MultiMapActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/MultiMapActivity.kt @@ -29,7 +29,7 @@ class MultiMapActivity : AppCompatActivity() { ) { val fragment = supportFragmentManager.findFragmentById(fragmentId) as MapFragment fragment.getMapAsync { - it.jumpTo(cameraOptions) + it.setCamera(cameraOptions) it.loadStyleUri(styleId) } } diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt index 61758ed3f1..fb3714b9f8 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt @@ -32,11 +32,11 @@ class PolygonHolesActivity : AppCompatActivity() { with(mapView.getMapboxMap()) { // TODO attributionTintColor(RED_COLOR) missing // TODO compassFadesWhenFacingNorth missing - jumpTo( - CameraOptions.Builder() - .center(Point.fromLngLat(55.3089185, 25.255377)) - .zoom(13.0) - .build() + setCamera( + CameraOptions.Builder() + .center(Point.fromLngLat(55.3089185, 25.255377)) + .zoom(13.0) + .build() ) loadStyleUri( Style.MAPBOX_STREETS diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/SimpleMapActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/SimpleMapActivity.kt index ebe3f72bc9..e5734619fd 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/SimpleMapActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/SimpleMapActivity.kt @@ -18,7 +18,7 @@ class SimpleMapActivity : AppCompatActivity() { setContentView(R.layout.activity_simple_map) mapView.getMapboxMap() .apply { - jumpTo( + setCamera( CameraOptions.Builder().center(Point.fromLngLat(LONGITUDE, LATITUDE)).zoom(9.0).build() ) } diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/SpaceStationLocationActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/SpaceStationLocationActivity.kt index b8151c13e9..120fdb1fe9 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/SpaceStationLocationActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/SpaceStationLocationActivity.kt @@ -54,7 +54,7 @@ class SpaceStationLocationActivity : AppCompatActivity() { showHintToast() } - mapboxMap.jumpTo(CameraOptions.Builder().zoom(2.0).build()) + mapboxMap.setCamera(CameraOptions.Builder().zoom(2.0).build()) } private fun showHintToast() = Toast.makeText( diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/StyleCirclesCategoricallyActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/StyleCirclesCategoricallyActivity.kt index 0a64fa78f1..11a0c67467 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/StyleCirclesCategoricallyActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/StyleCirclesCategoricallyActivity.kt @@ -109,7 +109,7 @@ class StyleCirclesCategoricallyActivity : AppCompatActivity() { } ) - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(Point.fromLngLat(-122.447303, 37.753574)) .zoom(12.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/WithinExpressionActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/WithinExpressionActivity.kt index 30abbe89cb..1942423143 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/WithinExpressionActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/WithinExpressionActivity.kt @@ -32,7 +32,7 @@ class WithinExpressionActivity : AppCompatActivity() { val center = Point.fromLngLat(LON, LAT) // Setup camera position above Georgetown - mapView.getMapboxMap().jumpTo(CameraOptions.Builder().center(center).zoom(15.5).build()) + mapView.getMapboxMap().setCamera(CameraOptions.Builder().center(center).zoom(15.5).build()) // Assume the route is represented by an array of coordinates. val coordinates = listOf( diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/CustomLayerActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/CustomLayerActivity.kt index 1ed07e2c2e..9cfc0dec63 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/CustomLayerActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/CustomLayerActivity.kt @@ -26,7 +26,7 @@ class CustomLayerActivity : AppCompatActivity() { mapboxMap.loadStyleUri( Style.MAPBOX_STREETS ) { - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder().center(Point.fromLngLat(-243.60947, 39.91448)).zoom(10.0).build() ) initFab() diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/NativeCustomLayerActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/NativeCustomLayerActivity.kt index 99ecc5a948..ea645d5c29 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/NativeCustomLayerActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/NativeCustomLayerActivity.kt @@ -27,7 +27,7 @@ class NativeCustomLayerActivity : AppCompatActivity() { mapboxMap.loadStyleUri( Style.MAPBOX_STREETS ) { - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder().center(Point.fromLngLat(-243.60947, 39.91448)).zoom(10.0) .build() ) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/TriangleCustomLayerActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/TriangleCustomLayerActivity.kt index 96cca9b933..96cbbe4017 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/TriangleCustomLayerActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/customlayer/TriangleCustomLayerActivity.kt @@ -26,7 +26,7 @@ class TriangleCustomLayerActivity : AppCompatActivity() { mapboxMap.loadStyleUri( Style.MAPBOX_STREETS ) { - mapboxMap.jumpTo(CAMERA) + mapboxMap.setCamera(CAMERA) addCustomLayer(it) initFab() } diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt index 63d6b24aa1..6116791328 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt @@ -27,7 +27,7 @@ class SkyLayerSnapshotterActivity : AppCompatActivity() { setContentView(R.layout.activity_sky_snapshotter) mapView.getScaleBarPlugin().enabled = false mapView.getCompassPlugin().enabled = false - mapView.getMapboxMap().jumpTo( + mapView.getMapboxMap().setCamera( CameraOptions.Builder() .center(Point.fromLngLat(24.827187523937795, 60.55932732152849)) .zoom(16.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/terrain/SantaCatalinaActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/terrain/SantaCatalinaActivity.kt index d3f5936d85..672e4e86b9 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/terrain/SantaCatalinaActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/terrain/SantaCatalinaActivity.kt @@ -53,7 +53,7 @@ class SantaCatalinaActivity : AppCompatActivity() { // get map and setup initial camera mapboxMap = mapView.getMapboxMap() - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(POINT_START) .zoom(14.0) @@ -229,7 +229,7 @@ class SantaCatalinaActivity : AppCompatActivity() { camera.lookAtPoint(cameraLookingAt, elevation) // set the updated camera position - mapboxMap.setFreeCameraOptions(camera) + mapboxMap.setCamera(camera) } timeAnimator.duration = ANIMATION_DURATION.toLong() timeAnimator.start() diff --git a/app/src/main/java/com/mapbox/maps/testapp/wallpaper/MapWallpaper.kt b/app/src/main/java/com/mapbox/maps/testapp/wallpaper/MapWallpaper.kt index 8c5e9e28ad..02ea8bc872 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/wallpaper/MapWallpaper.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/wallpaper/MapWallpaper.kt @@ -30,7 +30,7 @@ class MapWallpaper : WallpaperService() { // Custom configuration mapboxMap.loadStyleUri(Style.MAPBOX_STREETS) - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(TARGET) .zoom(ZOOM_START) @@ -79,7 +79,7 @@ class MapWallpaper : WallpaperService() { val zoom = ZOOM_START + (screenAmount * xOffset) val pitch = (PITCH_START * screenAmount * xOffset).toDouble() val bearing = BEARING_START * screenAmount * xOffset - mapboxMap.jumpTo( + mapboxMap.setCamera( CameraOptions.Builder() .center(TARGET) .zoom(zoom) diff --git a/plugin-animation/src/main/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImpl.kt b/plugin-animation/src/main/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImpl.kt index 4b2864f554..d1e3660e4a 100644 --- a/plugin-animation/src/main/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImpl.kt +++ b/plugin-animation/src/main/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImpl.kt @@ -146,7 +146,7 @@ internal class CameraAnimationsPluginImpl : CameraAnimationsPlugin { return } // move native map to new position - mapTransformDelegate.jumpTo(cameraOptions) + mapTransformDelegate.setCamera(cameraOptions) // notify listeners with actual values notifyListeners(cameraOptions) lastCameraOptions = cameraOptions diff --git a/plugin-animation/src/test/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImplTest.kt b/plugin-animation/src/test/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImplTest.kt index 899590803f..6032597e2b 100644 --- a/plugin-animation/src/test/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImplTest.kt +++ b/plugin-animation/src/test/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImplTest.kt @@ -140,7 +140,7 @@ class CameraAnimationsPluginImplTest { playTogether(*animators) start() } - verify { mapTransformDelegate.jumpTo(any()) } + verify { mapTransformDelegate.setCamera(any()) } } @Test @@ -159,7 +159,7 @@ class CameraAnimationsPluginImplTest { playTogether(*animators) start() } - verify(exactly = 0) { mapTransformDelegate.jumpTo(any()) } + verify(exactly = 0) { mapTransformDelegate.setCamera(any()) } } @Test @@ -219,7 +219,7 @@ class CameraAnimationsPluginImplTest { @Test fun startSubsequentAnimationsWithTheSameType1() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -253,7 +253,7 @@ class CameraAnimationsPluginImplTest { @Test fun startSubsequentAnimationsWithTheSameType2() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -289,7 +289,7 @@ class CameraAnimationsPluginImplTest { fun testEaseToSingleDurationZero() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -318,7 +318,7 @@ class CameraAnimationsPluginImplTest { fun testEaseToSingleDurationShort() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -347,7 +347,7 @@ class CameraAnimationsPluginImplTest { fun testEaseToSequenceDurationZero() { var cameraPosition = CameraOptions.Builder().pitch(0.0).build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -386,7 +386,7 @@ class CameraAnimationsPluginImplTest { fun testEaseToSequenceQuickDuration() { var cameraPosition = CameraOptions.Builder().pitch(0.0).build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -423,7 +423,7 @@ class CameraAnimationsPluginImplTest { @Test fun testDelayedAnimatorsFinalStateAndCallbackResult() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } @@ -482,7 +482,7 @@ class CameraAnimationsPluginImplTest { // Adding value 2 because of first call after Animator.start() and last in the onEnd() or onCancel() val countUpdates = (bearingDuration + 2).toInt() - verify(exactly = countUpdates) { mapTransformDelegate.jumpTo(any()) } + verify(exactly = countUpdates) { mapTransformDelegate.setCamera(any()) } } @Test @@ -511,7 +511,7 @@ class CameraAnimationsPluginImplTest { @Test fun executeBearingAnimator() { var cameraPosition = CameraOptions.Builder().build() - every { mapTransformDelegate.jumpTo(any()) } answers { + every { mapTransformDelegate.setCamera(any()) } answers { cameraPosition = firstArg() } diff --git a/plugin-gestures/src/test/java/com/mapbox/maps/plugin/gestures/GesturePluginTest.kt b/plugin-gestures/src/test/java/com/mapbox/maps/plugin/gestures/GesturePluginTest.kt index 6455b31922..bf1cffe8d6 100644 --- a/plugin-gestures/src/test/java/com/mapbox/maps/plugin/gestures/GesturePluginTest.kt +++ b/plugin-gestures/src/test/java/com/mapbox/maps/plugin/gestures/GesturePluginTest.kt @@ -119,7 +119,7 @@ class GesturePluginTest { fun verifyOnGenericMoveEventIgnore() { presenter.zoomEnabled = false assertFalse(presenter.onGenericMotionEvent(obtainMotionEventButton(BUTTON_SECONDARY))) - verify(exactly = 0) { mapTransformDelegate.jumpTo(any()) } + verify(exactly = 0) { mapTransformDelegate.setCamera(any()) } } @Test diff --git a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationCameraAnimatorCoordinator.kt b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationCameraAnimatorCoordinator.kt index 23ba3a9e26..5092682531 100644 --- a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationCameraAnimatorCoordinator.kt +++ b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationCameraAnimatorCoordinator.kt @@ -400,6 +400,6 @@ internal class LocationCameraAnimatorCoordinator( internal fun jumpCamera(cameraOptions: CameraOptions) { cancelAndUnregisterAllAnimators() - mapTransformDelegate.jumpTo(cameraOptions) + mapTransformDelegate.setCamera(cameraOptions) } } \ No newline at end of file diff --git a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationPluginImpl.kt b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationPluginImpl.kt index 5354683f35..a472b814dc 100644 --- a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationPluginImpl.kt +++ b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/LocationPluginImpl.kt @@ -1323,7 +1323,7 @@ class LocationPluginImpl : LocationPlugin { val padding = options.padding() if (padding != null && padding.isNotEmpty()) { // fixme https://github.com/mapbox/mapbox-maps-android/issues/280 - delegateProvider.mapTransformDelegate.jumpTo( + delegateProvider.mapTransformDelegate.setCamera( CameraOptions.Builder().padding( EdgeInsets( padding[0].toDouble(), diff --git a/plugin-location/src/test/java/com/mapbox/maps/plugin/location/LocationCameraControllerTest.kt b/plugin-location/src/test/java/com/mapbox/maps/plugin/location/LocationCameraControllerTest.kt index 701b6449a2..1f979110bd 100644 --- a/plugin-location/src/test/java/com/mapbox/maps/plugin/location/LocationCameraControllerTest.kt +++ b/plugin-location/src/test/java/com/mapbox/maps/plugin/location/LocationCameraControllerTest.kt @@ -677,7 +677,7 @@ internal class LocationCameraControllerTest { ) ).bearing(0.0).build() every { projectionDelegate.getMetersPerPixelAtLatitude(any()) } returns 1.0 - every { transformDelegate.jumpTo(any()) } returns Unit + every { transformDelegate.setCamera(any()) } returns Unit locationCameraController.initializeOptions(options) locationCameraController.setEnabled(true) @@ -703,7 +703,7 @@ internal class LocationCameraControllerTest { val cameraOptionsSlot = slot() verify { - transformDelegate.jumpTo(capture(cameraOptionsSlot)) + transformDelegate.setCamera(capture(cameraOptionsSlot)) } assertEquals(camera.toString(), cameraOptionsSlot.captured.toString()) assertFalse(locationCameraController.isTransitioning) @@ -768,7 +768,7 @@ internal class LocationCameraControllerTest { ) ).bearing(0.0).build() every { projectionDelegate.getMetersPerPixelAtLatitude(any()) } returns 1.0 - every { transformDelegate.jumpTo(any()) } returns Unit + every { transformDelegate.setCamera(any()) } returns Unit locationCameraController.initializeOptions(options) locationCameraController.setEnabled(true) @@ -795,7 +795,7 @@ internal class LocationCameraControllerTest { val cameraOptionsSlot = slot() verify { - transformDelegate.jumpTo(capture(cameraOptionsSlot)) + transformDelegate.setCamera(capture(cameraOptionsSlot)) } assertEquals(camera.toString(), cameraOptionsSlot.captured.toString()) } @@ -809,7 +809,7 @@ internal class LocationCameraControllerTest { ) ).bearing(0.0).build() every { projectionDelegate.getMetersPerPixelAtLatitude(any()) } returns 1.0 - every { transformDelegate.jumpTo(any()) } returns Unit + every { transformDelegate.setCamera(any()) } returns Unit locationCameraController.initializeOptions(options) locationCameraController.setEnabled(true) @@ -835,7 +835,7 @@ internal class LocationCameraControllerTest { .build() val cameraOptionsSlot = slot() - verify { transformDelegate.jumpTo(capture(cameraOptionsSlot)) } + verify { transformDelegate.setCamera(capture(cameraOptionsSlot)) } assertEquals(camera.toString(), cameraOptionsSlot.captured.toString()) } diff --git a/plugin-overlay/src/main/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginImpl.kt b/plugin-overlay/src/main/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginImpl.kt index f4e5a81ace..b4ba8ecbcf 100644 --- a/plugin-overlay/src/main/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginImpl.kt +++ b/plugin-overlay/src/main/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginImpl.kt @@ -119,7 +119,7 @@ class MapOverlayPluginImpl : MapOverlayPlugin { onReframeFinished.onReframeFinished(reframeCameraOption) } else { reframeCameraOption?.let { - mapTransformDelegate.jumpTo(it) + mapTransformDelegate.setCamera(it) } } } diff --git a/plugin-overlay/src/test/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginTest.kt b/plugin-overlay/src/test/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginTest.kt index 9114f03358..067688ec5b 100644 --- a/plugin-overlay/src/test/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginTest.kt +++ b/plugin-overlay/src/test/java/com/mapbox/maps/plugin/overlay/MapOverlayPluginTest.kt @@ -166,7 +166,7 @@ class MapOverlayPluginTest { assertEquals(EdgeInsets(0.0, .00, 0.0, 0.0), paddingSlot.captured) val cameraSlot = slot() - every { mapTransformDelegate.jumpTo(capture(cameraSlot)) } just Runs + every { mapTransformDelegate.setCamera(capture(cameraSlot)) } just Runs mapOverlayPlugin.reframe() mapOverlayPlugin.reframe { assertEquals(it, cameraSlot.captured) diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapTransformDelegate.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapTransformDelegate.kt index a092f284e9..0bfa5e3c77 100644 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapTransformDelegate.kt +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapTransformDelegate.kt @@ -7,11 +7,12 @@ import com.mapbox.maps.* */ interface MapTransformDelegate { /** - * Set the map camera to a given camera options. + * Changes the map view by any combination of center, zoom, bearing, and pitch, without an animated transition. + * The map will retain its current values for any details not passed via the camera options argument. * - * @param cameraOptions The camera options to jump to + * @param cameraOptions New camera options */ - fun jumpTo(cameraOptions: CameraOptions) + fun setCamera(cameraOptions: CameraOptions) /** * Get the current camera options given an optional padding. @@ -71,7 +72,7 @@ interface MapTransformDelegate { /** * Tells the map rendering engine that the animation is currently performed by the - * user (e.g. with a `jumpTo()` calls series). It adjusts the engine for the animation use case. + * user (e.g. with a `setCamera()` calls series). It adjusts the engine for the animation use case. * In particular, it brings more stability to symbol placement and rendering. * * @param inProgress Bool representing if user animation is in progress @@ -153,4 +154,17 @@ interface MapTransformDelegate { toPoint: ScreenCoordinate, animation: AnimationOptions? ) + + /** + * Calculates target point where camera should move after drag. The method should be called after `dragStart` and before `dragEnd`. + * + * @param fromPoint The point to drag the map from, measured in \link MapOptions#size platform pixels \endlink from top to bottom and from left to right. + * @param toPoint The point to drag the map to, measured in \link MapOptions#size platform pixels \endlink from top to bottom and from left to right. + * + * @return Returns the camera options object showing end point + */ + fun getDragCameraOptions( + fromPoint: ScreenCoordinate, + toPoint: ScreenCoordinate, + ): CameraOptions } \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/MapController.kt b/sdk/src/main/java/com/mapbox/maps/MapController.kt index 54f9847c9a..36e4a3cd13 100644 --- a/sdk/src/main/java/com/mapbox/maps/MapController.kt +++ b/sdk/src/main/java/com/mapbox/maps/MapController.kt @@ -69,7 +69,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { } renderer.setMap(nativeMap) this.mapboxMapOptions.cameraOptions?.let { - mapboxMap.jumpTo(it) + mapboxMap.setCamera(it) } } diff --git a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt index ff47ebefdd..b45ce92035 100644 --- a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt +++ b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt @@ -253,12 +253,13 @@ class MapboxMap internal constructor( } /** - * Set the map camera to a given camera options. + * Changes the map view by any combination of center, zoom, bearing, and pitch, without an animated transition. + * The map will retain its current values for any details not passed via the camera options argument. * - * @param cameraOptions The camera options to jump to + * @param cameraOptions New camera options */ - override fun jumpTo(cameraOptions: CameraOptions) = - nativeMapWeakRef.call { this.jumpTo(cameraOptions) } + override fun setCamera(cameraOptions: CameraOptions) = + nativeMapWeakRef.call { this.setCamera(cameraOptions) } /** * Get the current camera options given an optional padding. @@ -324,7 +325,7 @@ class MapboxMap internal constructor( /** * Tells the map rendering engine that the animation is currently performed by the - * user (e.g. with a `jumpTo()` calls series). It adjusts the engine for the animation use case. + * user (e.g. with a `setCamera()` calls series). It adjusts the engine for the animation use case. * In particular, it brings more stability to symbol placement and rendering. * * @param inProgress Bool representing if user animation is in progress @@ -1082,15 +1083,18 @@ class MapboxMap internal constructor( fun getFreeCameraOptions() = nativeMapWeakRef.call { this.freeCameraOptions } /** + * Sets the map view with the free camera options. + * * FreeCameraOptions provides more direct access to the underlying camera entity. * For backwards compatibility the state set using this API must be representable with - * [CameraOptions] as well. Parameters are clamped to a valid range or discarded as invalid + * `CameraOptions` as well. Parameters are clamped to a valid range or discarded as invalid * if the conversion to the pitch and bearing presentation is ambiguous. For example orientation * can be invalid if it leads to the camera being upside down or the quaternion has zero length. + * * @param options The free camera options to set. */ - fun setFreeCameraOptions(options: FreeCameraOptions) { - nativeMapWeakRef.call { this.freeCameraOptions = options } + fun setCamera(options: FreeCameraOptions) { + nativeMapWeakRef.call { this.setCamera(options) } } /** @@ -1143,6 +1147,13 @@ class MapboxMap internal constructor( nativeMapWeakRef.call { this.drag(fromPoint, toPoint, animation) } } + override fun getDragCameraOptions( + fromPoint: ScreenCoordinate, + toPoint: ScreenCoordinate + ): CameraOptions { + return nativeMapWeakRef.call { this.getDragCameraOptions(fromPoint, toPoint) } + } + /** * Is terrain enabled for loaded style of the map. * @return True if terrain is enabled for given style and false otherwise. diff --git a/sdk/src/main/java/com/mapbox/maps/NativeMapImpl.kt b/sdk/src/main/java/com/mapbox/maps/NativeMapImpl.kt index 81b24e6595..78e4288ac6 100644 --- a/sdk/src/main/java/com/mapbox/maps/NativeMapImpl.kt +++ b/sdk/src/main/java/com/mapbox/maps/NativeMapImpl.kt @@ -30,22 +30,14 @@ internal class NativeMapImpl(private val map: MapInterface) : map.render() } - override fun jumpTo(cameraOptions: CameraOptions) { - map.jumpTo(cameraOptions) + override fun setCamera(cameraOptions: CameraOptions) { + map.setCamera(cameraOptions) } override fun getCameraOptions(edgeInsets: EdgeInsets?): CameraOptions { return map.getCameraOptions(edgeInsets) } - override fun easeTo(cameraOptions: CameraOptions, animationOptions: AnimationOptions) { - map.easeTo(cameraOptions, animationOptions) - } - - override fun flyTo(cameraOptions: CameraOptions, animationOptions: AnimationOptions) { - map.flyTo(cameraOptions, animationOptions) - } - override fun dragStart(point: ScreenCoordinate) { map.dragStart(point) } @@ -62,34 +54,17 @@ internal class NativeMapImpl(private val map: MapInterface) : map.drag(fromPoint, toPoint, animation) } - override fun moveBy(screenCoordinate: ScreenCoordinate, animationOptions: AnimationOptions?) { - map.moveBy(screenCoordinate, animationOptions) - } - - override fun scaleBy( - amount: Double, - screenCoordinate: ScreenCoordinate?, - animationOptions: AnimationOptions? - ) { - map.scaleBy(amount, screenCoordinate, animationOptions) + override fun getDragCameraOptions( + fromPoint: ScreenCoordinate, + toPoint: ScreenCoordinate + ): CameraOptions { + return map.getDragCameraOptions(fromPoint, toPoint) } override fun coordinatesForPixels(pixels: MutableList): MutableList { return map.coordinatesForPixels(pixels) } - override fun pitchBy(pitchBy: Double, animationOptions: AnimationOptions?) { - map.pitchBy(pitchBy, animationOptions) - } - - override fun rotateBy( - first: ScreenCoordinate, - second: ScreenCoordinate, - animationOptions: AnimationOptions? - ) { - map.rotateBy(first, second, animationOptions) - } - override fun cameraForCoordinateBounds( coordinateBounds: CoordinateBounds, edgeInsets: EdgeInsets, @@ -448,10 +423,8 @@ internal class NativeMapImpl(private val map: MapInterface) : return map.getFreeCameraOptions() } - override fun setFreeCameraOptions( - options: FreeCameraOptions - ) { - map.setFreeCameraOptions(options) + override fun setCamera(options: FreeCameraOptions) { + map.setCamera(options) } override fun invalidateStyleCustomGeometrySourceTile( diff --git a/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt b/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt index 79c9e84792..4548244fbd 100644 --- a/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt +++ b/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt @@ -122,7 +122,7 @@ open class Snapshotter : MapSnapshotterObserver { * @param cameraOptions the camera options of the snapshot. */ fun setCameraOptions(cameraOptions: CameraOptions) { - coreSnapshotter.cameraOptions = cameraOptions + coreSnapshotter.setCamera(cameraOptions) } /** @@ -146,12 +146,15 @@ open class Snapshotter : MapSnapshotterObserver { } /** - * Get the previously set rectangular bounds. + * Returns the coordinate bounds for a given camera. + * + * Note that if the given camera shows the antimeridian, the returned wrapped bounds + * might not represent the minimum bounding box. * * @return CoordinateBounds */ - fun getRegion(): CoordinateBounds { - return coreSnapshotter.region + fun coordinatesForCamera(options: CameraOptions): CoordinateBounds { + return coreSnapshotter.coordinateBoundsForCamera(options) } /** @@ -180,8 +183,8 @@ open class Snapshotter : MapSnapshotterObserver { * * @return CameraOptions. */ - fun getCameraOptions(): CameraOptions { - return coreSnapshotter.cameraOptions + fun getCameraOptions(padding: EdgeInsets? = null): CameraOptions { + return coreSnapshotter.getCameraOptions(padding) } /** diff --git a/sdk/src/main/java/com/mapbox/maps/plugin/MapCameraDelegateImpl.kt b/sdk/src/main/java/com/mapbox/maps/plugin/MapCameraDelegateImpl.kt index a454127a00..7f9eb10060 100644 --- a/sdk/src/main/java/com/mapbox/maps/plugin/MapCameraDelegateImpl.kt +++ b/sdk/src/main/java/com/mapbox/maps/plugin/MapCameraDelegateImpl.kt @@ -29,6 +29,6 @@ internal class MapCameraDelegateImpl constructor(private val mapboxMap: MapboxMa override fun getCameraOptions(edgeInsets: EdgeInsets?) = mapboxMap.getCameraOptions(edgeInsets) override fun setBearing(bearing: Double) { - mapboxMap.jumpTo(CameraOptions.Builder().bearing(bearing).build()) + mapboxMap.setCamera(CameraOptions.Builder().bearing(bearing).build()) } } \ No newline at end of file diff --git a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt index 546bde9774..fff3060097 100644 --- a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt @@ -400,10 +400,10 @@ class MapboxMapTest { } @Test - fun jumpTo() { + fun setCamera() { val cameraOptions = CameraOptions.Builder().build() - mapboxMap.jumpTo(cameraOptions) - verify { nativeMap.jumpTo(cameraOptions) } + mapboxMap.setCamera(cameraOptions) + verify { nativeMap.setCamera(cameraOptions) } } @Test @@ -679,8 +679,8 @@ class MapboxMapTest { @Test fun setFreeCameraOptions() { val options = mockk() - mapboxMap.setFreeCameraOptions(options) - verify { nativeMap.freeCameraOptions = options } + mapboxMap.setCamera(options) + verify { nativeMap.setCamera(options) } } @Test diff --git a/sdk/src/test/java/com/mapbox/maps/NativeMapTest.kt b/sdk/src/test/java/com/mapbox/maps/NativeMapTest.kt index 4f0c9c7119..65dbc3bad8 100644 --- a/sdk/src/test/java/com/mapbox/maps/NativeMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/NativeMapTest.kt @@ -408,11 +408,11 @@ class NativeMapTest { } @Test - fun jumpTo() { + fun setCameraOptions() { val value = mockk() val nativeMap = NativeMapImpl(map) - nativeMap.jumpTo(value) - verify { map.jumpTo(value) } + nativeMap.setCamera(value) + verify { map.setCamera(value) } } @Test @@ -423,60 +423,6 @@ class NativeMapTest { verify { map.getCameraOptions(value) } } - @Test - fun easeTo() { - val cameraOptions = mockk() - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.easeTo(cameraOptions, animationOptions) - verify { map.easeTo(cameraOptions, animationOptions) } - } - - @Test - fun flyTo() { - val cameraOptions = mockk() - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.flyTo(cameraOptions, animationOptions) - verify { map.flyTo(cameraOptions, animationOptions) } - } - - @Test - fun moveBy() { - val screenCoordinate = mockk() - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.moveBy(screenCoordinate, animationOptions) - verify { map.moveBy(screenCoordinate, animationOptions) } - } - - @Test - fun scaleBy() { - val screenCoordinate = mockk() - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.scaleBy(1.0, screenCoordinate, animationOptions) - verify { map.scaleBy(1.0, screenCoordinate, animationOptions) } - } - - @Test - fun pitchBy() { - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.pitchBy(1.0, animationOptions) - verify { map.pitchBy(1.0, animationOptions) } - } - - @Test - fun rotateBy() { - val screenCoordinateOne = mockk() - val screenCoordinateTwo = mockk() - val animationOptions = mockk() - val nativeMap = NativeMapImpl(map) - nativeMap.rotateBy(screenCoordinateOne, screenCoordinateTwo, animationOptions) - verify { map.rotateBy(screenCoordinateOne, screenCoordinateTwo, animationOptions) } - } - @Test fun cameraForCoordinateBounds() { val bounds = mockk() diff --git a/sdk/src/test/java/com/mapbox/maps/plugin/MapCameraDelegateImplTest.kt b/sdk/src/test/java/com/mapbox/maps/plugin/MapCameraDelegateImplTest.kt index e5b39962b1..49ae84fcea 100644 --- a/sdk/src/test/java/com/mapbox/maps/plugin/MapCameraDelegateImplTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/plugin/MapCameraDelegateImplTest.kt @@ -32,7 +32,7 @@ class MapCameraDelegateImplTest { fun bearingSet() { val mapCameraDelegate = MapCameraDelegateImpl(mapboxMap) mapCameraDelegate.setBearing(10.0) - verify { mapboxMap.jumpTo(any()) } + verify { mapboxMap.setCamera(any()) } } @Test From c55c6e176684161f40c84e29e038b092557705f9 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 19:32:14 +0200 Subject: [PATCH 04/12] Adpot breaking changes in events API, and new scheduleTask API. --- .../annotation/UpdateAnnotationTest.kt | 6 +- .../testapp/examples/DebugModeActivity.kt | 24 ++-- .../LocationComponentAnimationActivity.kt | 20 ++- .../testapp/examples/PolygonHolesActivity.kt | 8 +- .../plugin/delegates/MapListenerDelegate.kt | 32 ++--- .../listeners/OnMapLoadErrorListener.kt | 10 +- ...shedListener.kt => OnMapLoadedListener.kt} | 4 +- .../listeners/OnSourceChangeListener.kt | 13 -- .../listeners/OnSourceDataLoadedListener.kt | 20 +++ .../listeners/OnStyleDataLoadedListener.kt | 16 +++ ...edListener.kt => OnStyleLoadedListener.kt} | 6 +- .../OnStyleLoadingFinishedListener.kt | 14 -- .../listeners/eventdata/MapLoadError.kt | 22 --- .../listeners/eventdata/MapLoadErrorType.kt | 39 +++++ .../listeners/eventdata/SourceDataType.kt | 20 +++ .../listeners/eventdata/StyleDataType.kt | 26 ++++ .../delegates/listeners/eventdata/TileID.kt | 24 ++++ .../java/com/mapbox/maps/MapController.kt | 21 +-- .../main/java/com/mapbox/maps/MapboxMap.kt | 72 +++++----- .../java/com/mapbox/maps/NativeObserver.kt | 123 ++++++++-------- .../observable/ObservableExtension.kt | 76 +++++----- .../map/MapLoadingErrorEventData.kt | 18 --- .../{map => model}/IDStringEventData.kt | 2 +- .../model/MapLoadingErrorEventData.kt | 18 +++ .../RenderFrameFinishedEventData.kt | 2 +- .../model/SourceDataLoadedEventData.kt | 30 ++++ .../model/StyleDataLoadedEventData.kt | 14 ++ .../maps/renderer/MapboxSurfaceRenderer.kt | 7 + .../renderer/MapboxTextureViewRenderer.kt | 7 + .../java/com/mapbox/maps/MapboxMapTest.kt | 8 +- ...pObserverTest.kt => NativeObserverTest.kt} | 133 +++++++++--------- 31 files changed, 511 insertions(+), 324 deletions(-) rename sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/{OnMapLoadingFinishedListener.kt => OnMapLoadedListener.kt} (76%) delete mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceChangeListener.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceDataLoadedListener.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleDataLoadedListener.kt rename sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/{OnStyleFullyLoadedListener.kt => OnStyleLoadedListener.kt} (63%) delete mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadingFinishedListener.kt delete mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadError.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadErrorType.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/SourceDataType.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/StyleDataType.kt create mode 100644 sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/TileID.kt delete mode 100644 sdk/src/main/java/com/mapbox/maps/extension/observable/map/MapLoadingErrorEventData.kt rename sdk/src/main/java/com/mapbox/maps/extension/observable/{map => model}/IDStringEventData.kt (82%) create mode 100644 sdk/src/main/java/com/mapbox/maps/extension/observable/model/MapLoadingErrorEventData.kt rename sdk/src/main/java/com/mapbox/maps/extension/observable/{map => model}/RenderFrameFinishedEventData.kt (93%) create mode 100644 sdk/src/main/java/com/mapbox/maps/extension/observable/model/SourceDataLoadedEventData.kt create mode 100644 sdk/src/main/java/com/mapbox/maps/extension/observable/model/StyleDataLoadedEventData.kt rename sdk/src/test/java/com/mapbox/maps/{NativeMapObserverTest.kt => NativeObserverTest.kt} (79%) diff --git a/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt b/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt index e5c8950a37..4b6a087967 100644 --- a/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt +++ b/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt @@ -15,7 +15,7 @@ import com.mapbox.maps.plugin.annotation.generated.SymbolManager import com.mapbox.maps.plugin.annotation.generated.SymbolOptions import com.mapbox.maps.plugin.annotation.generated.createSymbolManager import com.mapbox.maps.plugin.annotation.getAnnotationPlugin -import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadingFinishedListener +import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadedListener import com.mapbox.maps.testapp.BaseMapTest import com.mapbox.maps.testapp.examples.annotation.AnnotationUtils import org.junit.Assert @@ -30,7 +30,7 @@ import java.util.concurrent.TimeoutException */ @RunWith(AndroidJUnit4::class) @LargeTest -class UpdateAnnotationTest : BaseMapTest(), OnMapLoadingFinishedListener { +class UpdateAnnotationTest : BaseMapTest(), OnMapLoadedListener { private lateinit var runnable: Runnable private var index = 0 private val latch = CountDownLatch(AnnotationUtils.STYLES.size * 3) @@ -97,7 +97,7 @@ class UpdateAnnotationTest : BaseMapTest(), OnMapLoadingFinishedListener { } } - override fun onMapLoadingFinished() { + override fun onMapLoaded() { latch.countDown() rule.scenario.onActivity { it.runOnUiThread { diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/DebugModeActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/DebugModeActivity.kt index 0bd3d9ee71..089b96ffa5 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/DebugModeActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/DebugModeActivity.kt @@ -10,7 +10,7 @@ import com.mapbox.maps.extension.observable.subscribeResourceRequest import com.mapbox.maps.extension.observable.unsubscribeResourceRequest import com.mapbox.maps.plugin.compass.getCompassPlugin import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener -import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadError +import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadErrorType import com.mapbox.maps.plugin.scalebar.ScaleBarPlugin import com.mapbox.maps.plugin.scalebar.getScaleBarPlugin import com.mapbox.maps.testapp.R @@ -38,7 +38,7 @@ class DebugModeActivity : AppCompatActivity() { override fun notify(event: Event) { Logger.i( TAG, - "Type: ${event.type}\nValue: ${event.data.contents}\nBegin: ${event.begin}\nEnd: ${event.end}" + "Type: ${event.type}\nValue: ${event.data.contents}" ) } } @@ -89,11 +89,11 @@ class DebugModeActivity : AppCompatActivity() { } private fun registerListeners(mapboxMap: MapboxMap) { - mapboxMap.addOnStyleLoadingFinishedListener { - Logger.i(TAG, "OnStyleLoadingFinishedListener") + mapboxMap.addOnStyleLoadedListener() { + Logger.i(TAG, "OnStyleLoadedListener") } - mapboxMap.addOnStyleFullyLoadedListener { - Logger.i(TAG, "OnStyleFullyLoadedListener") + mapboxMap.addOnStyleDataLoadedListener { + Logger.i(TAG, "OnStyleDataLoadedListener: $it") } mapboxMap.addOnStyleImageMissingListener { Logger.i(TAG, "OnStyleImageMissingListener: $it") @@ -105,12 +105,12 @@ class DebugModeActivity : AppCompatActivity() { Logger.i(TAG, "OnMapIdleListener") } mapboxMap.addOnMapLoadErrorListener(object : OnMapLoadErrorListener { - override fun onMapLoadError(mapLoadError: MapLoadError, description: String) { - Logger.i(TAG, "OnMapLoadErrorListener: $mapLoadError, $description") + override fun onMapLoadError(mapLoadErrorType: MapLoadErrorType, description: String) { + Logger.i(TAG, "OnMapLoadErrorListener: $mapLoadErrorType, $description") } }) - mapboxMap.addOnMapLoadingFinishedListener { - Logger.i(TAG, "OnMapLoadingFinishedListener") + mapboxMap.addOnMapLoadedListener { + Logger.i(TAG, "OnMapLoadedListener") } mapboxMap.addOnCameraChangeListener { Logger.i(TAG, "OnCameraChangeListener") @@ -130,10 +130,10 @@ class DebugModeActivity : AppCompatActivity() { "OnSourceAddedListener: $it" ) } - mapboxMap.addOnSourceChangeListener { + mapboxMap.addOnSourceDataLoadedListener { id, type, loaded, tileID -> Logger.i( TAG, - "OnSourceChangeListener: $it" + "OnSourceDataLoadedListener: $id, $type, $loaded, $tileID" ) } mapboxMap.addOnSourceRemovedListener { diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt index d2d8692a79..cf8cc7533c 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/LocationComponentAnimationActivity.kt @@ -54,11 +54,21 @@ class LocationComponentAnimationActivity : AppCompatActivity() { // however on third emit we will emit location almost immediately using custom animator options for single location update if (delta >= 0.002f && delta < 0.003) { - locationConsumer?.onLocationUpdated(Point.fromLngLat(POINT_LNG + delta, POINT_LAT + delta)) { + locationConsumer?.onLocationUpdated( + Point.fromLngLat( + POINT_LNG + delta, + POINT_LAT + delta + ) + ) { duration = 100 } } else { - locationConsumer?.onLocationUpdated(Point.fromLngLat(POINT_LNG + delta, POINT_LAT + delta)) + locationConsumer?.onLocationUpdated( + Point.fromLngLat( + POINT_LNG + delta, + POINT_LAT + delta + ) + ) } locationConsumer?.onBearingUpdated(BEARING + delta * 10000.0 * 5) delta += 0.001f @@ -88,9 +98,9 @@ class LocationComponentAnimationActivity : AppCompatActivity() { ) { setCamera( CameraOptions.Builder() - .zoom(14.0) - .center(Point.fromLngLat(POINT_LNG, POINT_LAT)) - .build() + .zoom(14.0) + .center(Point.fromLngLat(POINT_LNG, POINT_LAT)) + .build() ) mapView.getLocationComponentPlugin().apply { setLocationProvider(FakeLocationProvider()) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt index fb3714b9f8..ced5e64b4f 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/PolygonHolesActivity.kt @@ -33,10 +33,10 @@ class PolygonHolesActivity : AppCompatActivity() { // TODO attributionTintColor(RED_COLOR) missing // TODO compassFadesWhenFacingNorth missing setCamera( - CameraOptions.Builder() - .center(Point.fromLngLat(55.3089185, 25.255377)) - .zoom(13.0) - .build() + CameraOptions.Builder() + .center(Point.fromLngLat(55.3089185, 25.255377)) + .zoom(13.0) + .build() ) loadStyleUri( Style.MAPBOX_STREETS diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapListenerDelegate.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapListenerDelegate.kt index 1399db035c..2bdb33bf44 100644 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapListenerDelegate.kt +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/MapListenerDelegate.kt @@ -45,12 +45,12 @@ interface MapListenerDelegate { * Add a listener that's going to be invoked whenever the Map's style has been fully loaded, and * the Map has rendered all visible tiles. */ - fun addOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) + fun addOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) /** - * Remove the map loading finished listener. + * Remove the map loaded listener. */ - fun removeOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) + fun removeOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) // Render frame events /** @@ -90,14 +90,14 @@ interface MapListenerDelegate { fun removeOnSourceAddedListener(onSourceAddedListener: OnSourceAddedListener) /** - * Add a listener that's going to be invoked whenever a source has been changed. + * Add a listener that's going to be invoked whenever the source data has been loaded. */ - fun addOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) + fun addOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) /** - * Remove the source change listener. + * Remove the source data loaded listener. */ - fun removeOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) + fun removeOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) /** * Add a listener that's going to be invoked whenever a source has been removed with StyleManager#removeStyleSource @@ -112,29 +112,29 @@ interface MapListenerDelegate { // Style events /** - * Add a listener that's going to be invoked whenever the requested style has been loaded, not - * including the style specified sprite sheet and sources' descriptions. + * Add a listener that's going to be invoked whenever the requested style data been loaded. + * The 'type' property defines what kind of style data has been loaded. * - * This event may be useful when application needs to modify style layers and add or remove sources + * This event may be useful when application needs to modify style layers or sources and add or remove sources * before style is fully loaded. */ - fun addOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) + fun addOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) /** - * Remove the style loading finished listener + * Remove the style data loaded listener */ - fun removeOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) + fun removeOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) /** * Add a listener that's going to be invoked whenever the requested style has been fully loaded, * including the style specified sprite and sources. */ - fun addOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) + fun addOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) /** - * Remove the style fully loaded listener. + * Remove the style loaded listener. */ - fun removeOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) + fun removeOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) /** * Add a listener that's going to be invoked whenever a style has a missing image. diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadErrorListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadErrorListener.kt index 97584dbe3e..1c72f129a1 100644 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadErrorListener.kt +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadErrorListener.kt @@ -1,17 +1,17 @@ package com.mapbox.maps.plugin.delegates.listeners -import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadError +import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadErrorType /** * Definition for listener invoked whenever the map load errors out. - * See [MapLoadError]. + * See [MapLoadErrorType]. */ interface OnMapLoadErrorListener { /** * Invoked whenever the map load errors out * - * @param mapLoadError the [MapLoadError] - * @param description the error message string + * @param mapLoadErrorType the [MapLoadErrorType] + * @param message the error message string */ - fun onMapLoadError(mapLoadError: MapLoadError, description: String) + fun onMapLoadError(mapLoadErrorType: MapLoadErrorType, message: String) } \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadingFinishedListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadedListener.kt similarity index 76% rename from sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadingFinishedListener.kt rename to sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadedListener.kt index a91d8bb307..d72ea2012e 100644 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadingFinishedListener.kt +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnMapLoadedListener.kt @@ -3,10 +3,10 @@ package com.mapbox.maps.plugin.delegates.listeners /** * Definition for listener invoked when the map loading finishes. */ -fun interface OnMapLoadingFinishedListener { +fun interface OnMapLoadedListener { /** * Invoked when the Map's style has been fully loaded, and the Map has rendered all visible tiles. */ - fun onMapLoadingFinished() + fun onMapLoaded() } \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceChangeListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceChangeListener.kt deleted file mode 100644 index 93ad50ac9d..0000000000 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceChangeListener.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.mapbox.maps.plugin.delegates.listeners - -/** - * Definition for listener invoked whenever a source definition has changed. - */ -fun interface OnSourceChangeListener { - /** - * Invoked whenever the source definition has changed. - * - * @param id the id of the source that has changed - */ - fun onSourceChanged(id: String) -} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceDataLoadedListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceDataLoadedListener.kt new file mode 100644 index 0000000000..d3c32ed084 --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnSourceDataLoadedListener.kt @@ -0,0 +1,20 @@ +package com.mapbox.maps.plugin.delegates.listeners + +import com.mapbox.maps.plugin.delegates.listeners.eventdata.SourceDataType +import com.mapbox.maps.plugin.delegates.listeners.eventdata.TileID + +/** + * Definition for listener invoked when the requested style data has been loaded. + */ +fun interface OnSourceDataLoadedListener { + + /** + * Invoked when the requested source data has been loaded. + * + * @param id defines the source id. + * @param type defines if source's metadata (e.g., TileJSON) or tile has been loaded. + * @param loaded will be set to 'true' if all source's data required for Map's visible viewport, are loaded. + * @param tileID defines the tile id if the 'type' field equals 'tile'. + */ + fun onSourceDataLoaded(id: String, type: SourceDataType, loaded: Boolean?, tileID: TileID?) +} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleDataLoadedListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleDataLoadedListener.kt new file mode 100644 index 0000000000..6c077cc403 --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleDataLoadedListener.kt @@ -0,0 +1,16 @@ +package com.mapbox.maps.plugin.delegates.listeners + +import com.mapbox.maps.plugin.delegates.listeners.eventdata.StyleDataType + +/** + * Definition for listener invoked when the requested style data has been loaded. + */ +fun interface OnStyleDataLoadedListener { + + /** + * Invoked when the requested style data has been loaded. + * + * @param type defines what kind of style data has been loaded. + */ + fun onStyleDataLoaded(type: StyleDataType) +} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleFullyLoadedListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadedListener.kt similarity index 63% rename from sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleFullyLoadedListener.kt rename to sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadedListener.kt index 5bda3fa36e..662a327dc8 100644 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleFullyLoadedListener.kt +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadedListener.kt @@ -3,10 +3,10 @@ package com.mapbox.maps.plugin.delegates.listeners /** * Definition for listener invoked when the style is fully loaded. */ -fun interface OnStyleFullyLoadedListener { +fun interface OnStyleLoadedListener { /** - * Invoked when the requested style has been fully loaded, including the style specified sprite and sources. + * Invoked when the requested style has been fully loaded, including the style, specified sprite and sources' metadata. */ - fun onStyleFullyLoaded() + fun onStyleLoaded() } \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadingFinishedListener.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadingFinishedListener.kt deleted file mode 100644 index b901c60688..0000000000 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/OnStyleLoadingFinishedListener.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.mapbox.maps.plugin.delegates.listeners - -/** - * Definition for listener invoked when the style loading finishes. - */ -fun interface OnStyleLoadingFinishedListener { - - /** - * Invoked when the requested style has been loaded, not including the style specified sprite sheet and sources' - * descriptions. This event may be useful when application needs to modify style layers and add or remove sources - * before style is fully loaded. - */ - fun onStyleLoadingFinished() -} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadError.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadError.kt deleted file mode 100644 index c75117495c..0000000000 --- a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadError.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.mapbox.maps.plugin.delegates.listeners.eventdata - -import com.google.gson.annotations.SerializedName - -/** Describes an error while loading the map. */ -enum class MapLoadError { - /** An error while interpreting the contents of the style. */ - @SerializedName("style-parse") - STYLE_PARSE_ERROR, - - /** An I/O error while attempting to load the style contents. */ - @SerializedName("style-load") - STYLE_LOAD_ERROR, - - /** The style has not been found or incompatible. */ - @SerializedName("not-found") - NOT_FOUND_ERROR, - - /** An unspecified error. */ - @SerializedName("unknown") - UNKNOWN_ERROR -} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadErrorType.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadErrorType.kt new file mode 100644 index 0000000000..a740bee729 --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/MapLoadErrorType.kt @@ -0,0 +1,39 @@ +package com.mapbox.maps.plugin.delegates.listeners.eventdata + +import com.google.gson.annotations.SerializedName + +/** + * Describes an error type while loading the map. + * Defines what resource could not be loaded. + */ +enum class MapLoadErrorType { + /** + * An error related to style. + */ + @SerializedName("style") + STYLE, + + /** + * An error related to sprite. + */ + @SerializedName("sprite") + SPRITE, + + /** + * An error related to source. + */ + @SerializedName("source") + SOURCE, + + /** + * An error related to tile. + */ + @SerializedName("tile") + TILE, + + /** + * An error related to glyphs. + */ + @SerializedName("glyphs") + GLYPHS +} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/SourceDataType.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/SourceDataType.kt new file mode 100644 index 0000000000..9b7e1fc4c8 --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/SourceDataType.kt @@ -0,0 +1,20 @@ +package com.mapbox.maps.plugin.delegates.listeners.eventdata + +import com.google.gson.annotations.SerializedName + +/** + * Defines what kind of source data has been loaded in a source-data-loaded event. + */ +enum class SourceDataType { + /** + * The source data loaded event is associated with source metadata. + */ + @SerializedName("metadata") + METADATA, + + /** + * The source data loaded event is associated with source tile. + */ + @SerializedName("tile") + TILE +} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/StyleDataType.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/StyleDataType.kt new file mode 100644 index 0000000000..a63690bfc5 --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/StyleDataType.kt @@ -0,0 +1,26 @@ +package com.mapbox.maps.plugin.delegates.listeners.eventdata + +import com.google.gson.annotations.SerializedName + +/** + * Defines what kind of style data has been loaded in a style-data-loaded event. + */ +enum class StyleDataType { + /** + * The style data loaded event is associated with style. + */ + @SerializedName("style") + STYLE, + + /** + * The style data loaded event is associated with sprite. + */ + @SerializedName("sprite") + SPRITE, + + /** + * The style data loaded event is associated with sources. + */ + @SerializedName("sources") + SOURCE +} \ No newline at end of file diff --git a/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/TileID.kt b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/TileID.kt new file mode 100644 index 0000000000..011d8c5e6b --- /dev/null +++ b/sdk-base/src/main/java/com/mapbox/maps/plugin/delegates/listeners/eventdata/TileID.kt @@ -0,0 +1,24 @@ +package com.mapbox.maps.plugin.delegates.listeners.eventdata + +import com.google.gson.annotations.SerializedName + +/** + * Defines the tile id in a source-data-loaded event. + */ +data class TileID( + /** + * The zoom level. + */ + @SerializedName("z") + val zoom: Double, + /** + * The x coordinate of the tile + */ + @SerializedName("x") + val x: Double, + /** + * The y coordinate of the tile + */ + @SerializedName("y") + val y: Double +) \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/MapController.kt b/sdk/src/main/java/com/mapbox/maps/MapController.kt index 36e4a3cd13..0858dc1e8e 100644 --- a/sdk/src/main/java/com/mapbox/maps/MapController.kt +++ b/sdk/src/main/java/com/mapbox/maps/MapController.kt @@ -19,7 +19,8 @@ import com.mapbox.maps.plugin.attribution.AttributionPlugin import com.mapbox.maps.plugin.compass.CompassPlugin import com.mapbox.maps.plugin.delegates.MapPluginProviderDelegate import com.mapbox.maps.plugin.delegates.listeners.OnCameraChangeListener -import com.mapbox.maps.plugin.delegates.listeners.OnStyleLoadingFinishedListener +import com.mapbox.maps.plugin.delegates.listeners.OnStyleDataLoadedListener +import com.mapbox.maps.plugin.delegates.listeners.eventdata.StyleDataType import com.mapbox.maps.plugin.gestures.GesturesPlugin import com.mapbox.maps.plugin.location.LocationPlugin import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin @@ -38,7 +39,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { private val nativeMap: MapInterface private val mapboxMap: MapboxMap private val pluginRegistry: MapPluginRegistry - private val onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener + private val onStyleDataLoadedListener: OnStyleDataLoadedListener private val onCameraChangedListener: OnCameraChangeListener constructor( @@ -62,9 +63,11 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { this.onCameraChangedListener = OnCameraChangeListener { pluginRegistry.onCameraMove(nativeMap.getCameraOptions(null)) } - this.onStyleLoadingFinishedListener = OnStyleLoadingFinishedListener { - mapboxMap.getStyle { style -> - pluginRegistry.onStyleChanged(style) + this.onStyleDataLoadedListener = OnStyleDataLoadedListener { type -> + if (type == StyleDataType.STYLE) { + mapboxMap.getStyle { style -> + pluginRegistry.onStyleChanged(style) + } } } renderer.setMap(nativeMap) @@ -80,7 +83,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { nativeMap: MapInterface, mapboxMap: MapboxMap, pluginRegistry: MapPluginRegistry, - onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener + onStyleLoadingFinishedListener: OnStyleDataLoadedListener ) { this.renderer = renderer this.nativeObserver = nativeObserver @@ -91,7 +94,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { this.onCameraChangedListener = OnCameraChangeListener { pluginRegistry.onCameraMove(nativeMap.getCameraOptions(null)) } - this.onStyleLoadingFinishedListener = onStyleLoadingFinishedListener + this.onStyleDataLoadedListener = onStyleLoadingFinishedListener } override fun getMapboxMap(): MapboxMap { @@ -102,7 +105,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { nativeObserver.apply { onStart() addOnCameraChangeListener(onCameraChangedListener) - addOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener) + addOnStyleDataLoadedListener(onStyleDataLoadedListener) } renderer.onStart() pluginRegistry.onStart() @@ -115,7 +118,7 @@ internal class MapController : MapPluginProviderDelegate, MapControllable { override fun onStop() { nativeObserver.apply { removeOnCameraChangeListener(onCameraChangedListener) - removeOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener) + removeOnStyleDataLoadedListener(onStyleDataLoadedListener) onStop() } renderer.onStop() diff --git a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt index b45ce92035..0b27019f28 100644 --- a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt +++ b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt @@ -3,6 +3,7 @@ package com.mapbox.maps import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting.PRIVATE import com.mapbox.bindgen.Value +import com.mapbox.common.Logger import com.mapbox.geojson.Feature import com.mapbox.geojson.Geometry import com.mapbox.geojson.Point @@ -12,6 +13,7 @@ import com.mapbox.maps.plugin.PLUGIN_GESTURE_CLASS_NAME import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin import com.mapbox.maps.plugin.delegates.* import com.mapbox.maps.plugin.delegates.listeners.* +import com.mapbox.maps.plugin.delegates.listeners.eventdata.StyleDataType import com.mapbox.maps.plugin.gestures.GesturesPlugin import java.lang.ref.WeakReference import java.util.* @@ -179,11 +181,14 @@ class MapboxMap internal constructor( onMapLoadErrorListener?.let { addOnMapLoadErrorListener(it) } - addOnStyleLoadingFinishedListener( - object : OnStyleLoadingFinishedListener { - override fun onStyleLoadingFinished() { - onFinishLoadingStyle(onStyleLoaded, onMapLoadErrorListener) - removeOnStyleLoadingFinishedListener(this) + addOnStyleDataLoadedListener( + object : OnStyleDataLoadedListener { + override fun onStyleDataLoaded(type: StyleDataType) { + Logger.e("testtest", "onStyleDataLoaded: $type") + if (type == StyleDataType.STYLE) { + onFinishLoadingStyle(onStyleLoaded, onMapLoadErrorListener) + removeOnStyleDataLoadedListener(this) + } } } ) @@ -914,15 +919,15 @@ class MapboxMap internal constructor( * Add a listener that's going to be invoked whenever the Map's style has been fully loaded, and * the Map has rendered all visible tiles. */ - override fun addOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) { - nativeObserver.addOnMapLoadingFinishedListener(onMapLoadingFinishedListener) + override fun addOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) { + nativeObserver.addOnMapLoadedListener(onMapLoadedListener) } /** - * Remove the map loading finished listener. + * Remove the map loaded listener. */ - override fun removeOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) { - nativeObserver.removeOnMapLoadingFinishedListener(onMapLoadingFinishedListener) + override fun removeOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) { + nativeObserver.removeOnMapLoadedListener(onMapLoadedListener) } // Render frame events @@ -973,19 +978,18 @@ class MapboxMap internal constructor( override fun removeOnSourceAddedListener(onSourceAddedListener: OnSourceAddedListener) { nativeObserver.removeOnSourceAddedListener(onSourceAddedListener) } - /** - * Add a listener that's going to be invoked whenever a source has been changed. + * Add a listener that's going to be invoked whenever the source data has been loaded. */ - override fun addOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) { - nativeObserver.addOnSourceChangeListener(onSourceChangeListener) + override fun addOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) { + nativeObserver.addOnSourceDataLoadedListener(onSourceDataLoadedListener) } /** - * Remove the source change listener. + * Remove the source data loaded listener. */ - override fun removeOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) { - nativeObserver.removeOnSourceChangeListener(onSourceChangeListener) + override fun removeOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) { + nativeObserver.removeOnSourceDataLoadedListener(onSourceDataLoadedListener) } /** @@ -1005,36 +1009,36 @@ class MapboxMap internal constructor( // Style events /** - * Add a listener that's going to be invoked whenever the requested style has been loaded, not - * including the style specified sprite sheet and sources' descriptions. - * - * This event may be useful when application needs to modify style layers and add or remove sources - * before style is fully loaded. + * Add a listener that's going to be invoked whenever the requested style has been fully loaded, + * including the style specified sprite and sources. */ - override fun addOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) { - nativeObserver.addOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener) + override fun addOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) { + nativeObserver.addOnStyleLoadedListener(onStyleLoadedListener) } /** - * Remove the style loading finished listener + * Remove the style loaded listener. */ - override fun removeOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) { - nativeObserver.removeOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener) + override fun removeOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) { + nativeObserver.removeOnStyleLoadedListener(onStyleLoadedListener) } /** - * Add a listener that's going to be invoked whenever the requested style has been fully loaded, - * including the style specified sprite and sources. + * Add a listener that's going to be invoked whenever the requested style data been loaded. + * The 'type' property defines what kind of style data has been loaded. + * + * This event may be useful when application needs to modify style layers or sources and add or remove sources + * before style is fully loaded. */ - override fun addOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) { - nativeObserver.addOnStyleFullyLoadedListener(onStyleFullyLoadedListener) + override fun addOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) { + nativeObserver.addOnStyleDataLoadedListener(onStyleDataLoadedListener) } /** - * Remove the style fully loaded listener. + * Remove the style data loaded listener */ - override fun removeOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) { - nativeObserver.removeOnStyleFullyLoadedListener(onStyleFullyLoadedListener) + override fun removeOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) { + nativeObserver.removeOnStyleDataLoadedListener(onStyleDataLoadedListener) } /** diff --git a/sdk/src/main/java/com/mapbox/maps/NativeObserver.kt b/sdk/src/main/java/com/mapbox/maps/NativeObserver.kt index c3e217ae08..180da7071b 100644 --- a/sdk/src/main/java/com/mapbox/maps/NativeObserver.kt +++ b/sdk/src/main/java/com/mapbox/maps/NativeObserver.kt @@ -14,19 +14,20 @@ internal class NativeObserver( val onMapIdleListeners = CopyOnWriteArrayList() val onMapLoadErrorListeners = CopyOnWriteArrayList() - val onMapLoadingFinishedListeners = CopyOnWriteArrayList() + val onMapLoadedListeners = CopyOnWriteArrayList() val onRenderFrameFinishedListeners = CopyOnWriteArrayList() val onRenderFrameStartedListeners = CopyOnWriteArrayList() val onSourceAddedListeners = CopyOnWriteArrayList() - val onSourceChangeListeners = CopyOnWriteArrayList() val onSourceRemovedListeners = CopyOnWriteArrayList() - val onStyleFullyLoadedListeners = CopyOnWriteArrayList() + val onSourceDataLoadedListeners = CopyOnWriteArrayList() + + val onStyleDataLoadedListeners = CopyOnWriteArrayList() + val onStyleLoadedListeners = CopyOnWriteArrayList() val onStyleImageMissingListeners = CopyOnWriteArrayList() val onStyleImageUnusedListeners = CopyOnWriteArrayList() - val onStyleLoadingFinishedListeners = CopyOnWriteArrayList() val awaitingStyleGetters = mutableListOf() @@ -44,13 +45,18 @@ internal class NativeObserver( MapEvents.MAP_LOADING_ERROR -> if (onMapLoadErrorListeners.isNotEmpty()) { val loadingError = event.getMapLoadingErrorEventData() onMapLoadErrorListeners.forEach { - it.onMapLoadError(loadingError.error, loadingError.description) + it.onMapLoadError(loadingError.type, loadingError.message) } } - MapEvents.MAP_LOADING_FINISHED -> onMapLoadingFinishedListeners.forEach { it.onMapLoadingFinished() } + MapEvents.MAP_LOADED -> onMapLoadedListeners.forEach { it.onMapLoaded() } // Style events - MapEvents.STYLE_LOADING_FINISHED -> onStyleLoadingFinishedListeners.forEach { it.onStyleLoadingFinished() } - MapEvents.STYLE_FULLY_LOADED -> onStyleFullyLoadedListeners.forEach { it.onStyleFullyLoaded() } + MapEvents.STYLE_DATA_LOADED -> if (onStyleDataLoadedListeners.isNotEmpty()) { + val eventData = event.getStyleDataLoadedEventData() + onStyleDataLoadedListeners.forEach { + it.onStyleDataLoaded(eventData.styleDataType) + } + } + MapEvents.STYLE_LOADED -> onStyleLoadedListeners.forEach { it.onStyleLoaded() } MapEvents.STYLE_IMAGE_MISSING -> if (onStyleImageMissingListeners.isNotEmpty()) { val eventData = event.getStyleImageMissingEventData() onStyleImageMissingListeners.forEach { @@ -82,10 +88,10 @@ internal class NativeObserver( it.onSourceAdded(eventData.id) } } - MapEvents.SOURCE_CHANGED -> if (onSourceChangeListeners.isNotEmpty()) { - val eventData = event.getSourceChangedEventData() - onSourceChangeListeners.forEach { - it.onSourceChanged(eventData.id) + MapEvents.SOURCE_DATA_LOADED -> if (onSourceDataLoadedListeners.isNotEmpty()) { + val eventData = event.getSourceDataLoadedEventData() + onSourceDataLoadedListeners.forEach { + it.onSourceDataLoaded(eventData.id, eventData.type, eventData.loaded, eventData.tileID) } } MapEvents.SOURCE_REMOVED -> if (onSourceRemovedListeners.isNotEmpty()) { @@ -166,17 +172,17 @@ internal class NativeObserver( } } - fun addOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) { - if (onMapLoadingFinishedListeners.isEmpty()) { - subscribeNewEvent(MapEvents.MAP_LOADING_FINISHED) + fun addOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) { + if (onMapLoadedListeners.isEmpty()) { + subscribeNewEvent(MapEvents.MAP_LOADED) } - onMapLoadingFinishedListeners.add(onMapLoadingFinishedListener) + onMapLoadedListeners.add(onMapLoadedListener) } - fun removeOnMapLoadingFinishedListener(onMapLoadingFinishedListener: OnMapLoadingFinishedListener) { - onMapLoadingFinishedListeners.remove(onMapLoadingFinishedListener) - if (onMapLoadingFinishedListeners.isEmpty()) { - unsubscribeUnusedEvent(MapEvents.MAP_LOADING_FINISHED) + fun removeOnMapLoadedListener(onMapLoadedListener: OnMapLoadedListener) { + onMapLoadedListeners.remove(onMapLoadedListener) + if (onMapLoadedListeners.isEmpty()) { + unsubscribeUnusedEvent(MapEvents.MAP_LOADED) } } @@ -224,17 +230,17 @@ internal class NativeObserver( } } - fun addOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) { - if (onSourceChangeListeners.isEmpty()) { - subscribeNewEvent(MapEvents.SOURCE_CHANGED) + fun addOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) { + if (onSourceDataLoadedListeners.isEmpty()) { + subscribeNewEvent(MapEvents.SOURCE_DATA_LOADED) } - onSourceChangeListeners.add(onSourceChangeListener) + onSourceDataLoadedListeners.add(onSourceDataLoadedListener) } - fun removeOnSourceChangeListener(onSourceChangeListener: OnSourceChangeListener) { - onSourceChangeListeners.remove(onSourceChangeListener) - if (onSourceChangeListeners.isEmpty()) { - unsubscribeUnusedEvent(MapEvents.SOURCE_CHANGED) + fun removeOnSourceDataLoadedListener(onSourceDataLoadedListener: OnSourceDataLoadedListener) { + onSourceDataLoadedListeners.remove(onSourceDataLoadedListener) + if (onSourceDataLoadedListeners.isEmpty()) { + unsubscribeUnusedEvent(MapEvents.SOURCE_DATA_LOADED) } } @@ -253,17 +259,31 @@ internal class NativeObserver( } // Style events - fun addOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) { - if (onStyleFullyLoadedListeners.isEmpty()) { - subscribeNewEvent(MapEvents.STYLE_FULLY_LOADED) + fun addOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) { + if (onStyleLoadedListeners.isEmpty()) { + subscribeNewEvent(MapEvents.STYLE_LOADED) + } + onStyleLoadedListeners.add(onStyleLoadedListener) + } + + fun removeOnStyleLoadedListener(onStyleLoadedListener: OnStyleLoadedListener) { + onStyleLoadedListeners.remove(onStyleLoadedListener) + if (onStyleLoadedListeners.isEmpty()) { + unsubscribeUnusedEvent(MapEvents.STYLE_LOADED) + } + } + + fun addOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) { + if (onStyleLoadedListeners.isEmpty()) { + subscribeNewEvent(MapEvents.STYLE_DATA_LOADED) } - onStyleFullyLoadedListeners.add(onStyleFullyLoadedListener) + onStyleDataLoadedListeners.add(onStyleDataLoadedListener) } - fun removeOnStyleFullyLoadedListener(onStyleFullyLoadedListener: OnStyleFullyLoadedListener) { - onStyleFullyLoadedListeners.remove(onStyleFullyLoadedListener) - if (onStyleFullyLoadedListeners.isEmpty()) { - unsubscribeUnusedEvent(MapEvents.STYLE_FULLY_LOADED) + fun removeOnStyleDataLoadedListener(onStyleDataLoadedListener: OnStyleDataLoadedListener) { + onStyleDataLoadedListeners.remove(onStyleDataLoadedListener) + if (onStyleLoadedListeners.isEmpty()) { + unsubscribeUnusedEvent(MapEvents.STYLE_DATA_LOADED) } } @@ -295,38 +315,24 @@ internal class NativeObserver( } } - fun addOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) { - if (onStyleLoadingFinishedListeners.isEmpty()) { - subscribeNewEvent(MapEvents.STYLE_LOADING_FINISHED) - } - onStyleLoadingFinishedListeners.add(onStyleLoadingFinishedListener) - } - - fun removeOnStyleLoadingFinishedListener(onStyleLoadingFinishedListener: OnStyleLoadingFinishedListener) { - onStyleLoadingFinishedListeners.remove(onStyleLoadingFinishedListener) - if (onStyleLoadingFinishedListeners.isEmpty()) { - unsubscribeUnusedEvent(MapEvents.STYLE_LOADING_FINISHED) - } - } - fun clearListeners() { onCameraChangeListeners.clear() onMapIdleListeners.clear() onMapLoadErrorListeners.clear() - onMapLoadingFinishedListeners.clear() + onMapLoadedListeners.clear() onRenderFrameFinishedListeners.clear() onRenderFrameStartedListeners.clear() onSourceAddedListeners.clear() - onSourceChangeListeners.clear() + onSourceDataLoadedListeners.clear() onSourceRemovedListeners.clear() - onStyleFullyLoadedListeners.clear() + onStyleLoadedListeners.clear() + onStyleDataLoadedListeners.clear() onStyleImageMissingListeners.clear() onStyleImageUnusedListeners.clear() - onStyleLoadingFinishedListeners.clear() awaitingStyleGetters.clear() } @@ -339,17 +345,18 @@ internal class NativeObserver( // Map events MapEvents.MAP_IDLE, MapEvents.MAP_LOADING_ERROR, - MapEvents.MAP_LOADING_FINISHED, + MapEvents.MAP_LOADED, // Style events - MapEvents.STYLE_LOADING_FINISHED, - MapEvents.STYLE_FULLY_LOADED, + MapEvents.STYLE_DATA_LOADED, + MapEvents.STYLE_LOADED, MapEvents.STYLE_IMAGE_MISSING, MapEvents.STYLE_IMAGE_REMOVE_UNUSED, // Render frame events MapEvents.RENDER_FRAME_STARTED, MapEvents.RENDER_FRAME_FINISHED, + // Source events MapEvents.SOURCE_ADDED, - MapEvents.SOURCE_CHANGED, + MapEvents.SOURCE_DATA_LOADED, MapEvents.SOURCE_REMOVED ) } diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/ObservableExtension.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/ObservableExtension.kt index 926c17cb14..e5388d35bf 100644 --- a/sdk/src/main/java/com/mapbox/maps/extension/observable/ObservableExtension.kt +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/ObservableExtension.kt @@ -6,9 +6,7 @@ import com.mapbox.maps.Event import com.mapbox.maps.MapEvents import com.mapbox.maps.ObservableInterface import com.mapbox.maps.Observer -import com.mapbox.maps.extension.observable.map.IDStringEventData -import com.mapbox.maps.extension.observable.map.MapLoadingErrorEventData -import com.mapbox.maps.extension.observable.map.RenderFrameFinishedEventData +import com.mapbox.maps.extension.observable.model.* import com.mapbox.maps.extension.observable.resourcerequest.ResourceEventData /** @@ -94,7 +92,7 @@ fun ObservableInterface.unsubscribeMapLoadingError(observer: Observer) = unsubscribe(observer, listOf(MapEvents.MAP_LOADING_ERROR)) /** - * Subscribes an Observer for of event type "map-loading-finished". + * Subscribes an Observer for of event type "map-loaded". * * Observable will hold a strong reference to an Observer instance, therefore, * in order to stop receiving notifications, caller must call unsubscribe with an @@ -102,20 +100,20 @@ fun ObservableInterface.unsubscribeMapLoadingError(observer: Observer) = * * @param observer an Observer */ -fun ObservableInterface.subscribeMapLoadingFinished(observer: Observer) = - subscribe(observer, listOf(MapEvents.MAP_LOADING_FINISHED)) +fun ObservableInterface.subscribeMapLoaded(observer: Observer) = + subscribe(observer, listOf(MapEvents.MAP_LOADED)) /** - * Unsubscribe an Observer for event types "map-loading-finished". + * Unsubscribe an Observer for event types "map-loaded". * * @param observer an Observer */ -fun ObservableInterface.unsubscribeMapLoadingFinished(observer: Observer) = - unsubscribe(observer, listOf(MapEvents.MAP_LOADING_FINISHED)) +fun ObservableInterface.unsubscribeMapLoaded(observer: Observer) = + unsubscribe(observer, listOf(MapEvents.MAP_LOADED)) // Style events /** - * Subscribes an Observer for of event type "style-loading-finished". + * Subscribes an Observer for of event type "style-data-loaded". * * Observable will hold a strong reference to an Observer instance, therefore, * in order to stop receiving notifications, caller must call unsubscribe with an @@ -123,19 +121,19 @@ fun ObservableInterface.unsubscribeMapLoadingFinished(observer: Observer) = * * @param observer an Observer */ -fun ObservableInterface.subscribeStyleLoadingFinished(observer: Observer) = - subscribe(observer, listOf(MapEvents.STYLE_LOADING_FINISHED)) +fun ObservableInterface.subscribeStyleDataLoaded(observer: Observer) = + subscribe(observer, listOf(MapEvents.STYLE_DATA_LOADED)) /** - * Unsubscribe an Observer for event types "style-loading-finished". + * Unsubscribe an Observer for event types "style-data-loaded". * * @param observer an Observer */ -fun ObservableInterface.unsubscribeStyleLoadingFinished(observer: Observer) = - unsubscribe(observer, listOf(MapEvents.STYLE_LOADING_FINISHED)) +fun ObservableInterface.unsubscribeStyleDataFinished(observer: Observer) = + unsubscribe(observer, listOf(MapEvents.STYLE_DATA_LOADED)) /** - * Subscribes an Observer for of event type "style-fully-loaded". + * Subscribes an Observer for of event type "style-loaded". * * Observable will hold a strong reference to an Observer instance, therefore, * in order to stop receiving notifications, caller must call unsubscribe with an @@ -143,16 +141,16 @@ fun ObservableInterface.unsubscribeStyleLoadingFinished(observer: Observer) = * * @param observer an Observer */ -fun ObservableInterface.subscribeStyleFullyLoaded(observer: Observer) = - subscribe(observer, listOf(MapEvents.STYLE_FULLY_LOADED)) +fun ObservableInterface.subscribeStyleLoaded(observer: Observer) = + subscribe(observer, listOf(MapEvents.STYLE_LOADED)) /** - * Unsubscribe an Observer for event types "style-fully-loaded". + * Unsubscribe an Observer for event types "style-loaded". * * @param observer an Observer */ -fun ObservableInterface.unsubscribeStyleFullyLoaded(observer: Observer) = - unsubscribe(observer, listOf(MapEvents.STYLE_FULLY_LOADED)) +fun ObservableInterface.unsubscribeStyleLoaded(observer: Observer) = + unsubscribe(observer, listOf(MapEvents.STYLE_LOADED)) /** * Subscribes an Observer for of event type "style-image-missing". @@ -256,7 +254,7 @@ fun ObservableInterface.unsubscribeSourceAdded(observer: Observer) = unsubscribe(observer, listOf(MapEvents.SOURCE_ADDED)) /** - * Subscribes an Observer for of event type "source-changed". + * Subscribes an Observer for of event type "source-data-loaded". * * Observable will hold a strong reference to an Observer instance, therefore, * in order to stop receiving notifications, caller must call unsubscribe with an @@ -264,16 +262,16 @@ fun ObservableInterface.unsubscribeSourceAdded(observer: Observer) = * * @param observer an Observer */ -fun ObservableInterface.subscribeSourceChanged(observer: Observer) = - subscribe(observer, listOf(MapEvents.SOURCE_CHANGED)) +fun ObservableInterface.subscribeSourceDataLoaded(observer: Observer) = + subscribe(observer, listOf(MapEvents.SOURCE_DATA_LOADED)) /** - * Unsubscribe an Observer for event types "source-changed". + * Unsubscribe an Observer for event types "source-data-loaded". * * @param observer an Observer */ -fun ObservableInterface.unsubscribeSourceChanged(observer: Observer) = - unsubscribe(observer, listOf(MapEvents.SOURCE_CHANGED)) +fun ObservableInterface.unsubscribeSourceDataLoaded(observer: Observer) = + unsubscribe(observer, listOf(MapEvents.SOURCE_DATA_LOADED)) /** * Subscribes an Observer for of event type "source-removed". @@ -314,6 +312,24 @@ fun Event.getMapLoadingErrorEventData(): MapLoadingErrorEventData { return Gson().fromJson(json, MapLoadingErrorEventData::class.java) } +/** + * Get the parsed event data for style data loaded event. + * @return a parsed StyleDataLoadedEventData object. + */ +fun Event.getStyleDataLoadedEventData(): StyleDataLoadedEventData { + val json = ValueConverter.toJson(data) + return Gson().fromJson(json, StyleDataLoadedEventData::class.java) +} + +/** + * Get the parsed event data for source data loaded event. + * @return a parsed SourceDataLoadedEventData object. + */ +fun Event.getSourceDataLoadedEventData(): SourceDataLoadedEventData { + val json = ValueConverter.toJson(data) + return Gson().fromJson(json, SourceDataLoadedEventData::class.java) +} + internal fun Event.getIDStringEventData(): IDStringEventData { val json = ValueConverter.toJson(data) return Gson().fromJson(json, IDStringEventData::class.java) @@ -337,12 +353,6 @@ fun Event.getStyleImageUnusedEventData(): IDStringEventData = getIDStringEventDa */ fun Event.getSourceAddedEventData(): IDStringEventData = getIDStringEventData() -/** - * Get the parsed event data for source changed event. - * @return a parsed IDStringEventData. - */ -fun Event.getSourceChangedEventData(): IDStringEventData = getIDStringEventData() - /** * Get the parsed event data for source removed event. * @return a parsed IDStringEventData. diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/MapLoadingErrorEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/map/MapLoadingErrorEventData.kt deleted file mode 100644 index 0e0fe271ac..0000000000 --- a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/MapLoadingErrorEventData.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.mapbox.maps.extension.observable.map - -import com.google.gson.annotations.SerializedName -import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadError - -/** - *The data class for Map Loading Error event data in Observer - */ -data class MapLoadingErrorEventData( - /** - * Describes the category of the error that has occurred while loading the Map. - */ - @SerializedName("error") val error: MapLoadError, - /** - * The description of the error. - */ - @SerializedName("description") val description: String -) \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/IDStringEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/IDStringEventData.kt similarity index 82% rename from sdk/src/main/java/com/mapbox/maps/extension/observable/map/IDStringEventData.kt rename to sdk/src/main/java/com/mapbox/maps/extension/observable/model/IDStringEventData.kt index 2195d339de..f1176d5fcf 100644 --- a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/IDStringEventData.kt +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/IDStringEventData.kt @@ -1,4 +1,4 @@ -package com.mapbox.maps.extension.observable.map +package com.mapbox.maps.extension.observable.model import com.google.gson.annotations.SerializedName diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/model/MapLoadingErrorEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/MapLoadingErrorEventData.kt new file mode 100644 index 0000000000..1cba9674cc --- /dev/null +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/MapLoadingErrorEventData.kt @@ -0,0 +1,18 @@ +package com.mapbox.maps.extension.observable.model + +import com.google.gson.annotations.SerializedName +import com.mapbox.maps.plugin.delegates.listeners.eventdata.MapLoadErrorType + +/** + *The data class for Map Loading Error event data in Observer + */ +data class MapLoadingErrorEventData( + /** + * Defines what resource could not be loaded. + */ + @SerializedName("type") val type: MapLoadErrorType, + /** + * The descriptive error message of the error. + */ + @SerializedName("message") val message: String +) \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/RenderFrameFinishedEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/RenderFrameFinishedEventData.kt similarity index 93% rename from sdk/src/main/java/com/mapbox/maps/extension/observable/map/RenderFrameFinishedEventData.kt rename to sdk/src/main/java/com/mapbox/maps/extension/observable/model/RenderFrameFinishedEventData.kt index 134e8fa516..29b89f44c2 100644 --- a/sdk/src/main/java/com/mapbox/maps/extension/observable/map/RenderFrameFinishedEventData.kt +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/RenderFrameFinishedEventData.kt @@ -1,4 +1,4 @@ -package com.mapbox.maps.extension.observable.map +package com.mapbox.maps.extension.observable.model import com.google.gson.annotations.SerializedName import com.mapbox.maps.plugin.delegates.listeners.eventdata.RenderMode diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/model/SourceDataLoadedEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/SourceDataLoadedEventData.kt new file mode 100644 index 0000000000..dbbca28018 --- /dev/null +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/SourceDataLoadedEventData.kt @@ -0,0 +1,30 @@ +package com.mapbox.maps.extension.observable.model + +import com.google.gson.annotations.SerializedName +import com.mapbox.maps.plugin.delegates.listeners.eventdata.SourceDataType +import com.mapbox.maps.plugin.delegates.listeners.eventdata.TileID + +/** + *The data class for style data loaded event data in Observer + */ +data class SourceDataLoadedEventData( + /** + * The 'id' property defines the source id. + */ + @SerializedName("id") val id: String, + + /** + * The 'type' property defines if source's metadata (e.g., TileJSON) or tile has been loaded. + */ + @SerializedName("type") val type: SourceDataType, + + /** + * The 'loaded' property will be set to 'true' if all source's data required for Map's visible viewport, are loaded. + */ + @SerializedName("loaded") val loaded: Boolean?, + + /** + * The 'tile-id' property defines the tile id if the 'type' field equals 'tile'. + */ + @SerializedName("tile-id") val tileID: TileID? +) \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/extension/observable/model/StyleDataLoadedEventData.kt b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/StyleDataLoadedEventData.kt new file mode 100644 index 0000000000..42d00824c1 --- /dev/null +++ b/sdk/src/main/java/com/mapbox/maps/extension/observable/model/StyleDataLoadedEventData.kt @@ -0,0 +1,14 @@ +package com.mapbox.maps.extension.observable.model + +import com.google.gson.annotations.SerializedName +import com.mapbox.maps.plugin.delegates.listeners.eventdata.StyleDataType + +/** + *The data class for style data loaded event data in Observer + */ +data class StyleDataLoadedEventData( + /** + * The 'type' property defines what kind of style data has been loaded. + */ + @SerializedName("type") val styleDataType: StyleDataType +) \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/renderer/MapboxSurfaceRenderer.kt b/sdk/src/main/java/com/mapbox/maps/renderer/MapboxSurfaceRenderer.kt index 50da7e799e..8f5beefcf7 100644 --- a/sdk/src/main/java/com/mapbox/maps/renderer/MapboxSurfaceRenderer.kt +++ b/sdk/src/main/java/com/mapbox/maps/renderer/MapboxSurfaceRenderer.kt @@ -2,6 +2,7 @@ package com.mapbox.maps.renderer import android.view.Surface import androidx.annotation.VisibleForTesting +import com.mapbox.maps.Task internal open class MapboxSurfaceRenderer : MapboxRenderer { @@ -46,4 +47,10 @@ internal open class MapboxSurfaceRenderer : MapboxRenderer { super.onDestroy() renderThread.destroy() } + + override fun scheduleTask(task: Task) { + renderThread.queueEvent { + task.run() + } + } } \ No newline at end of file diff --git a/sdk/src/main/java/com/mapbox/maps/renderer/MapboxTextureViewRenderer.kt b/sdk/src/main/java/com/mapbox/maps/renderer/MapboxTextureViewRenderer.kt index 041803a175..01c3aefef8 100644 --- a/sdk/src/main/java/com/mapbox/maps/renderer/MapboxTextureViewRenderer.kt +++ b/sdk/src/main/java/com/mapbox/maps/renderer/MapboxTextureViewRenderer.kt @@ -4,6 +4,7 @@ import android.graphics.SurfaceTexture import android.view.Surface import android.view.TextureView import androidx.annotation.VisibleForTesting +import com.mapbox.maps.Task import java.lang.ref.WeakReference internal class MapboxTextureViewRenderer : MapboxRenderer, TextureView.SurfaceTextureListener { @@ -54,4 +55,10 @@ internal class MapboxTextureViewRenderer : MapboxRenderer, TextureView.SurfaceTe textureView.get()?.surfaceTextureListener = null renderThread.destroy() } + + override fun scheduleTask(task: Task) { + renderThread.queueEvent { + task.run() + } + } } \ No newline at end of file diff --git a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt index fff3060097..c7119b438f 100644 --- a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt @@ -217,14 +217,14 @@ class MapboxMapTest { @Test fun addOnMapLoadingFinishedListener() { - val listener = mockk() + val listener = mockk() mapboxMap.addOnMapLoadingFinishedListener(listener) verify { mapObserver.addOnMapLoadingFinishedListener(listener) } } @Test fun removeOnMapLoadingFinishedListener() { - val listener = mockk() + val listener = mockk() mapboxMap.removeOnMapLoadingFinishedListener(listener) verify { mapObserver.removeOnMapLoadingFinishedListener(listener) } } @@ -304,14 +304,14 @@ class MapboxMapTest { // Style events @Test fun addOnStyleFullyLoadedListener() { - val listener = mockk() + val listener = mockk() mapboxMap.addOnStyleFullyLoadedListener(listener) verify { mapObserver.addOnStyleFullyLoadedListener(listener) } } @Test fun removeOnStyleFullyLoadedListener() { - val listener = mockk() + val listener = mockk() mapboxMap.removeOnStyleFullyLoadedListener(listener) verify { mapObserver.removeOnStyleFullyLoadedListener(listener) } } diff --git a/sdk/src/test/java/com/mapbox/maps/NativeMapObserverTest.kt b/sdk/src/test/java/com/mapbox/maps/NativeObserverTest.kt similarity index 79% rename from sdk/src/test/java/com/mapbox/maps/NativeMapObserverTest.kt rename to sdk/src/test/java/com/mapbox/maps/NativeObserverTest.kt index c0b4d17587..0ff01c3a41 100644 --- a/sdk/src/test/java/com/mapbox/maps/NativeMapObserverTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/NativeObserverTest.kt @@ -13,11 +13,10 @@ import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import java.lang.ref.WeakReference -import java.util.* @RunWith(RobolectricTestRunner::class) @Config(shadows = [ShadowValueConverter::class]) -class NativeMapObserverTest { +class NativeObserverTest { private val mainHandler = mockk() private val observableInterface = mockk(relaxed = true) @@ -31,7 +30,7 @@ class NativeMapObserverTest { } private fun notifyEvents(type: String, value: Value = Value("")) { - nativeObserver.notify(Event(type, Date(), Date(), value)) + nativeObserver.notify(Event(type, value)) } @Test @@ -102,25 +101,25 @@ class NativeMapObserverTest { } @Test - fun addOnMapLoadingFinishedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.addOnMapLoadingFinishedListener(listener) + fun addOnMapLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.addOnMapLoadedListener(listener) runnableSlot.captured.run() - verify { observableInterface.subscribe(any(), listOf(MapEvents.MAP_LOADING_FINISHED)) } - assertTrue(nativeObserver.observedEvents.contains(MapEvents.MAP_LOADING_FINISHED)) - notifyEvents(MapEvents.MAP_LOADING_FINISHED) - verify { listener.onMapLoadingFinished() } + verify { observableInterface.subscribe(any(), listOf(MapEvents.MAP_LOADED)) } + assertTrue(nativeObserver.observedEvents.contains(MapEvents.MAP_LOADED)) + notifyEvents(MapEvents.MAP_LOADED) + verify { listener.onMapLoaded() } } @Test - fun removeOnMapLoadingFinishedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.removeOnMapLoadingFinishedListener(listener) + fun removeOnMapLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.removeOnMapLoadedListener(listener) runnableSlot.captured.run() - assertFalse(nativeObserver.observedEvents.contains(MapEvents.MAP_LOADING_FINISHED)) - verify { observableInterface.unsubscribe(any(), listOf(MapEvents.MAP_LOADING_FINISHED)) } - notifyEvents(MapEvents.MAP_LOADING_FINISHED) - verify(exactly = 0) { listener.onMapLoadingFinished() } + assertFalse(nativeObserver.observedEvents.contains(MapEvents.MAP_LOADED)) + verify { observableInterface.unsubscribe(any(), listOf(MapEvents.MAP_LOADED)) } + notifyEvents(MapEvents.MAP_LOADED) + verify(exactly = 0) { listener.onMapLoaded() } } // Render frame events @@ -192,25 +191,25 @@ class NativeMapObserverTest { } @Test - fun addOnSourceChangeListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.addOnSourceChangeListener(listener) + fun addOnSourceDataLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.addOnSourceDataLoadedListener(listener) runnableSlot.captured.run() - verify { observableInterface.subscribe(any(), listOf(MapEvents.SOURCE_CHANGED)) } - assertTrue(nativeObserver.observedEvents.contains(MapEvents.SOURCE_CHANGED)) - notifyEvents(MapEvents.SOURCE_CHANGED) - verify { listener.onSourceChanged(any()) } + verify { observableInterface.subscribe(any(), listOf(MapEvents.SOURCE_DATA_LOADED)) } + assertTrue(nativeObserver.observedEvents.contains(MapEvents.SOURCE_DATA_LOADED)) + notifyEvents(MapEvents.SOURCE_DATA_LOADED) + verify { listener.onSourceDataLoaded(any(), any(), any(), any()) } } @Test - fun removeOnSourceChangeListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.removeOnSourceChangeListener(listener) + fun removeOnSourceDataLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.removeOnSourceDataLoadedListener(listener) runnableSlot.captured.run() - assertFalse(nativeObserver.observedEvents.contains(MapEvents.SOURCE_CHANGED)) - verify { observableInterface.unsubscribe(any(), listOf(MapEvents.SOURCE_CHANGED)) } - notifyEvents(MapEvents.SOURCE_CHANGED) - verify(exactly = 0) { listener.onSourceChanged(any()) } + assertFalse(nativeObserver.observedEvents.contains(MapEvents.SOURCE_DATA_LOADED)) + verify { observableInterface.unsubscribe(any(), listOf(MapEvents.SOURCE_DATA_LOADED)) } + notifyEvents(MapEvents.SOURCE_DATA_LOADED) + verify(exactly = 0) { listener.onSourceDataLoaded(any(), any(), any(), any()) } } @Test @@ -237,25 +236,25 @@ class NativeMapObserverTest { // Style events @Test - fun addOnStyleFullyLoadedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.addOnStyleFullyLoadedListener(listener) + fun addOnStyleLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.addOnStyleLoadedListener(listener) runnableSlot.captured.run() - verify { observableInterface.subscribe(any(), listOf(MapEvents.STYLE_FULLY_LOADED)) } - assertTrue(nativeObserver.observedEvents.contains(MapEvents.STYLE_FULLY_LOADED)) - notifyEvents(MapEvents.STYLE_FULLY_LOADED) - verify { listener.onStyleFullyLoaded() } + verify { observableInterface.subscribe(any(), listOf(MapEvents.STYLE_LOADED)) } + assertTrue(nativeObserver.observedEvents.contains(MapEvents.STYLE_LOADED)) + notifyEvents(MapEvents.STYLE_LOADED) + verify { listener.onStyleLoaded() } } @Test - fun removeOnStyleFullyLoadedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.removeOnStyleFullyLoadedListener(listener) + fun removeOnStyleLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.removeOnStyleLoadedListener(listener) runnableSlot.captured.run() - assertFalse(nativeObserver.observedEvents.contains(MapEvents.STYLE_FULLY_LOADED)) - verify { observableInterface.unsubscribe(any(), listOf(MapEvents.STYLE_FULLY_LOADED)) } - notifyEvents(MapEvents.STYLE_FULLY_LOADED) - verify(exactly = 0) { listener.onStyleFullyLoaded() } + assertFalse(nativeObserver.observedEvents.contains(MapEvents.STYLE_LOADED)) + verify { observableInterface.unsubscribe(any(), listOf(MapEvents.STYLE_LOADED)) } + notifyEvents(MapEvents.STYLE_LOADED) + verify(exactly = 0) { listener.onStyleLoaded() } } @Test @@ -303,25 +302,25 @@ class NativeMapObserverTest { } @Test - fun addOnStyleLoadingFinishedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.addOnStyleLoadingFinishedListener(listener) + fun addOnStyleDataLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.addOnStyleDataLoadedListener(listener) runnableSlot.captured.run() - verify { observableInterface.subscribe(any(), listOf(MapEvents.STYLE_LOADING_FINISHED)) } - assertTrue(nativeObserver.observedEvents.contains(MapEvents.STYLE_LOADING_FINISHED)) - notifyEvents(MapEvents.STYLE_LOADING_FINISHED) - verify { listener.onStyleLoadingFinished() } + verify { observableInterface.subscribe(any(), listOf(MapEvents.STYLE_DATA_LOADED)) } + assertTrue(nativeObserver.observedEvents.contains(MapEvents.STYLE_DATA_LOADED)) + notifyEvents(MapEvents.STYLE_DATA_LOADED) + verify { listener.onStyleDataLoaded(any()) } } @Test - fun removeOnStyleLoadingFinishedListener() { - val listener = mockk(relaxUnitFun = true) - nativeObserver.removeOnStyleLoadingFinishedListener(listener) + fun removeOnStyleDataLoadedListener() { + val listener = mockk(relaxUnitFun = true) + nativeObserver.removeOnStyleDataLoadedListener(listener) runnableSlot.captured.run() - assertFalse(nativeObserver.observedEvents.contains(MapEvents.STYLE_LOADING_FINISHED)) - verify { observableInterface.unsubscribe(any(), listOf(MapEvents.STYLE_LOADING_FINISHED)) } - notifyEvents(MapEvents.STYLE_LOADING_FINISHED) - verify(exactly = 0) { listener.onStyleLoadingFinished() } + assertFalse(nativeObserver.observedEvents.contains(MapEvents.STYLE_DATA_LOADED)) + verify { observableInterface.unsubscribe(any(), listOf(MapEvents.STYLE_DATA_LOADED)) } + notifyEvents(MapEvents.STYLE_DATA_LOADED) + verify(exactly = 0) { listener.onStyleDataLoaded(any()) } } @Test @@ -330,19 +329,19 @@ class NativeMapObserverTest { nativeObserver.onMapIdleListeners.add(mockk(relaxed = true)) nativeObserver.onMapLoadErrorListeners.add(mockk(relaxed = true)) - nativeObserver.onMapLoadingFinishedListeners.add(mockk(relaxed = true)) + nativeObserver.onMapLoadedListeners.add(mockk(relaxed = true)) nativeObserver.onRenderFrameFinishedListeners.add(mockk(relaxed = true)) nativeObserver.onRenderFrameStartedListeners.add(mockk(relaxed = true)) nativeObserver.onSourceAddedListeners.add(mockk(relaxed = true)) - nativeObserver.onSourceChangeListeners.add(mockk(relaxed = true)) + nativeObserver.onSourceDataLoadedListeners.add(mockk(relaxed = true)) nativeObserver.onSourceRemovedListeners.add(mockk(relaxed = true)) - nativeObserver.onStyleFullyLoadedListeners.add(mockk(relaxed = true)) + nativeObserver.onStyleLoadedListeners.add(mockk(relaxed = true)) nativeObserver.onStyleImageMissingListeners.add(mockk(relaxed = true)) nativeObserver.onStyleImageUnusedListeners.add(mockk(relaxed = true)) - nativeObserver.onStyleLoadingFinishedListeners.add(mockk(relaxed = true)) + nativeObserver.onStyleDataLoadedListeners.add(mockk(relaxed = true)) nativeObserver.awaitingStyleGetters.add(mockk(relaxed = true)) @@ -352,19 +351,19 @@ class NativeMapObserverTest { assertTrue(nativeObserver.onMapIdleListeners.isEmpty()) assertTrue(nativeObserver.onMapLoadErrorListeners.isEmpty()) - assertTrue(nativeObserver.onMapLoadingFinishedListeners.isEmpty()) + assertTrue(nativeObserver.onMapLoadedListeners.isEmpty()) assertTrue(nativeObserver.onRenderFrameFinishedListeners.isEmpty()) assertTrue(nativeObserver.onRenderFrameStartedListeners.isEmpty()) assertTrue(nativeObserver.onSourceAddedListeners.isEmpty()) - assertTrue(nativeObserver.onSourceChangeListeners.isEmpty()) + assertTrue(nativeObserver.onSourceDataLoadedListeners.isEmpty()) assertTrue(nativeObserver.onSourceRemovedListeners.isEmpty()) - assertTrue(nativeObserver.onStyleFullyLoadedListeners.isEmpty()) + assertTrue(nativeObserver.onStyleLoadedListeners.isEmpty()) assertTrue(nativeObserver.onStyleImageMissingListeners.isEmpty()) assertTrue(nativeObserver.onStyleImageUnusedListeners.isEmpty()) - assertTrue(nativeObserver.onStyleLoadingFinishedListeners.isEmpty()) + assertTrue(nativeObserver.onStyleDataLoadedListeners.isEmpty()) assertTrue(nativeObserver.awaitingStyleGetters.isEmpty()) } From 72345c5fc3629d00149dac177bef9879d58f89c9 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 20:25:28 +0200 Subject: [PATCH 05/12] Update license introduced by new version of Okhttp. --- LICENSE.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 466e592979..1d66daffe3 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -154,15 +154,19 @@ License: [BSD](https://opensource.org/licenses/BSD-2-Clause) =========================================================================== -Mapbox Maps Android uses portions of the OkHttp. +Mapbox Maps Android uses portions of the okhttp. -License: [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) + +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Maps Android uses portions of the Okio. -License: [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +URL: [https://github.com/square/okio/](https://github.com/square/okio/) + +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== From 2d219a301d861c5c453127b6811b83a4dbcdfc39 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 20:43:14 +0200 Subject: [PATCH 06/12] Fix unit tests. --- .../sky/SkyLayerSnapshotterActivity.kt | 2 +- .../DataDrivenMapSnapshotterActivity.kt | 2 +- .../LocalStyleMapSnapshotterActivity.kt | 2 +- .../snapshotter/MapSnapshotterActivity.kt | 2 +- .../main/java/com/mapbox/maps/Snapshotter.kt | 4 +- .../java/com/mapbox/maps/MapboxMapTest.kt | 64 +++++++++---------- .../mapbox/maps/SnapshotterDelegateTest.kt | 13 ++-- .../java/com/mapbox/maps/SnapshotterTest.kt | 15 +++-- .../extension/observable/MapboxMapTest.kt | 2 +- 9 files changed, 54 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt index 6116791328..7388f5c3c1 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/sky/SkyLayerSnapshotterActivity.kt @@ -73,7 +73,7 @@ class SkyLayerSnapshotterActivity : AppCompatActivity() { ) } }) - setCameraOptions( + setCamera( CameraOptions.Builder() .center(Point.fromLngLat(24.81958807097479, 60.56524768721757)) .zoom(16.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/DataDrivenMapSnapshotterActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/DataDrivenMapSnapshotterActivity.kt index 07230b762e..c69f8aceb1 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/DataDrivenMapSnapshotterActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/DataDrivenMapSnapshotterActivity.kt @@ -57,7 +57,7 @@ class DataDrivenMapSnapshotterActivity : AppCompatActivity() { style.addLayer(getHeatmapLayer()) } }) - setCameraOptions( + setCamera( CameraOptions.Builder() .center(Point.fromLngLat(-94.0, 15.0)) .zoom(5.0) diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/LocalStyleMapSnapshotterActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/LocalStyleMapSnapshotterActivity.kt index e0d0d592a0..c5d161a4a7 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/LocalStyleMapSnapshotterActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/LocalStyleMapSnapshotterActivity.kt @@ -29,7 +29,7 @@ class LocalStyleMapSnapshotterActivity : AppCompatActivity() { .build() mapSnapshotter = Snapshotter(this, snapshotterOptions) - mapSnapshotter.setCameraOptions( + mapSnapshotter.setCamera( CameraOptions.Builder().zoom(14.0).center( Point.fromLngLat( 4.895033, 52.374724 diff --git a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/MapSnapshotterActivity.kt b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/MapSnapshotterActivity.kt index a1935d4ade..b8c3050e18 100644 --- a/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/MapSnapshotterActivity.kt +++ b/app/src/main/java/com/mapbox/maps/testapp/examples/snapshotter/MapSnapshotterActivity.kt @@ -35,7 +35,7 @@ class MapSnapshotterActivity : AppCompatActivity(), SnapshotStyleListener { mapSnapshotter = Snapshotter(this, snapshotterOptions).apply { setStyleListener(this@MapSnapshotterActivity) setUri(Style.MAPBOX_STREETS) - setCameraOptions( + setCamera( CameraOptions.Builder().zoom(14.0).center( Point.fromLngLat( 4.895033, 52.374724 diff --git a/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt b/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt index 4548244fbd..0bd84d44ca 100644 --- a/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt +++ b/sdk/src/main/java/com/mapbox/maps/Snapshotter.kt @@ -121,7 +121,7 @@ open class Snapshotter : MapSnapshotterObserver { * * @param cameraOptions the camera options of the snapshot. */ - fun setCameraOptions(cameraOptions: CameraOptions) { + fun setCamera(cameraOptions: CameraOptions) { coreSnapshotter.setCamera(cameraOptions) } @@ -153,7 +153,7 @@ open class Snapshotter : MapSnapshotterObserver { * * @return CoordinateBounds */ - fun coordinatesForCamera(options: CameraOptions): CoordinateBounds { + fun coordinateBoundsForCamera(options: CameraOptions): CoordinateBounds { return coreSnapshotter.coordinateBoundsForCamera(options) } diff --git a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt index c7119b438f..814879c1d8 100644 --- a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt @@ -31,28 +31,28 @@ class MapboxMapTest { @Test fun loadStyleUri() { mapboxMap.loadStyleUri("foo") - verify { mapObserver.addOnStyleLoadingFinishedListener(any()) } + verify { mapObserver.addOnStyleDataLoadedListener(any()) } verify { nativeMap.styleURI = "foo" } } @Test fun loadStyleUriLambda() { mapboxMap.loadStyleUri("foo") {} - verify { mapObserver.addOnStyleLoadingFinishedListener(any()) } + verify { mapObserver.addOnStyleDataLoadedListener(any()) } verify { nativeMap.styleURI = "foo" } } @Test fun loadStyleJSON() { mapboxMap.loadStyleJSON("foo") - verify { mapObserver.addOnStyleLoadingFinishedListener(any()) } + verify { mapObserver.addOnStyleDataLoadedListener(any()) } verify { nativeMap.styleJSON = "foo" } } @Test fun loadStyleJSONLambda() { mapboxMap.loadStyleJSON("foo") {} - verify { mapObserver.addOnStyleLoadingFinishedListener(any()) } + verify { mapObserver.addOnStyleDataLoadedListener(any()) } verify { nativeMap.styleJSON = "foo" } } @@ -216,17 +216,17 @@ class MapboxMapTest { } @Test - fun addOnMapLoadingFinishedListener() { + fun addOnMapLoadedListener() { val listener = mockk() - mapboxMap.addOnMapLoadingFinishedListener(listener) - verify { mapObserver.addOnMapLoadingFinishedListener(listener) } + mapboxMap.addOnMapLoadedListener(listener) + verify { mapObserver.addOnMapLoadedListener(listener) } } @Test - fun removeOnMapLoadingFinishedListener() { + fun removeOnMapLoadedListener() { val listener = mockk() - mapboxMap.removeOnMapLoadingFinishedListener(listener) - verify { mapObserver.removeOnMapLoadingFinishedListener(listener) } + mapboxMap.removeOnMapLoadedListener(listener) + verify { mapObserver.removeOnMapLoadedListener(listener) } } // Render frame events @@ -274,17 +274,17 @@ class MapboxMapTest { } @Test - fun addOnSourceChangeListener() { - val listener = mockk() - mapboxMap.addOnSourceChangeListener(listener) - verify { mapObserver.addOnSourceChangeListener(listener) } + fun addOnSourceDataLoadedListener() { + val listener = mockk() + mapboxMap.addOnSourceDataLoadedListener(listener) + verify { mapObserver.addOnSourceDataLoadedListener(listener) } } @Test - fun removeOnSourceChangeListener() { - val listener = mockk() - mapboxMap.removeOnSourceChangeListener(listener) - verify { mapObserver.removeOnSourceChangeListener(listener) } + fun removeOnSourceDataLoadedListener() { + val listener = mockk() + mapboxMap.removeOnSourceDataLoadedListener(listener) + verify { mapObserver.removeOnSourceDataLoadedListener(listener) } } @Test @@ -303,17 +303,17 @@ class MapboxMapTest { // Style events @Test - fun addOnStyleFullyLoadedListener() { + fun addOnStyleLoadedListener() { val listener = mockk() - mapboxMap.addOnStyleFullyLoadedListener(listener) - verify { mapObserver.addOnStyleFullyLoadedListener(listener) } + mapboxMap.addOnStyleLoadedListener(listener) + verify { mapObserver.addOnStyleLoadedListener(listener) } } @Test - fun removeOnStyleFullyLoadedListener() { + fun removeOnStyleLoadedListener() { val listener = mockk() - mapboxMap.removeOnStyleFullyLoadedListener(listener) - verify { mapObserver.removeOnStyleFullyLoadedListener(listener) } + mapboxMap.removeOnStyleLoadedListener(listener) + verify { mapObserver.removeOnStyleLoadedListener(listener) } } @Test @@ -345,17 +345,17 @@ class MapboxMapTest { } @Test - fun addOnStyleLoadingFinishedListener() { - val listener = mockk() - mapboxMap.addOnStyleLoadingFinishedListener(listener) - verify { mapObserver.addOnStyleLoadingFinishedListener(listener) } + fun addOnStyleDataLoadedListener() { + val listener = mockk() + mapboxMap.addOnStyleDataLoadedListener(listener) + verify { mapObserver.addOnStyleDataLoadedListener(listener) } } @Test - fun removeOnStyleLoadingFinishedListener() { - val listener = mockk() - mapboxMap.removeOnStyleLoadingFinishedListener(listener) - verify { mapObserver.removeOnStyleLoadingFinishedListener(listener) } + fun removeOnStyleDataLoadedListener() { + val listener = mockk() + mapboxMap.removeOnStyleDataLoadedListener(listener) + verify { mapObserver.removeOnStyleDataLoadedListener(listener) } } @Test diff --git a/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt b/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt index 9910a9a8ec..5bd600afb1 100644 --- a/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt @@ -69,14 +69,14 @@ class SnapshotterDelegateTest { @Test fun setCameraOptions() { val options: CameraOptions = mockk() - snapshotter.setCameraOptions(options) - verify { coreSnapshotter.cameraOptions = options } + snapshotter.setCamera(options) + verify { coreSnapshotter.setCamera(options)} } @Test fun getCameraOptions() { snapshotter.getCameraOptions() - verify { coreSnapshotter.cameraOptions } + verify { coreSnapshotter.getCameraOptions(any()) } } @Test @@ -92,9 +92,10 @@ class SnapshotterDelegateTest { } @Test - fun getRegion() { - snapshotter.getRegion() - verify { coreSnapshotter.region } + fun coordinateBoundsForCamera() { + val camera = mockk() + snapshotter.coordinateBoundsForCamera(camera) + verify { coreSnapshotter.coordinateBoundsForCamera(camera) } } @Test diff --git a/sdk/src/test/java/com/mapbox/maps/SnapshotterTest.kt b/sdk/src/test/java/com/mapbox/maps/SnapshotterTest.kt index e9dc509938..5314f2f551 100644 --- a/sdk/src/test/java/com/mapbox/maps/SnapshotterTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/SnapshotterTest.kt @@ -85,22 +85,23 @@ class SnapshotterTest { } @Test - fun setCameraOptions() { + fun setCamera() { val options = CameraOptions.Builder().build() - snapshotter.setCameraOptions(options) - verify { coreSnapshotter.cameraOptions = options } + snapshotter.setCamera(options) + verify { coreSnapshotter.setCamera(options) } } @Test fun getCameraOptions() { snapshotter.getCameraOptions() - verify { coreSnapshotter.cameraOptions } + verify { coreSnapshotter.getCameraOptions(any()) } } @Test - fun getRegion() { - snapshotter.getRegion() - verify { coreSnapshotter.region } + fun coordinateBoundsForCamera() { + val camera = mockk() + snapshotter.coordinateBoundsForCamera(camera) + verify { coreSnapshotter.coordinateBoundsForCamera(any()) } } @Test diff --git a/sdk/src/test/java/com/mapbox/maps/extension/observable/MapboxMapTest.kt b/sdk/src/test/java/com/mapbox/maps/extension/observable/MapboxMapTest.kt index 3f9f26f6d2..5898db046b 100644 --- a/sdk/src/test/java/com/mapbox/maps/extension/observable/MapboxMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/extension/observable/MapboxMapTest.kt @@ -36,7 +36,7 @@ class MapboxMapTest { @Test fun getEventData() { - val event = Event("resource-request", Date(), Date(), Value.valueOf("test")) + val event = Event("resource-request", Value.valueOf("test")) val request = Request(listOf("network"), "https://api.mapbox.com", "tile", "regular") val response = Response( "d8abd8d10bee6b45b4dbf5c05496587a", From 337d59ab2172b52463349f822c8a0a9f89107f41 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 20:59:18 +0200 Subject: [PATCH 07/12] Fix instrumentation test. --- .../maps/testapp/annotation/UpdateAnnotationTest.kt | 2 +- .../java/com/mapbox/maps/MapSnapshotterTest.kt | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt b/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt index 4b6a087967..fdd738fbd6 100644 --- a/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt +++ b/app/src/androidTest/java/com/mapbox/maps/testapp/annotation/UpdateAnnotationTest.kt @@ -39,7 +39,7 @@ class UpdateAnnotationTest : BaseMapTest(), OnMapLoadedListener { @Test fun testUpdateAnnotation() { - mapboxMap.addOnMapLoadingFinishedListener(this) + mapboxMap.addOnMapLoadedListener(this) rule.scenario.onActivity { val handler = Handler(it.mainLooper) diff --git a/sdk/src/androidTest/java/com/mapbox/maps/MapSnapshotterTest.kt b/sdk/src/androidTest/java/com/mapbox/maps/MapSnapshotterTest.kt index cc833d19db..0d016e943c 100644 --- a/sdk/src/androidTest/java/com/mapbox/maps/MapSnapshotterTest.kt +++ b/sdk/src/androidTest/java/com/mapbox/maps/MapSnapshotterTest.kt @@ -39,11 +39,13 @@ class MapSnapshotterTest { .build() mapSnapshotter = MapSnapshotter(snapshotterOptions) - mapSnapshotter.cameraOptions = CameraOptions.Builder().zoom(14.0).center( - com.mapbox.geojson.Point.fromLngLat( - 4.895033, 52.374724 - ) - ).build() + mapSnapshotter.setCamera( + CameraOptions.Builder().zoom(14.0).center( + com.mapbox.geojson.Point.fromLngLat( + 4.895033, 52.374724 + ) + ).build() + ) mapSnapshotter.styleURI = Style.MAPBOX_STREETS mapSnapshotter.start { latch.countDown() From 6227b2c7ea5b3289412192227ca4c13853cded2f Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 21:02:15 +0200 Subject: [PATCH 08/12] Fix formatting. --- .gitignore | 1 + sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 44dc82d548..8f2a88217c 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ app/src/main/res/values/developer-config.xml app/src/androidTest/java/com/mapbox/maps/testapp/activity sdk/src/androidTest/res/values/developer-config.xml extension-style-app/src/main/res/values/developer-config.xml +sdk/src/main/res/values/developer-config.xml node_modules/ diff --git a/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt b/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt index 5bd600afb1..8438e04103 100644 --- a/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/SnapshotterDelegateTest.kt @@ -70,7 +70,7 @@ class SnapshotterDelegateTest { fun setCameraOptions() { val options: CameraOptions = mockk() snapshotter.setCamera(options) - verify { coreSnapshotter.setCamera(options)} + verify { coreSnapshotter.setCamera(options) } } @Test From 6c16a7b07852356a55144dd343af84f7de6a7149 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 22:16:37 +0200 Subject: [PATCH 09/12] Fix lint check. --- .../main/java/com/mapbox/maps/plugin/location/Utils.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/Utils.java b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/Utils.java index df97391d4a..c13ec043a2 100644 --- a/plugin-location/src/main/java/com/mapbox/maps/plugin/location/Utils.java +++ b/plugin-location/src/main/java/com/mapbox/maps/plugin/location/Utils.java @@ -68,14 +68,7 @@ static Bitmap generateShadow(Drawable drawable, float elevation) { try { drawable.draw(canvas); } catch (IllegalArgumentException ex) { - if (ex.getMessage().equals("radius must be > 0") && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - Logger.w(TAG, - "Location's shadow gradient drawable has a radius <= 0px, resetting to 1px in order to avoid crashing"); - ensureShadowGradientRadius(drawable); - return generateShadow(drawable, elevation); - } else { - throw ex; - } + throw ex; } bitmap = Bitmap.createScaledBitmap(bitmap, toEven(width + elevation), toEven(height + elevation), false); From 0b879155fb5f0c2442fa581c78c2a396a872fdae Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 17 Mar 2021 22:35:36 +0200 Subject: [PATCH 10/12] Add docs and unit tests for drag API. --- .../main/java/com/mapbox/maps/MapboxMap.kt | 10 ++++- .../java/com/mapbox/maps/MapboxMapTest.kt | 39 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt index 0b27019f28..91491bd4cb 100644 --- a/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt +++ b/sdk/src/main/java/com/mapbox/maps/MapboxMap.kt @@ -3,7 +3,6 @@ package com.mapbox.maps import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting.PRIVATE import com.mapbox.bindgen.Value -import com.mapbox.common.Logger import com.mapbox.geojson.Feature import com.mapbox.geojson.Geometry import com.mapbox.geojson.Point @@ -184,7 +183,6 @@ class MapboxMap internal constructor( addOnStyleDataLoadedListener( object : OnStyleDataLoadedListener { override fun onStyleDataLoaded(type: StyleDataType) { - Logger.e("testtest", "onStyleDataLoaded: $type") if (type == StyleDataType.STYLE) { onFinishLoadingStyle(onStyleLoaded, onMapLoadErrorListener) removeOnStyleDataLoadedListener(this) @@ -1151,6 +1149,14 @@ class MapboxMap internal constructor( nativeMapWeakRef.call { this.drag(fromPoint, toPoint, animation) } } + /** + * Calculates target point where camera should move after drag. The method should be called after `dragStart` and before `dragEnd`. + * + * @param fromPoint The point to drag the map from, measured in \link MapOptions#size platform pixels \endlink from top to bottom and from left to right. + * @param toPoint The point to drag the map to, measured in \link MapOptions#size platform pixels \endlink from top to bottom and from left to right. + * + * @return Returns the camera options object showing end point + */ override fun getDragCameraOptions( fromPoint: ScreenCoordinate, toPoint: ScreenCoordinate diff --git a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt index 814879c1d8..28d2786e25 100644 --- a/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt +++ b/sdk/src/test/java/com/mapbox/maps/MapboxMapTest.kt @@ -4,6 +4,7 @@ import com.mapbox.bindgen.Value import com.mapbox.geojson.Feature import com.mapbox.geojson.Point import com.mapbox.maps.extension.style.StyleContract +import com.mapbox.maps.extension.style.style import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin import com.mapbox.maps.plugin.delegates.listeners.* import com.mapbox.maps.plugin.gestures.GesturesPlugin @@ -690,6 +691,44 @@ class MapboxMapTest { verify { nativeMap.getElevation(point) } } + @Test + fun isFullyLoaded() { + val style = mockk