If you tap near a tight cluster of annotations, the annotation directly beneath your finger should be selected first. Previously, the annotations within the query bounds would be selected in order from oldest to newest, which was counterintuitive. The new behavior does sometimes make it more difficult to cycle through the entire cluster, but the previous behavior often got in the way anyways, as your finger would wind up atop a callout view for an annotation farther south.
Also updated the changelog.
Decreased hit test padding for annotation selection, since the query no longer depends on it. Fixed an assertion failure when selecting an annotation while the user dot is selected. Fixed an issue where selecting a selected user dot deselected it. Fixed an issue where the user dot’s callout positioning rect was off-center and a little too high.
MGLMapView now maps “annotation tags” (Cocoa-speak for numeric annotation IDs) to context objects that pair annotations with their identifiers. Previously, MGLMapView mapped the annotation objects themselves to context objects that contained annotation IDs, but this caused most operations involving annotations to be rather expensive: since mbgl tracks annotations by ID, most of the time you know the ID and need either the annotation or some piece of metadata about it.
Along for the ride, geographic methods and support for alignment rect insets on annotation images have been ported from #3135 for OS X. Hit testing now works much like in #3135, with the exception that UIKit doesn’t support hit testing based on pixel opacity. -convertRect:toLatLngBoundsFromView: returns a world-spanning bounds when the world is wrapping.
Fixes#3159.
- Enable ProGuard for the test app so the most common use case may be tested.
- Update ProGuard to keep all Mapbox views and their methods.
Previously, ProGuard was stripping numerous class methods including
UserLocationView.g/setAccuracy(). These particular methods are
accessed via reflection. On newer APIs, this manifests only in Logcat
and loss of functionality:
PropertyValuesHolder W Method setAccuracy() with type float not found on target class class com.mapbox.mapboxsdk.views.UserLocationView
W Method getAccuracy() with type null not found on target class class com.mapbox.mapboxsdk.views.UserLocationView
On Android 4.03 and 4.04 (API 15), this causes an NPE:
java.lang.NullPointerException
at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:513)
at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:385)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:537)
at android.animation.ValueAnimator.start(ValueAnimator.java:927)
at android.animation.ValueAnimator.start(ValueAnimator.java:950)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:363)
at com.mapbox.mapboxsdk.views.UserLocationView.setLocation(UserLocationView.java:401)
at com.mapbox.mapboxsdk.views.UserLocationView.toggleGps(UserLocationView.java:300)
at com.mapbox.mapboxsdk.views.UserLocationView.setEnabled(UserLocationView.java:230)
at com.mapbox.mapboxsdk.views.MapView.setMyLocationEnabled(MapView.java:3122)
...
Also add Support libraries rules to the test. Further amendments may
be made by examining usage.txt[0,1].
[0] http://developer.android.com/tools/help/proguard.html#enabling
[1] http://proguard.sourceforge.net/manual/usage.html#shrinkingoptions
- fix the code to use the same simplification tolerance
- remove outdated indexMaxZoom/Points values and rely on default
- bump buffer 2x to fix bleeding linecaps on thick lines