diff options
author | Justin Beharry <justin.beharry@livio.io> | 2022-08-03 13:41:31 -0400 |
---|---|---|
committer | Justin Beharry <justin.beharry@livio.io> | 2022-08-03 13:41:31 -0400 |
commit | c3fc4f45f8babf4aa39238fcb7e2b9421a82049a (patch) | |
tree | 202d743c4da0d4d5120d79aac9152d3f4ca2a88e /Example Apps/Example Swift | |
parent | 8c7f2d68075a74f20093c7fb0bb6b2a54ff3457c (diff) | |
download | sdl_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.swift | 16 | ||||
-rw-r--r-- | Example Apps/Example Swift/ProxyManager.swift | 7 | ||||
-rw-r--r-- | Example Apps/Example Swift/RemoteControlManager.swift | 75 |
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 + } } } |