summaryrefslogtreecommitdiff
path: root/Example Apps/Example Swift
diff options
context:
space:
mode:
authorJustin Beharry <justin.beharry@livio.io>2022-08-04 15:55:21 -0400
committerJustin Beharry <justin.beharry@livio.io>2022-08-04 15:55:21 -0400
commitb634f1eaf3321d4d83f06476a3d0255ef1297c93 (patch)
tree23ee9ac0ede8d516a95df1c47388e826c4091a9a /Example Apps/Example Swift
parentd62a22348e73d16d63c478826ba2ae7b08aa1c7f (diff)
downloadsdl_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.swift15
-rw-r--r--Example Apps/Example Swift/RemoteControlManager.swift147
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]