Steerpath Indoor Navigation SDK.
Steerpath Demo App is available in Google Play. (uses SDK version: 3.0.0-rc22.1)
Steerpath Example App: https://bitbucket.org/nimbledevices/steerpath-android-example.git
Mapbox SDK Documentation: https://www.mapbox.com/android-sdk/api/5.3.0/
Change log
Show the changelog
Steerpath Android SDK
# Change Log
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Explicit Versioning](https://github.com/exadra37-versioning/explicit-versioning).
----------------------------------------------------------------------------------------------------
## [android-3.4.4.0] - 2019-05-02
### Fixed
- RouteStep's buildingRef when navigating from building to another
### Added
- MapUtils.zoomToRouteStep()
- MetaFeature.geometryJson()
- MetaFeature.getFloors(), valid for buildings.
----------------------------------------------------------------------------------------------------
## [android-3.4.3.6] - 2019-04-12
### Fixed
- cache clearing fix
----------------------------------------------------------------------------------------------------
## [android-3.4.3.5] - 2019-03-05
### Fixed
- FollowMe- and CompassHeading mode enforces correct building selection.
----------------------------------------------------------------------------------------------------
## [android-3.4.3.4] - 2019-01-16
### Fixed
- Building selection issue when buildings are overlapping each other. (Underground floor of Building A is actually below of building B)
----------------------------------------------------------------------------------------------------
## [android-3.4.3.3] - 2018-12-18
### Fixed
- Telemetry life cycle fix (backwards compatibility patch)
----------------------------------------------------------------------------------------------------
## [android-3.4.3.2] - 2018-12-18
### Added
- SEA2 region support (backwards compatibility patch)
----------------------------------------------------------------------------------------------------
## [android-3.4.3.1] - 2018-08-25
### Changed
- TelemetryConfig throws IllegalArgumentException if null userId, apiKey or baseUrl is given.
----------------------------------------------------------------------------------------------------
## [android-3.4.3.0] - 2018-08-24
### Changed
- Java 8
- OkHttp 3.11.0
- Support Library 27.1.1
- Support Library dependencies declared as "implementation". This means we dont transitively
export the dependencies to other modules such as the app.
- targetSdkVersion 27
- compileSdkVersion 27
### Deprecated
- SteerpathMarkerAdapter
- SteerpathMapMarkerView
- SteerpathMarkerView
- SteerpathMarkerViewOptions
----------------------------------------------------------------------------------------------------
## [android-3.4.2.2] - 2018-08-17
### Fixed
- Building focusing issue when moving camera programmatically with SteerpathMap.setCameraPosition()
- Another building is allowed to gain focus in route preview mode
----------------------------------------------------------------------------------------------------
## [android-3.4.2.1] - 2018-07-11
### Fixed
- minor step-by-step instructions translation issue
----------------------------------------------------------------------------------------------------
## [android-3.4.2.0] - 2018-07-11
### Added
- RouteOptionsFactory.MARKER_RENDER_MODE_SYMBOL_LAYER. Route line icons can be rendered with SymbolLayers instead of
MarkerViews. This is to fix "route line icon glitch" -issue; sometimes Mapbox does not render MarkerView at all
unless map is panned, rotated or zoomed a bit.
### Changed
- Default route icon render mode is now MARKER_RENDER_MODE_SYMBOL_LAYER. See ExampleApp (CustomRouteActivity) for customization or
if you need to keep using MARKER_RENDER_MODE_VIEW.
### Fixed
- iBeacon fix
- removed dependency to Guava
- iOS-like behaviour fix: when route preview is started, floor is switched automatically to that floor where BlueDot is
- route line rendering fixes
### Examples
- ExampleApp tag 1.1.23
----------------------------------------------------------------------------------------------------
## [android-3.4.1.2] - 2018-06-08
### Fixed
- Position estimate fix
----------------------------------------------------------------------------------------------------
## [android-3.4.1.1] - 2018-05-25
### Fixed
- Problem that caused Blue Dot to jump outside of beaconised area
- Blue Dot update when using fixed origin for routing
----------------------------------------------------------------------------------------------------
## [android-3.4.1.0] - 2018-05-17
### Changed
- RoutePreviewBadge, StepByStepBadge and DirectionList Look & Feel update. Similar than iOS SDK now.
### Added
- DirectionsAssetHelper.TextComposer.getCurrentActionInstructions(), getNextActionInstructions(),
getDistanceToNextStep(), getTotalDistanceEstimation(), getTotalTravelTimeEstimation()
- SteerpathMapView.setCompassCalibrationRecommendedListener()
### Fixed
- BottomSheet peek fix
### Examples
- ExampleApp tag 1.1.22
----------------------------------------------------------------------------------------------------
## [android-3.4.0.0] - 2018-05-16
### Changed
- Fake Location rework. Fake Location does not depend on SteerpathMapView anymore. Fake Location simulates
real positioning more accurately by giving Location updates once per second.
FusedLocationProviderApi.Api.get().enableFakeLocation(boolean) to enabled or disable.
FusedLocationProviderApi.Api.get().getFakeLocationSource().setLocation(Location) to give new fake Location.
See https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.4.0.0_migration_guide.txt
### Removed
- SteerpathMapView.setStyleURL()
- SteerpathMapView.showSteerpathLogo()
- SteerpathMapView.showDebugButton()
- SteerpathMapView.showMonitorButton()
- SteerpathMapView.enableFakeLocation()
- SteerpathMapView.setupClickForFakeLocation()
- SteerpathMapView.isFakeLocationEnabled()
- SteerpathMapView.setLocationTooOldThreshold()
- SteerpathMapView.setMapTileMaxAge()
### Examples
- ExampleApp tag 1.1.21
----------------------------------------------------------------------------------------------------
## [android-3.3.12.1] - 2018-05-08
### Fixed
- BluetoothScanner silent scan restart improvement
- BluetoothScanner initialisation fix
- BottomSheet animation fix when navigating
- SteerpathMapView.pauseNavigation() and resumeNavigation() isPaused-check
- While navigating, failed reroutes are silently discarded
### Known Issues
- Does not resume real positioning after using fake location. To be fixed in next release.
----------------------------------------------------------------------------------------------------
## [android-3.3.12.0] - 2018-04-29
### Added
- SystemStatus Broadcast. App can register BroadcastReceiver to listen com.steerpath.sdk.STATUS_BLUETOOTH_RESTART_RECOMMENDED
and com.steerpath.sdk.STATUS_BLUETOOTH_INACTIVITY_WARNING.
- DeveloperOptions.WITH_BLUETOOTH_SCANNER_FAILURE_TEST. When used, will fake Bluetooth Scan Failures in every 30 seconds.
For development and testing purposes.
### Fixed
- BluetoothScanner state machine issue. Caused Blue Dot to become unresponsive after Bluetooth has
been repeatedly turned OFF/ON couple of times.
- BluetoothScanner catches SCAN_FAILED_APPLICATION_REGISTRATION_FAILED. Rarely this can happen:
https://stackoverflow.com/questions/35376682/how-to-fix-android-ble-scan-failed-application-registration-failed-error
----------------------------------------------------------------------------------------------------
## [android-3.3.11.6] - 2018-04-29
### Fixed
- Location filtering fix
----------------------------------------------------------------------------------------------------
## [android-3.3.11.5] - 2018-04-25
### Fixed
- Rerouting does not anymore cause Step-by-Step badge to animate away - and then reappear. This is to
prevent difficult issue where "Rerouting..."-badge never got updated. Makes UI less jumpy too.
----------------------------------------------------------------------------------------------------
## [android-3.3.11.4] - 2018-04-25
### Fixed
- BluetoothScanner latency fix. Positioning thread is restarted if we detect too many unhandled events.
----------------------------------------------------------------------------------------------------
## [android-3.3.11.3] - 2018-04-25
### Fixed
- Telemetry filtering fix
----------------------------------------------------------------------------------------------------
## [android-3.3.11.2] - 2018-04-15
### Fixed
- UncaughtExceptionHandler restarts positioning threads. This is a fix to a problem where Blue Dot gets stuck
after very long time period of continuous usage (25-30++ minutes).
----------------------------------------------------------------------------------------------------
## [android-3.3.11.1] - 2018-04-04
### Fixed
- Implemented this workaround: https://code.videolan.org/videolan/vlc-android/commit/766d8e8c39341b2a3f831e8e32ce7ea67960eea2
to counter these issues https://issuetracker.google.com/issues/37133650 and https://issuetracker.google.com/issues/37086568
----------------------------------------------------------------------------------------------------
## [android-3.3.11.0] - 2018-04-04
### Added
- Route line can be rendered with LineLayers in addition to Polylines.
This is overcome Mapbox 5.5 issue: https://github.com/mapbox/mapbox-gl-native/issues/11440
SymbolLayer support will come later.
### Fixed
- GL markers in route line
### Examples
- ExampleApp tag 1.1.20
----------------------------------------------------------------------------------------------------
## [android-3.3.10.0] - 2018-04-04
### Added
- Improved SDK logging facilities. Keeps 5 last log files, discarding always the oldest. All log files
can be shared or manually deleted from the Monitor-view.
----------------------------------------------------------------------------------------------------
## [android-3.3.9.4] - 2018-03-26
### Fixed
- 200ms Thread.sleep() before adding a Polyline to Mapbox. Workaround for issue https://github.com/mapbox/mapbox-gl-native/issues/11440
ANR is less likely to happen.
----------------------------------------------------------------------------------------------------
## [android-3.3.9.3] - 2018-03-26
### Fixed
- R.string.sp_continue starts now with Capital letter.
- Refactored "building selection" - mechanism. Building changes more responsively now when panning the map.
### Deprecated
- SteerpathMap.setOnCameraChangeListener(). Use steerpathMap.getMapboxMap().addOnCameraIdleListener(),
addOnCameraMoveCancelListener(), addOnCameraMoveListener() and addOnCameraMoveStartedListener() instead.
----------------------------------------------------------------------------------------------------
## [android-3.3.9.2] - 2018-03-22
### Fixed
- R.string.sp_take_transportation_format, R.string.sp_enter, R.string.sp_go, R.string.sp_go_up
and R.string.sp_go_down starts now with Capital letter.
### Examples
- ExampleApp tag 1.1.19
----------------------------------------------------------------------------------------------------
## [android-3.3.9.1] - 2018-03-21
### Fixed
- Disappearing floor selection and blue dot indicator in LevelPickerView when navigating and
panning map to a location without building.
----------------------------------------------------------------------------------------------------
## [android-3.3.9.0] - 2018-03-20
### Added
- OfflineBundle supports assets
----------------------------------------------------------------------------------------------------
## [android-3.3.8.4] - 2018-03-20
### Fixed
- Minor routing-related fix
----------------------------------------------------------------------------------------------------
## [android-3.3.8.3] - 2018-03-20
### Fixed
- Stability fix
----------------------------------------------------------------------------------------------------
## [android-3.3.8.2] - 2018-03-20
### Fixed
- on directions error, navigation is stopped automatically. Callback to RouteListener.onStopped() will not be invoked.
----------------------------------------------------------------------------------------------------
## [android-3.3.8.1] - 2018-03-20
### Fixed
- MapUtils.refresh() updated. Altering zoom level to trigger re-rendering did not work very well anymore
with Mapbox 5.x
----------------------------------------------------------------------------------------------------
## [android-3.3.8.0] - 2018-03-20
### Changed
- When reroute happens, Step-by-step badge and DirectionSheet are updated with "Rerouting..." item.
This is to prevent ui and routing engine becoming out of sync; i.e user clicking items that does not
actually exist.
----------------------------------------------------------------------------------------------------
## [android-3.3.7.1] - 2018-03-16
### Fixed
- Fixed OkHttp dependency (was 3.10, should have been 3.10.0)
----------------------------------------------------------------------------------------------------
## [android-3.3.7.0] - 2018-03-15
### Changed
- Derived from Mapbox 5.5
- OkHttp 3.10
----------------------------------------------------------------------------------------------------
## [android-3.3.6.7] - 2018-03-15
### Fixed
- SDK log sharing file provider authority. If your app cannot be installed to the device due to conflicting
file provider authority (com.steerpath.sdk.fileprovider), override this string resource: R.string.sp_fileprovider_authority.
----------------------------------------------------------------------------------------------------
## [android-3.3.6.6] - 2018-03-15
### Fixed
- SDK log sharing TransactionTooLargeException -issue
----------------------------------------------------------------------------------------------------
## [android-3.3.6.5] - 2018-03-15
### Fixed
- When rerouting is handled by app (RouteListener.onReRouteRecommended() returns true), route snapper is
halted until SteerpathMapView.updateRoutePlan() is called.
----------------------------------------------------------------------------------------------------
## [android-3.3.6.4] - 2018-03-15
### Fixed
- Route preview mode is consistent with iOS SDK now. When in preview mode, Blue dot is not attached to the
route line (user can wander off the route). Blue Dot is attached to the route after actual navigation starts.
- Route Preview "Directions"-button is now "Start"-button
----------------------------------------------------------------------------------------------------
## [android-3.3.6.3] - 2018-03-15
### Fixed
- Black map issue after when in airplane mode and using OfflineBundle
----------------------------------------------------------------------------------------------------
## [android-3.3.6.2] - 2018-03-08
Happy Womens Day!
### Fixed
- Default max zoom level is now 21
----------------------------------------------------------------------------------------------------
## [android-3.3.6.1] - 2018-03-08
### Fixed
- When building changes while navigating, active level of new building is updated to match current location.
This is to fix virtual "disappearing route line" -problem.
- Building id extraction bug
- Fake location fixes
----------------------------------------------------------------------------------------------------
## [android-3.3.6.0] - 2018-03-08
### Added
- Bluetooth recovery mechanism. If no Bluetooth events has been received in 20 seconds,
Bluetooth is automatically restarted. This is to address "Blue Dot got stuck and BT restart helped" - issues.
* app must be in the foreground
* Bluetooth must be turned on
* location was received earlier, but now Blue Dot is not moving
* no Bluetooth scan events in 20 seconds. Then we assume BT stack got stuck.
* LocateMe-button will turn grey while restarting Bluetooth
Use SteerpathClient.StartConfing.Builder().bluetoothAutoRecovery() to disable
if you dont want app to automatically turn on/off Bluetooth behind users back.
### Fixed
- BluetoothScanner listener fix when app is backgrounded
- Uses BluetoothLeScanner if API level >= 21. Fixes some problems where BluetoothAdapter.STATE_OFF is not received.
----------------------------------------------------------------------------------------------------
## [android-3.3.5.4] - 2018-03-08
### Fixed
- Floor style switcher does not ignore FillExtrusionLayers anymore
----------------------------------------------------------------------------------------------------
## [android-3.3.5.3] - 2018-03-05
### Fixed
- Selected floor indicator was rarely missing from the floor picker due to animation not canceled properly.
----------------------------------------------------------------------------------------------------
## [android-3.3.5.2] - 2018-03-02
### Fixed
- RouteRequest NullPointerException fix
----------------------------------------------------------------------------------------------------
## [android-3.3.5.1] - 2018-03-02
### Fixed
- SteerpathMapView BottomSheet animation cancel fix
----------------------------------------------------------------------------------------------------
## [android-3.3.5.0] - 2018-03-02
### Added
- SteerpathMapView.updateRoutePlan()
- RouteListener.onReRouteRecommended()
### Fixed
- Fixed an issue where part of route segment was rendered in wrong floor
----------------------------------------------------------------------------------------------------
## [android-3.3.4.8] - 2018-02-28
### Fixed
- Travel distance string format is now consistent with the iOS SDK. If total distance is more than 1000 meters,
uses kilometers with two decimal places instead of meters.
- Travel duration estimation fix
----------------------------------------------------------------------------------------------------
## [android-3.3.4.7] - 2018-02-27
### Fixed
- Runtime API key switching
- MapServer 204 handling
----------------------------------------------------------------------------------------------------
## [android-3.3.4.6] - 2018-02-26
### Fixed
- Removed unnecessary dependencies:
com.google.code.findbugs
org.checkerframework
com.google.errorprone
com.google.j2objc
org.codehaus.mojo
----------------------------------------------------------------------------------------------------
## [android-3.3.4.5] - 2018-02-26
### Fixed
- If Okio file writing timeouts, local map server forwards it as http 500 to the Mapbox.
Problematic file will be re-downloaded.
----------------------------------------------------------------------------------------------------
## [android-3.3.4.4] - 2018-02-22
### Fixed
- Grey map issue when focusing another building
----------------------------------------------------------------------------------------------------
## [android-3.3.4.3] - 2018-02-20
### Fixed
- Indoor-outdoor transition fixes while navigating
- SteerpathMapView.onDestroy() calls internally SteerpathMapView.stopNavigation(). Activity or Fragment impl
is not anymore forced to call it manually.
----------------------------------------------------------------------------------------------------
## [android-3.3.4.2] - 2018-02-19
### Fixed
- Bluedot updates are not blocked anymore when routing with fixed origin.
----------------------------------------------------------------------------------------------------
## [android-3.3.4.1] - 2018-02-19
### Fixed
- Telemetry fix
### Changed
- Background telemetry battery saver removed. Needs to be redesigned.
----------------------------------------------------------------------------------------------------
## [android-3.3.4.0] - 2018-02-14
Happy Valentines Day!
### Added
- Accessibility mode for routing. When using accessibility mode, route avoids stairs and escalators. Will use stairs and escalators if
destination cannot be otherwise reached. See RoutePlan.Builder().accessibility().
----------------------------------------------------------------------------------------------------
## [android-3.3.3.0] - 2018-02-13
### Added
- SteerpathMapView recognizes if OfflineBundle installation has not yet processed map style and tiles.
If so, loading screen with ProgressBar and message (R.string.mapview_init_in_progress) will be shown.
SteerpathMapView shows spinning ProgressBar while initially loading style. Layout is R.layout.sp_map_view_loading_screen
and it should (but not forced to) contain
ProgressBar with id R.id.steerpath_map_loading_screen_progressbar
TextView with id R.id.steerpath_map_loading_screen_text
### Deprecated
- SteerpathMapView.setStyleURL() does nothing now. Use SteerpathClient.StarConfig.Builder().mapStyleUrl() instead.
----------------------------------------------------------------------------------------------------
## [android-3.3.2.0] - 2018-02-13
### Added
- SteerpathMapFragment does not force only Activity to implement MapViewListener any more. Parent Fragment
can implement it too. SteerpathMapFragment can be subclassed also.
----------------------------------------------------------------------------------------------------
## [android-3.3.1.0] - 2018-02-13
### Added
- SteerpathMap.setMinZoomLevel() for hiding different Mapbox API between version 4.2.x and 5.x
----------------------------------------------------------------------------------------------------
## [android-3.3.0.0] - 2018-02-07
### Notes
- In Android project we are using Explicit Versioning instead of Semantic Versioning from now on.
For more information, visit https://github.com/exadra37-versioning/explicit-versioning
Mapbox 4.2.x branch still uses Semantic Version.
### Changed
- Derived from Mapbox 5.3.0
### Known Issues
- Graphical glitch when adding FillExtrusionLayer
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.12] - 2018-02-07
### Breaking Changes
- removed deprecated com.steerpath.sdk.meta.Feature. See https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.3.0-beta.12_migration_guide.txt
### Examples
- ExampleApp tag 1.1.18
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.11] - 2018-02-07
### Added
- Improved developer options. As a visual reminder that developer options are in use, "Monitor"-button is located above "LocateMe"-button.
### Fixed
- RoutePlan.Builder().name() works now
- Meta update url after installing OfflineBundle
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.10] - 2018-01-31
### Changed
- Telemetry configuration update
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.9] - 2018-01-31
### Fixed
- Blue dot jump issue during floor switch
- Route travel time estimation fix when Waypoints are in use
- File updater crash fix
- sp_ic_info svg backwards compatibility issue
- If device does not have a compass, LocateMeButtonMode.HEADING is ignored
- Route preview mode does not hide route line anymore if route is long enough
- With online configuration, initial route database was not set correctly
### Added
- RoutePlan.Builder().startZoomLevel() for setting zoom level after navigation starts after preview mode
- Beacon Parser (Meta)
- SteerpathClient.OfflineBundleStartListener for faster initial SDK starting when using large OfflineBundle
### Changed
- Removed this feature: Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode when Blue dot appears for the first time
It just didnt work well.
### Breaking Changes
- RouteStepViewHolder.onReRoute() added
- DirectionsAssetHelper.TextComposer.compose(Context, DirectionsResponse, RouteStep, RouteTrackerProgress); added
- DestinationRouteStep removed
- SteerpathClient.StartConfig().debugNddList(), offlineNdd() and forceNdd() replaced with SteerpathClient.StartConfig().testFiles()
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.8] - 2018-01-11
### Fixed
- SteerpathMapView.setMyLocationEnabled(false) + routing issue fixed
- Bluedot animation crash fix
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.7] - 2018-01-10
### Fixed
- If RoutePlan.Builder().origin() is used, position is ignored correctly afterwards
- If RoutePlan.Builder().origin() is used, RouteListener.onError() is triggered correctly
- Stability fixes
- SteerpathMapView.setMyLocationEnabled(false) works with fake location
### Changed
- GeofencingApi does not add duplicate Geofences anymore. Geofence request id determines its uniqueness.
- GeofencingApi gives GeofencingEvent in the main thread. Clients dont need to wrap it around Runnable anymore
### Added
- GeofencingApi.contains(String requestId)
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.6] - 2018-01-09
### Fixed
- DirectionsRequestImpl does not use AsyncTaskCompat anymore. Works with API level 27.
- Meta supports Etags
- MapServer tile updating fix
- Couple of Mapbox MapView crashes
- Improved mechanism to detect when user reaches destination while routing
- Geofence-related crash fix
- Fixed an issue where blue dot appeared on the screen even if SteerpathMap.setMyLocationEnabled(false) was called
### Changed
- OfflineBundle auto-updater disabled. Files are updated on-demand instead, not while SDK starts.
This is to reduce unnecessary server hits.
- OfflineBundle is automatically uninstalled when application updates (this feature is disabled for debug builds)
- Okhttp to version 3.9.1: https://github.com/square/okhttp/issues/3438
- updated default meta url (EU1)
- updated default beacons url (EU1)
- When using OfflineBundle, restart is not required anymore for updated files to be installed.
- Deprecated SteerpathMapView.setMapTileMaxAge(). This is handled internally by dynamic map tile max-age
mechanism.
- Default reroute threshold is now 10 meters (was 20)
- Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode when Blue dot appears for the first time
- Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode if building changes while navigating
- When navigation starts, FloorSwitcher scrolls to current floor
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.5] - 2017-12-08
### Fixed
- Fake location fixes
- Heading mode is smoother now
- Heading mode memory leak
- Bluedot visual glitch in Heading mode
- IndoorMapManager crash fix that was caused by incorrect building id parsing
- Fixes for Waypoint navigation
- Does not anymore update each OfflineBundled NDD automatically when SDK starts. They are updated on-demand instead.
### Added
- Attribution contains now Info -button
- MetaFeature.getFloorIndexList() and MetaFeature.getFloorNameList(). They are valid when requesting buildings only.
### Changed
- Updated the appearance of default route preview and step-by-step badges
- CompassCalibrationDialog is prompted only if when actually needed (sensor accuracy is low, medium or unknown)
- Mapbox cache age is now 12 hours
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.4] - 2017-10-31
### Breaking Changes
- 3D fill extrusion helper rework. API made more generic.
- ExtrusionOptions removed
- SteerpathSymbolLayerOptions renamed to SteerpathLayerOptions
### Added
- SteerpathMap.update(SteerpathLayerOptions options)
### Examples
- ExampleApp tag 1.1.17
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.3] - 2017-10-23
### Added
- 3D fill extrusion helpers
### Examples
- ExampleApp tag 1.1.16
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.2] - 2017-10-19
### Fixed
- Map style & tile loading related memory leak fix
- Stability fixes
### Added
- SteerpathAnnotationOptions supports SymbolLayers. This is alternative to MarkerViews. If map renders
lots of MarkerViews and app seems to be freezing, use SymbolLayers instead.
- MetaLoader.removeListener(). To avoid MetaLoader eating memory, LoadListener can be now detached.
See migration guide: https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.1.15_migration_guide.txt
### Changed
- Deprecated Feature, FeatureFactory and FeatureParser. Replacements are MetaFeature, MetaFeatureFactory
and MetaFeatureParser respectively. Problem with "Feature" was the naming as it rivals with
com.mapbox.services.commons.geojson.Feature. To make things less ambiguous,
"MetaFeature" refers to object obtained from Steerpath Meta Service and "Feature/FeatureCollection"
are from Mapbox SDK.
To enable MetaFeature, use SteerpathClient.StartConfig.Builder().useMetaFeature(true);
This is disabled by default so your project wont break immediately after you install android-3.3.0-beta.2.
See migration guide: https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.3.0-beta.2_migration_guide.txt
- SteerpathMapView.onDestroy() nullifies SteerpathMap
### Known Issues
- Mapbox uses com.google.gson.JsonObject but Steerpath uses org.json.JSONObject
### Examples
- ExampleApp tag 1.1.12 for SymbolLayers
- ExampleApp tag 1.1.13 for MetaLoader
- ExampleApp tag 1.1.14 for MetaFeature
- ExampleApp tag 1.1.15
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta.1] - 2017-10-12
### Fixed
- When routing, BlueDot gets location updates only from route snapper and it stays on route line.
Does not wobble around anymore.
----------------------------------------------------------------------------------------------------
## [android-3.3.0-beta] - 2017-10-05
### Updated
- Steerpath SDK is now derived from on Mapbox 5.2.0-beta
- Support lib version updated to 25.4.0
### Notes
- Will be released as android-3.3.0 once Mapbox 5.2.0 is out
----------------------------------------------------------------------------------------------------
## [android-3.2.2] - 2017-10-04
### Fixed
- Geofence.Builder().setTransitionTypes(). GeofenceListener.onGeofencingEvent() returns now only requested
transitions
- MapUtils.getRenderedFeature() performance improvement
### Examples
- ExampleApp tag 1.1.11
----------------------------------------------------------------------------------------------------
## [android-3.2.1] - 2017-09-28
### Fixed
- Telemetry db url fix
----------------------------------------------------------------------------------------------------
## [android-3.2.0] - 2017-09-28
### Changed
- Steerpath SDK is now derived from on Mapbox 5.1.3
### Fixed
- BlueDotMode.HEADING rendered some transparent pixels that made MarkerViews disappear
### Examples
- ExampleApp tag 1.1.10
### Known Issues
- Adreno-GSL crash: panning, zooming or rotating the map may crash or freeze the app.
- MarkerView poor performance. If map renders hundreds of MarkerViews, app probably freezes and
throws ANR. MarkerViews are deprecated and they are supposed to be replaced with SymbolLayers.
Steerpath SDK does not yet support SymbolLayers.
----------------------------------------------------------------------------------------------------
## [android-3.1.40] - 2018-03-
### Added
- SteerpathMapView.updateRoutePlan()
- RouteListener.onReRouteRecommended()
### Fixed
- Fixed an issue where part of route segment was rendered in wrong floor
----------------------------------------------------------------------------------------------------
## [android-3.1.39] - 2018-02-27
### Fixed
- Runtime API key switching
- MapServer 204 handling
----------------------------------------------------------------------------------------------------
## [android-3.1.38] - 2018-02-26
### Fixed
- If Okio file writing timeouts, local map server forwards it as http 500 to the Mapbox.
Problematic file will be re-downloaded.
----------------------------------------------------------------------------------------------------
## [android-3.1.37] - 2018-02-22
### Fixed
- Grey map issue when focusing another building
----------------------------------------------------------------------------------------------------
## [android-3.1.36] - 2018-02-20
### Fixed
- Indoor-outdoor transition fixes while navigating
- SteerpathMapView.onDestroy() calls internally SteerpathMapView.stopNavigation(). Activity or Fragment impl
is not anymore forced to call it manually.
----------------------------------------------------------------------------------------------------
## [android-3.1.35] - 2018-02-19
### Fixed
- Bluedot updates are not blocked anymore when routing with fixed origin.
----------------------------------------------------------------------------------------------------
## [android-3.1.34] - 2018-02-19
### Fixed
- Telemetry fix
### Changed
- Background telemetry battery saver removed. Needs to be redesigned.
----------------------------------------------------------------------------------------------------
## [android-3.1.33] - 2018-02-14
Happy Valentines Day!
### Added
- Accessibility mode for routing. When using accessibility mode, route avoids stairs and escalators. Will use stairs and escalators if
destination cannot be otherwise reached. See RoutePlan.Builder().accessibility().
----------------------------------------------------------------------------------------------------
## [android-3.1.32] - 2018-02-08
### Added
- SteerpathMapView recognizes if OfflineBundle installation has not yet processed map style and tiles.
If so, loading screen with ProgressBar and message (R.string.mapview_init_in_progress) will be shown.
SteerpathMapView shows spinning ProgressBar while initially loading style. Layout is R.layout.sp_map_view_loading_screen
and it should (but not forced to) contain
ProgressBar with id R.id.steerpath_map_loading_screen_progressbar
TextView with id R.id.steerpath_map_loading_screen_text
- SteerpathMapFragment does not force only Activity to implement MapViewListener any more. Parent Fragment
can implement it too. SteerpathMapFragment can be subclassed also.
- SteerpathMap.setMinZoomLevel() for hiding different Mapbox API between version 4.2.x and 5.x
### Deprecated
- SteerpathMapView.setStyleURL() does nothing now. Use SteerpathClient.StarConfig.Builder().mapStyleUrl() instead.
----------------------------------------------------------------------------------------------------
## [android-3.1.31] - 2018-02-08
### Added
- Improved developer options. As a visual reminder that developer options are in use, "Monitor"-button is located above "LocateMe"-button.
- Feature.getFloorIndexList() and Feature.getFloorNameList(). They are valid when requesting buildings only.
### Fixed
- RoutePlan.Builder().name() works now
- Meta update url after installing OfflineBundle
----------------------------------------------------------------------------------------------------
## [android-3.1.30] - 2018-01-31
### Changed
- Telemetry configuration update
----------------------------------------------------------------------------------------------------
## [android-3.1.29] - 2018-01-31
### Notes
- Merged some features from 5.x -branch to 4.2.x -branch
### Fixed
- Blue dot jump issue during floor switch
- Route travel time estimation fix when Waypoints are in use
- File updater crash fix
- sp_ic_info svg backwards compatibility issue
- Fake location fixes
- Heading mode is smoother now
- Heading mode memory leak
- Bluedot visual glitch in Heading mode
- IndoorMapManager crash fix that was caused by incorrect building id parsing
- Fixes for Waypoint navigation
- Does not anymore update each OfflineBundled NDD automatically when SDK starts. They are updated on-demand instead.
- DirectionsRequestImpl does not use AsyncTaskCompat anymore. Works with API level 27.
- Meta supports Etags
- MapServer tile updating fix
- Couple of Mapbox MapView crashes
- Improved mechanism to detect when user reaches destination while routing
- If device does not have a compass, LocateMeButtonMode.HEADING is ignored
- Route preview mode does not hide route line anymore if route is long enough
- With online configuration, initial route database was not set correctly
### Added
- RoutePlan.Builder().startZoomLevel() for setting zoom level after navigation starts after preview mode
- Attribution contains now Info -button
- MetaFeature.getFloorIndexList() and MetaFeature.getFloorNameList(). They are valid when requesting buildings only.
- Beacon Parser (Meta)
- SteerpathClient.OfflineBundleStartListener for faster initial SDK starting when using large OfflineBundle
### Changed
- Removed this feature: Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode when Blue dot appears for the first time
It just didnt work well.
- Deprecated Feature, FeatureFactory and FeatureParser. Replacements are MetaFeature, MetaFeatureFactory
and MetaFeatureParser respectively. Problem with "Feature" was the naming as it rivals with
com.mapbox.services.commons.geojson.Feature. To make things less ambiguous,
"MetaFeature" refers to object obtained from Steerpath Meta Service and "Feature/FeatureCollection"
are from Mapbox SDK.
To enable MetaFeature, use SteerpathClient.StartConfig.Builder().useMetaFeature(true);
This is disabled by default so your project wont break immediately after you install android-3.1.26.
See migration guide: https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.3.0-beta.2_migration_guide.txt
- Updated the appearance of default route preview and step-by-step badges
- CompassCalibrationDialog is prompted only if when actually needed (sensor accuracy is low, medium or unknown)
- Mapbox cache age is now 12 hours
- OfflineBundle auto-updater disabled. Files are updated on-demand instead, not while SDK starts.
This is to reduce unnecessary server hits.
- OfflineBundle is automatically uninstalled when application updates (this feature is disabled for debug builds)
- okhttp to version 3.9.1: https://github.com/square/okhttp/issues/3438
- updated default meta url (EU1)
- updated default beacons url (EU1)
### Breaking Changes
- RouteStepViewHolder.onReRoute() added
- DirectionsAssetHelper.TextComposer.compose(Context, DirectionsResponse, RouteStep, RouteTrackerProgress); added
- DestinationRouteStep removed
- SteerpathClient.StartConfig().debugNddList(), offlineNdd() and forceNdd() replaced with SteerpathClient.StartConfig().testFiles()
----------------------------------------------------------------------------------------------------
## [android-3.1.28] - 2018-01-11
### Fixed
- SteerpathMapView.setMyLocationEnabled(false) + routing issue fixed
- Bluedot animation crash fix
----------------------------------------------------------------------------------------------------
## [android-3.1.27] - 2018-01-10
### Fixed
- Geofence-related crash fix
- Fixed an issue where blue dot appeared on the screen even if SteerpathMap.setMyLocationEnabled(false) was called
- If RoutePlan.Builder().origin() is used, position is ignored correctly afterwards
- If RoutePlan.Builder().origin() is used, RouteListener.onError() is triggered correctly
- Stability fixes
- SteerpathMapView.setMyLocationEnabled(false) works with fake location
----------------------------------------------------------------------------------------------------
## [android-3.1.26] - 2018-01-05
### Fixed
- Improved mechanism to detect when user reaches destination while routing
### Changed
- Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode when Blue dot appears for the first time
- Map automatically goes to BlueDotMode.HEADING/MapMode.FOLLOW_USER mode if building changes while navigating
- When navigation starts, FloorSwitcher scrolls to current floor
----------------------------------------------------------------------------------------------------
## [android-3.1.25] - 2018-01-04
### Changed
- When using OfflineBundle, restart is not required anymore for updated files to be installed.
- Deprecated SteerpathMapView.setMapTileMaxAge(). This is handled internally by dynamic map tile max-age
mechanism.
- Default reroute threshold is now 10 meters (was 20)
----------------------------------------------------------------------------------------------------
## [android-3.1.24] - 2017-12-18
### Fixed
- MapServer tile updating fix
----------------------------------------------------------------------------------------------------
## [android-3.1.23] - 2017-12-14
### Changed
- Meta supports Etags
----------------------------------------------------------------------------------------------------
## [android-3.1.22] - 2017-12-14
### Fixed
- DirectionsRequestImpl does not use AsyncTaskCompat anymore. Works with API level 27.
----------------------------------------------------------------------------------------------------
## [android-3.1.21] - 2017-12-14
### Changed
- OfflineBundle auto-updater disabled. Files are updated on-demand instead, not while SDK starts.
This is to reduce unnecessary server hits.
- OfflineBundle is automatically uninstalled when application updates (this feature disabled for debug builds)
### Changed
- okhttp to version 3.9.1: https://github.com/square/okhttp/issues/3438
----------------------------------------------------------------------------------------------------
## [android-3.1.20] - 2017-12-01
### Added
- Fixes for Waypoint navigation
----------------------------------------------------------------------------------------------------
## [android-3.1.19] - 2017-11-24
### Added
- MetaFeature.getFloorIndexList() and MetaFeature.getFloorNameList(). They are valid when requesting buildings only.
----------------------------------------------------------------------------------------------------
## [android-3.1.-hotfix-3] - 2018-01-11
### Fixed
- SteerpathMapView.setMyLocationEnabled(false) + routing issue fixed
- Bluedot animation crash fix
----------------------------------------------------------------------------------------------------
## [android-3.1.18-hotfix-2] - 2018-01-11
### Fixed
- Fixed an issue where blue dot appeared on the screen even if SteerpathMap.setMyLocationEnabled(false) was called
### Changed
- okhttp to version 3.9.1: https://github.com/square/okhttp/issues/3438
----------------------------------------------------------------------------------------------------
## [android-3.1.18-1] - 2017-11-15
### Fixed
- IndoorMapManager crash fix that was caused by incorrect building id parsing
----------------------------------------------------------------------------------------------------
## [android-3.1.17] - 2017-10-19
### Fixed
- Minor stability fix
----------------------------------------------------------------------------------------------------
## [android-3.1.16] - 2017-10-19
### Fixed
- Stability fixes
### Changed
- SteerpathMapView.onDestroy() nullifies SteerpathMap
----------------------------------------------------------------------------------------------------
## [android-3.1.15] - 2017-10-16
### Fixed
- Map style & tile loading related memory leak fix
### Added
- MetaLoader.removeListener(). To avoid MetaLoader eating memory, LoadListener can be now detached.
See migration guide: https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.1.15_migration_guide.txt
----------------------------------------------------------------------------------------------------
## [android-3.1.14] - 2017-10-12
### Fixed
- When routing, BlueDot gets location updates only from route snapper and it stays on route line.
Does not wobble around anymore.
----------------------------------------------------------------------------------------------------
## [android-3.1.13] - 2017-10-09
### Fixed
- GeoJsonHelper.getPolygonJson() fix
----------------------------------------------------------------------------------------------------
## [android-3.1.12] - 2017-10-09
Cherry-picked changes from android-3.2.2 (android-3.1.12 uses Mapbox 4.2.x)
### Fixed
- Geofence.Builder().setTransitionTypes(). GeofenceListener.onGeofencingEvent() returns now only requested
transitions
- MapUtils.getRenderedFeature() performance improvement
----------------------------------------------------------------------------------------------------
## [android-3.1.11] - 2017-09-26
## Added
- RouteOptionsFactory supports now Mapbox GL markers
### Fixed
- MetaLoader beacon loading issue
- MetaLoader does not block retries anymore if server gives an error
- If SteerpathClient.StartConfig.Builder.downloadAndInstallOfflineBundle() is used and app is restarted,
bundled map style instead of online style
- Beacons are blacklisted for an hour in case of 404
----------------------------------------------------------------------------------------------------
## [android-3.1.10] - 2017-09-18
### Added
- API for downloading OfflineBundle based on Steerpath API key. Use cases:
1. SteerpathClient.StartConfig.Builder.downloadAndInstallOfflineBundle():
Automatically download and install OfflineBundle during SteerpathClient startup.
Makes initial startup time longer.
2. SteerpathClient.StartConfig.Builder.installOfflineBundle(File file): install OfflineBundle File
that was downloaded before starting SteerpathClient. OfflineBundleLoader is dedicated helper class to download that File.
- MetaQuery.Builder.enableDbUpdate()
### Fixed
- MetaLoader performance improvement: does not trigger another db update if one is already in progress.
- MetaLoader performance improvement: write operation was unnecessarily delayed
- Meta DB disk io when reading large amount of data. MetaQuery for all pois returns now correct amount of results.
----------------------------------------------------------------------------------------------------
## [android-3.1.9] - 2017-09-05
### Fixed
- MetaLoader gives both failure and success results in main thread
- GeoJson parser fix
- MapUtils.getRenderedFeature() (helper method) GeoJson parsing fix
### Examples
- ExampleApp tag 1.1.8
----------------------------------------------------------------------------------------------------
## [android-3.1.8] - 2017-08-29
### Added
- Steerpath/OpenStreetMap copyright attribution located in bottom-left corner of the screen.
See Styling-section how to change appearance.
### Examples
- ExampleApp tag 1.1.7
----------------------------------------------------------------------------------------------------
## [android-3.1.7] - 2017-08-28
### Added
- Automatic Accuracy Deterioration. When positioning updates are not received in expected time (5 second check interval)
blue dot accuracy circle gets now incrementally bigger before location timeout is triggered. Enabled by default,
use FusedLocationProviderApi.Api.get().enableAutomaticAccuracyDeterioration() to disable.
### Fixed
- Map server crash
### Examples
- ExampleApp tag 1.1.6
----------------------------------------------------------------------------------------------------
## [android-3.1.6] - 2017-08-10
### Added
- Waypoint api. Navigate through multiple waypoints in a route.
### Changed
- See migration guide: https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android_3.1.6_migration_guide.txt
### Examples
- ExampleApp tag 1.1.5
----------------------------------------------------------------------------------------------------
## [android-3.1.5] - 2017-08-01
### Added
- SteerpathClient.StartConfig.Builder.writeMonitorToFile(). Makes on-site testing slightly more pleasant
as you can get monitor output floating on top of the map. You dont necessarily need to walk around
phone attached to laptop to get some logcat. See also SteerpathMapView.showMonitorButton().
### Examples
- ExampleApp tag 1.1.4
----------------------------------------------------------------------------------------------------
## [android-3.1.4] - 2017-08-01
### Added
- LocationRequest.setGpsThreshold() for the minimum accuracy that GPS must have in order for
automatic bluetooth to GPS switch to happen
### Changed
- Renamed couple of methods in OfflineUpdater due to upcoming "download" -feature. Old method names are deprecated, not removed.
See https://s3-eu-west-1.amazonaws.com/steerpath/android/migration/android-3.1.4_migration_guide.txt
----------------------------------------------------------------------------------------------------
## [android-3.1.3] - 2017-07-28
### Added
- SteerpathMap.setLocationTimeoutListener() and FusedLocationProviderApi.addLocationTimeoutListener().
Register a listener to receive notifications when location has been lost and blue dot is about to disappear.
### Changed
- On location timeout, blue dot disappears even when navigating. Route does not disappear.
### Deprecated
- SteerpathMapView.setLocationTooOldThreshold(). Use FusedLocationProviderApi.Api.get().setLocationTimeout() instead.
### Examples
- ExampleApp tag 1.1.3
----------------------------------------------------------------------------------------------------
## [android-3.1.2] - 2017-07-26
### Added
- DirectionsAssetHelper and LocalizationHelper
- SteerpathClient.hasValidEid() and getBuildingsWithInvalidEid() to check if EID package for
a building is available and package has not expired.
- Telemetry User-Agent
### Examples
- ExampleApp tag 1.1.2
----------------------------------------------------------------------------------------------------
## [android-3.1.1] - 2017-07-13
### Fixed
- Map did not load in airplane mode
- OfflineUpdater looper fix
### Added
- SteerpathMapView.getRenderedFeature()
### Examples
- ExampleApp tag 1.1.1
----------------------------------------------------------------------------------------------------
## [android-3.1.0] - 2017-07-11
### Fixed
- Telemetry transmission interval fix
### Changed
- Supports only maps hosted by Steerpath
- Mapbox Telemetry disabled
- Mapbox attributions disabled
- Mapbox logo disabled
- Mapbox Access Token deprecated
- Removed some deprecated APIs from SteerpathClient.StartConfig
### Examples
- ExampleApp tag 1.1.0
----------------------------------------------------------------------------------------------------
## [3.0.0-rc54] - 2017-07-06
### Fixed
- Telemetry start/stop issue when using BackgroundPolicy.ACTIVITY
### Changed
- Default Telemetry BackgroundPolicy is now ACTIVITY.
### Added
- Checkout new Example App: https://bitbucket.org/nimbledevices/steerpath-android-example.git
----------------------------------------------------------------------------------------------------
## [3.0.0-rc53] - 2017-07-04
### Fixed
- Cache synchronization fix
### Added
- Feature.getLocalRef() (meta api)
- GeoJsonHelper
----------------------------------------------------------------------------------------------------
## [3.0.0-rc52] - 2017-06-30
### Fixed
- Bad network performance improvements. If OfflineBundle is used, map, positioning and routing are usable
even with 2G.
- Multiple simultaneous calls to DirectionsApi.startCalculatingDirections() + all_routes File download fix.
### Added
- MetaLoader.loadAsync() LoadListener can be null
- improved OfflineBundle API. SteerpathClient.StartConfig.Builder() has now offlineBundle(String bundleName) method which
loads OfflineBundle internally during SteerpathClient.start().
- SteerpathClient.StartConfig.Builder().mapStyleUrl()
- SteerpathClient.getInstance().getMapStyleUrl() can be used with SteerpathMapView.setStyleURL().
If SteerpathMapFragment is used, SteerpathMapOptions.Builder().mapboxStyleUrl() can be now removed
as it uses internally SteerpathClient.getInstance().getMapStyleUrl() by default.
If SteerpathMapView is used, you may use SteerpathMapView.setStyleURL(SteerpathClient.getInstance().getMapStyleUrl());
----------------------------------------------------------------------------------------------------
## [3.0.0-rc51] - 2017-06-21
### Fixed
- Routing (started by SteerpathMapView.previewRoute() / navigateTo() uses STEERPATH_ONLY as LocationRequest.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc50] - 2017-06-21
### Fixed
- Telemetry does not send empty packages anymore
- Telemetry BackgroundPolicy.PROCESS works now
- Telemetry rogue beacon fix
- Map performance improvement
- RoutePlan.Builder.origin() null check
----------------------------------------------------------------------------------------------------
## [3.0.0-rc49] - 2017-06-20
### Fixed
- EidUpdater background thread issue
----------------------------------------------------------------------------------------------------
## [3.0.0-rc48] - 2017-06-19
### Fixed
- CompassCalibrationFragment style fix. Works for both AppCompatActivity and FragmentActivity.
CompassCalibrationFragment uses R.style.Steerpath.Theme.Dialog
----------------------------------------------------------------------------------------------------
## [3.0.0-rc47] - 2017-06-18
### Fixed
- When rerouting fails, old route is kept instead of discarding it.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc46] - 2017-06-18
### Fixed
- When navigation starts and if LocateMeButtonMode.HEADING is in use, blue dot mode is changed to
BlueDotMode.HEADING. Else if LocateMeButtonMode.FOLLOW_USER is used, map mode is changed to
to MapMode.FOLLOW_USER. Valid for SteerpathMapView.previewRoute() and SteerpathMapView.navigateTo().
- Automatic camera position update was working only in route preview mode.
### Added
- SteerpathMapView.setLocateMeButtonModes() for adding or removing LocateMe-button toggle states
----------------------------------------------------------------------------------------------------
## [3.0.0-rc45] - 2017-06-17
### Fixed
- When RouteStep item is selected from the DirectionSheet, map mode is set to MapMode.NORMAL and
blue dot mode is set to BlueDotMode.NORMAL. Now camera does not annoyingly jump to users location.
- When SteerpathMapView.previewRoute() is called, map mode is switched to MapMode.NORMAL. This is to prevent
camera wandering around and messing with "automatic route preview camera positioning".
### Added
- RoutePlan.Builder.previewCameraPadding()
----------------------------------------------------------------------------------------------------
## [3.0.0-rc44] - 2017-06-17
### Fixed
- Reverted some performance improvements introduced in rc43. They made things faster but also
unstable.
### Changed
- Default value for SteerpathMapView.setLocationTooOldThreshold() is now 5 mins
- While navigating, location cannot get too old (blue dot does not disappear).
----------------------------------------------------------------------------------------------------
## [3.0.0-rc43] - 2017-06-14
### Fixed
- Routing performance improvement. Finds route faster.
- Positioning performance improvement. Finds position faster.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc42] - 2017-06-13
### Fixed
- EidUpdater wraps UpdateListener around WeakReference. This allows "fire and forget" strategy where
app is not forced to keep reference to UpdateListener manually.
- EidUpdater.update() checks if requested update task is already being processed.
### Added
- EidUpdater.UpdateListener.onUpdateCompleted() is called when all update tasks has finished
----------------------------------------------------------------------------------------------------
## [3.0.0-rc41] - 2017-06-12
### Fixed
- Compass calibration dialog uses R.style.AppDialogTheme instead of application default.
This should prevent dialog from shrinking to "small gray box".
### Added
- SteerpathMapView.launchCompassCalibrationDialog() if app wants to control when to show dialog.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc40] - 2017-06-12
### Added
- DirectionSheet.update(Context context, Data data). DirectionSheet implementation has a chance to update
its views when user location changes. Method can be left unimplemented if no dynamic updates
are required for DirectionSheet.
- SteerpathMapView.notifyDirectionSheetCanceled(). This is supposed to be called when DirectionSheet is
dismissed. If not done so, update() calls may be invoked before DirectionSheet.start(). Method can be ignored
if no dynamic updates are required for DirectionSheet.
### Fixed
- UserLocationView crash fix
- Route preview camera position fix
- After accepting route, camera is panned to user
- When routing from building to another, route line does not have "origin" icons overlapping with
floor up/down icons.
### Changed
- Route preview mode rotates camera. Blue dot is at the bottom of the screen and destination
top of the screen.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc39] - 2017-06-07
### Added
- SteerpathClient.StartConfig.Builder().eidUpdaterUri(). SteerpathClient.createEidUpdater(Context)
builds EidUpdater instance without explicitly given Uri to Steerpath server.
It gets uri from "region" configuration - or uses the one that was given with
SteerpathClient.StartConfig.Builder().eidUpdaterUri().
- SteerpathMapView.setStyleURL() accepts now:
* Mapbox hosted style "mapbox://styles/my_project/xxxxxxxxxxxxxxxxxxxxxxxxx"
* Steerpath hosted style (online) "https://mapdata.xx.steerpath.com/style/default.json"
* Steerpath hosted style (offline) OfflineBundle.getStyleUrl()
### Fixed
- Local map server performance improvement. If cached style file is found, it is returned immediately
instead of making Etag round trip. Style is updated silently in the background.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc38] - 2017-06-01
### Added
- FusedLocationProvider.getUserLocation()
- new enum SteerpathMap.BlueDotMode where HEADING mode renders a cone where user is looking at.
- CompassCalibrationFragment
- SteerpathMapView.setBlueDotHeadingModeBehavior()
- SteerpathMapView.setCompassCalibrationDialogEnabled()
- Region API. Instead of using
SteerpathClient.StartConfig.Builder()
.routeTileUri(Uri.parse("https://routes.xx.steerpath.com"))
.mapTileUri(Uri.parse("https://mapdata.xx.steerpath.com"))
.metaUri(Uri.parse("https://meta.xx.steerpath.com/meta/"))
.positioningUri(Uri.parse("https://ndd.xx.steerpath.com"))
.beaconsUri(Uri.parse("https://beacons.xx.steerpath.com"))
Single call Builder().region(@ServiceRegion) may be used to replace all individual uri setters above.
Setters can be used to override backend configuration set by region() however.
### Fixed
- Telemetry: unknown beacon tracking issue
- With Region API, fixed erroneous handling of Uri paths.
### Changed
- With Region API, default backend configuration is aligned with iOS. Default is @ServiceRegion EU1.
- LocateMe-button toggles now between MapMode.NORMAL - MapMode.FOLLOW_USER - BlueDotMode.HEADING
### Deprecated
- With Region API, Uri setter names in SteerpathClient.StartConfig.Builder() are now aligned with iOS.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc37] - 2017-05-29
### Added
- SteerpathMapView.LocateMeButtonListener. Application may interrupt LocateMe-button clicks if "Locate me"
feature can be otherwise used (permissions ok, Bluetooth enabled).
----------------------------------------------------------------------------------------------------
## [3.0.0-rc36] - 2017-05-29
### Fixed
- SteerpathMapView.stopNavigation() crash fix
----------------------------------------------------------------------------------------------------
## [3.0.0-rc35] - 2017-05-29
### Added
- SteerpathMap.getUserLocation() in addition to FusedLocationProviderApi.getLastLocation().
getUserLocation() returns null if location is considered "too old".
- Troubleshoot section added to documents. See below.
### Fixed
- Local map server performance improvement. If cached map tile is found, it is returned immediately
instead of making Etag round trip. Map tile is updated silently in the background.
### Changed
- TelemetryConfig default BeaconLevel is now BeaconLevel.ALL
- MetaLoader allows query to hit Steerpath server only once in a day. Results are queried from local
database instead. This deprecates newerThan and expires attributes.
Motivation is to prevent unnecessary burdening of the server. However when app is killed,
it fetches updates from the server.
- OfflineUpdater allows update() call to hit Steerpath server only once in a day.
Motivation is to prevent unnecessary burdening of the server. When app is killed,
it fetches updates from the server.
### Deprecated
- Synchronous MetaLoader.load(), use asynchronous version loadAsync() instead.
- MetaQuery.Builder.newerThan() and MetaQuery.Builder.expires() are now deprecated. They have no function
in MetaLoader anymore.
- Following methods will be handled solely by the SDK in the future:
SteerpathClient.StartConfig.Builder()
.mappingExpiry()
.nddExpiry()
.styleExpiry()
.routeTileExpiry()
.mapTileExpiry()
- synchronous SteerpathClient.getInstance().start(Context context). Use asynchronous start(Context, StartConfig, StartListener) instead.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc34] - 2017-05-19
### Added
- EidUpdater for updating beacon data.
### Fixed
- Route Preview zooms out so route is shown as whole
- Offline Bundle fixes
- Offline Bundle name supports versioning
### Known Issues
- EidUpdater cannot be canceled
- EidUpdater does not give callback when all update tasks has been handled
- SteerpathClient.StarConfig.Builder has no url setter method for EidUpdater
----------------------------------------------------------------------------------------------------
## [3.0.0-rc33] - 2017-05-17
### Fixed
- Server setup issue. Configured backend wrong.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc32] - 2017-05-16
### Fixed
- Silly travel time estimation string. Earlier default direction instructions badge
could claim for example 100m distance takes 55 mins to walk.
- SteerpathClient can be started from Application with an api key
- Offline package (.sff) related fixes. Loads world-tiles, vector-tiles, fonts and sprites.
- Removed some logcat spam
### Deprecated
- OfflineBundle deprecated following:
SteerpathClient.StartConfig.Builder()
.offlineNdd()
.offlineNdds()
.offlineEids()
.offlineRouteTiles()
.offlineEidKeys()
.offlineMapTileDirectory()
### Known Issues
- Local map server performance. File updating could be performed silently in the background and cached
file could be returned immediately for the map. Will be fixed in future release.
- crash in Mapbox queryRenderedFeatures() after loading a Steerpath hosted vector-tile.
Occurs: sometimes, not very often when panning the map and updating vector tiles. Will be fixed in future release.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc31] - 2017-05-11
### Fixed
- RuntimeStyleSwitcher tolerates missing map filters without crashing
- Automatic floor switching issue
----------------------------------------------------------------------------------------------------
## [3.0.0-rc30] - 2017-05-09
### Fixed
- appearance of route lines first segment changed to R.drawable.ic_route_segment_start_point.
Basically it is the same than R.drawable.ic_route_end_point but in a smaller scale.
Each route segment also starts with R.drawable.ic_route_segment_start_point. Earlier only
beginning of the route was indicated with an icon.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc29] - 2017-05-05
### Added
- OfflineBundle and OfflineUpdater for including .sff packages. See ExampleApp.
- SteerpathMapView.stopNavigation() triggers new callback RouteListener.onNavigationStopped().
Provided for convenience.
- DirectionsAssetHelper. If app is not implementing own RouteStepViewHolder or DirectionSheet
but icons should be changed anyway, override default DirectionsAssetHelper.IconChooser.
- Direction instructions supports now elevators, escalators and skytrains
### Fixed
- Cache issue where expiry date blocked file update from the server. Local files were used too
aggressively.
- DirectionsRequest db lock issue
- SteerpathMap.removeAnnotations(SteerpathAnnotation) removes now correct annotations if building
is not focused
- Route line rendering issue. Consider following route line:
* starts from floor 1
* stairs A up to floor 2
* stairs B down back to floor 1
Previously stairs A and B were connected with a polyline in floor 1. It was incorrect because
route between stairs goes in floor 2, not in floor 1.
### Changed
- Improved RouteOptionsFactory. It is now possible to split route line into segments (per floor index)
and render each segment differently. See ExampleApp/MyRouteOptionsFactory.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc28] - 2017-04-20
### Added
- SteerpathMapView.addCustomView() and removeCustomView(). Add or remove Views below LocateMe-button.
When BottomSheet is shown, due to navigation instructions for example, Views are elevated with
LocateMe-button and LevelPickerView.
Be noted that some future release may provide more sustainable way for map widget customization.
For example api for custom LevelPickerView, relevant callbacks and overall better control over
UI elements. We are not there yet though.
- Localisations documented. See below.
### Changed
- "red dot" removed. Instead, if location updates has not been received in 1 minute, UserLocationView
and LevelPickerViews "current level indicator" disappears. They are automatically restored
when location is received next time. SteerpathMapView.setLocationTooOldThreshold() changes this
1 minute time window.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc27] - 2017-04-12
### Fixed
- Floor switching bug. UserLocationView is not visible in each floor after: Activity.onStart() -
Activity.onBackPressed() - Activity.onStart().
- DirectionsApi: worker AsyncTasks are executed now parallel, not serially
- DirectionsApi: app is not forced to cache DirectionsRequests any more. Earlier GC took out
DirectionsRequest if it was pending for too long.
- DirectionsApi: DirectionsRequest.cancel() actually cancels worker AsyncTask
### Added
- DirectionsApi: DirectionsListener.onCancelled() is called in response to DirectionsRequest.cancel()
----------------------------------------------------------------------------------------------------
## [3.0.0-rc26] - 2017-04-05
### Added
- "Preview Map"-mode shows a route preview. To start navigation, route must be "accepted" with
SteerpathMapView.acceptRoute() call. To use it, call SteerpathMapView.routePreview() instead of navigateTo().
See Example App/MapFragmentActivity.startNavigation().
- Appearance of the route line can be now customized with RouteOptionsFactory. See Example App.
- SteerpathMap.setRouteLine() method that uses SteerpathAnnotations
### Changed
- SteerpathClient.StartConfig.Builder.sensors() is split into three methods: compass(), gyroscope()
and accelerometer()
- SteerpathMap.setRoute() is now marked as deprecated. Usage of setRouteLine() is recommended because
it provides improved mechanism to manipulate route appearance. SteerpathMapView uses internally
setRouteLine() method.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc25] - 2017-04-03
### Fixed
- FollowMe-button and map panning fix
----------------------------------------------------------------------------------------------------
## [3.0.0-rc24] - 2017-04-03
### Fixed
- Telemetry logging fix (should not crash in a long run)
- beacon is not blacklisted in case of network error
- positioning and blue dot stabilisation fixes
### Added
- RoutePlan has now optional fixed origin as route start point: supports static routing between two
fixed locations.
- SteerpathAnnotationOptions can be set global and to ignore selected building and floor
- SteerpathClient.StartConfig.Builder.sensors() to enable compass, gyroscope and accelerometer.
Disabled by default.
### Changed
- GPS is disabled by default. To re-enable, use LocationRequest with PRIORITY_HIGH_ACCURACY or
PRIORITY_BALANCED_POWER_ACCURACY.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc23] - 2017-03-29
### Fixed
- offline NDD is not loaded in the main thread anymore
### Added
- SteerpathAnnotationOptions implements now Builder. Should have been like that in the first place.
- SteerpathAnnotationOptions has now "userId" for connecting SteerpathAnnotationOptions with Feature (meta).
It is convenient when receiving marker click event from the Mapbox SDK.
- Full directions list aka "DirectionSheet". It is displayed during navigation when "current route step
badge" is clicked. See ExampleApp for customization.
- com.steerpath.sdk.maps.defaults package. It is home for in-built widgets for a map.
- rssi tuning
### Known Issues
- RouteStep badge and DirectionSheet: icon flickering issue on pre-lollipop devices
----------------------------------------------------------------------------------------------------
## [3.0.0-rc22.1] - 2017-03-20
### Fixed
- offline eid resolving time window. If system clock was far in the distant future, and then corrected to present time,
offline eid keys are now regenerated.
### Added
- Steerpath MetaService url + bunch of other urls are now configurable. See SteerpathClient.StartConfig.
- SteerpathClient.StartConfig.Builder.monitor() enables simple developer tool that just pretty prints stuff into console.
### Changed
- SteerpathClient cleanup. Removed few deprecated methods that were used by Steerpath development app.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc21] - 2017-03-15
### Fixed
- floor switching: parser ignores source-layer from style json
----------------------------------------------------------------------------------------------------
## [3.0.0-rc20] - 2017-03-15
### Changed
- renamed AnnotationView to SteerpathAnnotation
- renamed AnnotationOptions to SteerpathAnnotationOptions
- (duh)
----------------------------------------------------------------------------------------------------
## [3.0.0-rc19] - 2017-03-15
### Fixed
- Bundled ndd is added to cache. This means when device goes online, ndd can actually be updated.
- Telemetry: known beacons fix
### Added
- SteerpathMapView.startNavigation() and stopNavigation()
- SteerpathMapView.setupClickForFakeLocation()
- RouteStepViewHolder for navigation progress badge in BottomSheet. See ExampleApp/MapFragmentActivity.
- new api to add annotation with AnnotationOptions and AnnotationView.
Improves performance and fixes an issue where wrong Marker/InfoWindow click was registered if markers
have same location but different floor.
* SteerpathMarker / SteerpathMap.addMarker()
* SteerpathMarkerView / SteerpathMap.addMarkerView()
* SteerpathPolyline / SteerpathMap.addPolyline()
* SteerpathPolygon / SteerpathMap.addPolygon()
See ExampleApp/MapFragmentActivity.
### Changed
- Level Change animation is now removed
### Deprecated
- com.sdk.steerpath.directions.RouteFinder. Use SteerpathMapView.startNavigation() instead. See ExampleApp/MapFragmentActivity.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc18] - 2017-03-03
### Fixed
- Cache fixes
- Bundled offline route tiles are added to cache. This means when device goes online, route tiles can actually be updated.
### Added
- Offline maps can be bundled into app
- Telemetry and capture api. See ExampleApp.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc17] - 2017-02-23
### Fixed
- Marker onClick event comes from the correct marker if another marker has same location but different floor.
You should use SteerpathMarkerViewOptions instead of MarkerViewOptions.
- floor_up/floor_down/route_end_point graphics fix. Has white background now (R.color.icon) instead of transparent.
Looks better when route line does not overlap with the icon.
### Changed
- SteerpathIcon for SteerpathMarkerViewOptions. You can customize SteerpathIcon outside of the sdk, or use example SteerpathIcons.
- support library version 25.2.0
- uses vectorDrawables.useSupportLibrary = true
- onReRouteRecommended, RouteFinder keeps old route until new, better route is available
### Added
- improved RouteFinder "fake location". See ExampleApp.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc16] - 2017-02-20
### Fixed
- positioning: BL event listener (routing does not break positioning anymore)
- BL BroadcastReceiver unregistration crash
- routing is now faster (after route tiles are once loaded)
- RouteFinder helper actually reroutes on reRouteRecommended()
- LocationSource listener leaks
- runtime style switching
- expired items on cache are cleared during app startup
- LevelPickerView current floor indicator color
- when app is sent to background, positioning worker thread is suspended. When app is brought to foreground, it is resumed.
### Added
- RouteFinder helper has now RouteListener to monitor routing events
### Changed
- tilt gestures are disabled by default. To enable, call steerpathMap.getMapboxMap().getUiSettings().setTiltGesturesEnabled(true);
- Mapbox SDK 4.2.2 in use
----------------------------------------------------------------------------------------------------
## [3.0.0-rc15] - 2017-02-09
### Fixed
- routing issue: previously for multiple destinations, if one route failed, all routes failed. Now it returns all available routes.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc14] - 2017-02-08
### Fixed
- speeding up start-up sequence
- performance improvements
- fixed a bug where basement floor could not be found on some Android devices
- Black map -workaround. Issue still persists, but shouldnt occur so often anymore.
- fixed an issue where positioning stopped working when user has moved around enough
### Added
- MetaQuery.parser() for geojson parser customization
- EID Support
- RouteHelper helper has RouteListener for monitoring routing updates
----------------------------------------------------------------------------------------------------
## [3.0.0-rc13] - 2017-02-03
### Fixed
- erroneous route color tints
- if user changes floor using FloorPickerView, navigation mode is changed to NORMAL. Now map wont jump back to the original floor.
- while floor switching is in progress, new floor switch requests are blocked. Less jumpy layout effects and other nasty things.
- default IndoorLevel index
- inertia sensor related memory leak
- inertia sensors are not listened when Activity goes background
- if different Activities has different offline configuration, they are actually loaded, not silently ignored
- few StrictMode issues fixed: less heavy lifting in main thread
- asynchronous meta cache read
- RouteFinder helper fix: does not stop positioning once navigation ends + resumes normal non-snapping positioning once destination has been reached.
- Mapbox style files works with Etag now
- "no api key in Manifest" -related crash even if Manifest declares an api key.
### Added
- SteerpathMap.refresh()
- Offline EID support
- app may configure ndd, eid, routetile and style cache expiry times with SteerpathClient.StartConfig
----------------------------------------------------------------------------------------------------
## [3.0.0-rc12] - 2017-18-01
### Fixed
- if app uses multiple Steerpath API keys, correct one is used for ndd and asset queries
- meta data cache fixes. Meta cache supports usage of multiple Steerpath API keys
- SteerpathMap.setLocationSource(null) restores now default settings
### Added
- MetaQuery.withAnyTags()
- little eye candy: LevelPicker drop shadow. For pre-lollipop devices, theres now an option to draw a frame around LevelPickerView. See documentation for details.
- RouteFinder - helper class moved to the SDK. It also has support for "fake location", meaning that you can set User Location by tapping the map.
### Changed
- minor changes to FollowMe-button logic
- FollowMe-button icons updated
- route lines final point graphic update
----------------------------------------------------------------------------------------------------
## [3.0.0-rc11] - 2017-10-01
### Fixed
- Mapbox 4.2.1 fixes random crashes like "com.mapbox.mapboxsdk.maps.NativeMapView.nativeJumpTo()"
but introduces a memory leak: Mapbox SDK keeps reference to first Activity
- if app uses multiple Mapbox accounts, correct access token is used for obtaining the style
- "black map" -issue fix. If you are still experiencing that map doesnt load but stays black (and Mapbox attribution logo doesnt disappear),
you dont need to kill app anymore to overcome it. Restarting Activity is enough.
If so, check that OnMapReadyCallback.onMapReady() is called. Issue may still occur but very rarely.
- MetaLoader used erronous buildingRef parameter name
- MetaQueryResult returns copy instead of reference
### Added
- SteerpathMapFragment makes runtime permission checks: targetSDKVersion can be now updated to 25.
NOTE: if you use SteerpathMapView and your targetSDKVersion in greater than 22, you should implement your own runtime permission checks.
In such case, use SteerpathMapView.setOnPermissionsNotGrantedListener().
- FollowMe-button indicates if app needs runtime permissions and if bluetooth or location are off.
If you are using SteerpathMapView instead of SteerpathMapFragment, call setOnPermissionsNotGrantedListener() to enable this feature.
If you dont, navigate-button ignores runtime checks.
### Changed
- uses now Mapbox 4.2.1
- IndoorNavigationListener removed. Use SteerpathMap.OnIndoorStateChangeListener instead.
- SteerpathMapFragment is initialized with SteerpathMapOptions object. This is to support applications
that uses more than one Mapbox accounts (access token + style url combinations).
If you are using SteerpathMapFragment with multiple Mapbox accounts, you should use
SteerpathMapOptions.mapboxAccessToken() instead of MapboxAccountManager.start().
Access token will be set by SteerpathMapFragment. Notice that SteerpathMapView and SteerpathMapFragment are now used
somewhat inconsistent ways: SteerpathMapView is not initialized with SteerpathMapOptions!
Another noteworthy things is that Mapbox is about to change their 5.x API quite drastically.
For example MapboxAccountManager is about to be removed. This will affect Steerpath API as well in the future.
- FollowMe-button is now implemented with Floating Action Button. Enjoy fancy drop shadows! Also the "arrow" icon is replaced with "ic_gps_not_fixed".
- Error.WRITING status is now removed as sdk handles that condition internally
### Known Issues
- https://github.com/mapbox/mapbox-gl-native/issues/7551
- https://github.com/mapbox/mapbox-gl-native/issues/7584
----------------------------------------------------------------------------------------------------
## [3.0.0-rc10] - 2016-20-12
### Fixed
- geojeson/Feature parsing: subtype was broken
- MetaQuery validation. If coordinate() is used, radius() is now required
- MetaLoader blacklist is now optional for user of the SDK. If resulting GeoJson contains no Features,
empty set of Features is returned instead of blacklisting whole thing. Blacklist is valid for Beacons anyway and is handled internally by the SDK.
- parsing coordinates for building was broken
- meta data cache didnt handle Feature subtype
- MetaLoader fetches fresh data from the server if there is no cached results (beacons are still blacklisted)
- LevelPickerView does not push Floating Action Buttons off the screen if theres lots of floors
- on floor switch, MapboxMarkers and SteerpathMarkers are now deselected. MapBox tooltip and Steerpath BottomSheet disappears.
### Added
- Map Widget margins in @dimens. See documentation for details.
### Changed
- MetaLoader.LoadListener.onError() removed. It was redundant as MetaQueryResult already contains Error. In addition, onError() was invoked somewhat inconsistent way.
- MetaQueryResult has now getErrorMessage(), which basically contains stack trace getMessage() or other useful info.
- typo fixed in RouteTracker.setReRouteThreshold() and setGoalDistanceThreshold()
### Deprecated
- IndoorNavigationListener will be removed in rc11. Use SteerpathMap.OnIndoorStateChangeListener instead.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc9] - 2016-15-12
### Fixed
- rc8-related styling issue
- routing issue where extra segment end up as a part of route
- memory leaks
- route polyline contained malformed json (was "coordinate", should be "coordinates")
- UserLocationView.setLocationTooOld() crash
- LevelPickerView transition view respects now theme background color
- geofence triangle creation performance
### Added
- Map Widget styling and customization. See documentation for details.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc8] - 2016-08-12
Bad rc: internal improvements introduced also a BUG in indoor map style loading
----------------------------------------------------------------------------------------------------
## [3.0.0-rc7] - 2016-08-12
### Fixed
- LevelStyleSwitcher: initial style load flickering. setStyleURL() moved from SteerpathMap to SteerpathMapView.
If not called, Mapbox default style will be used, meaning that indoor maps wont be shown. So, you need to call SteerpathMapView.setStyleURL();
- IPSLocationManager: NDD loading does not get stuck anymore if file is cached
### Added
- Route, AccuracyView and UserLocationView colors and alpha can be adjusted by overriding colors.xml. See documentation for details.
----------------------------------------------------------------------------------------------------
## [3.0.0-rc6] - 2016-25-11
### Fixed
- minor bug fixes and small improvements
### Added
- Steerpath logo in map widget
----------------------------------------------------------------------------------------------------
## [3.0.0-rc5] - 2016-15-08
### Fixed
- minor bug fixes and small improvements
----------------------------------------------------------------------------------------------------
## [3.0.0-rc4] - 2016-08-11
### Added
- MetaQuery and MetaLoader for loading building, POIs and assets from Steerpath backend.
Permissions
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Dependencies
build.gradle:
repositories {
maven { url "http://steerpath.bintray.com/steerpath" }
}
dependencies {
compile ('com.steerpath:steerpath:android-3.4.4.0@aar') {
transitive=true
}
}
Uses support library version 25.4.0:
compile 'com.android.support:cardview-v7:25.4.0'
compile 'com.android.support:gridlayout-v7:25.4.0'
compile 'com.android.support:recyclerview-v7:25.4.0'
compile 'com.android.support:design:25.4.0'
compile 'com.squareup.okhttp3:okhttp:3.10.0'
Other dependencies:
SDK depends on ContextCompat.checkSelfPermission(), which means minimum compileSdkVersion should be 23.
For more information, visit: https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#checkSelfPermission(android.content.Context, java.lang.String)
Uses net.lingala.zip4j 1.3.1
Styling
R.color
R.color.iconized_button Floating Action Buttons tint color
R.color.location UserLocationView color. The ball in middle of accuracy view and pulse.
R.color.accuracy_view AccuracyView around UserLocationView
R.color.accuracy_view_pulse AccuracyView animation
R.color.route Route color is applied to route line and current route segment, route start and end points
R.color.marker_border SteerpathMarkerView border color
R.color.divider LevelPickerView divider and pre-lollipop padding color
R.color.error_button Floating Action Buttons tint color for errors and if runtime permissions are not granted
R.color.disabled_button Floating Action Buttons tint color for if Bluetooth or Location are disabled
R.color.current_floor_indicator LevelPickerView indicates the floor where user currently is
R.color.current_floor_indicator_focused LevelPickerView indicates floor where user currently is
R.color.next_waypoint Route line color of next segment(s)
R.color.attribution_text Text color in attributions dialog
R.color.mapview_loading_screen_background SteerpathMapViews loading screen background color
R.drawable
Drawables are in svg format. Color references does not work on pre-Lollipop, so tint color is applied to View instead.
If you override these drawables, make sure that it contains only one color and transparency.
Buttons:
R.drawable.ic_bluetooth_off.xml
R.drawable.ic_gps_off.xml
R.drawable.ic_gps_fixed.xml
R.drawable.ic_gps_not_fixed.xml
R.style
R.style.Steerpath.Style.LevelPicker.Text.Selected Inherits by default @android:style/Widget.TextView
R.style.Steerpath.Style.LevelPicker.Text.Unselected Inherits by default @android:style/Widget.TextView
Recommended attributes to override:
android:textColor
android:background Must be @color
android:textSize
R.style.Steerpath.Style.LevelPicker.Text.Transition Inherits by default @android:style/Widget.TextView
R.style.Steerpath.Style.MapView.LoadingScreen.Text Shown in SteerpathMapView while installing OfflineBundle
// Used with DirectionsAdapter:
R.style.Steerpath.Style.Directions.Text.Current
R.style.Steerpath.Style.Directions.Text
R.style.Steerpath.Style.Directions.Image.Current Required attributes: android:layout_width, android:layout_height, android:layout_marginLeft
R.style.Steerpath.Style.Directions.Image Required attributes: android:layout_width, android:layout_height, android:layout_marginLeft
R.style.Steerpath.Style.Directions.Header Header text in Directions list
R.style.Steepath.Theme.Dialog Override if not happy with the SDK default look & feel. Used by CompassCalibrationDialog.
R.style.Steerpath.Style.Attribution.Text Appearance of copyright text in bottom-left corner. RelativeLayout LayoutParams may be used to change location of the text.
R.style.Steerpath.Style.Button.Directions Get Directions- button in default RoutePreviewHolder
R.style.Steerpath.Style.Button.Cancel Cancel button in default RoutePreviewHolder and RouteStepViewHolder
R.style.Steerpath.Style.Button.Cancel.Inverted Cancel button in default RoutePreviewHolder and RouteStepViewHolder
R.style.Steerpath.Style.RouteBadge.Text.Large Large text in RoutePreviewHolder and RouteStepViewHolder
R.style.Steerpath.Style.RouteBadge.Text.Medium Medium text in RoutePreviewHolder and RouteStepViewHolder
R.style.Steerpath.Style.RouteBadge.Text.Small Small text in RoutePreviewHolder and RouteStepViewHolder
R.style.Steerpath.Style.StepByStep.Background RouteStepViewHolder background
Other things, values, dimens and attrs
R.dimen.level_picker_width LevelPickerView is center aligned with Floating Action Buttons below. It cannot be wider than FAB, which is 60dp by default.
R.integer.level_picker_padding_pre_lollipop Since drop shadow nine patching works poorly on pre-Lollipop devices, you can surround LevelPickerView with solid color instead.
R.integer.accuracy_view_alpha Valid range: 0-255
R.integer.map_widget_margin_left Map Widget margin
R.integer.map_widget_margin_right Map Widget margin
R.integer.map_widget_margin_top Map Widget margin
R.integer.map_widget_margin_bottom Map Widget margin
R.integer.map_widget_compass_margin_right Magic number that horizontally center aligns Compass with LevelPickerView and Floating Action Buttons
R.integer.map_widget_level_picker_margin_top Magic number that prevents LevelPickerView from overlaying Compass
R.integer.bottom_bar_peek Height of the peeking BottomSheetView
R.bool.show_route_end_point Show final point (circle with a ball inside) of the route line
Localisation
// Dialogs
R.string.sp_permission_dialog_title "Indoor positioning"
R.string.sp_permissions_dialog_rationale "App features indoor positioning by Steerpath Ltd. To make use of this feature, give permissions."
R.string.sp_location_required_dialog_title "Unable to locate you!"
R.string.sp_location_required_dialog_body "To show your location on map, turn on Location."
R.string.sp_bluetooth_required_dialog_title "Indoor positioning"
R.string.sp_bluetooth_required_dialog_body "App features indoor positioning by Steerpath Ltd. To make use of this feature, enable Bluetooth."
R.string.sp_not_supported_dialog_title "Indoor positioning"
R.string.sp_not_supported_dialog_body "Unfortunately indoor positioning is not available for your device!"
R.string.sp_error_no_browser "No web browser installed on device, can\'t open web page."
// Buttons. For more information, visit: https://material.io/guidelines/style/writing.html
R.string.sp_got_it "Got it"
R.string.sp_close "Close"
R.string.sp_enable "Enable"
R.string.sp_not_now "Not Now"
R.string.sp_done "Done"
R.string.sp_start "Start"
// Step-by-Step directions
R.string.sp_directions "Directions"
R.string.sp_continue "continue"
R.string.sp_turn_left "turn left"
R.string.sp_turn_slight_left "turn slightly left"
R.string.sp_turn_sharp_left "turn sharp left"
R.string.sp_turn_right "turn right"
R.string.sp_turn_slight_right "turn slightly right"
R.string.sp_turn_sharp_right "turn sharp right"
R.string.sp_go "go". At first glance, "go" is conceptually pretty close to "enter". "Go" refers to taking some (non-walk) vehicle, for example elevator, escalator, skytrain or whatever.
R.string.sp_go_up "go up"
R.string.sp_go_down "go down"
R.string.sp_enter "Enter". Think "enter" as "enter an area". Example: enter Floor 3 (from elevator)
R.string.sp_destination_reached "Destination reached"
R.string.sp_step_format "Walk %1$dm and %2$s", Example: Walk 100m and turn right, Where %2$s is: sp_continue | sp_turn_left | sp_turn_slight_left | sp_turn_sharp_left | sp_turn_right | sp_turn_slight_right | sp_turn_sharp_right
R.string.sp_destination_format "%1$s%2$s to destination (~%3$d %4$s)", where 1$s is distance, 2$s is distance unit, %3$d is overall distance remaining, %4$s is time unit. Example: 100m to destination (~30 sec)
R.string.sp_take_transportation_format "Take %1$s to %2$s", Example: Take elevator to Floor 3
R.string.sp_while_in_transportation_format "%1$s to %2$s", Example: elevator to Floor 3
R.string.sp_seconds "sec"
R.string.sp_minutes "min"
R.string.sp_meters "m"
R.string.sp_kilometers "km"
R.string.sp_next_waypoint "Next: %1$s"
R.string.sp_rerouting "Rerouting..."
R.string.sp_step_current_action_int_format Walk %1$dm
R.string.sp_step_current_action_string_format Walk %1$s
R.string.sp_step_next_action_format and %1$s
R.string.sp_step_distance_to_next_format %1$d m
R.string.sp_step_total_distance_estimation_format %1$s %2$s
R.string.sp_step_total_travel_time_estimation_format %1$d %2$s
// Compass Calibration Dialog
R.string.sp_compass_calibration_title "Calibrate your blue dot\'s compass"
R.string.sp_compass_calibration_body "Tilt and move your phone 3 times like this:"
R.string.sp_compass_accuracy "Accuracy: %1$s", where %1$s is sp_low | sp_medium | sp_high | sp_unreliable
R.string.sp_low "Low"
R.string.sp_medium "Medium"
R.string.sp_high "High"
R.string.sp_unreliable "Unreliable"
// SDK log sharing
// Modify this if your app cannot be installed to device due to conflicting fileprovider authorities
R.string.sp_fileprovider_authority "com.steerpath.sdk.fileprovider"
R.string.sp_route_floor_up_text "Up". Text to be shown with floor up -icon. Valid with MARKER_RENDER_MODE_SYMBOL_LAYER.
R.string.sp_route_floor_down_text "Down". Text to be shown with floor down -icon. Valid with MARKER_RENDER_MODE_SYMBOL_LAYER.
Packages
Troubleshoot
How to get debug from the SDK?
SDK has in-built monitoring system for gathering relevant debug information and it simply prints messages to the console. This is called "Monitor".
- enable with SteerpathClient.StartConfig.Builder().monitor(true);
- filter logcat with "Monitor". For example: adb logcat *:S Monitor:V
- SteerpathMapView has helper functionality to display monitor output on top of the map. See SteerpathMapView.showMonitorButton();
- in production it is recommended to disable monitor as it may expose somewhat sensitive information
How to know if location comes from the GPS instead of Bluetooth?
- bouncing or restless blue dot
- blue dot in each floor
- LevelPickerView does not have "current level indicator"
I dont have live beacon. How to develop my app without one?
SteerpathMapView has setupClickForFakeLocation() method. This way position can be faked simply by touching the map. NOTE: this disables Bluetooth!
At the moment SDK does not provide in-built utility for faking the location *without* a map, but such functionality can be implemented of app side
with LocationSource - api.
I cant get position at all?
Requirements for positioning:
- Nearby beacons are required
- Application needs permissions. See Permissions section above.
- Bluetooth must be on. By default, SDK uses no GPS. See LocationRequest for more information.
If GPS positioning is enabled with LocationRequest, Location Services must be enabled as well.
If SteerpathMapView or SteerpathMapFragment is used, consider following:
- SteerpathMap.setMyLocationEnabled(true) needs to be called
- SteepathMapView.setupClickForFakeLocation() will disable real positioning
- In-built LocateMe-button will indicate if permissions are not granted or Bluetooth is disabled.
Position can be also obtained without a map widget.
- To do so, use FusedLocationProviderApi.Api.get().requestLocationUpdates().
- onLocationChanged() callbacks for indoor positioning (Location comes from Bluetooth) should be received once in a second.
- warning: there is no Steerpath api to detect if permissions are not set or if Bluetooth is disabled. If location updates are not received, check these!
If default configuration is used (no GPS) and no nearby beacons are detected, onLocationChanged() wont be called at all.
If GPS is enabled and no nearby beacons are detected, onLocationChanged() is called when network or gps Location changes.
Sequence goes as follows in online positioning:
1. Permissions are set
2. Device has Bluetooth enabled
3. Bluetooth beacon is detected
4. Depending on the beacon type, additional beacon data is first downloaded. This is indicated with following message:
[ JOB ] started: FileQuery@429ea900 [file=/data/data/com.steerpath.sdk.example/cache/e:XXXXXXXXXXXXXXXX]
5. Next, SDK downloads actual positioning data (NDD) for the building. This is indicated with following messages:
[BLUEDOT] NDD requested: XXXXXXXXXXXXXXXXXXXXXXXX
[ JOB ] started: FileQuery@425674e8 [file=/data/data/com.steerpath.sdk.example/cache/XXXXXXXXXXXXXXXXXXXXXXXX.ndd]
6. Blue dot should now appear automatically and onLocationChanged() callbacks should start receiving updates.
Depending on the file sizes and network connection, downloading may take awhile. If OfflineBundle is used, additional beacon data
and positioning data are not downloaded from the Steerpath server. Instead, a local cache is used.
If position is still not working, check following:
- You should see "[SERVICE] Guide started"
- You should see "[SERVICE] Positioning ON: Thread[Thread-XX,X,main]"
- You should see "[SERVICE] adding eids/uids: X"
- You should not see "[ ERROR ] failed to load file: NOT_FOUND, code=404, url=https://beacons.xx.steerpath.com/u:XXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXX"
* But if you do, please grab that url and deliver it to the Steerpath Support.
- You should not see "[ ERROR ] failed: /data/data/com.steerpath.sdk.example/cache/XXXXXXXXXXXXXXXXXXXXXXXX.ndd, msg=timeout"
* But if you do, wait a while. SDK attempts automatically to re-download and process required ndd file.
Before contacting Steerpath Support, please collect "Monitor" messages from the logcat.
RouteStepViewHolder callbacks not invoked, destination and distance texts not updating?
RouteStepViewHolder and DirectionSheet both operates with concepts of "RouteStep" and "RouteTrackerProgress".
RouteSteps are "Walk 28m and turn left" messages, and RouteTrackerProgress is the progress between two RouteSteps.
RouteStepViewHolder has update() methods for both and SDK calls them automatically when it sees that there has been some progress on routing:
- update(Context context, RouteStep step)
- update(Context context, RouteTrackerProgress progress)
These callbacks require a position, so if you are running on emulator, callbacks may not be invoked. You may use SteerpathMapView.setupClickForFakeLocation() to fake location on touch.
Note: there is small difference when using fake location vs. real location:
- When using fake location, SDK does not initially call update(Context context, RouteTrackerProgress progress). It is called next time new fake location is set by touching the route line somewhere.
- When routing with real location, update(Context context, RouteTrackerProgress progress) is called almost immediately after first update(Context context, RouteStep step).
The map is black?
Mapbox failed to load style. Search "mbgl" tags from logcat for more information.
The map is white?
Mapbox did load the style, but map tiles are not loaded. Check your initial coordinates. For example, if SteerpathMapView is opened in global view (showing whole world),
world tiles are attempted to load from position /0/0/0. If Steerpath map tile server does not host such map tiles, map will be white. Change initial camera position with SteerpathMap.setCameraPosition(), your venue position
is the preferred choice.