summaryrefslogtreecommitdiff
path: root/Example Apps/Example Swift
diff options
context:
space:
mode:
authorJustin Beharry <justin.beharry@livio.io>2022-08-03 13:41:31 -0400
committerJustin Beharry <justin.beharry@livio.io>2022-08-03 13:41:31 -0400
commitc3fc4f45f8babf4aa39238fcb7e2b9421a82049a (patch)
tree202d743c4da0d4d5120d79aac9152d3f4ca2a88e /Example Apps/Example Swift
parent8c7f2d68075a74f20093c7fb0bb6b2a54ff3457c (diff)
downloadsdl_ios-c3fc4f45f8babf4aa39238fcb7e2b9421a82049a.tar.gz
Make the same revisions like Obj-C example
-Move RemoteControl Initialization to proxy manager -Add logging -Remove trailing whitespace
Diffstat (limited to 'Example Apps/Example Swift')
-rw-r--r--Example Apps/Example Swift/MenuManager.swift16
-rw-r--r--Example Apps/Example Swift/ProxyManager.swift7
-rw-r--r--Example Apps/Example Swift/RemoteControlManager.swift75
3 files changed, 63 insertions, 35 deletions
diff --git a/Example Apps/Example Swift/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift
index effe36ee0..26dc1fabf 100644
--- a/Example Apps/Example Swift/MenuManager.swift
+++ b/Example Apps/Example Swift/MenuManager.swift
@@ -15,7 +15,7 @@ class MenuManager: NSObject {
///
/// - Parameter manager: The SDL Manager
/// - Returns: An array of SDLAddCommand objects
- class func allMenuItems(with manager: SDLManager, choiceSetManager: PerformInteractionManager) -> [SDLMenuCell] {
+ class func allMenuItems(with manager: SDLManager, choiceSetManager: PerformInteractionManager, remoteManager: RemoteControlManager) -> [SDLMenuCell] {
return [menuCellSpeakName(with: manager),
menuCellGetAllVehicleData(with: manager),
menuCellShowPerformInteraction(with: manager, choiceSetManager: choiceSetManager),
@@ -25,7 +25,7 @@ class MenuManager: NSObject {
menuCellDialNumber(with: manager),
menuCellChangeTemplate(with: manager),
menuCellWithSubmenu(with: manager),
- menuCellRemoteControl(with: manager)]
+ menuCellRemoteControl(with: manager, remoteManager: remoteManager)]
}
/// Creates and returns the voice commands. The voice commands are menu items that are selected using the voice recognition system.
@@ -207,16 +207,12 @@ private extension MenuManager {
})
})
}
-
+
/// Menu item that shows remote control example
///
/// - Parameter manager: The SDL Manager
/// - Returns: A SDLMenuCell object
- class func menuCellRemoteControl(with manager: SDLManager) -> SDLMenuCell {
- /// Initialize Remote Control Manager
- let remoteControlManager = RemoteControlManager(sdlManager: manager)
-
- /// Lets give an example of 2 templates
+ class func menuCellRemoteControl(with manager: SDLManager, remoteManager: RemoteControlManager) -> SDLMenuCell {
var submenuItems = [SDLMenuCell]()
let errorMessage = "Changing the template failed"
@@ -227,13 +223,13 @@ private extension MenuManager {
AlertManager.sendAlert(textField1: errorMessage, sdlManager: manager)
return
}
- remoteControlManager.showClimateControl()
+ remoteManager.showClimateControl()
}
}))
/// View Climate Data
submenuItems.append(SDLMenuCell(title: ACRemoteViewClimateMenuName, secondaryText: nil, tertiaryText: nil, icon: nil, secondaryArtwork: nil, voiceCommands: nil, handler: { _ in
- let climateDataMessage = SDLScrollableMessage(message: remoteControlManager.climateDataString)
+ let climateDataMessage = SDLScrollableMessage(message: remoteManager.climateDataString)
manager.send(request: climateDataMessage, responseHandler: { (request, response, error) in
guard let response = response else { return }
guard response.resultCode == .success else {
diff --git a/Example Apps/Example Swift/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift
index e28b4dabc..7bdc2c6ee 100644
--- a/Example Apps/Example Swift/ProxyManager.swift
+++ b/Example Apps/Example Swift/ProxyManager.swift
@@ -26,6 +26,7 @@ class ProxyManager: NSObject {
private var subscribeButtonManager: SubscribeButtonManager!
private var vehicleDataManager: VehicleDataManager!
private var performInteractionManager: PerformInteractionManager!
+ private var remoteControlManager: RemoteControlManager!
private var firstHMILevelState: SDLHMILevel
weak var delegate: ProxyManagerDelegate?
@@ -137,6 +138,7 @@ private extension ProxyManager {
self.subscribeButtonManager = SubscribeButtonManager(sdlManager: self.sdlManager)
self.vehicleDataManager = VehicleDataManager(sdlManager: self.sdlManager, refreshUIHandler: self.refreshUIHandler)
self.performInteractionManager = PerformInteractionManager(sdlManager: self.sdlManager)
+ self.remoteControlManager = RemoteControlManager(sdlManager: self.sdlManager)
RPCPermissionsManager.setupPermissionsCallbacks(with: self.sdlManager)
@@ -170,6 +172,9 @@ extension ProxyManager: SDLManagerDelegate {
// Subscribe to vehicle data.
vehicleDataManager.subscribeToVehicleOdometer()
+ // Start Remote Control Connection
+ remoteControlManager.start()
+
//Handle initial launch
showInitialData()
}
@@ -307,7 +312,7 @@ private extension ProxyManager {
func createMenuAndGlobalVoiceCommands() {
// Send the root menu items
let screenManager = sdlManager.screenManager
- let menuItems = MenuManager.allMenuItems(with: sdlManager, choiceSetManager: performInteractionManager)
+ let menuItems = MenuManager.allMenuItems(with: sdlManager, choiceSetManager: performInteractionManager, remoteManager: remoteControlManager)
let voiceMenuItems = MenuManager.allVoiceMenuItems(with: sdlManager)
if !menuItems.isEmpty { screenManager.menu = menuItems }
diff --git a/Example Apps/Example Swift/RemoteControlManager.swift b/Example Apps/Example Swift/RemoteControlManager.swift
index 61b971fc6..45a912b9c 100644
--- a/Example Apps/Example Swift/RemoteControlManager.swift
+++ b/Example Apps/Example Swift/RemoteControlManager.swift
@@ -8,6 +8,7 @@
import Foundation
import SmartDeviceLink
+import SmartDeviceLinkSwift
class RemoteControlManager {
private var sdlManager: SDLManager!
@@ -44,9 +45,15 @@ class RemoteControlManager {
/// - Parameter sdlManager: The SDL Manager
init(sdlManager: SDLManager) {
self.sdlManager = sdlManager
+ }
+
+ func start() {
/// Retrieve remote control information and store module ids
self.sdlManager.systemCapabilityManager.subscribe(capabilityType: .remoteControl) { (capability, subscribed, error) in
- guard capability?.remoteControlCapability != nil else { return }
+ guard capability?.remoteControlCapability != nil else {
+ SDLLog.e("SDL errored getting remote control module information: \(String(describing: error))")
+ return
+ }
self.remoteControlCapabilities = capability?.remoteControlCapability
let firstClimateModule = self.remoteControlCapabilities.climateControlCapabilities?.first
@@ -56,7 +63,10 @@ class RemoteControlManager {
/// Get Consent to control module
let getInteriorVehicleDataConsent = SDLGetInteriorVehicleDataConsent(moduleType: .climate, moduleIds: [self.climateModuleId])
self.sdlManager.send(request: getInteriorVehicleDataConsent, responseHandler: { (request, response, error) in
- guard let res = response as? SDLGetInteriorVehicleDataConsentResponse else { return }
+ guard let res = response as? SDLGetInteriorVehicleDataConsentResponse else {
+ SDLLog.e("SDL errored getting interior vehicle data consent: \(String(describing: error))");
+ return
+ }
guard let allowed = res.allowed else { return }
let boolAllowed = allowed.map({ (bool) -> Bool in
return bool.boolValue
@@ -80,11 +90,7 @@ class RemoteControlManager {
if climateModuleId == nil && consent[0] == false {
AlertManager.sendAlert(textField1: "The climate module id was not set or consent was not given", sdlManager: self.sdlManager)
}
-
- let screenManager = self.sdlManager.screenManager
- screenManager.beginUpdates()
- screenManager.softButtonObjects = climateButtons
- screenManager.endUpdates()
+ self.sdlManager.screenManager.softButtonObjects = climateButtons
}
private func initializeClimateData() {
@@ -102,7 +108,10 @@ class RemoteControlManager {
private func subscribeVehicleData() {
sdlManager.subscribe(to: .SDLDidReceiveInteriorVehicleData) { (message) in
- guard let onInteriorVehicleData = message as? SDLOnInteriorVehicleData else { return }
+ guard let onInteriorVehicleData = message as? SDLOnInteriorVehicleData else {
+ SDLLog.e("SDL onInteriorVehicleData was set to NULL when trying to subscribe to vehicle data")
+ return
+ }
self.climateData = onInteriorVehicleData.moduleData.climateControlData
}
}
@@ -110,35 +119,42 @@ class RemoteControlManager {
private func subscribeClimateControlData() {
let getInteriorVehicleData = SDLGetInteriorVehicleData(andSubscribeToModuleType: .climate, moduleId: self.climateModuleId)
sdlManager.send(request: getInteriorVehicleData) { (req, res, err) in
- guard let response = res as? SDLGetInteriorVehicleDataResponse else { return }
+ guard let response = res as? SDLGetInteriorVehicleDataResponse else {return}
+ if (response.success.boolValue == false) {
+ SDLLog.e("SDL errored trying to subscribe to climate data: \(String(describing: err))")
+ return
+ }
+ SDLLog.d("SDL Subscribing to Climate Control Data. Data should appear in SDLDidReceiveInteriorVehicleDataNotification");
}
}
private func turnOnAC() {
- let climateDictionary: [String: Any] = [
+ let climateControlData = SDLClimateControlData(dictionary: [
"acEnable": true as NSNumber & SDLBool
- ]
-
- let climateControlData = SDLClimateControlData(dictionary: climateDictionary)
+ ])
let moduleData = SDLModuleData(climateControlData: climateControlData)
let setInteriorVehicleData = SDLSetInteriorVehicleData(moduleData: moduleData)
self.sdlManager.send(request: setInteriorVehicleData) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))")
+ return
+ }
}
}
private func turnOffAC() {
- let climateDictionary: [String: Any] = [
+ let climateControlData = SDLClimateControlData(dictionary: [
"acEnable": false as NSNumber & SDLBool
- ]
-
- let climateControlData = SDLClimateControlData(dictionary: climateDictionary)
+ ])
let moduleData = SDLModuleData(climateControlData: climateControlData)
let setInteriorVehicleData = SDLSetInteriorVehicleData(moduleData: moduleData)
self.sdlManager.send(request: setInteriorVehicleData) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))")
+ return
+ }
}
}
@@ -151,13 +167,15 @@ class RemoteControlManager {
"ventilationMode": SDLVentilationMode(rawValue: SDLVentilationMode.both.rawValue)
]
-
let climateControlData = SDLClimateControlData(dictionary: climateDictionary)
let moduleData = SDLModuleData(climateControlData: climateControlData)
let setInteriorVehicleData = SDLSetInteriorVehicleData(moduleData: moduleData)
self.sdlManager.send(request: setInteriorVehicleData) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))")
+ return
+ }
}
}
@@ -177,7 +195,10 @@ class RemoteControlManager {
guard buttonPress != nil else { return }
let buttonPress = SDLButtonPress(buttonName: .acMax, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short)
self.sdlManager.send(request: buttonPress) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored handling remote button: \(String(describing: error))")
+ return
+ }
}
}
@@ -185,7 +206,10 @@ class RemoteControlManager {
guard buttonPress != nil else { return }
let buttonPress = SDLButtonPress(buttonName: .tempDown, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short)
self.sdlManager.send(request: buttonPress) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored handling remote button: \(String(describing: error))")
+ return
+ }
}
}
@@ -193,7 +217,10 @@ class RemoteControlManager {
guard buttonPress != nil else { return }
let buttonPress = SDLButtonPress(buttonName: .tempUp, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short)
self.sdlManager.send(request: buttonPress) { (request, response, error) in
- guard response?.success.boolValue == true else { return }
+ guard response?.success.boolValue == true else {
+ SDLLog.e("SDL errored handling remote button: \(String(describing: error))")
+ return
+ }
}
}