Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: (Android only) onMapIdle (etc) does not trigger with a native UserLocation #2902

Open
savv opened this issue Jun 9, 2023 · 10 comments
Labels
Android Android related tickets todo Valid bug, but we don't have time to look into upstream the bug source is a bug in native mapbox gl waiting Non planned issues

Comments

@savv
Copy link
Contributor

savv commented Jun 9, 2023

Mapbox Implementation

Mapbox

Mapbox Version

10.7.0

Platform

Android

@rnmapbox/maps version

10.0.7

Standalone component to reproduce

In the MapHandlers example, add the following line inside of the MapView:

<UserLocation key="mapbox-location" showsUserHeadingIndicator renderMode={UserLocationRenderMode?.Native} />

Observed behavior and steps to reproduce

Observe that onMapIdle does not get called anymore.

Expected behavior

Should still get called.

Notes / preliminary analysis

No response

Additional links and references

No response

@trungledangAxonActive
Copy link

I also got this issue

@mfazekas
Copy link
Contributor

What is the use case for onMapIdle?

It seems that the pulsing is useLocation prevents the map renderer from going to idle, so onMapIdle will not be called.

mapbox/mapbox-maps-android#2116

@mfazekas mfazekas added upstream the bug source is a bug in native mapbox gl Android Android related tickets labels Jun 29, 2023
@savv
Copy link
Contributor Author

savv commented Jun 30, 2023

Effectively, we wanted to use it as a replacement for onRegionDidChange. One use case is to capture and store the latest viewport that the user panned to.

It looks like onMapIdle has a more render-focused meaning. However, I'm not sure how to achieve this right now with v10. Maybe the wrapper needs some camera lifecycle callbacks?

@mfazekas
Copy link
Contributor

@savv thanks much, they suggest adding camera animation observers for that purpose. I'll try to implement that and we'll see if that meets your use case.

You're right that onMapIdle is not a replacement for onRegionDidChange

@kassemitani
Copy link
Contributor

We have the same issue, onMapIdle is not being triggered on Android. While onCameraChanged is being triggered both iOS & Android.

@mfazekas
Copy link
Contributor

mfazekas commented Jul 12, 2023

For now the workaround is to use debounce onCameraChanged. That should be called when map stopped changing for a while

@kesteer
Copy link

kesteer commented Jul 19, 2023

@mfazekas

You're right that onMapIdle is not a replacement for onRegionDidChange

Do you think we should change the function jsdoc in the MapView.tsx file related to onMapIdle as it currently says it IS a replacement and is probably leading to a bit of confusion.

v10 only, replaces onRegionDidChange

And also in the console warning.

console.warn(
'onRegionDidChange is deprecated and will be removed in next release - please use onMapIdle. https://github.com/rnmapbox/maps/wiki/Deprecated-RegionIsDidChange',
);

If you think its a good idea I can pop in a PR for it.

@mfazekas mfazekas added the todo Valid bug, but we don't have time to look into label Dec 9, 2023
@mfazekas
Copy link
Contributor

mfazekas commented Dec 9, 2023

Valid bug, but not planned do to lack of resources. Closing as not planned.

I don't think this is to be fixed, but would be nice to provide some solution for the use case.

@mfazekas mfazekas closed this as not planned Won't fix, can't repro, duplicate, stale Dec 9, 2023
@savv
Copy link
Contributor Author

savv commented Dec 11, 2023

Given that this is a bug and not a feature request, it would make sense to me to keep it open. That way, people facing the same issue can find it more easily; and maybe even fix it (or at least update the docs, as somebody already suggested).

@davor-bauk-sh
Copy link

I'm also experiencing this on iOS. Neither onMapIdle nor onRegionDidChange get called when LocationPuck's pulsing.isEnabled property is true.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Android Android related tickets todo Valid bug, but we don't have time to look into upstream the bug source is a bug in native mapbox gl waiting Non planned issues
Projects
None yet
Development

No branches or pull requests

6 participants