Skip to content

Commit 46d08b7

Browse files
authored
Utilize Events API from Common SDK (#4011)
* Adopt Core Events API * Clean up MME usages * Fix tests compilation * Add init with EventsService to NavigationEVentsManager * Communicate with EventsService through an interface * Adjust tests * Adjust to the latest API * Add telemetry service instantiation * Remove MMEEventsManagerUsage * Revert Package.resolved changes * Adjust tests * Remove outdated comment * Add top rated constant * Cache UIDevice.machine property
1 parent d392194 commit 46d08b7

17 files changed

+276
-268
lines changed

MapboxNavigation.xcodeproj/project.pbxproj

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@
8181
2E50E0D2264E468B009D3848 /* RoadObjectMatcherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E50E0D1264E468B009D3848 /* RoadObjectMatcherError.swift */; };
8282
2E50E0DC264E49C8009D3848 /* RoadObjectMatcherDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E50E0DB264E49C8009D3848 /* RoadObjectMatcherDelegate.swift */; };
8383
2E50E0E6264E49EF009D3848 /* OpenLRIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E50E0E5264E49EF009D3848 /* OpenLRIdentifier.swift */; };
84+
2E5ACEE8288E877A00300ECA /* EventsAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E5ACEE6288E877A00300ECA /* EventsAPI.swift */; };
85+
2E5ACEE9288E877A00300ECA /* EventConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E5ACEE7288E877A00300ECA /* EventConstants.swift */; };
86+
2E5ACEEB288E888500300ECA /* EventsAPIMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E5ACEEA288E888500300ECA /* EventsAPIMock.swift */; };
8487
2E6656F9264EC912009463EE /* Result+Expected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E6656F8264EC912009463EE /* Result+Expected.swift */; };
8588
2E82B9DC26E61F4600B7837F /* CongestionLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E82B9DB26E61F4600B7837F /* CongestionLevel.swift */; };
8689
2E82B9DE26E6237600B7837F /* CongestionLevelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E82B9DD26E6237600B7837F /* CongestionLevelTests.swift */; };
@@ -431,7 +434,6 @@
431434
C5C94C1B1DDCD22B0097296A /* MapboxCoreNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = C5ADFBCC1DDCC7840011824B /* MapboxCoreNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; };
432435
C5C94C1C1DDCD2340097296A /* LegacyRouteController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ADFBF91DDCC9580011824B /* LegacyRouteController.swift */; };
433436
C5C94C1D1DDCD2370097296A /* RouteProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ADFBFB1DDCC9AD0011824B /* RouteProgress.swift */; };
434-
C5CFE4881EF2FD4C006F48E8 /* MMEEventsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5CFE4871EF2FD4C006F48E8 /* MMEEventsManager.swift */; };
435437
C5D9800F1EFBCDAD006DBF2E /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D9800E1EFBCDAD006DBF2E /* Date.swift */; };
436438
C5E7A31C1F4F6828001CB015 /* NavigationRouteOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5E7A31B1F4F6828001CB015 /* NavigationRouteOptions.swift */; };
437439
C5FFAC1520D96F5C009E7F98 /* CarPlayNavigationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5FFAC1420D96F5B009E7F98 /* CarPlayNavigationViewController.swift */; };
@@ -669,6 +671,9 @@
669671
2E50E0D1264E468B009D3848 /* RoadObjectMatcherError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoadObjectMatcherError.swift; sourceTree = "<group>"; };
670672
2E50E0DB264E49C8009D3848 /* RoadObjectMatcherDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoadObjectMatcherDelegate.swift; sourceTree = "<group>"; };
671673
2E50E0E5264E49EF009D3848 /* OpenLRIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenLRIdentifier.swift; sourceTree = "<group>"; };
674+
2E5ACEE6288E877A00300ECA /* EventsAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventsAPI.swift; sourceTree = "<group>"; };
675+
2E5ACEE7288E877A00300ECA /* EventConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventConstants.swift; sourceTree = "<group>"; };
676+
2E5ACEEA288E888500300ECA /* EventsAPIMock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventsAPIMock.swift; sourceTree = "<group>"; };
672677
2E6656F8264EC912009463EE /* Result+Expected.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Result+Expected.swift"; sourceTree = "<group>"; };
673678
2E82B9DB26E61F4600B7837F /* CongestionLevel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CongestionLevel.swift; sourceTree = "<group>"; };
674679
2E82B9DD26E6237600B7837F /* CongestionLevelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CongestionLevelTests.swift; sourceTree = "<group>"; };
@@ -1057,7 +1062,6 @@
10571062
C5ADFBF91DDCC9580011824B /* LegacyRouteController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyRouteController.swift; sourceTree = "<group>"; };
10581063
C5ADFBFB1DDCC9AD0011824B /* RouteProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RouteProgress.swift; sourceTree = "<group>"; };
10591064
C5BF7370206AB0DE00CDBB6D /* MapboxCoreNavigationTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MapboxCoreNavigationTests-Bridging-Header.h"; sourceTree = "<group>"; };
1060-
C5CFE4871EF2FD4C006F48E8 /* MMEEventsManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MMEEventsManager.swift; sourceTree = "<group>"; };
10611065
C5D9800E1EFBCDAD006DBF2E /* Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = "<group>"; };
10621066
C5E7A31B1F4F6828001CB015 /* NavigationRouteOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationRouteOptions.swift; sourceTree = "<group>"; };
10631067
C5FFAC1420D96F5B009E7F98 /* CarPlayNavigationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CarPlayNavigationViewController.swift; sourceTree = "<group>"; };
@@ -1279,6 +1283,8 @@
12791283
118D882E26F8CA0700B2ED7B /* ActiveNavigationFeedbackType.swift */,
12801284
118D883126F8CA0700B2ED7B /* CoreFeedbackEvent.swift */,
12811285
118D882D26F8CA0700B2ED7B /* EndOfRouteFeedback.swift */,
1286+
2E5ACEE7288E877A00300ECA /* EventConstants.swift */,
1287+
2E5ACEE6288E877A00300ECA /* EventsAPI.swift */,
12821288
118D882C26F8CA0700B2ED7B /* FeedbackEvent.swift */,
12831289
118D883226F8CA0700B2ED7B /* FeedbackScreenshotOption.swift */,
12841290
118D882F26F8CA0700B2ED7B /* FeedbackType.swift */,
@@ -1388,7 +1394,6 @@
13881394
354A9BCA20EA9BDA00F03325 /* EventDetails.swift */,
13891395
11B3D6D526A60EBD0057C6F4 /* ActiveNavigationEventDetails.swift */,
13901396
110766AC26A5A64000832F01 /* PassiveNavigationEventDetails.swift */,
1391-
C5CFE4871EF2FD4C006F48E8 /* MMEEventsManager.swift */,
13921397
354A9BC520EA991900F03325 /* SessionState.swift */,
13931398
417D127626E24D0800E0AB16 /* FreeDriveEventDetails.swift */,
13941399
DA4A8EBF2704FF950071C85C /* EventLocation.swift */,
@@ -1867,6 +1872,7 @@
18671872
B47C1AD3261FD0A30078546C /* DummyLocationManager.swift */,
18681873
B47C1AD2261FD0A30078546C /* DummyURLSessionDataTask.swift */,
18691874
B47C1B00261FD0A30078546C /* Fixture.swift */,
1875+
2E5ACEEA288E888500300ECA /* EventsAPIMock.swift */,
18701876
B47C1B03261FD0A30078546C /* Info.plist */,
18711877
B47C1AD0261FD0A30078546C /* NavigationEventsManagerTestDoubles.swift */,
18721878
B47C1B01261FD0A30078546C /* NavigationPlotter.swift */,
@@ -3003,6 +3009,7 @@
30033009
B456A8EC2620D26B00FD86D8 /* LeakTest.swift in Sources */,
30043010
B47C1B1E261FD3290078546C /* CoreLocation.swift in Sources */,
30053011
E2F08C70269DB17C002EFDC5 /* AccessToken.swift in Sources */,
3012+
2E5ACEEB288E888500300ECA /* EventsAPIMock.swift in Sources */,
30063013
);
30073014
runOnlyForDeploymentPostprocessing = 0;
30083015
};
@@ -3015,6 +3022,7 @@
30153022
E2108B30285866C200CB0875 /* NavigationLog.swift in Sources */,
30163023
414119FF26C5269A00402B5D /* RoadSubgraphEdge.swift in Sources */,
30173024
8D1A5CD2212DDFCD0059BA4A /* DispatchTimer.swift in Sources */,
3025+
2E5ACEE8288E877A00300ECA /* EventsAPI.swift in Sources */,
30183026
C561735B1F182113005954F6 /* RouteStep.swift in Sources */,
30193027
2EFADFFE264C1F9200B618C4 /* OpenLRSideOfRoad.swift in Sources */,
30203028
2EFADFFB264C1F9200B618C4 /* DistancedRoadObject.swift in Sources */,
@@ -3089,6 +3097,7 @@
30893097
DA5F44AC25F07A6800F573EC /* RoadGraphPosition.swift in Sources */,
30903098
2E50E0E6264E49EF009D3848 /* OpenLRIdentifier.swift in Sources */,
30913099
2BF398C1274BDEA8000C9A72 /* Directions.swift in Sources */,
3100+
2E5ACEE9288E877A00300ECA /* EventConstants.swift in Sources */,
30923101
353E69041EF0C4E5007B2AE5 /* SimulatedLocationManager.swift in Sources */,
30933102
2B01E4B7274671550002A5F7 /* RoutingProvider.swift in Sources */,
30943103
DA5F450025F07DE200F573EC /* ElectronicHorizonOptions.swift in Sources */,
@@ -3106,7 +3115,6 @@
31063115
8D4CF9C621349FFB009C3FEE /* NavigationServiceDelegate.swift in Sources */,
31073116
2BF398C3274FE99A000C9A72 /* HandlerFactory.swift in Sources */,
31083117
118D883626F8CA0700B2ED7B /* ActiveNavigationFeedbackType.swift in Sources */,
3109-
C5CFE4881EF2FD4C006F48E8 /* MMEEventsManager.swift in Sources */,
31103118
11B3D6D626A60EBD0057C6F4 /* ActiveNavigationEventDetails.swift in Sources */,
31113119
2B28AD7D284F68A1001CD1FB /* AlternativeRouteDetectionStrategy.swift in Sources */,
31123120
C578DA081EFD0FFF0052079F /* ProcessInfo.swift in Sources */,

Sources/MapboxCoreNavigation/ActiveNavigationEventDetails.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import Polyline
33
import UIKit
44
import AVFoundation
55
import MapboxDirections
6-
import MapboxMobileEvents
76

87
struct ActiveNavigationEventDetails: NavigationEventDetails {
98
let coordinate: CLLocationCoordinate2D?

Sources/MapboxCoreNavigation/BundleAdditions.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ extension Bundle {
8383
#endif
8484
}
8585
}
86+
87+
/**
88+
Indicates whether the application depends on MapboxNavigation in addition to MapboxCoreNavigation.
89+
*/
90+
class var usesDefaultUserInterface: Bool {
91+
return mapboxNavigationIfInstalled != nil
92+
}
8693

8794
/**
8895
Returns a dictionary of `MBXInfo.plist` in Mapbox Core Navigation.

Sources/MapboxCoreNavigation/EventDetails.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Polyline
44
import UIKit
55
import AVFoundation
66
import MapboxDirections
7-
import MapboxMobileEvents
87

98
protocol EventDetails: Encodable {
109
var event: String? { get set }
@@ -96,7 +95,7 @@ extension GlobalEventDetails {
9695
}
9796
var batteryLevel: Int { UIDevice.current.batteryLevel >= 0 ? Int(UIDevice.current.batteryLevel * 100) : -1 }
9897
var batteryPluggedIn: Bool { [.charging, .full].contains(UIDevice.current.batteryState) }
99-
var device: String { UIDevice.current.machine }
98+
var device: String { UIDeviceCache.machine }
10099
var operatingSystem: String { "\(ProcessInfo.systemName) \(ProcessInfo.systemVersion)" }
101100
var platform: String { ProcessInfo.systemName }
102101
var sdkVersion: String {
@@ -176,3 +175,15 @@ extension AVAudioSession {
176175
return "unknown"
177176
}
178177
}
178+
179+
enum UIDeviceCache {
180+
static let machine: String = {
181+
var systemInfo = utsname()
182+
uname(&systemInfo)
183+
let machineMirror = Mirror(reflecting: systemInfo.machine)
184+
return machineMirror.children.reduce("") { (identifier: String, element: Mirror.Child) in
185+
guard let value = element.value as? Int8, value != 0 else { return identifier }
186+
return identifier + String(UnicodeScalar(UInt8(value)))
187+
}
188+
}()
189+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import Foundation
2+
3+
enum EventKey: String {
4+
case event = "event"
5+
case created = "created"
6+
case feedbackId = "feedbackId"
7+
case locationsBefore = "locationsBefore"
8+
case locationsAfter = "locationsAfter"
9+
}
10+
11+
enum EventType: String {
12+
case turnstile = "appUserTurnstile"
13+
case depart = "navigation.depart"
14+
case arrive = "navigation.arrive"
15+
case cancel = "navigation.cancel"
16+
case feedback = "navigation.feedback"
17+
case reroute = "navigation.reroute"
18+
case carplayConnect = "navigation.carplay.connect"
19+
case carplayDisconnect = "navigation.carplay.disconnect"
20+
case routeRetrieval = "mobile.performance_trace"
21+
case freeDrive = "navigation.freeDrive"
22+
}
23+
24+
// :nodoc:
25+
public enum EventRating {
26+
public static let unrated = -1
27+
public static let topRated = 100
28+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Foundation
2+
@_implementationOnly import MapboxCommon_Private
3+
4+
protocol EventsAPI {
5+
func sendTurnstileEvent(sdkIdentifier: String, sdkVersion: String)
6+
func sendQueuedEvent(with attributes: [String: Any])
7+
func sendImmediateEvent(with attributes: [String: Any])
8+
}
9+
10+
extension EventsService: EventsAPI {
11+
func sendTurnstileEvent(sdkIdentifier: String, sdkVersion: String) {
12+
let turnstileEvent = TurnstileEvent(skuId: .nav2SesMAU, sdkIdentifier: sdkIdentifier, sdkVersion: sdkVersion)
13+
sendTurnstileEvent(for: turnstileEvent)
14+
}
15+
16+
func sendQueuedEvent(with attributes: [String : Any]) {
17+
sendEvent(for: Event(priority: .queued, attributes: attributes))
18+
}
19+
20+
func sendImmediateEvent(with attributes: [String : Any]) {
21+
sendEvent(for: Event(priority: .immediate, attributes: attributes))
22+
}
23+
}

0 commit comments

Comments
 (0)