Changelog History¶
Detailed changelog from v5.0.0 release.
5.10.0 (13.08.2026)¶
- Added
planOperationalErrorFlowto receive errors that occur while the plan is operating, for example location provider failures. - Fixed a location provider failure replacing the plan loading status: provider errors are now delivered to
planOperationalErrorFlowinstead ofplanStatusFlow, so the plan keeps loading and remains usable. CollectplanOperationalErrorFlowbefore attaching the plan view; if you handled these errors viaplanStatusFlow, switch to it. - Fixed a preloaded plan reused across screens leaving an earlier screen blank:
getView()now returns a new lightweight host container on each call and shows the plan in the most recently attached host, automatically returning it to the previous screen when the current one is destroyed. CallgetView()once per screen and do not compare results by identity or cache the view beyond the screen's lifetime; existing re-attachment workarounds keep working.getView()is now annotated@MainThread. ExpoFpPlanPreloader.disposePreloadedPlan()andremoveAllPreloadedPlans()can now be called from any thread and dispose each plan exactly once; presenter cleanup always runs on the main thread.- Fixed double encoding of URL parameters with special characters when loading a plan, which broke booth selection by name.
- Removed
ExpoFpPlanParameter.ServiceWorker; the floor plan does not read theswparameter. UseExpoFpPlanParameter.Raw("sw", "1")if you still need to send it.
5.9.1 (10.08.2026)¶
- Fixed plan event callbacks and custom message handlers stopping when the plan re-initializes inside the WebView.
5.9.0 (30.07.2026)¶
- Added ability to download plan archive from direct link.
5.8.0 (19.06.2026)¶
- Added new models:
ExpoFpGeoConfig,ExpoFpGeoAnchor. - Added
getGeoConfig()to request the plan geographic configuration: map orientation (bearing) and the GPS anchor points that georeference the plan. Returnsnullwhen the plan has no GPS configuration.
5.7.0 (17.06.2026)¶
- Fixed a preloaded plan reused across screens losing its message listener after the hosting Activity/Fragment was destroyed, so booth/category clicks and other events stopped arriving on re-entry. Keep a strong reference to the listener; the SDK does not retain it.
5.6.0 (15.06.2026)¶
- Improved plan initialization: plan readiness is now detected through a script injected at document start, so commands called before the plan is ready no longer fail silently and execute once the plan becomes ready.
- Android System WebView 101 or newer is now required; on older versions the plan reports an explicit loading error with the installed WebView version.
5.5.1 (04.06.2026)¶
- Fixed the plan rendering blank in some hosts (e.g. Jetpack Compose
AndroidView).getView()now returns a self-sizing container and detaches itself from its previous parent, so manualFrameLayoutwrapping and reparenting are no longer required. Existing wrapping keeps working.
5.5.0 (19.05.2026)¶
- Added
selectAccessibleRoute(waypoints)to build a route restricted to accessible segments only.
5.4.0 (30.03.2026)¶
- Added new models:
ExpoFpBounds,ExpoFpPoint,ExpoFpPOISelector,ExpoFpPOISelectors,ExpoFpZoomOptions. - Added
fitBounds(bounds, options)to display a plan or specific location within its boundaries. - Added
zoomTo(selectors, options)to zoom to a specific location on a plan. - Added
getBounds(selectors)to request coordinates about specific booths and exhibitors. - Added
highlightEntities(externalIds)to highlight booths and exhibitors together. - Added
reset()to reset the plan to its original state. - Added
setBuiltInGpsTrackingEnabled(isEnabled)andisBuiltInGpsTrackingEnabled()to manage built-in GPS tracking. - Added
setMessageHandler(messageHandler, callbackName)andremoveMessageHandler(callbackName)to set custom message handler for specific callbacks on a plan. - Added
deselectCurrentPosition()to reset current position. - Added
deselectRoute()to delete the built route. selectCurrentPosition(position, focus)positionparameter is now required (non-null).selectRoute(waypoints)waypointsdefault value removed, now requires explicit list.setLocationProvider()now automatically disables built-in GPS tracking;removeLocationProvider()re-enables it.
5.3.4 (23.02.2026)¶
- Fixed plan reload failing with Initialization Timeout.
5.3.3 (10.02.2026)¶
- Fixed offline plan loading issue when cached plan data was partially cleared by the system.
5.3.2 (03.02.2026)¶
- Fixed booth selection reset when calling
setLocationProvider().
5.3.1 (10.01.2026)¶
- Bug fixes and minor improvements.
5.3.0 (23.12.2025)¶
- Added
ExpoFpPlanParameter.DisableGpsforEnable blue dot via GPS->GPS Onlyfunctionality.
5.2.1 (27.11.2025)¶
- Fixed valueless URL parameters formatting in
applyAdditionalParams(). - Fixed WebView input fields not responding on some devices by removing
webView.isEnabledtoggle during loading. - Improved plan loading performance by consolidating JavaScript interfaces.
5.2.0 (14.11.2025)¶
- Fixed console log interception not working on Android due to JavaScript syntax error - changed forEach call from string to array syntax.
- Added
IExpoFpLocationProvider.isLocationUpdatingproperty to track location update state. IExpoFpLocationProvider.startUpdatingLocation()is now synchronous (not a suspend function). All provider errors are redirected toExpoFpLocationProviderDelegate.errorOccurred(error, provider)andIExpoFpPlanPresenter.planStatusFlow.- Added default values for selection methods - they now act as deselection methods when called with default values.
- Added
IExpoFpPlanPresenter.selectRoute(from, to)for building routes with start and/or destination point. - Fixed:
IExpoFpPlanPresenter.selectRoute(emptyList())now correctly resets the route.
5.1.8 (07.11.2025)¶
- Fixed memory leak where message listeners retained references to destroyed Activity/Fragment instances.
- Added automatic message listener cleanup on Activity/Fragment destroy via lifecycle observer.
5.1.7 (05.11.2025)¶
- Fixed downloaded plans not loading due to incorrect WebViewAssetLoader path configuration with absolute resource paths in HTML.
- Fixed direction routes JSON deserialization crash when receiving fractional line weights (changed ExpoFpLine.weight from Int? to Double?).
- Fixed memory leak in removeMessageListener where debug message handlers continued holding references to the message listener, preventing garbage collection.
5.1.6 (03.11.2025)¶
- Fixed JSON serialization crash when location provider returns positions with Infinity or NaN coordinate values.
5.1.5 (30.10.2025)¶
- Fixed detailsDidClick callback not being called when deselecting elements by clicking on empty map area.
5.1.4 (29.10.2025)¶
- Fixed route clearing when calling selectRoute(emptyList()).
5.1.3 (28.10.2025)¶
- Fixed bookmark display issue caused by incorrect JSON serialization of optional fields.
5.1.2 (27.10.2025)¶
- Fixed OutOfMemoryError when downloading large offline plans by implementing streaming download with buffered I/O instead of loading entire file into memory.
5.1.1 (24.10.2025)¶
- Removed onlyAccessible from selectRoute(waypoints) method.
- ExpoFpPlanParameter.Raw(name, value) value now can be null.
- Added changeLanguage(language) method with predefined languages.
- Fixed JavaScript message handlers (directionDidBuild, visitedDidClick, bookmarkDidClick, categoryDidClick, etc.) were using incorrect interface registration, preventing callbacks from working properly.
- Fixed DirectionHandler and DetailsHandler now correctly handle null values for direction reset and details deselection scenarios.
- Fixed preloaded plans now persist across Activity/Fragment lifecycle changes. Previously, message handlers were being removed when Activity/Fragment was destroyed, breaking callbacks on reattachment. Preloaded plans must now be explicitly disposed via ExpoFpPlanPreloader.disposePreloadedPlan().
- Fixed memory leak with non-global location providers. The presenter now correctly calls stopUpdatingLocation() and clears the delegate reference when disposing, preventing location providers from holding references to the WebView and presenter.
5.1.0 (06.10.2025)¶
- Added ExpoFpLocationProviderDelegate.errorOccurred(error: ExpoFpError, provider: ExpoFpLocationProviderType) to listen location-provider errors.
- Added predefined list of ExpoFpPlanParameter to improve initialization and plan management.
- Removed ExpoFpLinkType.RawLink; use ExpoFpLinkType.ExpoKey(...) together with ExpoFpPlanParameter instead.
- Added isSaved parameter to IExpoFpPlanPresenter.applyAdditionalParams(...) to allow saving parameters into IExpoFpPlanPresenter.additionalParams.
- Moved isDebugModeEnabled from global state to plan initialization/reload for better controllability (IExpoFpPlanPresenter.isDebugModeEnabled, reloadPlan(..., isDebugModeEnabled: Boolean?)).
5.0.0 (28.08.2025)¶
- SDK architecture has been completely redesigned — now a IExpoFpPlanPresenter is responsible for managing a plan
- UI layer is passive, reusable, and lightweight
- Implemented support for Kotlin coroutines for asynchronous operations
- You can download an unlimited number of plans for offline use
- You can preload downloaded plans and plans from the internet for later use, with no limits
- Improved stability and loading speed
- Location provider wrappers are now open source