Releases: mapbox/mapbox-maps-android
android-v10.1.0-beta.1
10.1.0-beta.1 October 21, 2021
Features ✨ and improvements 🏁
- Introduce option to enable Multisample anti-aliasing (MSAA) for map rendering. (#741)
- Add convenience methods for stop expression. (#698, #764)
Bug fixes 🐞
- Fix map move using faster map offsetting after zoom-in or zoom-out gesture. (#738)
- Fix annotation flickering and disappearing during dragging. (#732)
- Fix logo and attribution margin update. (#744)
- Fix
NullPointerException
while querying annotations. (#746) - Limit fast fling gesture in a downwards direction when map is highly pitched. (#754)
- Fixed an issue that caused annotations not being updated in some cases.. (#753)
- Fix glyph drawing issue when the 'high contrast' text feature is turned on. (#752)
- Fix
promoteId
parameter for VectorSource overwritten when source tilejson is loaded. (#752) - Avoid spawning extra AssetManagerFileSource threads. (#752)
- Fix
NullPointerException
inHttpResponseCallback
, when get an error message from the Exception. (#752) - Restore the fling factor for slightly pitched maps. (#762)
Dependencies
- Bump gl-native to v10.1.0-beta, and common to v20.1.0-rc.1 (#752)
android-v10.0.0
10.0.0 October 6, 2021
Breaking changes ⚠️
-
Add
@JvmOverloads
where applicable to provide better experience for Java users. (#656) -
Refactor gestures configuration options to be aligned better across platforms. (#672)
- Rename
flingVelocityAnimationEnabled
toscrollDecelerationEnabled
- Rename
rotateVelocityAnimationEnabled
torotateDecelerationEnabled
- Rename
scaleVelocityAnimationEnabled
topinchToZoomDecelerationEnabled
- Rename
zoomEnabled
topinchToZoomEnabled
and limit its effect to just pinch to zoom - Rename
panScrollMode
toscrollMode
- Rename
zoomRate
tozoomAnimationAmount
- Remove
disableRotateWhenScaling
- Rename
increaseRotateThresholdWhenScaling
toincreaseRotateThresholdWhenPinchingToZoom
- Rename
increaseScaleThresholdWhenRotating
toincreasePinchToZoomThresholdWhenRotating
- Split
doubleTapToZoomEnabled
intodoubleTapToZoomInEnabled
anddoubleTouchToZoomOutEnabled
- Remove
pixelRatio
from gesture options (if needed, use the value from map init options so that this option is not duplicated) - Rename
GesturesSettings#isPanHorizontallyLimited
toGesturesSettings#isScrollHorizontallyLimited
- Rename
GesturesSettings#isPanVerticallyLimited
toGesturesSettings#isScrollVerticallyLimited
- Rename
-
Apply geojson data (using
data
,url
,feature
,featureCollection
,geometry
functions) is fully async now. (#699)
Following APIs are impacted:GeoJsonSource.data(userData)
is also setting data using worker thread meaning that if somefeatureCollection
is already parsing - it will be parsed till end, applied to the map and replaced immediately byuserData
.GeoJsonSource.url(userUrl)
is also setting data using worker thread meaning that if somefeatureCollection
is already parsing - it will be parsed till end, applied to the map and replaced immediately byuserUrl
.- Following APIs are changed:
GeoJsonSource.feature(value: Feature, onDataParsed: ((GeoJsonSource) -> Unit)? = null) => GeoJsonSource.feature(value: Feature) GeoJsonSource.geometry(value: Geometry, onDataParsed: ((GeoJsonSource) -> Unit)? = null) => GeoJsonSource.geometry(value: Geometry) GeoJsonSource.featureCollection(value: FeatureCollection, onDataParsed: ((GeoJsonSource) -> Unit)? = null) => GeoJsonSource.featureCollection(value: FeatureCollection) @SourceDsl class Builder( val sourceId: String, private val onGeoJsonParsed: OnGeoJsonParsed ) => @SourceDsl class Builder( val sourceId: String )
- Following APIs are removed:
interface OnGeoJsonParsed GeoJsonSource.addOnGeoJsonParsedListener(listener: OnGeoJsonParsed) GeoJsonSource.removeOnGeoJsonParsedListener(listener: OnGeoJsonParsed) // DSL function removed fun geoJsonSource( id: String, config: GeoJsonSource.Builder.() -> Unit, onGeoJsonParsed: OnGeoJsonParsed ): GeoJsonSource = GeoJsonSource.Builder(id, onGeoJsonParsed).apply(config).build()
-
Update
getLayerAs
function to return nullableLayer
type. (#673) -
Update map events data models. (#712)
- add optional
sourceId
andtileId
in theMapLoadingErrorEventData
andOnMapLoadErrorListener
. - make
response
inResourceEventData
optional. - make
etag
,modified
,expires
inside resource request'sResponse
optional. - add
DataSourceType
,RequestPriority
,RequestType
,ResponseErrorType
,ResponseSourceType
enum forresource-request
event which conform to java docs from gl-native.
- add optional
-
Refactor MapEvents listeners, so that each listener will include one event data property. (#718)
This unblocks us to add properties to the event data incrementally without breaking our public API.List of affected listeners:
OnCameraChangeListener
OnMapIdleListener
OnMapLoadedListener
OnMapLoadErrorListener
OnRenderFrameFinishedListener
OnRenderFrameStartedListener
OnSourceAddedListener
OnSourceDataLoadedListener
OnSourceRemovedListener
OnStyleDataLoadedListener
OnStyleImageMissingListener
OnStyleImageUnusedListener
OnStyleLoadedListener
Package name for Map event's data models is nowcom.mapbox.maps.extension.observable
inside thesdk-base
module, so it can be reused across different plugins.Type of TileID's z/x/y properties is changed from
Double
toLong
. -
Abstract classes
CustomLayerHost
,ElevationData
,MapClient
,Observer
,OfflineRegionObserver
,HttpServiceInterceptorInterface
,HttpServiceInterface
,LogWriterBackend
,OfflineSwitchObserver
,ReachabilityInterface
,TileStoreObserver
have become interfaces. (#697)
Features ✨ and improvements 🏁
- Introduce 3D globe (experimental). (#667)
- Append gl-native and common API reference documentation to the output of Dokka documentation generation. (#711)
- Set
Process.THREAD_PRIORITY_DISPLAY
as render thread priority to improve overall performance. (#701) - Add
HttpServiceFactory.reset()
to release the HTTP service implementation. (#697)
Bug fixes 🐞
- Throw exception when gestures plugin functionality is used but plugin was not created. (#653)
- Throw exception when camera plugin functionality is used but plugin was not created. (#668)
- Fix black screen when resuming activity with
MapView
on x86 emulator, Android API <= 23. (#671) - Fix map render deadlock on Android 8 on power on button. (#688)
- Fix context leak in
LocationProviderImpl
. (#690) - Fix native memory leak by explicitly nulling map reference from renderer. (#687)
- Fix wrong attribute reference in runtime exception text when token is missing. (#708)
- Fix applying position property to scale bar plugin. (#677)
- Fix initialisation location puck when no style loaded from code by changing
Plugin#onStart()
call after style loaded started. (#680) - Fix attribution/logo jumble when RTL layout is configured. (#674)
- Fix rendering artifacts for a model layer when
model-opacity
property is used. (#697) - Improve rendering performance by avoiding unnecessary re-layout for cached tiles. (#697)
- Fix
onResponse
callback forHttpInterceptor
never being called. (#697)
Dependencies
- Bump gl-native to v10.0.0, common to v20.0.0. (#697)
android-v10.0.0-beta.19.1
10.0.0-beta.19.1 - Sep 23, 2021
- This is a patch to v10.0.0-beta.19
Bug fixes 🐞
- Fix
std::exception
happening rarely whenMapboxMap#setCamera()
is called inside animation plugin. (#652)
android-v10.0.0-rc.9
10.0.0-rc.9 September 22, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Features ✨ and improvements 🏁
- Fix documentation for
OnMapIdleListener
andCameraChangeListeners
. (#645) - Add support for
SymbolZOrder
property in PointAnnotationManager. (#638) - Add support for
PromoteId
to be used with Feature State API. (#636) - Expose
optimizeForTerrain
flag that could be applied to theMapView
in xml. (#654) - Enable instant transitions for data driven symbol layer properties. (#646)
Bug fixes 🐞
OnStyleLoaded
/OnMapLoaded
callbacks are invoked even if hosting fragment/activity is in stopped state. (#629)- Fix drag annotation blink when drag ends. (#639)
- Apply annotation manager properties to the drag layer to keep annotations the same while dragging. (#640)
- Fix point annotation updating all same content bitmaps instead of one particular. (#633)
- Fix
MapboxMap#getStyle
returning null after adding a new source when style was loaded before. (#643) - Allow setting null explicitly to annotation nullable properties. (#650)
- Fix
std::exception
happing rarely whenMapboxMap#setCamera()
is called inside animation plugin. (#652) - Fix memory leak in renderer destroy. (#657)
- Fix transition between layers with all constant properties. (#646)
- Fix rendering artifact for a line layer, when its
line-gradient
property is set at runtime. (#646) - Don't draw SDF images in
text-field
and issue warning for it. (#646) - Fix incorrect return from StyleManager#getStyleLayerPropertyDefaultValue for
text-field
, now the default value is set to["format", "" , {}]
. (#646)
Dependencies
- Bump gl-native to 10.0.0-rc.9, common to 19.0.0. (#646)
android-v10.0.0-rc.8
10.0.0-rc.8 September 8, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Breaking changes ⚠️
- In offline mode (set by either mapbox::common::OfflineSwitch API or on platform side), the error notifications are send if the required resources are not present locally. The volatile tiles are not considered to be required in offline.(#604)
- Adapt setBounds to gl-js behavior: constraining of coordinates and zoom level is now stricter to prevent out of bounds map area to be visible in the viewport.(#604)
- Add HTTP interceptor API - for anyone who is using HttpServiceInterface; there is a new method called setInterceptor that should be overridden(#604)
Features ✨ and improvements 🏁
- Make 3D puck always over (in front of) 3D layers (buildings, landmarks, custom layer) but behind hill (terrain). (#601)
- Integrate value marshalling performance improvement (#606)
- Introduce drag layer/source for annotation plugin to improve drag performance. (#582)
- Update prefetch zoom delta documentation to match actual behavior (#609)
- Add support for the index-of and slice expressions (#616)
- Improve collision detection by using runtime calculated sizes for collision boxes. Previously collision boxes' sizes are constant, they are calculated during symbol layout time by using constant zoom level(#604)
- Improve collision detection by using runtime calculated pixelated sizes for collision circles. Previously collision circles' sizes are constant, they are calculated during symbol layout time by using constant zoom level(#604)
- Implement 'promoteId' feature for geojson and vector sources. The feature allows to promote feature's property to a feature id, so that promoted id can be used with FeatureState API.(#604)
- Enable instant transitions for data driven paint layer properties(#604)
Bug fixes 🐞
- Use touch focal point to calculate the correct scroll displacement when the map is pitched. (#593)
- Use touch focal point to calculate the correct fling displacement. (#599)
- Allow geojson source to initialise with empty data. (#602)
- Preserve EGL setup on renderer stop. This fixes full map reloading when map is brought out from background. (#598)
- Fix issue with camera animators ordering on Android 6 and lower by revisiting overall approach of applying accumulated camera changes. (#597)
- Enable update bitmap for annotations (#615)
- Fix volatile tiles disappearing on "not modified" response(#604)
- Prioritize addition of a persistent layer whose id is used for other persistent layer positions(#604)
- Only do line breaking process for point placement labels. And if text-max-width is 0, still do general ideographic beaking checks for point labels.(#604)
- Fix collision box's 'dynamicVerticesExt' updating in placement stage(#604)
- Trigger map redraw when feature state changes (#604)
Dependencies
- Bump gl-native to 10.0.0-rc.8, common to 18.0.0 (#604)
android-v10.0.0-rc.7
10.0.0-rc.7 August 25, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Breaking changes ⚠️
- Remove the expression getter/setters for source properties. (#568)
Features ✨ and improvements 🏁
- Add generateId property for GeoJsonSource. (#538)
- Add default value to improve usability of FeatureState API. (#588)
- Add Style#moveStyleLayer(layerId: String, layerPosition: LayerPosition?): Expected<String, None> API (#563)
- Allow using combination of line-dasharray and line-gradient for line layer. (#563)
Bug fixes 🐞
- Remove strong ref dependency in snapshotter that was leading to a memory leak if Snapshotter#destroy was not called explicitly. (#571)
- Fix get annotation enum property crash (#579)
- Fix rendering issue for round line-join in line gradients (#565)
- A fix of the layer paint property evaluation while transitioning from a data-driven value. It snaps immediately to the new value thus preventing of drawing stale data during the animation.(#563)
- Reduced memory consumption when using raster layers by deleting CPU side tile bitmap copy after uploading to GPU texture.(#563)
- Fix crash on Android when using tile requests delay API(#563)
Dependencies
android-v10.0.0-rc.6
10.0.0-rc.6 August 11, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Breaking changes ⚠️
- Update extension function signatures making them easier to use from Java. (#539)
- Rename
mapView#overlay()
tomapView#mapboxOverlay
. (#539)
Features ✨ and improvements 🏁
- Support adding 9-patch images to the style. (#536)
- Outdated data for volatile sources gets hidden if cannot be updated due to no Internet connection. (#543)
Bug fixes 🐞
- Fix several memory leaks: clean up OnFpsChangeListener on render thread destroy / introduce Snapshotter#destroy method that must be called in Activity#onDestroy (#546)
- Add layer and source check when creating annotations and init them if not initiated before which creates
AnnotationManager
before loading style. (#549) - Fix error messages returned by
Style#removeStyleSource
method. (#543) - Store persistent layer's LayerPosition, so that layer can be re-added to correct position if LayerPosition.above or LayerPosition.at is used. (#543)
Dependencies
android-v10.0.0-rc.5
10.0.0-rc.5 July 28, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Breaking changes ⚠️
- Improve camera API consumption from java programming language by adding
CameraAnimationsUtils
andgetCamera
JvmName annotations. (#495) - Rename
AttributionView#setOnClickListener
tosetViewOnClickListener
to avoid overloading the Android SDK method. Results in compilation on Android P and above. Adjust codebase to changes in enforced nullability of Android SDK code. (#497) - Get rid of using reflection when creating plugins which should decrease
MapView
startup time if plugins are enabled. (#519)
Features ✨ and improvements 🏁
- Add
showLogo
andshowAttributes
config for snapshotter which are defaulted to true. User can now hide logo and attributions in a snapshotter by changing this config (#496) - Add lifecycle plugin so there is no need to call
onStart
/onStop
/onDestroy
/onLowMemory
methods explicitly, if the appcompact 1.3.0+ is used. (#485) - Add a minimum Android Auto test app and an optional Android Auto extension that provide convenient extension function to initialise the MapSurface from a Car App Session. (#488)
- Add lint check for lifecycle methods (#516)
Bug fixes 🐞
- Fix issues with MapView#snapshot methods that could cause black snapshot or ANR in some cases. (#508)
android-v10.0.0-rc.4
10.0.0-rc.4 July 14, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Features ✨ and improvements 🏁
- Add new param to allow users localize selected layers. (#461)
- Add API to control logging for animation plugin and disable debug logs by default. (#474)
- Introduce option to use continuous rendering for scale bar. Continuous render mode will fix gfxinfo profiling. (#458)
- Add shortest bearing path option for animators. (#473)
- Add modelTranslation support for LocationPuck3D (#493)
- Add default parameters to coordinate conversion functions of MapCameraManagerDelegate#cameraForCoordinates, MapCameraManagerDelegate#cameraForCoordinateBounds and MapCameraManagerDelegate#cameraForGeometry. This overloads the functions to have a more simple API surface for developers to hook into. (#491)
- Support text-writing-mode property for line symbol-placement text labels (#1766)
Note: This change will bring following changes for CJK text block:- For vertical CJK text, all the characters including Latin and Numbers will be vertically placed now. Previously, Latin and Numbers are horizontally placed.
- For horizontal CJK text, it may have a slight horizontal shift due to the anchor shift.
- Session SKU generation is now available
- Add getSKUTokenIfValid to get a SKU token for a SKU identifier if it exists and is not expired, return empty string if not.
- Allow filtering of log messages by categories.
- Expose isFiltered for checking logging category settings
Bug fixes 🐞
- Fix flyTo crash when using single-pixel paddings. (#478)
- Fixed regression in map gestures on devices with Android 6 and lower. (#484)
- Fix overwriting sync geojson data with getSourceAs by async. (#482)
- Clean up network listener after http file source gets out of scope
- Fix line-center anchor calculation when the anchor is very near to the line geometry point
- Fix crash when a Feature State API is used with dedicated rendering thread
- Fix threading issues in HTTP file source
- Fix volatile tilesets handling
Dependencies
- Update gl-native to v10.0.0-rc.5 and common to v16.0.0. (#487)
android-v10.0.0-rc.3
10.0.0-rc.3 June 30, 2021
The Mapbox Maps SDK for Android has moved to release candidate status and is now ready for production use.
Breaking changes ⚠️
- Perform annotation click synchronously and change AnnotationManagerImpl#queryMapForFeatures function to be synchronous. (#455)
API change:
// async
fun queryMapForFeatures(screenCoordinate: ScreenCoordinate, callback: QueryAnnotationCallback<T>)
||
\/
// sync
fun queryMapForFeatures(screenCoordinate: ScreenCoordinate): T?
Features ✨ and improvements 🏁
- Introduce static MapboxMap.clearData(resourceOptions: ResourceOptions, callback: AsyncOperationResultCallback) API and MapboxMap#clearData(callback: AsyncOperationResultCallback), Snapshotter#clearData(callback: AsyncOperationResultCallback) APIs. (#442)
- Optimise the Style#getLayer and Style#getSource APIs' performance. (#449)
- MapEvents#MAP_LOADING_ERROR events now include source and tile information where appropriate. New fields would allow developers to understand what source or tile has failed to load and the reason for a failure. (#442)
Bug fixes 🐞
- Fix dropping annotation source updates if those were emitted rapidly without handler. (#441)
- Fix raster/v1 terrain tiles fetch failures caused by appending pixel ratio to the URLs when tile size is equal to 512. (#442)
- Fixed an issue that the LayerPosition is not persisted across the style change, when using persistent layer based annotation plugin and location component plugin. (#442)
- Disable MapboxTelemetryInitProvider if the telemetry is disabled via app's manifest reducing startup time. (#457)