Skip to content

Commit dfeb29f

Browse files
committed
Telemetry events: migrating to NavNative
1 parent 9b4793b commit dfeb29f

File tree

50 files changed

+544
-6000
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+544
-6000
lines changed

libnavigation-copilot/src/main/java/com/mapbox/navigation/copilot/MapboxCopilotImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ internal class MapboxCopilotImpl(
122122
* start
123123
*/
124124
fun start() {
125-
registerUserFeedbackCallback(userFeedbackCallback)
125+
registerUserFeedbackCallback(mapboxNavigation, userFeedbackCallback)
126126
if (isMapboxNavigationAppSetup) {
127127
MapboxNavigationApp.lifecycleOwner.lifecycle.addObserver(
128128
foregroundBackgroundLifecycleObserver
@@ -139,7 +139,7 @@ internal class MapboxCopilotImpl(
139139
* stop
140140
*/
141141
fun stop() {
142-
unregisterUserFeedbackCallback(userFeedbackCallback)
142+
unregisterUserFeedbackCallback(mapboxNavigation, userFeedbackCallback)
143143
if (isMapboxNavigationAppSetup) {
144144
MapboxNavigationApp.lifecycleOwner.lifecycle.removeObserver(
145145
foregroundBackgroundLifecycleObserver

libnavigation-core/src/main/java/com/mapbox/navigation/core/MapboxNavigation.kt

Lines changed: 49 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ import com.mapbox.navigation.core.history.MapboxHistoryReader
5757
import com.mapbox.navigation.core.history.MapboxHistoryRecorder
5858
import com.mapbox.navigation.core.internal.ReachabilityService
5959
import com.mapbox.navigation.core.internal.telemetry.CustomEvent
60+
import com.mapbox.navigation.core.internal.telemetry.TelemetryAndroidAutoInterface
6061
import com.mapbox.navigation.core.internal.telemetry.UserFeedbackCallback
62+
import com.mapbox.navigation.core.internal.telemetry.UserFeedbackSubscriber
6163
import com.mapbox.navigation.core.internal.utils.InternalUtils
6264
import com.mapbox.navigation.core.internal.utils.ModuleParams
6365
import com.mapbox.navigation.core.internal.utils.isInternalImplementation
@@ -87,7 +89,8 @@ import com.mapbox.navigation.core.routeoptions.RouteOptionsUpdater
8789
import com.mapbox.navigation.core.routerefresh.RouteRefreshController
8890
import com.mapbox.navigation.core.routerefresh.RouteRefreshControllerProvider
8991
import com.mapbox.navigation.core.routerefresh.RouteRefreshStatesObserver
90-
import com.mapbox.navigation.core.telemetry.MapboxNavigationTelemetry
92+
import com.mapbox.navigation.core.telemetry.ApplicationLifecycleMonitor
93+
import com.mapbox.navigation.core.telemetry.NavigationTelemetry
9194
import com.mapbox.navigation.core.telemetry.events.FeedbackEvent
9295
import com.mapbox.navigation.core.telemetry.events.FeedbackHelper
9396
import com.mapbox.navigation.core.telemetry.events.FeedbackMetadata
@@ -118,7 +121,6 @@ import com.mapbox.navigation.core.trip.session.eh.GraphAccessor
118121
import com.mapbox.navigation.core.trip.session.eh.RoadObjectMatcher
119122
import com.mapbox.navigation.core.trip.session.eh.RoadObjectsStore
120123
import com.mapbox.navigation.metrics.MapboxMetricsReporter
121-
import com.mapbox.navigation.metrics.internal.TelemetryUtilsDelegate
122124
import com.mapbox.navigation.navigator.internal.MapboxNativeNavigator
123125
import com.mapbox.navigation.navigator.internal.NavigatorLoader
124126
import com.mapbox.navigation.navigator.internal.router.RouterInterfaceAdapter
@@ -250,6 +252,11 @@ class MapboxNavigation @VisibleForTesting internal constructor(
250252
private val mainJobController = threadController.getMainScopeAndRootJob()
251253
private val directionsSession: DirectionsSession
252254
private var navigator: MapboxNativeNavigator
255+
private var navigationTelemetry: NavigationTelemetry
256+
internal val telemetryAndroidAutoInterface: TelemetryAndroidAutoInterface
257+
get() = navigationTelemetry
258+
internal val userFeedbackSubscriber: UserFeedbackSubscriber
259+
get() = navigationTelemetry
253260
private var historyRecorderHandles: NavigatorLoader.HistoryRecorderHandles
254261
private val tripService: TripService
255262
private val tripSession: TripSession
@@ -458,6 +465,11 @@ class MapboxNavigation @VisibleForTesting internal constructor(
458465
} else {
459466
RouterInterfaceAdapter(moduleRouter, ::getNavigationRoutes)
460467
},
468+
NavigationComponentProvider.createEventsMetadataInterface(
469+
navigationOptions.applicationContext,
470+
ApplicationLifecycleMonitor(navigationOptions.applicationContext),
471+
navigationOptions.eventsAppMetadata
472+
),
461473
)
462474
assignHistoryRecorders()
463475
navigationSession = NavigationComponentProvider.createNavigationSession()
@@ -524,24 +536,19 @@ class MapboxNavigation @VisibleForTesting internal constructor(
524536
arrivalProgressObserver
525537
)
526538

539+
navigationTelemetry = NavigationTelemetry(tripSession) { navigator.telemetry }
540+
527541
ifNonNull(accessToken) { token ->
528-
runInTelemetryContext { telemetry ->
529-
logD(
530-
"MapboxMetricsReporter.init from MapboxNavigation main",
531-
telemetry.LOG_CATEGORY
532-
)
533-
MapboxMetricsReporter.init(
534-
navigationOptions.applicationContext,
535-
token,
536-
obtainUserAgent()
537-
)
538-
MapboxMetricsReporter.toggleLogging(navigationOptions.isDebugLoggingEnabled)
539-
telemetry.initialize(
540-
this,
541-
navigationOptions,
542-
MapboxMetricsReporter,
543-
)
544-
}
542+
logD(
543+
"MapboxMetricsReporter.init from MapboxNavigation main",
544+
LOG_CATEGORY
545+
)
546+
MapboxMetricsReporter.init(
547+
navigationOptions.applicationContext,
548+
token,
549+
obtainUserAgent()
550+
)
551+
MapboxMetricsReporter.toggleLogging(navigationOptions.isDebugLoggingEnabled)
545552
}
546553

547554
val routeOptionsProvider = RouteOptionsUpdater()
@@ -1208,9 +1215,6 @@ class MapboxNavigation @VisibleForTesting internal constructor(
12081215
historyRecordingStateHandler.unregisterAllStateChangeObservers()
12091216
historyRecordingStateHandler.unregisterAllCopilotSessionObservers()
12101217
developerMetadataAggregator.unregisterAllObservers()
1211-
runInTelemetryContext { telemetry ->
1212-
telemetry.destroy(this@MapboxNavigation)
1213-
}
12141218
threadController.cancelAllNonUICoroutines()
12151219
threadController.cancelAllUICoroutines()
12161220
ifNonNull(reachabilityObserverId) {
@@ -1617,17 +1621,15 @@ class MapboxNavigation @VisibleForTesting internal constructor(
16171621
feedbackMetadata: FeedbackMetadata?,
16181622
userFeedbackCallback: UserFeedbackCallback?,
16191623
) {
1620-
runInTelemetryContext { telemetry ->
1621-
telemetry.postUserFeedback(
1622-
feedbackType,
1623-
description,
1624-
feedbackSource,
1625-
screenshot,
1626-
feedbackSubType,
1627-
feedbackMetadata,
1628-
userFeedbackCallback,
1629-
)
1630-
}
1624+
navigationTelemetry.postUserFeedback(
1625+
feedbackType,
1626+
description,
1627+
feedbackSource,
1628+
screenshot,
1629+
feedbackSubType,
1630+
feedbackMetadata,
1631+
userFeedbackCallback
1632+
)
16311633
}
16321634

16331635
@ExperimentalPreviewMapboxNavigationAPI
@@ -1636,30 +1638,21 @@ class MapboxNavigation @VisibleForTesting internal constructor(
16361638
@CustomEvent.Type customEventType: String,
16371639
customEventVersion: String,
16381640
) {
1639-
runInTelemetryContext { telemetry ->
1640-
telemetry.postCustomEvent(
1641-
payload = payload,
1642-
customEventType = customEventType,
1643-
customEventVersion = customEventVersion
1644-
)
1645-
}
1641+
navigationTelemetry.postCustomEvent(
1642+
customEventType,
1643+
customEventVersion,
1644+
payload,
1645+
)
16461646
}
16471647

16481648
/**
1649-
* Provides wrapper of [FeedbackMetadata]. [FeedbackMetadata] is used to send deferred
1649+
* Provides [FeedbackMetadata], that is used to send deferred
16501650
* feedback attached to passed location. It contains data (like location, time) when method is
16511651
* invoked.
1652-
*
1653-
* Note: method throws [IllegalStateException] if trips session is not
1654-
* started ([startTripSession]) or telemetry is disabled.
16551652
*/
16561653
@ExperimentalPreviewMapboxNavigationAPI
16571654
fun provideFeedbackMetadataWrapper(): FeedbackMetadataWrapper =
1658-
runInTelemetryContext { telemetry ->
1659-
telemetry.provideFeedbackMetadataWrapper()
1660-
} ?: throw java.lang.IllegalStateException(
1661-
"To get FeedbackMetadataWrapper Telemetry must be enabled"
1662-
)
1655+
navigationTelemetry.provideFeedbackMetadataWrapper()
16631656

16641657
/**
16651658
* Start observing alternatives routes for a trip session via [RouteAlternativesObserver].
@@ -1967,6 +1960,11 @@ class MapboxNavigation @VisibleForTesting internal constructor(
19671960
} else {
19681961
RouterInterfaceAdapter(moduleRouter, ::getNavigationRoutes)
19691962
},
1963+
NavigationComponentProvider.createEventsMetadataInterface(
1964+
navigationOptions.applicationContext,
1965+
ApplicationLifecycleMonitor(navigationOptions.applicationContext),
1966+
navigationOptions.eventsAppMetadata
1967+
),
19701968
)
19711969
assignHistoryRecorders()
19721970

@@ -1994,12 +1992,8 @@ class MapboxNavigation @VisibleForTesting internal constructor(
19941992
}
19951993
}
19961994

1997-
private inline fun <T> runInTelemetryContext(func: (MapboxNavigationTelemetry) -> T): T? {
1998-
return if (TelemetryUtilsDelegate.getEventsCollectionState()) {
1999-
func(MapboxNavigationTelemetry)
2000-
} else {
2001-
null
2002-
}
1995+
private fun cancelReroute() {
1996+
rerouteController?.interrupt()
20031997
}
20041998

20051999
private fun obtainUserAgent(): String {

libnavigation-core/src/main/java/com/mapbox/navigation/core/NavigationComponentProvider.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.mapbox.navigation.core
22

33
import android.content.Context
44
import com.mapbox.navigation.base.internal.NavigationRouterV2
5+
import com.mapbox.navigation.base.options.EventsAppMetadata
56
import com.mapbox.navigation.base.options.NavigationOptions
67
import com.mapbox.navigation.base.trip.notification.TripNotification
78
import com.mapbox.navigation.core.accounts.BillingController
@@ -11,6 +12,8 @@ import com.mapbox.navigation.core.directions.session.MapboxDirectionsSession
1112
import com.mapbox.navigation.core.ev.EVDynamicDataHolder
1213
import com.mapbox.navigation.core.preview.NativeRoutesDataParser
1314
import com.mapbox.navigation.core.preview.RoutesPreviewController
15+
import com.mapbox.navigation.core.telemetry.ApplicationLifecycleMonitor
16+
import com.mapbox.navigation.core.telemetry.EventsMetadataInterfaceImpl
1417
import com.mapbox.navigation.core.trip.service.MapboxTripService
1518
import com.mapbox.navigation.core.trip.service.TripService
1619
import com.mapbox.navigation.core.trip.session.MapboxTripSession
@@ -22,6 +25,7 @@ import com.mapbox.navigation.navigator.internal.MapboxNativeNavigator
2225
import com.mapbox.navigation.navigator.internal.MapboxNativeNavigatorImpl
2326
import com.mapbox.navigation.utils.internal.ThreadController
2427
import com.mapbox.navigator.ConfigHandle
28+
import com.mapbox.navigator.EventsMetadataInterface
2529
import com.mapbox.navigator.HistoryRecorderHandle
2630
import com.mapbox.navigator.RouterInterface
2731
import com.mapbox.navigator.TilesConfig
@@ -39,12 +43,14 @@ internal object NavigationComponentProvider {
3943
tilesConfig: TilesConfig,
4044
accessToken: String,
4145
router: RouterInterface,
46+
eventsMetadataInterface: EventsMetadataInterface,
4247
): MapboxNativeNavigator = MapboxNativeNavigatorImpl.create(
4348
config,
4449
historyRecorderComposite,
4550
tilesConfig,
4651
accessToken,
4752
router,
53+
eventsMetadataInterface,
4854
)
4955

5056
fun createTripService(
@@ -116,4 +122,14 @@ internal object NavigationComponentProvider {
116122
fun createEVDynamicDataHolder(): EVDynamicDataHolder = EVDynamicDataHolder()
117123

118124
fun createRoutesCacheClearer(): RoutesCacheClearer = RoutesCacheClearer()
125+
126+
fun createEventsMetadataInterface(
127+
appContext: Context,
128+
lifecycleMonitor: ApplicationLifecycleMonitor,
129+
eventsAppMetadata: EventsAppMetadata?,
130+
): EventsMetadataInterface = EventsMetadataInterfaceImpl(
131+
appContext,
132+
lifecycleMonitor,
133+
eventsAppMetadata
134+
)
119135
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mapbox.navigation.core.internal.telemetry
2+
3+
import com.mapbox.navigation.core.internal.telemetry.event.AndroidAutoEvent
4+
5+
interface TelemetryAndroidAutoInterface {
6+
fun postAndroidAutoEvent(event: AndroidAutoEvent)
7+
}

libnavigation-core/src/main/java/com/mapbox/navigation/core/internal/telemetry/TelemetryEx.kt

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,33 @@
22

33
package com.mapbox.navigation.core.internal.telemetry
44

5-
import android.location.Location
6-
import android.os.Build
75
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
86
import com.mapbox.navigation.core.MapboxNavigation
9-
import com.mapbox.navigation.core.telemetry.MapboxNavigationTelemetry
107
import com.mapbox.navigation.core.telemetry.events.FeedbackEvent
118
import com.mapbox.navigation.core.telemetry.events.FeedbackHelper
129
import com.mapbox.navigation.core.telemetry.events.FeedbackMetadata
1310
import com.mapbox.navigation.core.telemetry.events.FeedbackMetadataWrapper
14-
import com.mapbox.navigation.core.telemetry.events.TelemetryLocation
15-
16-
internal fun List<Location>.toTelemetryLocations(): Array<TelemetryLocation> {
17-
return Array(size) { get(it).toTelemetryLocation() }
18-
}
19-
20-
internal fun Location.toTelemetryLocation(): TelemetryLocation {
21-
return TelemetryLocation(
22-
latitude,
23-
longitude,
24-
speed,
25-
bearing,
26-
altitude,
27-
time.toString(),
28-
accuracy,
29-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
30-
verticalAccuracyMeters
31-
} else {
32-
0f
33-
},
34-
)
35-
}
3611

3712
/**
3813
* Register a [UserFeedbackCallback] to be notified when a new user feedback is posted.
3914
*
4015
* @param userFeedbackCallback UserFeedbackCallback
4116
*/
42-
fun registerUserFeedbackCallback(userFeedbackCallback: UserFeedbackCallback) {
43-
MapboxNavigationTelemetry.registerUserFeedbackCallback(userFeedbackCallback)
17+
fun registerUserFeedbackCallback(
18+
mapboxNavigation: MapboxNavigation, userFeedbackCallback: UserFeedbackCallback
19+
) {
20+
mapboxNavigation.userFeedbackSubscriber.registerUserFeedbackCallback(userFeedbackCallback)
4421
}
4522

4623
/**
4724
* Unregisters a [UserFeedbackCallback].
4825
*
4926
* @param userFeedbackCallback UserFeedbackCallback
5027
*/
51-
fun unregisterUserFeedbackCallback(userFeedbackCallback: UserFeedbackCallback) {
52-
MapboxNavigationTelemetry.unregisterUserFeedbackCallback(userFeedbackCallback)
28+
fun unregisterUserFeedbackCallback(
29+
mapboxNavigation: MapboxNavigation, userFeedbackCallback: UserFeedbackCallback
30+
) {
31+
mapboxNavigation.userFeedbackSubscriber.unregisterUserFeedbackCallback(userFeedbackCallback)
5332
}
5433

5534
/**
@@ -104,3 +83,6 @@ fun MapboxNavigation.sendCustomEvent(
10483
) {
10584
postCustomEvent(payload, customEventType, customEventVersion)
10685
}
86+
87+
fun MapboxNavigation.telemetryAndroidAutoInterface(): TelemetryAndroidAutoInterface =
88+
telemetryAndroidAutoInterface
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.mapbox.navigation.core.internal.telemetry
2+
3+
interface UserFeedbackSubscriber {
4+
5+
fun registerUserFeedbackCallback(userFeedbackCallback: UserFeedbackCallback)
6+
7+
fun unregisterUserFeedbackCallback(userFeedbackCallback: UserFeedbackCallback)
8+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.mapbox.navigation.core.internal.telemetry.event
2+
3+
enum class AndroidAutoEvent {
4+
Connected,
5+
Disconnected,
6+
}

0 commit comments

Comments
 (0)