Skip to content

Commit a782728

Browse files
authored
Add telemetry for android auto (#6084)
1 parent bc277e6 commit a782728

File tree

5 files changed

+71
-3
lines changed

5 files changed

+71
-3
lines changed

libnavui-androidauto/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Mapbox welcomes participation and contributions from everyone.
77
#### Bug fixes and improvements
88
- Fixed an issue with speed limit widget that caused it to turn into a back rectangle. [#6064](https://github.com/mapbox/mapbox-navigation-android/pull/6064)
99
- Fixed an issue with compass and logo widgets that caused them to draw behind location puck. [#6076](https://github.com/mapbox/mapbox-navigation-android/pull/6076)
10+
- Added telemetry to determine when the car head unit has been started or stopped. [#6084](https://github.com/mapbox/mapbox-navigation-android/pull/6084)
1011

1112
## androidauto-v0.4.0 - Jul 12, 2022
1213
### Changelog

libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarNavigationManager.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.car.app.navigation.NavigationManager
55
import androidx.car.app.navigation.NavigationManagerCallback
66
import com.mapbox.androidauto.car.navigation.CarDistanceFormatter
77
import com.mapbox.androidauto.car.navigation.maneuver.CarManeuverMapper
8+
import com.mapbox.androidauto.car.telemetry.MapboxCarTelemetry
89
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
910
import com.mapbox.navigation.core.MapboxNavigation
1011
import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter
@@ -22,7 +23,7 @@ import kotlinx.coroutines.flow.StateFlow
2223
* registered, the trip status of [MapboxNavigation] will be sent to the [NavigationManager].
2324
* This is needed to keep the vehicle cluster display updated.
2425
*/
25-
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
26+
@ExperimentalPreviewMapboxNavigationAPI
2627
class MapboxCarNavigationManager(
2728
carContext: CarContext
2829
) : MapboxNavigationObserver {
@@ -34,6 +35,7 @@ class MapboxCarNavigationManager(
3435
private var maneuverApi: MapboxManeuverApi? = null
3536
private var carDistanceFormatter: CarDistanceFormatter? = null
3637
private var mapboxNavigation: MapboxNavigation? = null
38+
private val carTelemetry = MapboxCarTelemetry()
3739

3840
private val routeProgressObserver = RouteProgressObserver { routeProgress ->
3941
val distanceFormatter = carDistanceFormatter ?: return@RouteProgressObserver
@@ -73,6 +75,7 @@ class MapboxCarNavigationManager(
7375
override fun onAttached(mapboxNavigation: MapboxNavigation) {
7476
logAndroidAuto("MapboxNavigationManager onAttached")
7577
this.mapboxNavigation = mapboxNavigation
78+
carTelemetry.onAttached(mapboxNavigation)
7679
val distanceFormatter = MapboxDistanceFormatter(
7780
mapboxNavigation.navigationOptions.distanceFormatterOptions
7881
)
@@ -87,6 +90,7 @@ class MapboxCarNavigationManager(
8790
override fun onDetached(mapboxNavigation: MapboxNavigation) {
8891
logAndroidAuto("MapboxNavigationManager onDetached")
8992
this.mapboxNavigation = null
93+
carTelemetry.onDetached(mapboxNavigation)
9094
mapboxNavigation.unregisterTripSessionStateObserver(tripSessionStateObserver)
9195
mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver)
9296

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.mapbox.androidauto.car.telemetry
2+
3+
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
4+
import com.mapbox.navigation.core.MapboxNavigation
5+
import com.mapbox.navigation.core.internal.telemetry.NavigationCustomEventType
6+
import com.mapbox.navigation.core.internal.telemetry.sendCustomEvent
7+
import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
8+
9+
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
10+
internal class MapboxCarTelemetry : MapboxNavigationObserver {
11+
12+
override fun onAttached(mapboxNavigation: MapboxNavigation) {
13+
mapboxNavigation.sendCustomEvent(
14+
payload = STARTED,
15+
customEventType = NavigationCustomEventType.ANALYTICS,
16+
customEventVersion = EVENT_VERSION
17+
)
18+
}
19+
20+
override fun onDetached(mapboxNavigation: MapboxNavigation) {
21+
mapboxNavigation.sendCustomEvent(
22+
payload = STOPPED,
23+
customEventType = NavigationCustomEventType.ANALYTICS,
24+
customEventVersion = EVENT_VERSION
25+
)
26+
}
27+
28+
private companion object {
29+
private const val EVENT_VERSION = "1.0.0"
30+
private const val STARTED = "Android Auto : started"
31+
private const val STOPPED = "Android Auto : stopped"
32+
}
33+
}

libnavui-androidauto/src/test/java/com/mapbox/androidauto/MapboxCarNavigationManagerTest.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import androidx.car.app.CarContext
44
import androidx.car.app.navigation.NavigationManager
55
import androidx.car.app.navigation.NavigationManagerCallback
66
import com.mapbox.androidauto.testing.CarAppTestRule
7+
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
78
import com.mapbox.navigation.base.trip.model.RouteProgress
89
import com.mapbox.navigation.core.MapboxNavigation
10+
import com.mapbox.navigation.core.internal.telemetry.sendCustomEvent
911
import com.mapbox.navigation.core.trip.session.RouteProgressObserver
1012
import com.mapbox.navigation.core.trip.session.TripSessionState
1113
import com.mapbox.navigation.core.trip.session.TripSessionStateObserver
@@ -26,7 +28,7 @@ import org.junit.Assert.assertTrue
2628
import org.junit.Rule
2729
import org.junit.Test
2830

29-
@OptIn(ExperimentalCoroutinesApi::class)
31+
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class, ExperimentalCoroutinesApi::class)
3032
class MapboxCarNavigationManagerTest {
3133

3234
@get:Rule
@@ -62,6 +64,34 @@ class MapboxCarNavigationManagerTest {
6264
verify { navigationManager.clearNavigationManagerCallback() }
6365
}
6466

67+
@Test
68+
fun `onAttached should trigger telemetry event that android auto started`() {
69+
val mapboxNavigation: MapboxNavigation = mockk(relaxed = true)
70+
sut.onAttached(mapboxNavigation)
71+
72+
verify {
73+
mapboxNavigation.sendCustomEvent(
74+
"Android Auto : started",
75+
"analytics",
76+
"1.0.0"
77+
)
78+
}
79+
}
80+
81+
@Test
82+
fun `onAttached should trigger telemetry event that android auto stopped`() {
83+
val mapboxNavigation: MapboxNavigation = mockk(relaxed = true)
84+
sut.onDetached(mapboxNavigation)
85+
86+
verify {
87+
mapboxNavigation.sendCustomEvent(
88+
"Android Auto : stopped",
89+
"analytics",
90+
"1.0.0"
91+
)
92+
}
93+
}
94+
6595
@Test
6696
fun `TripSessionState STARTED should trigger navigationStarted`() {
6797
val mapboxNavigation: MapboxNavigation = mockk(relaxed = true)

qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/car/MainCarSession.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class MainCarSession : Session() {
4949
}
5050

5151
init {
52+
logAndroidAuto("MainCarSession constructor")
5253
val logoSurfaceRenderer = CarLogoSurfaceRenderer()
5354
val compassSurfaceRenderer = CarCompassSurfaceRenderer()
54-
logAndroidAuto("MainCarSession constructor")
5555
lifecycle.addObserver(object : DefaultLifecycleObserver {
5656

5757
override fun onCreate(owner: LifecycleOwner) {

0 commit comments

Comments
 (0)