Skip to content

Commit cd2873a

Browse files
committed
wip
1 parent 89acc70 commit cd2873a

File tree

4 files changed

+82
-8
lines changed

4 files changed

+82
-8
lines changed

libnavigation-metrics/src/main/java/com/mapbox/navigation/metrics/MapboxMetricsReporter.kt

+10-8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import com.mapbox.navigation.base.internal.metric.extractEventsNames
1717
import com.mapbox.navigation.base.metrics.MetricEvent
1818
import com.mapbox.navigation.base.metrics.MetricsObserver
1919
import com.mapbox.navigation.base.metrics.MetricsReporter
20+
import com.mapbox.navigation.metrics.events.EventsServiceInterfacesManager
21+
import com.mapbox.navigation.metrics.events.TelemetryEventsProvider
2022
import com.mapbox.navigation.metrics.internal.EventsServiceProvider
2123
import com.mapbox.navigation.metrics.internal.TelemetryServiceProvider
2224
import com.mapbox.navigation.metrics.internal.TelemetryUtilsDelegate
@@ -34,7 +36,7 @@ object MapboxMetricsReporter : MetricsReporter {
3436
private const val LOG_CATEGORY = "MapboxMetricsReporter"
3537

3638
private val gson = Gson()
37-
private lateinit var eventsService: EventsServiceInterface
39+
private lateinit var eventsManager: EventsServiceInterfacesManager
3840
private lateinit var telemetryService: TelemetryService
3941

4042
@Volatile
@@ -84,10 +86,10 @@ object MapboxMetricsReporter : MetricsReporter {
8486
userAgent: String
8587
) {
8688
isTelemetryInitialized = true
89+
eventsManager = TelemetryEventsProvider.getOrCreateTelemetryEventsManager(accessToken)
8790
val eventsServerOptions = EventsServerOptions(accessToken, userAgent, null)
88-
eventsService = EventsServiceProvider.provideEventsService(eventsServerOptions)
8991
telemetryService = TelemetryServiceProvider.provideTelemetryService(eventsServerOptions)
90-
eventsService.registerObserver(eventsServiceObserver)
92+
eventsManager.nativeEventsServiceInterface.registerObserver(eventsServiceObserver)
9193
}
9294

9395
/**
@@ -109,7 +111,7 @@ object MapboxMetricsReporter : MetricsReporter {
109111
fun disable() {
110112
isTelemetryInitialized = false
111113
removeObserver()
112-
eventsService.unregisterObserver(eventsServiceObserver)
114+
eventsManager.nativeEventsServiceInterface.unregisterObserver(eventsServiceObserver)
113115
ioJobController.job.cancelChildren()
114116
}
115117

@@ -125,7 +127,7 @@ object MapboxMetricsReporter : MetricsReporter {
125127
)
126128
return
127129
}
128-
eventsService.sendEvent(
130+
eventsManager.nativeEventsServiceInterface.sendEvent(
129131
Event(eventsPriority, metricEvent.toValue(), null)
130132
) {
131133
if (it != null) {
@@ -144,7 +146,7 @@ object MapboxMetricsReporter : MetricsReporter {
144146
*/
145147
override fun sendTurnstileEvent(turnstileEvent: TurnstileEvent) {
146148
ifTelemetryIsRunning {
147-
eventsService.sendTurnstileEvent(turnstileEvent) {
149+
eventsManager.nativeEventsServiceInterface.sendTurnstileEvent(turnstileEvent) {
148150
if (it != null) {
149151
logE("Failed to send Turnstile event: $it", LOG_CATEGORY)
150152
}
@@ -170,14 +172,14 @@ object MapboxMetricsReporter : MetricsReporter {
170172
* Register [EventsServiceObserver]
171173
*/
172174
fun registerEventsServiceObserver(observer: EventsServiceObserver) {
173-
eventsService.registerObserver(observer)
175+
eventsManager.nativeEventsServiceInterface.registerObserver(observer)
174176
}
175177

176178
/**
177179
* Unregister [EventsServiceObserver]
178180
*/
179181
fun unregisterEventsServiceObserver(observer: EventsServiceObserver) {
180-
eventsService.unregisterObserver(observer)
182+
eventsManager.nativeEventsServiceInterface.unregisterObserver(observer)
181183
}
182184

183185
private inline fun ifTelemetryIsRunning(func: () -> Unit) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mapbox.navigation.metrics.events
2+
3+
import com.mapbox.bindgen.Value
4+
5+
fun interface EventsObserver {
6+
fun onEvents(events: Value)
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.mapbox.navigation.metrics.events
2+
3+
import com.mapbox.bindgen.Value
4+
import com.mapbox.common.EventsServiceError
5+
import com.mapbox.common.EventsServiceInterface
6+
import com.mapbox.common.EventsServiceObserver
7+
8+
class EventsServiceInterfacesManager(
9+
// platformEventsServiceInterface: EventsServiceInterface,
10+
internal val nativeEventsServiceInterface: EventsServiceInterface,
11+
) {
12+
private val eventServices = listOf(
13+
// platformEventsServiceInterface,
14+
nativeEventsServiceInterface,
15+
)
16+
17+
private val observers = mutableListOf<EventsObserver>()
18+
19+
private val eventsServiceObserver = object : EventsServiceObserver {
20+
override fun didEncounterError(error: EventsServiceError, events: Value) {
21+
// do nothing
22+
}
23+
24+
override fun didSendEvents(events: Value) {
25+
observers.forEach { it.onEvents(events) }
26+
}
27+
28+
}
29+
30+
fun registerEventsObserver(eventsObserver: EventsObserver) {
31+
checkAndRegisterInternal()
32+
observers.add(eventsObserver)
33+
}
34+
35+
fun unregisterEventsObserver(eventsObserver: EventsObserver) {
36+
observers.remove(eventsObserver)
37+
checkAndUnregisterInternal()
38+
}
39+
40+
private fun checkAndRegisterInternal() {
41+
if (observers.isEmpty()) {
42+
eventServices.forEach { it.registerObserver(eventsServiceObserver) }
43+
}
44+
}
45+
46+
private fun checkAndUnregisterInternal() {
47+
if (observers.isEmpty()) {
48+
eventServices.forEach { it.unregisterObserver(eventsServiceObserver) }
49+
}
50+
}
51+
}
52+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mapbox.navigation.metrics.events
2+
3+
import com.mapbox.common.EventsServerOptions
4+
import com.mapbox.common.EventsService
5+
6+
object TelemetryEventsProvider {
7+
fun getOrCreateTelemetryEventsManager(accessToken: String): EventsServiceInterfacesManager =
8+
EventsServiceInterfacesManager(
9+
EventsService.getOrCreate(
10+
EventsServerOptions(accessToken, "MapboxNavigationNative", null)
11+
)
12+
)
13+
}

0 commit comments

Comments
 (0)