# V4

## \[4.17.1] 2026-04-09

### Changed

* Slackened the lifecycle requirements for `MapControl` when `MapsIndoors` is destroyed (either when calling `load` again or calling `onApplicationTerminate`), which allows `MapControl` to stay active
  * This allows for using the same `MapControl` across multiple `MapsIndoors` loads

### Fixed

* Fixed cases where `MPFilter.setParents` with an invalid parent would result in the filter not applying correctly
* Fixed crashes that could occur when reloading the SDK
* Fixed `MPMapConfig.setHiddenFeatures` not applying the set features
* Fixed issue where the venue and building would be set on `MapControl` before the relevant listeners could be triggered

## \[4.17.0] 2026-03-26

### Added

* Extended `MPFloorSelectorInterface` with an `onDestroy` method. This method will be invoked when the associated `MapControl` is destroyed

### Changed

* Migrated `MapControl` from Java to Kotlin, which can introduce breaking behavior in Kotlin apps if not using accessor syntax
* Specified nullability of `MapsIndoors.applyUserRoles` to allow for null values (previously nullability was unknown), functionality is unchanged

### Fixed

* Fixed a memory leak that would occur when re-using the same map with multiple MapsIndoors SDK loads
* Plugged lanes of memory leakage in the SDK, reducing the size of future leaks that might occur
* Fixed `goTo` sometimes not respecting the `maxZoom` parameter

## \[4.16.3] 2026-03-11

### Fixed

* Fixed issue where `MPDisplayRule`s could cause a NullPointerException (NPE)

## \[4.16.2] 2026-02-27

### Changed

* Reduced baseline memory usage caused by `MPGraphicLabel`
* Reduced JSON size of parsed `MPLocation`s by \~64%
  * This primarily impacts the Flutter and React Native SDKs

### Fixed

* Fixed issue where the default `InfoWindow` could be shown despite being turned off
* Fixed issue where buildings placed outside of venue bounds would be partially orphaned, resulting in unexpected behavior when using location search
* Fixed issue where the selection Pin would sometimes not be cleared when a new location was selected
* Fixed issue where Highlights would not be shown until the map was moved
* Fixed issue where 2D models would be rendered incorrectly

## \[4.16.1] 2026-01-27

### Changed

* Changed behavior of Display Rule validation from throwing errors to logging warnings
* Changed behavior of Highlight to be able to change floor if set in `MPHighlightBehavior`
  * If locations on multiple floors are selected, the most common floor is used

### Fixed

* Fixed issue where moving the camera to a POI could end up zooming the map out completely
* Fixed crash when adding image without a set scale or size
* Fixed crash when adding 3D models
* Fixed issue on Google Maps where the Renderer would become unresponsive

## \[4.16.0] 2025-11-21

### Added

* `setHiddenFeatures` on the Mapbox `MPMapConfig` allowing features to be hidden when creating the `MapControl`

### Changed

* Decreased the amount of memory allocated during Load
* Decreased load times on larger solutions

### Fixed

* Fixed a race condition when changing image and image size of MPDisplayRules. Specifically when using a drawable
* Fixed an issue where map features would not update properly on Google Maps
* Fixed a potential crash on Mapbox when selecting a location

### Deprecated

* `MPMapsIndoorsLiveLocationSource` use `MPMapsIndoorsLocationSource` instead

## \[4.15.6] 2025-11-17

### Changed

* `MPMapConfig.showMapMarkers` now also affects transit labels on Mapbox

### Fixed

* Fixed an issue where resetting a Display Rule would not be immediately visible on the map
* Fixed an issue where synchronizing data with `MapsIndoors.synchronizeContent()` would not properly update the data, causing new locations to be hidden from some features, like rendering
* Fixed a ProGuard issue
* Fixed an issue where the Blue Dot could not be hidden on Mapbox
* Fixed Display Rules not being updated on Google Maps

## \[4.15.5] 2025-10-15

### Fixed

* Fixed an issue where badges would not appear, when setting them as visible through the MPDisplayRule

## \[4.15.4] 2025-10-08

### Changed

* Updated internal library to remove a conflict with kotlinx.datetime library

### Fixed

* Fixed an issue that could cause a crash when destroying `MapControl`
* Fixed an issue where setting `MPFilter` as null on `MapsIndoors.getLocationsAsync` would result in only getting locations for floor index 0

## \[4.15.3] 2025-10-02

### Changed

* Improved load times for solutions with large venues
* Upgraded Mapbox version to 11.15.0, as 11.14.x was causing memory spikes when zooming for some solutions

### Fixed

* Fixed issue where MPLocationPropertyNames.NAME was not searchable
* Fixed build issue for mapbox-v11 branch that caused a ndk27 library to be included
* Fixed Map clicking not working properly on Mapbox
* Fixed some camera events not being triggered on Mapbox when the camera was moved programmatically

## \[4.15.2] 2025-09-22

### Fixed

* Fixed issue where MPLocationPropertyNames other than EXTERNAL\_ID and NAME were not searchable
* Fixed issue where setting Typeface on MapControl would not work properly for Google Maps
* Fixed rendering issue where icons would be visible despite not being in the correct zoom range
* Fixed rendering issue where Lightness Factor was not applied correctly

## \[4.15.1] 2025-09-09

### Fixed

* Fixed regression on crash that could occur when locations have specific names

## \[4.15.0] 2025-09-08

### Added

* Added caching during rendering on Mapbox, which will reduce rendering delay
* Added ndk27 variant of Mapbox based SDK, it is available on this path "com.mapspeople.mapsindoors:mapbox-ndk27"

### Changed

* Made the SDK 16kb page compatible
  * If you are using Mapbox, switch to the ndk27 based SDK
* Changed the timing of rendering triggers, reducing the amount of total renders, but renders should be more timely
  * Added rendering trigger for Display rule changes, these changes will instantly trigger a render
* Updated the data model to significantly reduce memory usage during peak performance load

### Fixed

* Fixed issue that caused unnecessary redraws of icons
* Reduced a lot of memory overhead that could eventually result in a crash
* Fixed crash that would occur when using SDK with Mapbox version 11.14+

### Deprecated

* The "default" Mapbox based SDK using Mapbox V10 has been deprecated
  * It is recommended to change to the ndk27 SDK instead, as this version is compliant with 16kb pages

## \[4.14.1] 2025-08-28

### Fixed

* Fixed instability during rendering that could cause location selection to be unresponsive in some situations
* Fixed serialization of `MPSolutionConfig` to include all relevant fields

## \[4.14.0] 2025-08-15

### Added

* `MPAdditionalDetails`
  * Added to `MPLocation`, to get The additional Details that can contain a detailed object for: email, text, phone, url and opening hours.
* `getChildKeys` added to `MPCategory`
  * Returns an optional list of sub category keys.

### Fixed

* Fixed crash that could occur due to an internal library, when no internet was accessible
* Fixed an issue where 2DModels would be elevated, when they should not be.

## \[4.13.0] 2025-07-29

### Changed

* Updated Mapbox to 11.13.5 for mapbox-v11 version of MapsIndoors
  * This fixes a native crash that could rarely happen during rendering

### Fixed

* Fixed a crash that could occur when making routes that are partially or fully outside venues

## \[4.12.5] 2025-07-24

### Fixed

* Fixed minor rendering desync

## \[4.12.4] 2025-07-11

### Fixed

* Fixed elevated 2D Models not being hidden when `MapControl.setHiddenFeatures([MPFeatureType.Model2D])` was called
* Mitigated issue where ktor dependency would cause issues with apps using ktor 3

## \[4.12.3] 2025-06-19

### Fixed

* Fixed a potential null pointer exception during rendering.
* Fixed a crash that could occur when reloading a solution.

## \[4.12.2] 2025-06-13

### Changed

* Deferred loading of routing specific data until after MapsIndoors is ready. This can introduce a slight delay to a route response if called immediately after loading.

### Fixed

* Fixed a potential null pointer exception during rendering.
* Fixed a crash that could occur when reloading a solution.

## \[4.12.1] 2025-06-05

### Changed

* Modified runtime handling of icons, reducing Garbage Collection on solutions with many icons significantly

### Fixed

* Fixed an issue during load that caused some data to be loaded multiple times, causing a bloated memory overhead

## \[4.12.0] 2025-05-09

### Added

* Elevated 2D Models
  * 2D Models that are placed on Extrusions, will now be raised to be placed on top
  * Mapbox feature
* Clip Layer
  * Extruded buildings and Trees from the MapBox standard style can now be removed, when inside venue's geometry.
  * Does not remove landmarks consistently, will be solved with a future version of Mapbox
  * Requires a module to be enabled; contact MapsPeople to enable this feature.
  * Mapbox feature
* Rendering
  * Changed rendering to be based on grids of locations instead of only what is exactly within the viewport. To get a more seamless experience when panning the map

### Fixed

* Fixed an issue when reloading solutions, that could cause a crash when language was also changed

## \[4.11.5] 2025-05-01

### Fixed

* Fixed issue when setting padding on Mapbox would ignore the attributions button
* Fixed issue when generating offline routes causing the route to be generated through obstacles
  * Due to this change, optimizations have been disabled on offline routes

## \[4.11.4] 2025-04-23

### Fixed

* Fixed potential crash when adding a position provider to MapsIndoors on Mapbox
* Changed overlap detection to be more deterministic

## \[4.11.3] 2025-03-24

### Added

* Added GSON rules to consumer proguard files, this should help reduce issues due to obfuscation. It is still recommended to add Gson rules to your own proguard file.

### Fixed

* Fixed potential null pointer exception encountered during load
* Fixed potential null pointer when multiple MapControls are created during load
* Fixed issue with rendering on Mapbox when clustering is enabled
* Fixed a memory leak that would occur if a `MapControl.Create` operation would not finish
* Made Mapbox Layers persistent, so that it is possible to change the Mapbox style on runtime
* Fixed an issue where $ in a location name would cause a crash

## \[4.11.2] 2025-03-06

### Fixed

* Fixed potential null pointer exception encountered during load

## \[4.11.1] 2025-02-26

### Fixed

* Fixed potential null pointer exceptions when reloading a solution

## \[4.11.0] 2025-02-13

### Added

* Added a `maxZoom: Double?` option to the `goTo` method

### Fixed

* Fixed an issue where changing language while MapsIndoors was loaded would break rendering

## \[4.10.1] 2025-01-27

### Fixed

* Fixed a crash that could happen after selecting locations and zooming out on Mapbox
* Fixed an issue where a route across the pacific on Mapbox would only show the internal route instead of giving an error - since the external query fails

## \[4.10.0] 2025-01-13

### Added

* Added `automatedZoomLimit` on the `MPSolutionConfig`
  * This controls the maximum zoom level the camera can zoom to when doing MapsIndoors camera operations. It is still possible to zoom further in manually
* Added `maxZoom` to `MPSelectionBehavior`,`MPHiglightBehavior`,`MPFilterBehavior`
  * Overwrites the `automatedZoomLimit` for a specific camera operation
  * Null by default

## \[4.9.1] 2024-12-18

### Fixed

* Fixed a crash that could occur when checking if a location has a badge assigned to it
* Fixed a rare runtime exception on Google Maps when rendering a new marker

## \[4.9.0] 2024-11-25

### Changed

* New default positioning of labels relative to the icon is `MPLabelPosition.BOTTOM`. If you want to keep the previous default of `MPLabelPosition.RIGHT` you can place the following line in your code after loading `MapsIndoors` : `MapsIndoors.getMainDisplayRule()?.labelStylePosition = MPLabelPosition.RIGHT`

### Added

* `MPDisplayRule`
  * `getLabelStylePosition: MPLabelPosition?` returns the LabelPosition of the DisplayRule
  * `setLabelStylePosition(position: MPLabelPosition?)` sets the LabelPosition for the DisplayRule
* `MPLabelPosition` Enum representing the different places the label can be anchored to the Marker
  * `LEFT`
  * `TOP`
  * `BOTTOM`
  * `RIGHT`

## \[4.8.13] 2024-11-14

### Fixed

* Fixed issue where `moveCamera: boolean` on `MPSelectionBehavior` was not respected when set to false
* Fixed issue where an incorrect marker would show on google maps
* Fixed issue where the info window would not appear on Mapbox

## \[4.8.12] 2024-10-28

### Fixed

* Fixed memory leaks that would cause an `OutOfMemoryException` if the SDK was reloaded multiple times
* Fixed a crash that could occur when the SDK was unloading 3D model data

## \[4.8.11] 2024-10-10

### Fixed

* Fixed an issue where collision detection was not working on mapbox-11
* Fixed a crash when loading with optional venues

## \[4.8.10] 2024-10-08

### Changed

* Improved Mapbox rendering when the map becomes idle
* `MapControl` will no longer remove custom floor selectors, this allows for reusing it across multiple `MapControl`s, but it is now the developers responsibility to dispose of the view
* Improved SDK loading speed by deferring some data downloads

### Fixed

* Fixed rare crash where image was not downloaded correctly
* Fixed issue where adding `externalId` manually to search criteria would cause the search to show no results
* Fixed rare stack overflow crash that could occur when switching floors

## \[4.8.9] 2024-08-21

### Fixed

* Fixed issue where 2D Models without a size would stop rendering when in view
* Fixed issue where flat labels were occluded by other features on the map
* Fixed issue with rendering zoom intervals not being respected when above 22
* Fixed issue where iconScale would not be respected when changed during runtime

## \[4.8.8] 2024-08-21

### Fixed

* Fixed visual bug in `MPDefaultFloorSelector` when using manual floor selection
* Fixed excessive logging of liveData events
* Fixed NPE that would occur when setting a new style with `MapControl.setMapStyle`
* Fixed issue where some Mapbox features would be displayed incorrectly until the map was moved for the first time
* Fixed rare issue where tapping on a location could result in a crash

## \[4.8.7] 2024-07-25

### Fixed

* Fixed rare crash when clearing the map while using Google Maps
* Fixed issue where locations with only 3D features (no icon, geometry, etc.) would not be properly visible
* Fixed issue where the default floor for the venue would not be set when using `automatic` floor selection.

## \[4.8.6] 2024-06-26

### Added

* Added `String` color setter to `MPRouteStopIconConfig`
* Added `showRoadLabels?: boolean` to `MPMapConfig` on Mapbox
  * Sets whether the Mapbox Road labels should be shown on the map. If left undefined, it follows the transition level.

### Changed

* Relaxed `HashMap` requirement when adding `MPRouteStopIconProviders` to `MPDirectionsRenderer`, now the collection only needs to adhere to the `Map` interface

### Fixed

* Fixed padding issue with graphic labels
* Fixed possible crash when receiving route results
* Fixed crash that could occur when clicking on a MapsIndoors geometry
* Fixed crash that could occur when setting a location filter multiple tiles

## \[4.8.5] 2024-06-12

### Fixed

* Fixed crash that happens when loading a Google Maps map
* Fixed a stack overflow that could occur when panning over a venue
* Fixed a rare crash that could occur when the app's configuration changes

## \[4.8.4] 2024-06-07

### Fixed

* Fixed crash experienced when using the SDK with React Native Expo Go

## \[4.8.3] 2024-05-31

### Fixed

* Removed references to Model3D in Mapbox v10 codebase that caused crashes when used

## \[4.8.2] 2024-05-30

### Added

* Get/Set for `MPLocationSettings` on `MPLocation` and `MPPOIType`

### Fixed

* Fixed floor selector not being scrollable on Mapbox
* Fixed a possible crash, when receiving position updates
* Fixed a possible crash, when receiving image for graphic labels

## \[4.8.1] 2024-05-24

### Fixed

* Fixed issue with changing icons on Selection and Highlight Display Rules, when not using a URL

## \[4.8.0] 2024-05-22

### Added

* Support for Multi-stop navigation
  * `MPDirectionsService.query(from: MPPoint, to: MPPoint, stops: List<MPPoint>?, optimize: Boolean)` For getting a route between multiple stops, optimized or not.
    * `MPDirectionsRenderer.defaultStopIcon` Default icon shown for stops. Can be overwritten
    * `MPDirectionsRenderer.setRoute(route: MPRoute, icons: HashMap<Integer,MPRouteStopIconProvider>?)` for overwriting stop icons on specific stops
    * `MPRouteStopIconProvider` interface, for custom implementations of stop icons
    * `MPRouteStopIconConfig.Builder` Icon config, used for a convenient customisation of default stop icon
      * `setColor` Sets the inner color of the pin
      * `setNumbered` Wether the pin should have a number indicating the order of the stop
      * `setLabel` Sets a label underneath the pin, describing the stop

### Fixed

* Issue when deserialising Graphic Labels

## \[4.7.3] 2024-05-06

### Fixed

* Fixed issue where the animated route line is not shown after the first leg on Mapbox
* Fixed issue where not having a fullscreen map could result in weird map behavior on Mapbox

## \[4.7.2] 2024-05-03

### Fixed

* Fixed the issue with the route not being completely cleared on Mapbox when calling `mpDirectionsRenderer.clear()`

## \[4.7.1] 2024-05-02

### Fixed

* Fixed issue with route not clearing on Mapbox.

## \[4.7.0-hotfix.1] 2024-05-01

This is a hotfix for the `com.mapspeople.mapsindoors:mapbox` package only.

### Fixed

* Fixed rendering order for POIs, Walls, Extrusions and Graphic Labels

## \[4.7.0] 2024-04-30

### Added

* Added Graphic Label support for SDKs running on Mapbox
  * See a guide on how to use these new labels on Android [here](https://docsbeta.mapsindoors.com/sdks-and-frameworks/android/display-rules-in-practice/label-styling-through-display-rules#graphic-labels)
* Added ability to disable camera movement when using MPDirectionsRenderer
  * Set the `MPCameraViewFitMode` to `NONE` with `mpDirectionsRenderer.setCameraViewFitMode` to disable camera movement when rendering the route

## \[4.6.0] 2024-04-18

### Added

* Mapbox 11 support
  * With Mapbox 11 we also introduce 3D models on the Android apps
  * Mapbox 11 is optional for MapsIndoors v4, to opt-in you have to use the mapbox-v11 package: `implementation "com.mapspeople.mapsindoors:mapbox-v11:4.6.0"`
    * We recommend to start with Mapbox 11.3.0
    * The default package will continue to use Mapbox 10
* Added support for hiding/showing features to Mapbox 11
  * This includes:
    * 2D models
    * 2D walls
    * 3D models
    * 3D walls
    * 3D Extrusions
    * 3D Extruded Buildings
  * Hiding features can be done programmatically with `mapControl.setHiddenFeatures(List<MPFeature>)`

## \[4.5.0] 2024-04-15

### Added

* Added ability to disable automatic building and floor selection select
  * This disables all automatic behavior, giving full control to the developer for when the building selection or floor is changed.
  * It can be disabled in the `MPMapConfig` when setting up `MapControl`, or during runtime directly on `MapControl` with `setBuildingSelectionMode(MPSelectionMode)` and `setFloorSelectionMode(MPSelectionMode)`

### Changed

* Laxed nullability requirements for `MapControl`'s `selectVenue(MPVenue, boolean)` and `selectBuilding(MPBuilding, boolean)` to now allow for nulls which will deselect instead

### Fixed

* Fixed issue where changing icon on a Display Rule would not have any effect
* Fixed issue where changing icon size on a Display Rule would not have any effect
* Fixed issue where icons would be improperly scaled, resulting in the icons becoming blurry
* Fixed a number of minor crashes

## \[4.4.1] 2024-03-20

### Fixed

* Fixed crash when live data was enabled
* Fixed a dependency issue on the Mapbox version

## \[4.4.0] 2024-03-07 <a href="#user-content-433-2024-02-26" id="user-content-433-2024-02-26"></a>

### Added <a href="#user-content-added" id="user-content-added"></a>

* Added optional venue loading, use `MapsIndoors.load(context, apikey, venueIds, listener)` to load a specific set of venues
  * Venues can be added and removed from load at any time by using `MapsIndoors.addVenueToSync(venueId)` and `MapsIndoors.removeVenueToSync(venueId)`
  * Track the status of venues by adding a listener with `MapsIndoors.addOnVenueStatusChangedListener(MPVenueStatusListener)`

### Fixed <a href="#user-content-fixed" id="user-content-fixed"></a>

* Fixed issue where google map markers would show up briefly before being replaced by actual icons
* Fixed issue where 2d models would become unclickable on Google Maps
* Fixed issue where having very large images or text would result in an OpenGL crash on Google Maps
* Fixed issue where 2d models would have inaccurate hitbox on Mapbox

## \[4.3.4] 2024-02-26 <a href="#user-content-433-2024-02-26" id="user-content-433-2024-02-26"></a>

### Fixed <a href="#user-content-fixed" id="user-content-fixed"></a>

* Issue where a crash could happen when rendering an icon
* Issue where a route could be requested incorrectly on a oneway path, causing no route to be received

## \[4.3.3] 2024-02-23 <a href="#user-content-433-2024-02-23" id="user-content-433-2024-02-23"></a>

### Fixed <a href="#user-content-fixed" id="user-content-fixed"></a>

* Fixed issue where language initialization would fail and crash
* Fixed issue where if some data was parsed wrong would result in a crash

## \[4.3.2] 2024-02-22

### Changed

* Improved initial rendering of polygons on Google Maps

### Fixed <a href="#user-content-fixed" id="user-content-fixed"></a>

* Crash that could occur loading data from storage
* Crash that could occur when selecting a location on Mapbox
* Fixed line breaking on Mapbox to be more consistent with other platforms

## \[4.3.1] 2024-02-15

### Changed <a href="#user-content-changed" id="user-content-changed"></a>

* Map click selection now only happens when features are in the visible range

### Added <a href="#user-content-added" id="user-content-added"></a>

* `getLocationSettings` on `MPLocation`, `MPPOItype` and `MPSolutionConfig`
* Support for non-selectable locations

### Fixed <a href="#user-content-fixed" id="user-content-fixed"></a>

* Issue where setting null value on some displayrule values would cause a crash
* Labels potentially being too close to icons on Google Maps
* Unlocked zoom being capped at zoom level 22 on Mapbox
* Geometries missing when locations are clustered
* Extrusions not being clickable
* Text font and letterspacing being inconsistent with other platforms

## \[4.3.0] 2024-01-24

### Changed

* Changed the default rendering of selected Locations.

### Added

* Added `setHighlight` and `clearHighlight` to `MapControl` which allows you to highlight a list of locations
* Added `setNewSelection` to `MPSolutionConfig` this allows you to change back to the selection rendering of the previous SDK versions. Default is true
* Added new values to MPDisplayRule
  * iconScale
  * iconPlacement
  * labelType
  * polygonLightnessFactor
  * wallLightnessFactor
  * extrusionLightnessFactor
  * labelStyleTextSize
  * labelStyleTextColor
  * labelStyleTextOpacity
  * labelStyleHaloOpacity
  * labelStyleHaloWidth
  * labelStyleHaloBlur
  * labelStyleBearing
  * badgeVisible
  * badgeZoomFrom
  * badgeZoomTo
  * badgeRadius
  * badgeStrokeWidth
  * badgeStrokeColor
  * badgeFillColor
  * badgePosition
* Added `addExcludeWayType` , `clearExcludeWayType` to `MPDirectionsService` to allow the user to exclude specific `MPHighway` 's when querying for a route.
* Added two new `MPSolutionDisplayRule` 's `SELECTION` and `HIGHLIGHT` that allows you to modify the look of highlighted and selected Locations.
* Support for Flat labels (on Mapbox)

### Fixed

* Fixed an issue where user could end up selecting floors with map clicks
* Fixed an issue with `avoidWayType` not respecting all `MPHighway`

### Deprecated

* `clearWayType` use `clearAvoidWayType` instead
* `setMapLabelFont(typeface, color, showHalo)` use `setMapLabelFont(typeface)` instead. For changing Colors etc. use the DisplayRule instead.
* `setMapLabelTextSize` use `MPDisplayRule.setLabelStyleTextSize` instead

## \[4.2.12] 2024-01-16

### Fixed

* Fixed an edge case where Directions outside Venues would not be possible on Google Maps

## \[4.2.11] 2024-01-11

### Fixed

* Fixed issue where `MapControl` would crash with google maps, when calling `onDestroy`

## \[4.2.10] 2024-01-08

### Changed

* Updated loading logic for Mapbox rendering, which will in some cases give a significant increase in rendering responsiveness.

### Fixed

* Fixed issue where marker icons could crash if the icon disappeared before rendering
* Fixed NPE when calling `MapControl.setMapPadding`
* Fixed possible NPE when getting `tilesUrl` from a `MPVenue`

## \[4.2.9] 2023-12-21

### Fixed

* Fixed issue where removing/adding a `MPCameraEventListener` during the callback from a `MPCameraEventListener` could result in a crash.
* Fixed issue where 2D models could cause a crash.

## \[4.2.8] 2023-12-15

### Fixed

* Fixed issue where initializing `MapControl` could result in the initial tileset not being visible.
* Fixed issue where reloading `MapControl` would result in the `OnMapClickListener` not working properly.

## \[4.2.7] 2023-12-14

### Fixed

* Fixed issue where locations would use the wrong zoom level when using Mapbox
* Fixed issue where clicking on a custom `Marker` on Google Maps could result in a crash
* Fixed issue where setting a `MPCameraEventListener` could result in a crash
* Fixed issue where Google Maps would spam the log with messages about missing tiles.

## \[4.2.6] 2023-11-16

### Fixed

* Fixed issue where polygon display rules would not be applied on Google Maps.
* Fixed issue where the render thread would exclusively draw to a single instance of `MapControl`.
* Fixed issue where `goTo` would use wrong data from some entities, setting the floor index to `NO_FLOOR_INDEX` in those cases.
* Fixed issue where cached data check could fail, when all data is available.

## \[4.2.5] 2023-10-20

### Fixed

* Fixed a crash on google external directions

## \[4.2.4] 2023-10-17

### Changed

* The SDK now targets Android 14 (API level 34)

### Fixed

* Fixed a crash that could occur when shutting down the SDK

## \[4.2.3] 2023-10-10

### Fixed

* Fixed issue where the disk cache would be accessed after it was closed
* Fixed issue where tapping on the map and moving it in quick succession could result in a crash
* Fixed race condition where the DataSetCacheManager was sometimes initialized too late
* Fixed issue where icons could be null when handed over to google maps
* Fixed rare NPE when selecting a location

## \[4.2.2] 2023-09-22

### Fixed

* Fixed issue where the `disk cache` would be accessed after it was closed
* Fixed issue where tapping on the map and moving it in quick succession could result in a crash
* Fixed race condition where the `DataSetCacheManager` was sometimes initialized too late
* Fixed issue where icons could be null when handed over to google maps
* Fixed rare NPE when selecting a location

## \[4.2.1] 2023-09-21

### Fixed

* Fixed multiple rendering and cache related crashes

## \[4.2.0] 2023-09-20

### Added

* Added functionality to respect the building outline `display rule` set in the CMS
* Added functionality to show floor plans
* Added functionality to remove route leg buttons from the map
  * Use `MPDirectionsRenderer` to call `showRouteLegButtons(boolean)`

### Removed

* `3D models` are still experimental, and will not be included in this release

### Fixed

* Fixed label text color and halo options not being respected when using mapbox
* Fixed build issue where some classes had their methods transformed to be final
* Fixed issue where a location's position sometimes was moved unintentionally

## \[4.1.11] 2023-08-24

### Fixed

* Fixed issue where tapping on moving livedata would move the camera to the location's original position
* Fixed issue where setting a position provider with existing position data would not show a puck until new position data became available
* Fixed issue where setting a different language than the default language could cause the map to not load
* Fixed issue where reloading the SDK would set a different language than the first load
* Fixed issue where reloading the SDK rapidly multiple times would cause crashes

## \[4.1.10] 2023-08-02

### Changed

* Updated Display Rule validation to only throw when developer mode is enabled (it can be enabled by calling `MPDebugLog.enableDeveloperMode(true)`)
  * Additionally, validation will now give more usable error messages

### Fixed

* Fixed issue where setting departure time to the current time would fail route creation when using Google Maps in some cases

## \[4.1.9] 2023-07-24

### Changed

* External routes will now respect the language set in the SDK
* The SDK now supports zoom levels beyond 22 where applicable

### Fixed

* Fixed rare issue where SDK would attempt to update a dead marker resulting in a crash

## \[4.2.0-beta.1] 2023-06-28

### Added

* Added support for 3D models

## \[4.1.8] 2023-06-28

### Fixed

* Fixed issue where setting departure time on a route would cause the SDK to crash
* Fixed issue where loading the SDK offline could cause a crash
* Fixed issue where route line would be obscured by walls and extrusion when using Mapbox

## \[4.1.7] 2023-06-23

### Fixed

* Fixed timing issues with display rules and applying UserRoles
* Fixed issue where a rendered route would be obscured

## \[4.1.6] 2023-06-02

### Fixed

* Fixed compilation issues, due to a build configuration

## \[4.1.5] 2023-06-01

### Fixed

* Fixed crashes happening when loading new solutions while a load is ongoing

## \[4.1.4] 2023-05-25

### Changed

* Updated Mapbox version to 10.13.0

### Fixed

* Fixed issue where MapsIndoors could crash when other markers were present on the map
* Reduced memory usage of 2D models
* Fixed issue where changing solution on the same map would not work

## \[4.1.3] 2023-05-16

### Fixed

* Fixed occasional crashes when destroying MapsIndoors
* Fixed occasional crash when selecting location after load

## \[4.1.2] 2023-05-11

### Fixed

* Fixed map padding not being applied to camera movement when using Mapbox
* Fixed delay when selecting a location until its info window appeared on Mapbox
* Fixed `selectLocation` not moving the camera when the location was outside the viewport
* Fixed crash that could occur when Mapbox can not generate a route
* Fixed issue where large areas were not being shown on Google Maps
* Fixed issue where SDK would crash if solution data is unavailable remotely, but the local cache data stored
* Fixed issue where location display rules would receive a unidentifiable name/id

## \[4.1.1] 2023-03-09

### Changed

* Made `MPMapBehavior` JSON serializable, and its getters public
* Updated MapsPeople watermark

### Fixed

* Fixed rare case where the SDK would load successfully but still crash
* Fixed being unable to get `MPSolutionDisplayRule`s by name
* Fixed issue where tiles would not update when switching floors

## \[4.1.0] 2023-02-21

### Deprecated

* Deprecated `MPBuilding.getInitialZIndex()` and added `getInitialFloorIndex()` to replace it
* Deprecated `MPBuilding.getFloorByZIndex()` and added `getFloorByIndex` to replace it
* Deprecated `MPDataSetCache.setScope(Context, MPDataSetCacheScope)` and added \`setScope(MPDataSetCacheScope) to replace it
* Deprecated `MPDataSetCacheItem.getCacheSize(Context)` and added `getCacheSize()` to replace it
* Deprecated `MPDirectionsService(Context)` CTOR and added `MPDirectionsService()` to replace it
* Deprecated `MPFloor.getZIndex()` and added `getFloorIndex` to replace it
* Deprecated `MPFloor.setZIndex()` and added `setFloorIndex` to replace it
* Deprecated `MPRouteCoordinate.getZIndex()` and added `getFloorIndex` to replace it
* Deprecated `MPRouteCoordinate.setZIndex()` and added `setFloorIndex` to replace it
* Deprecated `MPSolutionInfo` as it duplicates information from `MPSolution`

### Fixed

* Fixed `ANY_DOMAIN` livedata domain not having any effect
* Fixed rare issue where collision between markers could cause a crash
* Fixed issue where setting some listeners could cause a crash
* Fixed reference documentation around `MPVenue.getName()`, see [the migration guide](https://docs.mapsindoors.com/content/getting-started/v4-migration-guide/#venue-name) for more information
* Various fixes and improvements

## \[4.0.5] 2023-01-26

### Added

* Added Extension functions for converters, these are usable from kotlin projects

### Fixed

* Fixed issue where SDK would try to use destroyed context to access files directory
* Fixed `MPSelectionBehavior` and `MPFilterBehavior` super class `MPMapBehavior` not being public
* Fixed a number of memory leaks

## \[4.0.4] 2023-01-17

### Fixed

* Fixed issue with the livedata SDK where subscribing to some domains would subscribe to multiple domains instead
* Fixed issue where `MPApiKeyValidator` would send multiple errors instead of just one
* Fixed issue where the SDK would update UI elements on non-main thread
* Fixed memory leaks where the map view was leaked

## \[4.0.3] 2023-01-05

### Added

* Added factory methods `fromValue(int)` and `fromStringValue(String)` to `MPCollisionHandling`
* Added `removeOnFloorUpdateListener(OnFloorUpdateListener)` to `MapControl`
* Added `isInside(MPLatLng)` method to `MPGeometry`

### Deprecated

* Deprecated `getCurrentStyle()` and `setCurrentStyle(String)` in `MPFloor`

### Fixed

* Fixed issue where main and solution type rules could not be fetched by name
* Fixed issue where SDK would crash during startup
* Fixed issue where giving `MPPoint`s with no floorIndexes to `MPDirectionsService` would result in bugged routes
* Fixed issue when generating `MPPolygonGeometry` from `MPMultiPolygonGeometry`
* Fixed memory leak where the SDK would hold onto the maps `FrameLayout`
* Fixed issues that could occur if the SDK is shut down during startup

## \[4.0.2] 2022-11-02\[​]

### Added

* Added Reverse Geocoding interface
  * It can be used to fetch mapsindoors data from a given geographical coordinate
* Added ability to use a `Context` when building a `MPMapConfig`, instead of an `Activity`

### Fixed

* Fixed 2D model rendering related issues
* Fixed Live Data badges in some cases overlapping the icon or label
* Fixed issue with Main Display Rule not being respected in some instances
* Fixed race-condition crash that could occur on Google Maps

## \[4.0.1] 2022-10-18

### Added

* Added `getLocationsByExternalIds` to `MapsIndoors`
  * This can be used to get a list of locations based on a corresponding list of external ids
* Exposed layer names on Mapbox implementation, allowing custom layers to be inserted between `MapsIndoors` layers
  * The list of layers can be accessed from the `MPLayers` class

### Fixed

* Fixed issue with display rule inheritance from the main display rule
* Fixed memory issue that could occur when loading a large amount of 2D models
* Various minor fixes

## \[4.0.0] 2022-09-29

### Added

* Support for new map providers
  * Mapbox
    * MapsIndoors can now be packaged with the Mapbox v10 SDK
* 2D Model support
  * The Android SDK is now capable of displaying 2D Models (also known as Ground Overlays)
* `goTo()`
  * A new method for moving the camera to MapsIndoors locations, this new method `goTo()` can be used with any class that implements `MPEntity`, which includes but is not limited to `MPLocation`, `MPFloor`, and `MPBuilding`
* Solution Config
  * The Android SDK now supports the Solution Config
  * This also introduces the new Main Display Rule, which is bundled into the solution config, along with collision handling, clustering and 3D (walls and extrusions) opacity

### Changed

* Maven package changes
  * With the move to supporting multiple map platforms, we had to move some stuff around in the package, the SDK can now be downloaded via these maven dependencies
    * `'com.mapspeople.mapsindoors:googlemaps:4.0.0'`
    * `'com.mapspeople.mapsindoors:mapbox:4.0.0'`
* Naming convention
  * All public classes now has a MP prefix, with the exemption of MapControl, MapsIndoors and some listeners
  * New interfaces will use the MPI prefix
  * Some public classes will have a `[INTERNAL]` at the top of their javadoc, these classes are used for communication between the core SDK and map platform specific code. Refrain from using these classes unless you know what you are doing
* Display Rules
  * Display rules have been reworked completely
  * It has been reduced to a single class MPDisplayRule
  * It is now reference based, thus any changes to the rule are instantaneous
  * `MPDisplayRuleOptions` has been added and is used to bulk edit display rules
  * Display rules can be reset with `reset()` this will return the display rule to the state it has in the CMS
* Display search results
  * Has been renamed to `setFilter()`, and have been reworked completely
  * Now takes a `MPFilterBehavior`, which is used to dictate the behavior of the filter on the map
* Selection
  * Selection, like filtering, has improved, it now uses a `MPSelectionBehavior` which is used to dictate the behavior of the selection on the map
* Initialization (MapsIndoors and MapControl)
  * Now `MapsIndoors` is initialized with the `load(appContext, APIKey, listener)` method. This applies to both initial initialization, and when updating the context or API key
  * `MapControl` no longer has a public constructor and initializer method, it now uses a factory method `create(MPMapConfig, onMapControlReady)`
    * The `onMapControlReady` listener will wait for MapControl to finish initializing, this guarantees that `MapControl` cannot be aquired in a broken state
    * The `MPMapConfig` is a collection of settings that previously had to be set on MapControl at various stages of initialization to take effect. These are now bundled into a single package that take effect when `MapControl` finishes initializing
      * These settings can still be updated individually at runtime
* Routing
  * `MPRoutingProvider` has been renamed to `MPDirectionsService` to align with other platforms
  * `MPDirectionsRenderer` has been simplified in use, after creation `MPDirectionsRenderer(MapControl)`, `setRoute(MPRoute)` can be called and it will display the route on the map
* Clustering and Collision handling has been moved from `MPAppConfig` to `MPSolutionConfig`, and have recieved proper typing, Collision handling is now defined by an enum `MPCollisionHandling`
  * Collision handling now has multiple states that allow for better control of how markers are shown on the map

### Removed

* The MPPositionProvider interface has been reduced to 3 methods thare are essential for interfacing a position provider with the SDK
* A large amount of unused/unwanted/unusable classes have been removed from the SDK

### Fixed

* Optimized memory management of icons
* Display rules are now applied much more consistently

[<br>](https://docs.mapsindoors.com/event-logging)
