[Bug]: isUserInteraction is always true when locationPuck is shown on Android
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 2.9k
- Forks
- 947
- Avg merge
- 6d 37m
- Merged PRs (30d)
- 1
Description
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run the standalone JavaScript reproduction on Android with LocationPuck enabled, then follow onRegionIsChanging and the region.properties.isUserInteraction value after the user moves the map. Compare the behavior with LocationPuck disabled and with iOS. Done means programmatic setCamera animations report isUserInteraction as false after prior user interaction.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, javascript, kotlin, react-native
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100