[Bug]: isUserInteraction is always true when locationPuck is shown on Android
Mapbox Implementation
Mapbox
Mapbox Version
11.8.0
React Native Version
0.74.5
Platform
Android
@rnmapbox/maps version
10.1.35
Standalone component to reproduce
import React, { useEffect, useRef } from 'react';
import {
MapView,
ShapeSource,
LineLayer,
Camera,
LocationPuck,
} from '@rnmapbox/maps';
const aLine = {
type: 'LineString',
coordinates: [
[-74.00597, 40.71427],
[-74.00697, 40.71527],
],
}
const BugReportExample = () => {
const mapCameraRef = useRef()
const locationPuck = true // Set this to false to hide the location puck. The issue only presents itself when the locationPuck is shown
useEffect(() => {
// Re-center the map every 5 seconds. When this is done, isUserInteraction should log as false (but it doesn't when locationPuck is true)
const interval = setInterval(() => {
mapCameraRef.current?.setCamera({
centerCoordinate: [-74.00597, 40.71427],
animationDuration: 1000,
animationMode: 'linear',
})
}, 5_000)
return () => {
clearInterval(interval)
}
}, [])
const regionIsChanging = (region) => {
console.log("isUserInteraction:", region.properties.isUserInteraction)
}
return (
<MapView style={{ flex: 1 }} onRegionIsChanging={regionIsChanging}>
<Camera ref={mapCameraRef} centerCoordinate={[-74.00597, 40.71427]} zoomLevel={14} />
<ShapeSource id="idStreetLayer" shape={aLine}>
<LineLayer id="idStreetLayer" />
</ShapeSource>
{locationPuck ? <LocationPuck puckBearingEnabled={true} puckBearing="heading" pulsing={"default"} /> : null}
</MapView>
)
}
Observed behavior and steps to reproduce
When the location puck is show on Android (this issue is not present on iOS), and mapCameraRef.current?.setCamera is used to animate to a location, the region.properties.isUserInteraction returned from onRegionIsChanging is true, when it should be false. The issue only occurs after the user interacts with the map for the first time.
Steps to reproduce:
- Use the component and view the console logs
- Move the map around a bit, then wait for it to recenter (recenters every 5 seconds)
-
isUserInteractionwill print as true when this animation happens, even though it should be false. The issue does not occur on iOS. - Set the
locationPuckconstant I added to false (or comment out the locationPuck component) and the issue no longer occurs on Android
Expected behavior
isUserInteraction should print as false when a mapCameraRef.current?.setCamera animation is used
Notes / preliminary analysis
No response
Additional links and references
No response
Interesting, seems to be related to #3801... the bug only exists when pulsing={"default"} is set
+1, same issue. Removing LocationPuck also fixed an other issue i had: LocationPuck Prevents onRegionDidChange from triggering properly.