[Android] Fix minDistance being reset by partial config updates - #4347
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes an Android-specific PanGestureHandler configuration bug where partial updateConfig calls (e.g., from SharedValue-driven updates) could incorrectly treat a single update payload as the full config, causing an explicitly set minDistance to be masked and distance-based activation to stop working.
Changes:
- Persist
hasCustomActivationCriteriaacross partialupdateConfigcalls to avoid recomputing state from only the incoming keys. - Track whether
minDistwas explicitly configured via a newhasExplicitMinDistflag. - Clear both flags in
resetConfigto keep full-config paths (setGestureHandlerConfig/ creation) behavior unchanged.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
j-piasecki
approved these changes
Jul 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Follow-up to #4327
On Android,
Pan'supdateConfigderivedhasCustomActivationCriteriafrom a local variable recomputed from the keys present in the incoming config map. Config updates can be partial aSharedValueused in the config sends{ [key]: value }throughupdateGestureHandlerConfig, which doesn't reset the handler first - so the flag reflected a single update message instead of the accumulated configuration. Any criteria-key update (velocity/offset) then hit the "custom criteria and no explicitminDist" branch and masked an explicitly configuredminDistancewithFloat.MAX_VALUE, disabling distance-based activation entirely.hasCustomActivationCriteriais now a field on the handler, together withhasExplicitMinDisttracking whetherminDistwas explicitly configured; both are cleared inresetConfig. This mirrors how the other platforms already model this state (web: instance field + storedminDist; iOS: flag recomputed from stored recognizer state inupdateHasCustomActivationCriteria), which is why they don't exhibit the bug. Full-config paths (createGestureHandler/setGestureHandlerConfig) go throughresetConfigfirst, so their behavior is unchanged.Test plan
Tested on the following code: