Skip to content

Commit f37958a

Browse files
dzinadgithub-actions[bot]
authored andcommitted
NAVAND-5909: always use latest CameraState as a fallback startValue
GitOrigin-RevId: a7c626c4870cffa6a471378d174018d25681c491
1 parent 5ed4543 commit f37958a

File tree

3 files changed

+90
-6
lines changed

3 files changed

+90
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Mapbox welcomes participation and contributions from everyone.
1414

1515
## Bug fixes 🐞
1616
* Fix exception when accessing enum properties in annotations.
17+
* Fix an issue where instant animation might not have been executed in case of launching multiple animations within a single frame.
1718

1819
# 11.14.0-beta.1 July 02, 2025
1920

plugin-animation/src/main/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImpl.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,12 @@ internal class CameraAnimationsPluginImpl : CameraAnimationsPlugin, MapCameraPlu
276276
return false
277277
}
278278
val startValue = cameraAnimator.startValue ?: when (cameraAnimator.type) {
279-
CameraAnimatorType.CENTER -> center ?: mapCameraManagerDelegate.cameraState.center
280-
CameraAnimatorType.ZOOM -> zoom ?: mapCameraManagerDelegate.cameraState.zoom
281-
CameraAnimatorType.ANCHOR -> anchor ?: ScreenCoordinate(0.0, 0.0)
282-
CameraAnimatorType.PADDING -> padding ?: mapCameraManagerDelegate.cameraState.padding
283-
CameraAnimatorType.BEARING -> bearing ?: mapCameraManagerDelegate.cameraState.bearing
284-
CameraAnimatorType.PITCH -> pitch ?: mapCameraManagerDelegate.cameraState.pitch
279+
CameraAnimatorType.CENTER -> mapCameraManagerDelegate.cameraState.center
280+
CameraAnimatorType.ZOOM -> mapCameraManagerDelegate.cameraState.zoom
281+
CameraAnimatorType.ANCHOR -> ScreenCoordinate(0.0, 0.0)
282+
CameraAnimatorType.PADDING -> mapCameraManagerDelegate.cameraState.padding
283+
CameraAnimatorType.BEARING -> mapCameraManagerDelegate.cameraState.bearing
284+
CameraAnimatorType.PITCH -> mapCameraManagerDelegate.cameraState.pitch
285285
}.also {
286286
if (debugMode) {
287287
logI(

plugin-animation/src/test/java/com/mapbox/maps/plugin/animation/CameraAnimationsPluginImplTest.kt

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,89 @@ class CameraAnimationsPluginImplTest {
13521352
assertEquals(EdgeInsets(1.0, 2.0, 3.0, 4.0), edgeInsets)
13531353
}
13541354

1355+
@Test
1356+
fun useCameraStateValuesIfStartValueIsNotSet() {
1357+
val cachedCameraOptions = CameraOptions.Builder()
1358+
.center(Point.fromLngLat(50.0, 50.0))
1359+
.pitch(50.0)
1360+
.bearing(50.0)
1361+
.zoom(5.0)
1362+
.padding(EdgeInsets(50.0, 50.0, 50.0, 50.0))
1363+
.anchor(ScreenCoordinate(50.0, 50.0))
1364+
.build()
1365+
cameraAnimationsPluginImpl.onCameraMove(cachedCameraOptions.toCameraState())
1366+
1367+
val mapCameraOptions = CameraOptions.Builder()
1368+
.center(Point.fromLngLat(51.0, 51.0))
1369+
.pitch(51.0)
1370+
.bearing(51.0)
1371+
.zoom(5.1)
1372+
.padding(EdgeInsets(51.0, 51.0, 51.0, 51.0))
1373+
.build()
1374+
1375+
every { mapCameraManagerDelegate.cameraState } returns mapCameraOptions.toCameraState()
1376+
1377+
val centerAnimator = spyk(
1378+
cameraAnimationsPluginImpl.createCenterAnimator(
1379+
cameraAnimatorOptions(Point.fromLngLat(52.0, 52.0))
1380+
)
1381+
)
1382+
val bearingAnimator = spyk(
1383+
cameraAnimationsPluginImpl.createBearingAnimator(
1384+
cameraAnimatorOptions(60.0)
1385+
)
1386+
)
1387+
val zoomAnimator = spyk(
1388+
cameraAnimationsPluginImpl.createZoomAnimator(
1389+
cameraAnimatorOptions(15.0)
1390+
)
1391+
)
1392+
val pitchAnimator = spyk(
1393+
cameraAnimationsPluginImpl.createPitchAnimator(
1394+
cameraAnimatorOptions(40.0)
1395+
)
1396+
)
1397+
val anchorAnimator = spyk(
1398+
cameraAnimationsPluginImpl.createAnchorAnimator(
1399+
cameraAnimatorOptions(ScreenCoordinate(52.0, 52.0))
1400+
)
1401+
)
1402+
val paddingAnimator = spyk(
1403+
cameraAnimationsPluginImpl.createPaddingAnimator(
1404+
cameraAnimatorOptions(EdgeInsets(52.0, 52.0, 52.0, 52.0))
1405+
)
1406+
)
1407+
cameraAnimationsPluginImpl.registerAnimators(
1408+
centerAnimator, bearingAnimator, zoomAnimator, pitchAnimator, anchorAnimator, paddingAnimator,
1409+
)
1410+
1411+
centerAnimator.start()
1412+
bearingAnimator.start()
1413+
zoomAnimator.start()
1414+
pitchAnimator.start()
1415+
anchorAnimator.start()
1416+
paddingAnimator.start()
1417+
1418+
verify {
1419+
centerAnimator.setObjectValues(mapCameraOptions.center, Point.fromLngLat(52.0, 52.0))
1420+
}
1421+
verify { bearingAnimator.setObjectValues(mapCameraOptions.bearing, 60.0) }
1422+
verify { zoomAnimator.setObjectValues(mapCameraOptions.zoom, 15.0) }
1423+
verify { pitchAnimator.setObjectValues(mapCameraOptions.pitch, 40.0) }
1424+
verify {
1425+
anchorAnimator.setObjectValues(
1426+
ScreenCoordinate(0.0, 0.0),
1427+
ScreenCoordinate(52.0, 52.0)
1428+
)
1429+
}
1430+
verify {
1431+
paddingAnimator.setObjectValues(
1432+
mapCameraOptions.padding,
1433+
EdgeInsets(52.0, 52.0, 52.0, 52.0),
1434+
)
1435+
}
1436+
}
1437+
13551438
class LifecycleListener : CameraAnimationsLifecycleListener {
13561439
var starting = false
13571440
var interrupting = false

0 commit comments

Comments
 (0)