Skip to content

Commit 5b46370

Browse files
authored
Voice Units Bug Fixes & Android Observers (#317)
1 parent a3f2dc8 commit 5b46370

7 files changed

Lines changed: 94 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.2
2+
* Fix issue with voice units in Android
3+
* Fix BannerText, VoiceInstruction and Off Route Events
4+
15
## 0.2.1
26
* Fix issue with setting the language in Android
37

android/src/main/kotlin/com/eopeter/fluttermapboxnavigation/FlutterMapboxNavigationPlugin.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class FlutterMapboxNavigationPlugin : FlutterPlugin, MethodCallHandler,
6464
var mapStyleUrlNight: String? = null
6565
var navigationLanguage = "en"
6666
var navigationVoiceUnits = DirectionsCriteria.IMPERIAL
67+
var voiceInstructionsEnabled = true
68+
var bannerInstructionsEnabled = true
6769
var zoom = 15.0
6870
var bearing = 0.0
6971
var tilt = 0.0
@@ -148,6 +150,16 @@ class FlutterMapboxNavigationPlugin : FlutterPlugin, MethodCallHandler,
148150
navigationLanguage = language
149151
}
150152

153+
val voiceEnabled = arguments?.get("voiceInstructionsEnabled") as? Boolean
154+
if (voiceEnabled != null) {
155+
voiceInstructionsEnabled = voiceEnabled
156+
}
157+
158+
val bannerEnabled = arguments?.get("bannerInstructionsEnabled") as? Boolean
159+
if (bannerEnabled != null) {
160+
bannerInstructionsEnabled = bannerEnabled
161+
}
162+
151163
val units = arguments?.get("units") as? String
152164

153165
if (units != null) {

android/src/main/kotlin/com/eopeter/fluttermapboxnavigation/TurnByTurn.kt

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ import com.mapbox.navigation.base.route.RouterOrigin
3030
import com.mapbox.navigation.base.trip.model.RouteLegProgress
3131
import com.mapbox.navigation.base.trip.model.RouteProgress
3232
import com.mapbox.navigation.core.arrival.ArrivalObserver
33+
import com.mapbox.navigation.core.directions.session.RoutesObserver
3334
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
34-
import com.mapbox.navigation.core.trip.session.LocationMatcherResult
35-
import com.mapbox.navigation.core.trip.session.LocationObserver
36-
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
35+
import com.mapbox.navigation.core.trip.session.*
3736
import io.flutter.plugin.common.EventChannel
3837
import io.flutter.plugin.common.MethodCall
3938
import io.flutter.plugin.common.MethodChannel
@@ -128,8 +127,11 @@ open class TurnByTurn(
128127
.waypointIndicesList(this.addedWaypoints.waypointsIndices())
129128
.waypointNamesList(this.addedWaypoints.waypointsNames())
130129
.language(navigationLanguage)
131-
.alternatives(true)
130+
.alternatives(alternatives)
132131
.steps(true)
132+
.voiceUnits(navigationVoiceUnits)
133+
.bannerInstructions(bannerInstructionsEnabled)
134+
.voiceInstructions(voiceInstructionsEnabled)
133135
.build(),
134136
callback = object : NavigationRouterCallback {
135137
override fun onRoutesReady(
@@ -313,13 +315,21 @@ open class TurnByTurn(
313315

314316
open fun registerObservers() {
315317
// register event listeners
318+
MapboxNavigationApp.current()?.registerBannerInstructionsObserver(this.bannerInstructionObserver)
319+
MapboxNavigationApp.current()?.registerVoiceInstructionsObserver(this.voiceInstructionObserver)
320+
MapboxNavigationApp.current()?.registerOffRouteObserver(this.offRouteObserver)
321+
MapboxNavigationApp.current()?.registerRoutesObserver(this.routesObserver)
316322
MapboxNavigationApp.current()?.registerLocationObserver(this.locationObserver)
317323
MapboxNavigationApp.current()?.registerRouteProgressObserver(this.routeProgressObserver)
318324
MapboxNavigationApp.current()?.registerArrivalObserver(this.arrivalObserver)
319325
}
320326

321327
open fun unregisterObservers() {
322328
// unregister event listeners to prevent leaks or unnecessary resource consumption
329+
MapboxNavigationApp.current()?.unregisterBannerInstructionsObserver(this.bannerInstructionObserver)
330+
MapboxNavigationApp.current()?.unregisterVoiceInstructionsObserver(this.voiceInstructionObserver)
331+
MapboxNavigationApp.current()?.unregisterOffRouteObserver(this.offRouteObserver)
332+
MapboxNavigationApp.current()?.unregisterRoutesObserver(this.routesObserver)
323333
MapboxNavigationApp.current()?.unregisterLocationObserver(this.locationObserver)
324334
MapboxNavigationApp.current()?.unregisterRouteProgressObserver(this.routeProgressObserver)
325335
MapboxNavigationApp.current()?.unregisterArrivalObserver(this.arrivalObserver)
@@ -397,6 +407,26 @@ open class TurnByTurn(
397407
}
398408
}
399409

410+
private val bannerInstructionObserver = BannerInstructionsObserver { bannerInstructions ->
411+
PluginUtilities.sendEvent(MapBoxEvents.BANNER_INSTRUCTION, bannerInstructions.primary().text())
412+
}
413+
414+
private val voiceInstructionObserver = VoiceInstructionsObserver { voiceInstructions ->
415+
PluginUtilities.sendEvent(MapBoxEvents.SPEECH_ANNOUNCEMENT, voiceInstructions.announcement().toString())
416+
}
417+
418+
private val offRouteObserver = OffRouteObserver { offRoute ->
419+
if (offRoute) {
420+
PluginUtilities.sendEvent(MapBoxEvents.USER_OFF_ROUTE)
421+
}
422+
}
423+
424+
private val routesObserver = RoutesObserver { routeUpdateResult ->
425+
if (routeUpdateResult.navigationRoutes.isNotEmpty()) {
426+
PluginUtilities.sendEvent(MapBoxEvents.REROUTE_ALONG);
427+
}
428+
}
429+
400430
/**
401431
* Gets notified with progress along the currently active route.
402432
*/

android/src/main/kotlin/com/eopeter/fluttermapboxnavigation/activity/NavigationActivity.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,14 @@ import com.mapbox.navigation.base.route.RouterOrigin
3535
import com.mapbox.navigation.base.trip.model.RouteLegProgress
3636
import com.mapbox.navigation.base.trip.model.RouteProgress
3737
import com.mapbox.navigation.core.arrival.ArrivalObserver
38+
import com.mapbox.navigation.core.directions.session.RoutesObserver
3839
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
40+
import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver
3941
import com.mapbox.navigation.core.trip.session.LocationMatcherResult
4042
import com.mapbox.navigation.core.trip.session.LocationObserver
43+
import com.mapbox.navigation.core.trip.session.OffRouteObserver
4144
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
45+
import com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver
4246
import com.mapbox.navigation.dropin.map.MapViewObserver
4347
import com.mapbox.navigation.dropin.navigationview.NavigationViewListener
4448
import com.mapbox.navigation.utils.internal.ifNonNull
@@ -106,9 +110,14 @@ class NavigationActivity : AppCompatActivity() {
106110
CustomInfoPanelEndNavButtonBinder(act)
107111
}
108112

113+
MapboxNavigationApp.current()?.registerBannerInstructionsObserver(this.bannerInstructionObserver)
114+
MapboxNavigationApp.current()?.registerVoiceInstructionsObserver(this.voiceInstructionObserver)
115+
MapboxNavigationApp.current()?.registerOffRouteObserver(this.offRouteObserver)
116+
MapboxNavigationApp.current()?.registerRoutesObserver(this.routesObserver)
109117
MapboxNavigationApp.current()?.registerLocationObserver(locationObserver)
110118
MapboxNavigationApp.current()?.registerRouteProgressObserver(routeProgressObserver)
111119
MapboxNavigationApp.current()?.registerArrivalObserver(arrivalObserver)
120+
112121
finishBroadcastReceiver = object : BroadcastReceiver() {
113122
override fun onReceive(context: Context, intent: Intent) {
114123
finish()
@@ -174,6 +183,11 @@ class NavigationActivity : AppCompatActivity() {
174183
binding.navigationView.unregisterMapObserver(onMapLongClick)
175184
}
176185
binding.navigationView.removeListener(navigationStateListener)
186+
187+
MapboxNavigationApp.current()?.unregisterBannerInstructionsObserver(this.bannerInstructionObserver)
188+
MapboxNavigationApp.current()?.unregisterVoiceInstructionsObserver(this.voiceInstructionObserver)
189+
MapboxNavigationApp.current()?.unregisterOffRouteObserver(this.offRouteObserver)
190+
MapboxNavigationApp.current()?.unregisterRoutesObserver(this.routesObserver)
177191
MapboxNavigationApp.current()?.unregisterLocationObserver(locationObserver)
178192
MapboxNavigationApp.current()?.unregisterRouteProgressObserver(routeProgressObserver)
179193
MapboxNavigationApp.current()?.unregisterArrivalObserver(arrivalObserver)
@@ -198,6 +212,9 @@ class NavigationActivity : AppCompatActivity() {
198212
.waypointNamesList(waypointSet.waypointsNames())
199213
.language(FlutterMapboxNavigationPlugin.navigationLanguage)
200214
.alternatives(FlutterMapboxNavigationPlugin.showAlternateRoutes)
215+
.voiceUnits(FlutterMapboxNavigationPlugin.navigationVoiceUnits)
216+
.bannerInstructions(FlutterMapboxNavigationPlugin.bannerInstructionsEnabled)
217+
.voiceInstructions(FlutterMapboxNavigationPlugin.voiceInstructionsEnabled)
201218
.steps(true)
202219
.build(),
203220
callback = object : NavigationRouterCallback {
@@ -366,6 +383,26 @@ class NavigationActivity : AppCompatActivity() {
366383
}
367384
}
368385

386+
private val bannerInstructionObserver = BannerInstructionsObserver { bannerInstructions ->
387+
sendEvent(MapBoxEvents.BANNER_INSTRUCTION, bannerInstructions.primary().text())
388+
}
389+
390+
private val voiceInstructionObserver = VoiceInstructionsObserver { voiceInstructions ->
391+
sendEvent(MapBoxEvents.SPEECH_ANNOUNCEMENT, voiceInstructions.announcement().toString())
392+
}
393+
394+
private val offRouteObserver = OffRouteObserver { offRoute ->
395+
if (offRoute) {
396+
sendEvent(MapBoxEvents.USER_OFF_ROUTE)
397+
}
398+
}
399+
400+
private val routesObserver = RoutesObserver { routeUpdateResult ->
401+
if (routeUpdateResult.navigationRoutes.isNotEmpty()) {
402+
sendEvent(MapBoxEvents.REROUTE_ALONG);
403+
}
404+
}
405+
369406
/**
370407
* Notifies with attach and detach events on [MapView]
371408
*/

example/lib/app.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,10 @@ class _SampleNavigationAppState extends State<SampleNavigationApp> {
8181

8282
_navigationOption = MapBoxNavigation.instance.getDefaultOptions();
8383
_navigationOption.simulateRoute = true;
84-
_navigationOption.language = "pt-BR";
84+
_navigationOption.language = "en";
8585
//_navigationOption.initialLatitude = 36.1175275;
8686
//_navigationOption.initialLongitude = -115.1839524;
8787
MapBoxNavigation.instance.registerRouteEventListener(_onEmbeddedRouteEvent);
88-
MapBoxNavigation.instance.setDefaultOptions(_navigationOption);
8988

9089
String? platformVersion;
9190
// Platform messages may fail, so we use a try/catch PlatformException.
@@ -140,6 +139,10 @@ class _SampleNavigationAppState extends State<SampleNavigationApp> {
140139
wayPoints.add(_store);
141140
var opt = MapBoxOptions.from(_navigationOption);
142141
opt.simulateRoute = true;
142+
opt.voiceInstructionsEnabled = true;
143+
opt.bannerInstructionsEnabled = true;
144+
opt.units = VoiceUnits.metric;
145+
opt.language = "de-DE";
143146
await MapBoxNavigation.instance
144147
.startNavigation(wayPoints: wayPoints, options: opt);
145148
},

ios/flutter_mapbox_navigation.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
Pod::Spec.new do |s|
66
s.name = 'flutter_mapbox_navigation'
7-
s.version = '0.2.1'
7+
s.version = '0.2.2'
88
s.summary = 'Add Turn By Turn Navigation to Your Flutter Application Using MapBox. Never leave your app when you need to navigate your users to a location.'
99
s.description = <<-DESC
1010
Add Turn By Turn Navigation to Your Flutter Application Using MapBox. Never leave your app when you need to navigate your users to a location.

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: flutter_mapbox_navigation
22
description: >
33
Add Turn By Turn Navigation to Your Flutter Application Using MapBox.
44
Never leave your app when you need to navigate your users to a location.
5-
version: 0.2.1
5+
version: 0.2.2
66
homepage: "https://www.eopeter.com"
77
repository: "https://github.com/eopeter/flutter_mapbox_navigation"
88

0 commit comments

Comments
 (0)