diff options
author | Justin Beharry <justin.beharry@livio.io> | 2022-08-04 15:55:21 -0400 |
---|---|---|
committer | Justin Beharry <justin.beharry@livio.io> | 2022-08-04 15:55:21 -0400 |
commit | b634f1eaf3321d4d83f06476a3d0255ef1297c93 (patch) | |
tree | 23ee9ac0ede8d516a95df1c47388e826c4091a9a /Example Apps/Example Swift | |
parent | d62a22348e73d16d63c478826ba2ae7b08aa1c7f (diff) | |
download | sdl_ios-b634f1eaf3321d4d83f06476a3d0255ef1297c93.tar.gz |
Made revisions to obj-C and swift code
For full changes https://github.com/smartdevicelink/sdl_ios/pull/2102#pullrequestreview-1060887070
Diffstat (limited to 'Example Apps/Example Swift')
-rw-r--r-- | Example Apps/Example Swift/MenuManager.swift | 15 | ||||
-rw-r--r-- | Example Apps/Example Swift/RemoteControlManager.swift | 147 |
2 files changed, 87 insertions, 75 deletions
diff --git a/Example Apps/Example Swift/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift index 26dc1fabf..b5009c521 100644 --- a/Example Apps/Example Swift/MenuManager.swift +++ b/Example Apps/Example Swift/MenuManager.swift @@ -18,14 +18,14 @@ class MenuManager: NSObject { class func allMenuItems(with manager: SDLManager, choiceSetManager: PerformInteractionManager, remoteManager: RemoteControlManager) -> [SDLMenuCell] { return [menuCellSpeakName(with: manager), menuCellGetAllVehicleData(with: manager), + menuCellRemoteControl(with: manager, remoteManager: remoteManager), menuCellShowPerformInteraction(with: manager, choiceSetManager: choiceSetManager), sliderMenuCell(with: manager), scrollableMessageMenuCell(with: manager), menuCellRecordInCarMicrophoneAudio(with: manager), menuCellDialNumber(with: manager), menuCellChangeTemplate(with: manager), - menuCellWithSubmenu(with: manager), - menuCellRemoteControl(with: manager, remoteManager: remoteManager)] + menuCellWithSubmenu(with: manager)] } /// Creates and returns the voice commands. The voice commands are menu items that are selected using the voice recognition system. @@ -214,20 +214,19 @@ private extension MenuManager { /// - Returns: A SDLMenuCell object class func menuCellRemoteControl(with manager: SDLManager, remoteManager: RemoteControlManager) -> SDLMenuCell { var submenuItems = [SDLMenuCell]() - let errorMessage = "Changing the template failed" - /// Climate Control Menu - submenuItems.append(SDLMenuCell(title: ACRemoteControlClimateMenuName, secondaryText: nil, tertiaryText: nil, icon: nil, secondaryArtwork: nil, voiceCommands: nil, handler: { (triggerSource) in + // Climate Control Menu + submenuItems.append(SDLMenuCell(title: ACRemoteControlClimateMenuName, secondaryText: nil, tertiaryText: nil, icon: SDLArtwork(image: UIImage(named: RemoteControlIconName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), secondaryArtwork: nil, voiceCommands: nil, handler: { (triggerSource) in manager.screenManager.changeLayout(SDLTemplateConfiguration(predefinedLayout: .tilesOnly)) { err in - if err != nil { - AlertManager.sendAlert(textField1: errorMessage, sdlManager: manager) + if let error = err { + AlertManager.sendAlert(textField1: error.localizedDescription, sdlManager: manager) return } remoteManager.showClimateControl() } })) - /// View Climate Data + // View Climate Data submenuItems.append(SDLMenuCell(title: ACRemoteViewClimateMenuName, secondaryText: nil, tertiaryText: nil, icon: nil, secondaryArtwork: nil, voiceCommands: nil, handler: { _ in let climateDataMessage = SDLScrollableMessage(message: remoteManager.climateDataString) manager.send(request: climateDataMessage, responseHandler: { (request, response, error) in diff --git a/Example Apps/Example Swift/RemoteControlManager.swift b/Example Apps/Example Swift/RemoteControlManager.swift index 45a912b9c..e7b520e3a 100644 --- a/Example Apps/Example Swift/RemoteControlManager.swift +++ b/Example Apps/Example Swift/RemoteControlManager.swift @@ -11,32 +11,31 @@ import SmartDeviceLink import SmartDeviceLinkSwift class RemoteControlManager { - private var sdlManager: SDLManager! - private var remoteControlCapabilities: SDLRemoteControlCapabilities! - private var climateModuleId: String! - private var consent: [Bool]! - private var climateData: SDLClimateControlData! + private let sdlManager: SDLManager + private var remoteControlCapabilities: SDLRemoteControlCapabilities? + private var climateModuleId: String? + private var hasConsent: Bool? + private var climateData: SDLClimateControlData? public var climateDataString: String! { get { - let climateString = """ - AC Enable \(climateData.acEnable!.boolValue ? "On" : "Off") - AC Max Enable \(climateData.acMaxEnable!.boolValue ? "On" : "Off") - Auto Mode Enable \(climateData.autoModeEnable!.boolValue ? "On": "Off") - Circulate Air Enable \(climateData.circulateAirEnable!.boolValue ? "On" : "Off") - Climate Enable \(climateData.climateEnable!.boolValue ? "On" : " Off") - Current Temperature \(climateData.currentTemperature?.description ?? "Nil") - Defrost Zone \(climateData.defrostZone?.rawValue.rawValue ?? "Nil") - Desired Temperature \(climateData.desiredTemperature?.description ?? "Nil") - Dual Mode Enable \(climateData.dualModeEnable!.boolValue ? "On" : "Off") - Fan Speed \(climateData.fanSpeed?.description ?? "Nil") - Heated Mirrors Enable \(climateData.heatedMirrorsEnable!.boolValue ? "On" : " Off") - Heated Rears Window Enable \(climateData.heatedRearWindowEnable!.boolValue ? "On" : " Off") - Heated Steering Enable \(climateData.heatedSteeringWheelEnable!.boolValue ? "On" : " Off") - Heated Windshield Enable \(climateData.heatedWindshieldEnable!.boolValue ? "On" : " Off") - Ventilation \(climateData.ventilationMode?.rawValue.rawValue ?? "Nil") """ - return climateString + AC: \(optionalNumberBoolToString(climateData?.acEnable)) + AC Max: \(optionalNumberBoolToString(climateData?.acMaxEnable)) + Auto Mode: \(optionalNumberBoolToString(climateData?.autoModeEnable)) + Circulate Air: \(optionalNumberBoolToString(climateData?.circulateAirEnable)) + Climate: \(optionalNumberBoolToString(climateData?.climateEnable)) + Current Temperature: \(optionalTemperatureToString(climateData?.currentTemperature)) + Defrost Zone: \(optionalSDLEnumToString(climateData?.defrostZone?.rawValue)) + Desired Temperature: \(optionalTemperatureToString(climateData?.desiredTemperature)) + Dual Mode: \(optionalNumberBoolToString(climateData?.dualModeEnable)) + Fan Speed: \(optionalNumberToString(climateData?.fanSpeed)) + Heated Mirrors: \(optionalNumberBoolToString(climateData?.heatedMirrorsEnable)) + Heated Rears Window: \(optionalNumberBoolToString(climateData?.heatedRearWindowEnable)) + Heated Steering: \(optionalNumberBoolToString(climateData?.heatedSteeringWheelEnable)) + Heated Windshield: \(optionalNumberBoolToString(climateData?.heatedWindshieldEnable)) + Ventilation: \(optionalSDLEnumToString(climateData?.ventilationMode?.rawValue)) + """ } } @@ -56,28 +55,24 @@ class RemoteControlManager { } self.remoteControlCapabilities = capability?.remoteControlCapability - let firstClimateModule = self.remoteControlCapabilities.climateControlCapabilities?.first + let firstClimateModule = self.remoteControlCapabilities?.climateControlCapabilities?.first let moduleId = firstClimateModule?.moduleInfo?.moduleId self.climateModuleId = moduleId /// Get Consent to control module - let getInteriorVehicleDataConsent = SDLGetInteriorVehicleDataConsent(moduleType: .climate, moduleIds: [self.climateModuleId]) + 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 { - SDLLog.e("SDL errored getting interior vehicle data consent: \(String(describing: error))"); + guard let response = response as? SDLGetInteriorVehicleDataConsentResponse else { + SDLLog.e("SDL errored getting remote control consent: \(String(describing: error))"); return } - guard let allowed = res.allowed else { return } - let boolAllowed = allowed.map({ (bool) -> Bool in - return bool.boolValue - }) + guard let allowed = response.allowed?.first?.boolValue else { return } - self.consent = boolAllowed + self.hasConsent = allowed // initialize climate data and setup subscription - if self.consent[0] == true { + if self.hasConsent == true { self.initializeClimateData() - self.subscribeVehicleData() self.subscribeClimateControlData() } }) @@ -87,57 +82,75 @@ class RemoteControlManager { /// Displays Buttons for the user to control the climate func showClimateControl() { /// Check that the climate module id has been set and consent has been given - if climateModuleId == nil && consent[0] == false { + guard climateModuleId != nil && hasConsent == true else { AlertManager.sendAlert(textField1: "The climate module id was not set or consent was not given", sdlManager: self.sdlManager) + return } self.sdlManager.screenManager.softButtonObjects = climateButtons } + private func optionalNumberBoolToString(_ number: NSNumber?) -> String { + guard let number = number else { return "Unknown" } + return number.boolValue ? "On" : "Off" + } + + private func optionalNumberToString(_ number: NSNumber?) -> String { + guard let number = number else { return "Unknown" } + return number.stringValue + } + + private func optionalTemperatureToString(_ temperature: SDLTemperature?) -> String { + guard let temperature = temperature else { return "Unknown" } + return temperature.description + } + + private func optionalSDLEnumToString(_ sdlEnum: SDLEnum?) -> String { + guard let sdlEnum = sdlEnum else { return "Unknown" } + return sdlEnum.rawValue + } + private func initializeClimateData() { /// Check that the climate module id has been set and consent has been given - if climateModuleId == nil && consent[0] == false { + guard climateModuleId != nil && hasConsent == true else { AlertManager.sendAlert(textField1: "The climate module id was not set or consent was not given", sdlManager: self.sdlManager) + return } - let getInteriorVehicleData = SDLGetInteriorVehicleData(moduleType: .climate, moduleId: self.climateModuleId) + let getInteriorVehicleData = SDLGetInteriorVehicleData(moduleType: .climate, moduleId: self.climateModuleId!) self.sdlManager.send(request: getInteriorVehicleData) { (req, res, err) in guard let response = res as? SDLGetInteriorVehicleDataResponse else { return } self.climateData = response.moduleData?.climateControlData } } - private func subscribeVehicleData() { + private func subscribeClimateControlData() { + // Start the subscription to remote control data sdlManager.subscribe(to: .SDLDidReceiveInteriorVehicleData) { (message) in - guard let onInteriorVehicleData = message as? SDLOnInteriorVehicleData else { - SDLLog.e("SDL onInteriorVehicleData was set to NULL when trying to subscribe to vehicle data") - return - } + guard let onInteriorVehicleData = message as? SDLOnInteriorVehicleData else { return } self.climateData = onInteriorVehicleData.moduleData.climateControlData } - } - private func subscribeClimateControlData() { - let getInteriorVehicleData = SDLGetInteriorVehicleData(andSubscribeToModuleType: .climate, moduleId: self.climateModuleId) + // Start the subscription to climate data + let getInteriorVehicleData = SDLGetInteriorVehicleData(andSubscribeToModuleType: .climate, moduleId: self.climateModuleId!) sdlManager.send(request: getInteriorVehicleData) { (req, res, err) in - guard let response = res as? SDLGetInteriorVehicleDataResponse else {return} - if (response.success.boolValue == false) { + guard let response = res as? SDLGetInteriorVehicleDataResponse, response.success.boolValue == true else { 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"); + SDLLog.d("Subscribed to climate control data"); } } private func turnOnAC() { let climateControlData = SDLClimateControlData(dictionary: [ - "acEnable": true as NSNumber & SDLBool + "acEnable": true ]) 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 { - SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))") + SDLLog.e("SDL errored trying to turn on climate AC: \(String(describing: error))") return } } @@ -145,26 +158,26 @@ class RemoteControlManager { private func turnOffAC() { let climateControlData = SDLClimateControlData(dictionary: [ - "acEnable": false as NSNumber & SDLBool + "acEnable": false ]) 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 { - SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))") + SDLLog.e("SDL errored trying to turn off climate AC: \(String(describing: error))") return } } } /// Changes multiple climate variables at once - private func setClimate() { + private func setClimateTemperature() { let climateDictionary: [String: Any] = [ - "acEnable": true as NSNumber & SDLBool, - "fanSpeed": NSNumber(100), + "acEnable": true, + "fanSpeed": 100, "desiredTemperature": SDLTemperature(fahrenheitValue: 73), - "ventilationMode": SDLVentilationMode(rawValue: SDLVentilationMode.both.rawValue) + "ventilationMode": SDLVentilationMode.both.rawValue ] let climateControlData = SDLClimateControlData(dictionary: climateDictionary) @@ -173,7 +186,7 @@ class RemoteControlManager { self.sdlManager.send(request: setInteriorVehicleData) { (request, response, error) in guard response?.success.boolValue == true else { - SDLLog.e("SDL errored trying to set interior vehicle data: \(String(describing: error))") + SDLLog.e("SDL errored trying to set climate temperature to 73 degrees: \(String(describing: error))") return } } @@ -193,10 +206,10 @@ class RemoteControlManager { let acMaxToggle = SDLSoftButtonObject(name: "AC Max", text: "AC Max", artwork: nil) { (buttonPress, buttonEvent) in 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 + let remoteButtonPress = SDLButtonPress(buttonName: .acMax, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short) + self.sdlManager.send(request: remoteButtonPress) { (request, response, error) in guard response?.success.boolValue == true else { - SDLLog.e("SDL errored handling remote button: \(String(describing: error))") + SDLLog.e("SDL errored toggling AC Max with remote button press: \(String(describing: error))") return } } @@ -204,10 +217,10 @@ class RemoteControlManager { let temperatureDecreaseButton = SDLSoftButtonObject(name: "Temperature Decrease", text: "Temperature -", artwork: nil) { (buttonPress, buttonEvent) in 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 + let remoteButtonPress = SDLButtonPress(buttonName: .tempDown, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short) + self.sdlManager.send(request: remoteButtonPress) { (request, response, error) in guard response?.success.boolValue == true else { - SDLLog.e("SDL errored handling remote button: \(String(describing: error))") + SDLLog.e("SDL errored decreasing target climate temperature with remote button: \(String(describing: error))") return } } @@ -215,18 +228,18 @@ class RemoteControlManager { let temperatureIncreaseButton = SDLSoftButtonObject(name: "Temperature Increase", text: "Temperature +", artwork: nil) { (buttonPress, buttonEvent) in 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 + let remoteButtonPress = SDLButtonPress(buttonName: .tempUp, moduleType: .climate, moduleId: self.climateModuleId, buttonPressMode: .short) + self.sdlManager.send(request: remoteButtonPress) { (request, response, error) in guard response?.success.boolValue == true else { - SDLLog.e("SDL errored handling remote button: \(String(describing: error))") + SDLLog.e("SDL errored increasing target climate temperature with remote button:: \(String(describing: error))") return } } } - let setClimateButton = SDLSoftButtonObject(name: "Set Climate", text: "Set Climate", artwork: nil) { (buttonPress, buttonEvent) in + let setClimateButton = SDLSoftButtonObject(name: "Set Climate", text: "Set 73 degrees", artwork: nil) { (buttonPress, buttonEvent) in guard buttonPress != nil else { return } - self.setClimate() + self.setClimateTemperature() } return [acOnButton, acOffButton, acMaxToggle, temperatureDecreaseButton, temperatureIncreaseButton, setClimateButton] |