diff options
author | NicoleYarroch <nicole@livio.io> | 2020-08-13 08:42:29 -0400 |
---|---|---|
committer | NicoleYarroch <nicole@livio.io> | 2020-08-13 08:42:29 -0400 |
commit | 093243adcafa4b05707a28239c8cbc18319ce333 (patch) | |
tree | ed7f485d1e0e8a167ac01d6e0e815dbbf1c36343 | |
parent | a584d545fa14d3726dc298fce317aaaf49873916 (diff) | |
download | sdl_ios-093243adcafa4b05707a28239c8cbc18319ce333.tar.gz |
Updated ex. apps alert manager classes
Signed-off-by: NicoleYarroch <nicole@livio.io>
-rw-r--r-- | Example Apps/Example ObjC/AlertManager.h | 22 | ||||
-rw-r--r-- | Example Apps/Example ObjC/AlertManager.m | 38 | ||||
-rw-r--r-- | Example Apps/Example ObjC/AudioManager.m | 5 | ||||
-rw-r--r-- | Example Apps/Example ObjC/MenuManager.m | 24 | ||||
-rw-r--r-- | Example Apps/Example ObjC/VehicleDataManager.m | 10 | ||||
-rw-r--r-- | Example Apps/Example Swift/AlertManager.swift | 53 | ||||
-rw-r--r-- | Example Apps/Example Swift/AudioManager.swift | 9 | ||||
-rw-r--r-- | Example Apps/Example Swift/MenuManager.swift | 26 | ||||
-rw-r--r-- | Example Apps/Example Swift/VehicleDataManager.swift | 14 | ||||
-rw-r--r-- | Example Apps/Shared/AppConstants.h | 11 | ||||
-rw-r--r-- | Example Apps/Shared/AppConstants.m | 11 | ||||
-rw-r--r-- | SmartDeviceLink_Example/SubscribeButtonManager.m | 3 | ||||
-rw-r--r-- | SmartDeviceLink_Example/SubscribeButtonManager.swift | 7 |
13 files changed, 118 insertions, 115 deletions
diff --git a/Example Apps/Example ObjC/AlertManager.h b/Example Apps/Example ObjC/AlertManager.h index a682f1dd1..d7b42b655 100644 --- a/Example Apps/Example ObjC/AlertManager.h +++ b/Example Apps/Example ObjC/AlertManager.h @@ -16,33 +16,19 @@ NS_ASSUME_NONNULL_BEGIN @interface AlertManager : NSObject -/// Creates an alert with up to two lines of text, an image, and a close button that will dismiss the alert when tapped. -/// @param textField1 The first line of the message to display in the alert -/// @param textField2 The second line of the message to display in the alert -/// @param iconName An image to show in the alert -/// @return An SDLAlert object -+ (SDLAlert *)alertWithMessageAndCloseButton:(NSString *)textField1 textField2:(nullable NSString *)textField2 iconName:(nullable NSString *)iconName; - -/// Creates as subtle alert with two lines of text, an image, and a close button that will dismiss the alert when tapped. -/// @param textField1 The first line of the message to display in the alert -/// @param textField2 The second line of the message to display in the alert -/// @param iconName An image to show in the alert -/// @return An SDLSubtleAlert object - + (SDLSubtleAlert *)subtleAlertWithMessageAndCloseButton:(NSString *)textField1 textField2:(nullable NSString *)textField2 iconName:(nullable NSString *)iconName; - -/// Sends an alert with an image. +/// Sends an alert with up to two lines of text, an image, and a close button that will dismiss the alert when tapped. /// @param imageName The name of the image to upload /// @param textField1 The first line of text in the alert /// @param textField2 The second line of text in the alert /// @param sdlManager The SDLManager -+ (void)sendAlertWithImage:(NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 sdlManager:(SDLManager *)sdlManager; ++ (void)sendAlertWithManager:(SDLManager *)sdlManager image:(nullable NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2; -/// Sends a subtle alert with an image. +/// Sends a subtle alert with up to two lines of text, and an image. /// @param imageName The name of the image to upload /// @param textField1 The first line of text in the alert /// @param textField2 The second line of text in the alert /// @param sdlManager The SDLManager -+ (void)sendSubtleAlertWithImage:(NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 sdlManager:(SDLManager *)sdlManager; ++ (void)sendSubtleAlertWithManager:(SDLManager *)sdlManager image:(nullable NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2; @end diff --git a/Example Apps/Example ObjC/AlertManager.m b/Example Apps/Example ObjC/AlertManager.m index 2c600c3b1..e891b44f9 100644 --- a/Example Apps/Example ObjC/AlertManager.m +++ b/Example Apps/Example ObjC/AlertManager.m @@ -18,26 +18,34 @@ NS_ASSUME_NONNULL_BEGIN return [[SDLSoftButton alloc] initWithType:SDLSoftButtonTypeText text:AlertOKButtonText image:nil highlighted:YES buttonId:1 systemAction:nil handler:nil]; } -+ (SDLAlert *)alertWithMessageAndCloseButton:(NSString *)textField1 textField2:(nullable NSString *)textField2 iconName:(nullable NSString *)iconName { - return [[SDLAlert alloc] initWithAlertText1:textField1 alertText2:textField2 alertText3:nil softButtons:@[[self.class sdlex_okSoftButton]] playTone:YES ttsChunks:nil duration:5000 progressIndicator:NO alertIcon:((iconName != nil) ? [[SDLImage alloc] initWithName:iconName isTemplate:YES] : nil) cancelID:0]; -} - -+ (SDLSubtleAlert *)subtleAlertWithMessageAndCloseButton:(NSString *)textField1 textField2:(nullable NSString *)textField2 iconName:(nullable NSString *)iconName { - return [[SDLSubtleAlert alloc] initWithAlertText1:textField1 alertText2:textField2 alertIcon:((iconName != nil) ? [[SDLImage alloc] initWithName:iconName isTemplate:YES] : nil) ttsChunks:nil duration:nil softButtons:nil cancelID:0]; -} ++ (void)sendAlertWithManager:(SDLManager *)sdlManager image:(nullable NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 { + SDLAlert *alert = [[SDLAlert alloc] initWithAlertText1:textField1 alertText2:textField2 alertText3:nil softButtons:@[[self.class sdlex_okSoftButton]] playTone:YES ttsChunks:nil duration:5000 progressIndicator:NO alertIcon:nil cancelID:0]; -+ (void)sendAlertWithImage:(NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 sdlManager:(SDLManager *)sdlManager { - [self sdlex_sendImageWithName:imageName sdlManager:sdlManager completionHandler:^(BOOL success, NSString * _Nullable artworkName) { - SDLAlert *alert = [self.class alertWithMessageAndCloseButton:textField1 textField2:textField2 iconName:(success ? artworkName : nil)]; + if (imageName == nil) { [sdlManager sendRequest:alert]; - }]; + } else { + [self sdlex_sendImageWithName:imageName sdlManager:sdlManager completionHandler:^(BOOL success, NSString * _Nullable artworkName) { + if (success) { + alert.alertIcon = [[SDLImage alloc] initWithName:artworkName isTemplate:YES]; + } + [sdlManager sendRequest:alert]; + }]; + } } -+ (void)sendSubtleAlertWithImage:(NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 sdlManager:(SDLManager *)sdlManager { - [self sdlex_sendImageWithName:imageName sdlManager:sdlManager completionHandler:^(BOOL success, NSString * _Nullable artworkName) { - SDLSubtleAlert *subtleAlert = [self.class subtleAlertWithMessageAndCloseButton:textField1 textField2:textField2 iconName:(success ? artworkName : nil)]; ++ (void)sendSubtleAlertWithManager:(SDLManager *)sdlManager image:(nullable NSString *)imageName textField1:(NSString *)textField1 textField2:(nullable NSString *)textField2 { + SDLSubtleAlert *subtleAlert = [[SDLSubtleAlert alloc] initWithAlertText1:textField1 alertText2:textField2 alertIcon:nil ttsChunks:nil duration:nil softButtons:nil cancelID:0]; + + if (imageName == nil) { [sdlManager sendRequest:subtleAlert]; - }]; + } else { + [self sdlex_sendImageWithName:imageName sdlManager:sdlManager completionHandler:^(BOOL success, NSString * _Nullable artworkName) { + if (success) { + subtleAlert.alertIcon = [[SDLImage alloc] initWithName:artworkName isTemplate:YES]; + } + [sdlManager sendRequest:subtleAlert]; + }]; + } } /// Helper method for uploading an image before it is shown in an alert diff --git a/Example Apps/Example ObjC/AudioManager.m b/Example Apps/Example ObjC/AudioManager.m index cd6ec4ecf..dc1c77e41 100644 --- a/Example Apps/Example ObjC/AudioManager.m +++ b/Example Apps/Example ObjC/AudioManager.m @@ -7,6 +7,7 @@ // #import "AlertManager.h" +#import "AppConstants.h" #import "AudioManager.h" #import <AVFoundation/AVFoundation.h> #import "SDLLogMacros.h" @@ -86,7 +87,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)startRecording { if (self.speechRecognitionAuthState != SpeechRecognitionAuthStateAuthorized) { SDLLogW(@"This app does not have permission to access the Speech Recognition API"); - [self.sdlManager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"You must give this app permission to access Speech Recognition" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:self.sdlManager image:nil textField1:AlertSpeechPermissionsWarningText textField2:nil]; return; } @@ -155,7 +156,7 @@ NS_ASSUME_NONNULL_BEGIN // The `PerformAudioPassThru` timed out or the "Done" button was pressed in the pop-up. SDLLogD(@"Audio Pass Thru ended successfully"); NSString *alertMessage = [NSString stringWithFormat:@"You said: %@", weakSelf.speechTranscription.length == 0 ? @"No speech detected" : weakSelf.speechTranscription]; - [weakSelf.sdlManager sendRequest:[AlertManager alertWithMessageAndCloseButton:alertMessage textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:weakSelf.sdlManager image:nil textField1:alertMessage textField2:nil]; } else if ([resultCode isEqualToEnum:SDLResultAborted]) { // The "Cancel" button was pressed in the pop-up. Ignore this audio pass thru. SDLLogD(@"Audio recording canceled"); diff --git a/Example Apps/Example ObjC/MenuManager.m b/Example Apps/Example ObjC/MenuManager.m index 00a05b377..d1c6f46c6 100644 --- a/Example Apps/Example ObjC/MenuManager.m +++ b/Example Apps/Example ObjC/MenuManager.m @@ -81,7 +81,7 @@ NS_ASSUME_NONNULL_BEGIN + (SDLMenuCell *)sdlex_menuCellDialNumberWithManager:(SDLManager *)manager { return [[SDLMenuCell alloc] initWithTitle:ACDialPhoneNumberMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:PhoneBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACDialPhoneNumberMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) { if (![RPCPermissionsManager isDialNumberRPCAllowedWithManager:manager]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"This app does not have the required permissions to dial a number" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertDialNumberPermissionsWarningText textField2:nil]; return; } @@ -100,7 +100,7 @@ NS_ASSUME_NONNULL_BEGIN SDLSetDisplayLayout* display = [[SDLSetDisplayLayout alloc] initWithPredefinedLayout:SDLPredefinedLayoutNonMedia]; [manager sendRequest:display withResponseHandler:^(SDLRPCRequest *request, SDLRPCResponse *response, NSError *error) { if (!response.success) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:errorMessage textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:errorMessage textField2:nil]; } }]; }]; @@ -111,7 +111,7 @@ NS_ASSUME_NONNULL_BEGIN SDLSetDisplayLayout* display = [[SDLSetDisplayLayout alloc] initWithPredefinedLayout:SDLPredefinedLayoutGraphicWithText]; [manager sendRequest:display withResponseHandler:^(SDLRPCRequest *request, SDLRPCResponse *response, NSError *error) { if (!response.success) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:errorMessage textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:errorMessage textField2:nil]; } }]; }]; @@ -124,7 +124,7 @@ NS_ASSUME_NONNULL_BEGIN NSMutableArray *submenuItems = [NSMutableArray array]; for (int i = 0; i < 75; i++) { SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:[NSString stringWithFormat:@"%@ %i", ACSubmenuItemMenuName, i] icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:MenuBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:[NSString stringWithFormat:@"You selected %@ %i", ACSubmenuItemMenuName, i] textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:[NSString stringWithFormat:@"You selected %@ %i", ACSubmenuItemMenuName, i] textField2:nil]; }]; [submenuItems addObject:cell]; } @@ -138,11 +138,11 @@ NS_ASSUME_NONNULL_BEGIN [manager sendRequest:sliderRPC withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if(![response.resultCode isEqualToEnum:SDLResultSuccess]) { if ([response.resultCode isEqualToEnum:SDLResultTimedOut]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider timed out" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertSliderTimedOutWarningText textField2:nil]; } else if ([response.resultCode isEqualToEnum:SDLResultAborted]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider cancelled" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertSliderCancelledWarningText textField2:nil]; } else { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider could not be displayed" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertSliderGeneralWarningText textField2:nil]; } } }]; @@ -155,11 +155,11 @@ NS_ASSUME_NONNULL_BEGIN [manager sendRequest:messageRPC withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if(![response.resultCode isEqualToEnum:SDLResultSuccess]) { if ([response.resultCode isEqualToEnum:SDLResultTimedOut]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message timed out" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertScrollableMessageTimedOutWarningText textField2:nil]; } else if ([response.resultCode isEqualToEnum:SDLResultAborted]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message cancelled" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertScrollableMessageCancelledWarningText textField2:nil]; } else { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message could not be displayed" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertScrollableMessageGeneralWarningText textField2:nil]; } } }]; @@ -170,13 +170,13 @@ NS_ASSUME_NONNULL_BEGIN + (SDLVoiceCommand *)sdlex_voiceCommandStartWithManager:(SDLManager *)manager { return [[SDLVoiceCommand alloc] initWithVoiceCommands:@[VCStop] handler:^{ - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:[NSString stringWithFormat:@"%@ voice command selected!", VCStop] textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:[NSString stringWithFormat:@"%@ voice command selected!", VCStop] textField2:nil]; }]; } + (SDLVoiceCommand *)sdlex_voiceCommandStopWithManager:(SDLManager *)manager { return [[SDLVoiceCommand alloc] initWithVoiceCommands:@[VCStart] handler:^{ - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:[NSString stringWithFormat:@"%@ voice command selected!", VCStart] textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:[NSString stringWithFormat:@"%@ voice command selected!", VCStart] textField2:nil]; }]; } diff --git a/Example Apps/Example ObjC/VehicleDataManager.m b/Example Apps/Example ObjC/VehicleDataManager.m index 5c2d3bac2..cb494f01c 100644 --- a/Example Apps/Example ObjC/VehicleDataManager.m +++ b/Example Apps/Example ObjC/VehicleDataManager.m @@ -138,7 +138,7 @@ NS_ASSUME_NONNULL_BEGIN + (void)getAllVehicleDataWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource vehicleDataType:(NSString *)vehicleDataType { SDLLogD(@"Checking if app has permission to access vehicle data..."); if (![manager.permissionManager isRPCNameAllowed:SDLRPCFunctionNameGetVehicleData]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"This app does not have the required permissions to access vehicle data" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertVehicleDataPermissionsWarningText textField2:nil]; return; } @@ -151,7 +151,7 @@ NS_ASSUME_NONNULL_BEGIN [manager sendRequest:getAllVehicleData withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (error || ![response isKindOfClass:SDLGetVehicleDataResponse.class]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Something went wrong while getting vehicle data" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertVehicleDataGeneralWarningText textField2:nil]; return; } @@ -181,7 +181,7 @@ NS_ASSUME_NONNULL_BEGIN alertMessage = [TextValidator validateText:alertMessage length:200]; if ([triggerSource isEqualToEnum:SDLTriggerSourceMenu]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:alertTitle textField2:alertMessage iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:alertTitle textField2:alertMessage]; } else { NSString *spokenAlert = alertMessage ?: alertTitle; [manager sendRequest:[[SDLSpeak alloc] initWithTTS:spokenAlert]]; @@ -263,7 +263,7 @@ NS_ASSUME_NONNULL_BEGIN SDLLogD(@"Checking phone call capability"); [manager.systemCapabilityManager updateCapabilityType:SDLSystemCapabilityTypePhoneCall completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) { if (!systemCapabilityManager.phoneCapability) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"The head unit does not support the phone call capability" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertDialNumberPermissionsWarningText textField2:nil]; return; } @@ -271,7 +271,7 @@ NS_ASSUME_NONNULL_BEGIN SDLLogD(@"Dialing phone number %@", phoneNumber); [self sdlex_dialPhoneNumber:phoneNumber manager:manager]; } else { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"The dial number feature is unavailable for this head unit" textField2:nil iconName:nil]]; + [AlertManager sendAlertWithManager:manager image:nil textField1:AlertDialNumberUnavailableWarningText textField2:nil]; } }]; } diff --git a/Example Apps/Example Swift/AlertManager.swift b/Example Apps/Example Swift/AlertManager.swift index 8122c9ee0..21491f1d6 100644 --- a/Example Apps/Example Swift/AlertManager.swift +++ b/Example Apps/Example Swift/AlertManager.swift @@ -14,49 +14,44 @@ class AlertManager { return SDLSoftButton(type: .text, text: AlertOKButtonText, image: nil, highlighted: true, buttonId: 1, systemAction: nil, handler: nil) } - /// Creates an alert with up to two lines of text, an image, and a close button that will dismiss the alert when tapped. - /// - Parameters: - /// - textField1: The first line of a message to display in the alert - /// - textField2: The second line of a message to display in the alert - /// - iconName: An image to show in the alert - /// - Returns: An SDLAlert object - class func alertWithMessageAndCloseButton(_ textField1: String, textField2: String? = nil, iconName: String? = nil) -> SDLAlert { - return SDLAlert(alertText1: textField1, alertText2: textField2, alertText3: nil, softButtons: [okSoftButton], playTone: true, ttsChunks: nil, duration: 5000, progressIndicator: false, alertIcon: (iconName != nil) ? SDLImage(name: iconName!, isTemplate: true) : nil, cancelID: 0) - } - - - /// Creates as subtle alert with two lines of text, an image, and a close button that will dismiss the alert when tapped. - /// - Parameters: - /// - textField1: The first line of a message to display in the alert - /// - textField2: The second line of a message to display in the alert - /// - iconName: An image to show in the alert - /// - Returns: An SDLSubtleAlert object - class func subtleAlertWithMessageAndCloseButton(_ textField1: String, textField2: String? = nil, iconName: String? = nil) -> SDLSubtleAlert { - return SDLSubtleAlert(alertText1: textField1, alertText2: textField2, alertIcon: (iconName != nil) ? SDLImage(name: iconName!, isTemplate: true) : nil, ttsChunks: nil, duration: nil, softButtons: nil, cancelID: NSNumber(0)) - } - - /// Sends an alert with an image. + /// Sends an alert with up to two lines of text, an image, and a close button that will dismiss the alert when tapped. /// - Parameters: /// - imageName: The name of the image to upload /// - textField1: The first line of text in the alert /// - textField2: The second line of text in the alert /// - sdlManager: The SDLManager - class func sendAlert(imageName: String, textField1: String, textField2: String? = nil, sdlManager: SDLManager) { - sendImage(imageName, sdlManager: sdlManager) { (success, artworkName) in - let alert = alertWithMessageAndCloseButton(textField1, textField2: textField2, iconName: artworkName) + class func sendAlert(imageName: String? = nil, textField1: String, textField2: String? = nil, sdlManager: SDLManager) { + let alert = SDLAlert(alertText1: textField1, alertText2: textField2, alertText3: nil, softButtons: [okSoftButton], playTone: true, ttsChunks: nil, duration: 5000, progressIndicator: false, alertIcon: nil, cancelID: 0) + + if let imageName = imageName { + sendImage(imageName, sdlManager: sdlManager) { (success, artworkName) in + if success { + alert.alertIcon = SDLImage(name: artworkName, isTemplate: true) + } + sdlManager.send(alert) + } + } else { sdlManager.send(alert) } } - /// Sends a subtle alert with an image. + /// Sends a subtle alert with up to two lines of text, and an image. /// - Parameters: /// - imageName: The name of the image to upload /// - textField1: The first line of text in the alert /// - textField2: The second line of text in the alert /// - sdlManager: The SDLManager - class func sendSubtleAlert(imageName: String, textField1: String, textField2: String? = nil, sdlManager: SDLManager) { - sendImage(imageName, sdlManager: sdlManager) { (success, artworkName) in - let subtleAlert = subtleAlertWithMessageAndCloseButton(textField1, textField2: textField2, iconName: (success ? artworkName : nil)) + class func sendSubtleAlert(imageName: String? = nil, textField1: String, textField2: String? = nil, sdlManager: SDLManager) { + let subtleAlert = SDLSubtleAlert(alertText1: textField1, alertText2: textField2, alertIcon: nil, ttsChunks: nil, duration: nil, softButtons: nil, cancelID: NSNumber(0)) + + if let imageName = imageName { + sendImage(imageName, sdlManager: sdlManager) { (success, artworkName) in + if success { + subtleAlert.alertIcon = SDLImage(name: artworkName, isTemplate: true) + } + sdlManager.send(subtleAlert) + } + } else { sdlManager.send(subtleAlert) } } diff --git a/Example Apps/Example Swift/AudioManager.swift b/Example Apps/Example Swift/AudioManager.swift index 6ea7e8813..cfbc4538f 100644 --- a/Example Apps/Example Swift/AudioManager.swift +++ b/Example Apps/Example Swift/AudioManager.swift @@ -60,7 +60,7 @@ class AudioManager: NSObject { func startRecording() { guard speechRecognitionAuthState == .authorized else { SDLLog.w("This app does not have permission to access the Speech Recognition API") - sdlManager.send(AlertManager.alertWithMessageAndCloseButton("You must give this app permission to access Speech Recognition")) + AlertManager.sendAlert(textField1: AlertSpeechPermissionsWarningText, sdlManager: sdlManager) return } @@ -106,20 +106,19 @@ private extension AudioManager { /// Called when `PerformAudioPassThru` request times out or when a `EndAudioPassThru` request is sent var audioPassThruEndedHandler: SDLResponseHandler? { return { [weak self] (request, response, error) in - guard let response = response else { return } + guard let self = self, let response = response else { return } switch response.resultCode { case .success: // The `PerformAudioPassThru` timed out or the "Done" button was pressed in the pop-up. SDLLog.d("Audio Pass Thru ended successfully") - guard let speechTranscription = self?.speechTranscription else { return } - self?.sdlManager.send(AlertManager.alertWithMessageAndCloseButton("You said: \(speechTranscription.isEmpty ? "No speech detected" : speechTranscription)")) + AlertManager.sendAlert(textField1: "You said: \(self.speechTranscription.isEmpty ? "No speech detected" : self.speechTranscription)", sdlManager: self.sdlManager) case .aborted: // The "Cancel" button was pressed in the pop-up. Ignore this audio pass thru. SDLLog.d("Audio recording canceled") default: SDLLog.d("Audio recording not successful: \(response.resultCode)") } - self?.stopSpeechRecognitionTask() + self.stopSpeechRecognitionTask() } } diff --git a/Example Apps/Example Swift/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift index cdf478149..96f013d01 100644 --- a/Example Apps/Example Swift/MenuManager.swift +++ b/Example Apps/Example Swift/MenuManager.swift @@ -98,7 +98,7 @@ private extension MenuManager { } return SDLMenuCell(title: ACRecordInCarMicrophoneAudioMenuName, icon: SDLArtwork(image: UIImage(named: SpeakBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACRecordInCarMicrophoneAudioMenuName], handler: { _ in - manager.send(AlertManager.alertWithMessageAndCloseButton("Speech recognition feature only available on iOS 10+")) + AlertManager.sendAlert(textField1: "Speech recognition feature only available on iOS 10+", sdlManager: manager) }) } @@ -109,7 +109,7 @@ private extension MenuManager { class func menuCellDialNumber(with manager: SDLManager) -> SDLMenuCell { return SDLMenuCell(title: ACDialPhoneNumberMenuName, icon: SDLArtwork(image: UIImage(named: PhoneBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACDialPhoneNumberMenuName], handler: { _ in guard RPCPermissionsManager.isDialNumberRPCAllowed(with: manager) else { - manager.send(AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to dial a number")) + AlertManager.sendAlert(textField1: AlertDialNumberPermissionsWarningText, sdlManager: manager) return } @@ -133,7 +133,7 @@ private extension MenuManager { let display = SDLSetDisplayLayout(predefinedLayout: .nonMedia) manager.send(request: display) { (request, response, error) in guard response?.success.boolValue == .some(true) else { - manager.send(AlertManager.alertWithMessageAndCloseButton(errorMessage)) + AlertManager.sendAlert(textField1: errorMessage, sdlManager: manager) return } } @@ -145,7 +145,7 @@ private extension MenuManager { let display = SDLSetDisplayLayout(predefinedLayout: .graphicWithText) manager.send(request: display) { (request, response, error) in guard response?.success.boolValue == .some(true) else { - manager.send(AlertManager.alertWithMessageAndCloseButton(errorMessage)) + AlertManager.sendAlert(textField1: errorMessage, sdlManager: manager) return } } @@ -166,7 +166,7 @@ private extension MenuManager { let message = "\(submenuTitle) selected!" switch triggerSource { case .menu: - manager.send(AlertManager.alertWithMessageAndCloseButton(message)) + AlertManager.sendAlert(textField1: message, sdlManager: manager) case .voiceRecognition: manager.send(SDLSpeak(tts: message)) default: break @@ -184,11 +184,11 @@ private extension MenuManager { guard let response = response else { return } guard response.resultCode == .success else { if response.resultCode == .timedOut { - manager.send(AlertManager.alertWithMessageAndCloseButton("Slider timed out")) + AlertManager.sendAlert(textField1: AlertSliderTimedOutWarningText, sdlManager: manager) } else if response.resultCode == .aborted { - manager.send(AlertManager.alertWithMessageAndCloseButton("Slider cancelled")) + AlertManager.sendAlert(textField1: AlertSliderCancelledWarningText, sdlManager: manager) } else { - manager.send(AlertManager.alertWithMessageAndCloseButton("Slider could not be displayed")) + AlertManager.sendAlert(textField1: AlertSliderGeneralWarningText, sdlManager: manager) } return } @@ -203,11 +203,11 @@ private extension MenuManager { guard let response = response else { return } guard response.resultCode == .success else { if response.resultCode == .timedOut { - manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message timed out")) + AlertManager.sendAlert(textField1: AlertScrollableMessageTimedOutWarningText, sdlManager: manager) } else if response.resultCode == .aborted { - manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message cancelled")) + AlertManager.sendAlert(textField1: AlertScrollableMessageCancelledWarningText, sdlManager: manager) } else { - manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message could not be displayed")) + AlertManager.sendAlert(textField1: AlertScrollableMessageGeneralWarningText, sdlManager: manager) } return } @@ -225,7 +225,7 @@ private extension MenuManager { /// - Returns: A SDLVoiceCommand object class func voiceCommandStart(with manager: SDLManager) -> SDLVoiceCommand { return SDLVoiceCommand(voiceCommands: [VCStart], handler: { - manager.send(AlertManager.alertWithMessageAndCloseButton("\(VCStart) voice command selected!")) + AlertManager.sendAlert(textField1: "\(VCStart) voice command selected!", sdlManager: manager) }) } @@ -235,7 +235,7 @@ private extension MenuManager { /// - Returns: A SDLVoiceCommand object class func voiceCommandStop(with manager: SDLManager) -> SDLVoiceCommand { return SDLVoiceCommand(voiceCommands: [VCStop], handler: { - manager.send(AlertManager.alertWithMessageAndCloseButton("\(VCStop) voice command selected!")) + AlertManager.sendAlert(textField1: "\(VCStop) voice command selected!", sdlManager: manager) }) } } diff --git a/Example Apps/Example Swift/VehicleDataManager.swift b/Example Apps/Example Swift/VehicleDataManager.swift index c0f6e59dc..3c83f2ff9 100644 --- a/Example Apps/Example Swift/VehicleDataManager.swift +++ b/Example Apps/Example Swift/VehicleDataManager.swift @@ -144,9 +144,7 @@ extension VehicleDataManager { if triggerSource == .menu { let title = !alertTitle.isEmpty ? alertTitle : "No Vehicle Data Available" let detailMessage = !alertMessage.isEmpty ? alertMessage : nil - let alert = AlertManager.alertWithMessageAndCloseButton(title, - textField2: detailMessage) - manager.send(alert) + AlertManager.sendAlert(textField1: title, textField2: detailMessage, sdlManager: manager) } else { let spokenAlert = !alertMessage.isEmpty ? alertMessage : alertTitle manager.send(SDLSpeak(tts: spokenAlert)) @@ -233,8 +231,7 @@ extension VehicleDataManager { SDLLog.d("Checking if app has permission to access vehicle data...") guard manager.permissionManager.isRPCNameAllowed(SDLRPCFunctionName.getVehicleData) else { - let alert = AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to access vehicle data") - manager.send(request: alert) + AlertManager.sendAlert(textField1: AlertVehicleDataPermissionsWarningText, sdlManager: manager) return false } @@ -252,8 +249,7 @@ extension VehicleDataManager { SDLLog.d("Checking if Core returned vehicle data") guard response != nil, error == nil else { - let alert = AlertManager.alertWithMessageAndCloseButton("Something went wrong while getting vehicle data") - manager.send(request: alert) + AlertManager.sendAlert(textField1: AlertVehicleDataGeneralWarningText, sdlManager: manager) return false } @@ -272,14 +268,14 @@ extension VehicleDataManager { SDLLog.d("Checking phone call capability") manager.systemCapabilityManager.updateCapabilityType(.phoneCall, completionHandler: { (error, systemCapabilityManager) in guard let phoneCapability = systemCapabilityManager.phoneCapability else { - manager.send(AlertManager.alertWithMessageAndCloseButton("The head unit does not support the phone call capability")) + AlertManager.sendAlert(textField1: AlertDialNumberPermissionsWarningText, sdlManager: manager) return } if phoneCapability.dialNumberEnabled?.boolValue ?? false { SDLLog.d("Dialing phone number \(phoneNumber)...") dialPhoneNumber(phoneNumber, manager: manager) } else { - manager.send(AlertManager.alertWithMessageAndCloseButton("A phone call can not be made")) + AlertManager.sendAlert(textField1: AlertDialNumberUnavailableWarningText, sdlManager: manager) } }) } diff --git a/Example Apps/Shared/AppConstants.h b/Example Apps/Shared/AppConstants.h index de7db6f2b..cfafd1414 100644 --- a/Example Apps/Shared/AppConstants.h +++ b/Example Apps/Shared/AppConstants.h @@ -46,6 +46,17 @@ extern NSString * const AlertMessageText; extern NSString * const AlertOKButtonText; extern NSString * const SubtleAlertHeaderText; extern NSString * const SubtleAlertSubheaderText; +extern NSString * const AlertDialNumberPermissionsWarningText; +extern NSString * const AlertDialNumberUnavailableWarningText; +extern NSString * const AlertSliderTimedOutWarningText; +extern NSString * const AlertSliderCancelledWarningText; +extern NSString * const AlertSliderGeneralWarningText; +extern NSString * const AlertScrollableMessageTimedOutWarningText; +extern NSString * const AlertScrollableMessageCancelledWarningText; +extern NSString * const AlertScrollableMessageGeneralWarningText; +extern NSString * const AlertVehicleDataPermissionsWarningText; +extern NSString * const AlertVehicleDataGeneralWarningText; +extern NSString * const AlertSpeechPermissionsWarningText; #pragma mark - SDL Text-To-Speech extern NSString * const TTSGoodJob; diff --git a/Example Apps/Shared/AppConstants.m b/Example Apps/Shared/AppConstants.m index be97dd242..bd1876971 100644 --- a/Example Apps/Shared/AppConstants.m +++ b/Example Apps/Shared/AppConstants.m @@ -43,6 +43,17 @@ NSString * const AlertMessageText = @"You pressed the button!"; NSString * const AlertOKButtonText = @"OK"; NSString * const SubtleAlertHeaderText = @"Battery Level"; NSString * const SubtleAlertSubheaderText = @"Almost empty"; +NSString * const AlertDialNumberPermissionsWarningText = @"This app does not have the required permissions to dial a number"; +NSString * const AlertDialNumberUnavailableWarningText = @"The dial number feature is unavailable for this head unit"; +NSString * const AlertSliderTimedOutWarningText = @"Slider timed out"; +NSString * const AlertSliderCancelledWarningText = @"Slider cancelled"; +NSString * const AlertSliderGeneralWarningText = @"Slider could not be displayed"; +NSString * const AlertScrollableMessageTimedOutWarningText = @"Scrollable Message timed out"; +NSString * const AlertScrollableMessageCancelledWarningText = @"Scrollable Message cancelled"; +NSString * const AlertScrollableMessageGeneralWarningText = @"Scrollable Message could not be displayed"; +NSString * const AlertVehicleDataPermissionsWarningText = @"This app does not have the required permissions to access vehicle data"; +NSString * const AlertVehicleDataGeneralWarningText = @"Something went wrong while getting vehicle data"; +NSString * const AlertSpeechPermissionsWarningText = @"You must give this app permission to access Speech Recognition"; #pragma mark - SDL Text-To-Speech NSString * const TTSGoodJob = @"Good Job"; diff --git a/SmartDeviceLink_Example/SubscribeButtonManager.m b/SmartDeviceLink_Example/SubscribeButtonManager.m index 80512a7b2..cbe819288 100644 --- a/SmartDeviceLink_Example/SubscribeButtonManager.m +++ b/SmartDeviceLink_Example/SubscribeButtonManager.m @@ -56,8 +56,7 @@ NS_ASSUME_NONNULL_BEGIN alertMessage = [NSString stringWithFormat:@"%@ long pressed", buttonName]; } - SDLAlert *alert = [AlertManager alertWithMessageAndCloseButton:alertMessage textField2:nil iconName:nil]; - [self.sdlManager sendRPC:alert]; + [AlertManager sendAlertWithManager:self.sdlManager image:nil textField1:alertMessage textField2:nil]; } + (NSArray<SDLButtonName> *)sdlex_allPresetButtons { diff --git a/SmartDeviceLink_Example/SubscribeButtonManager.swift b/SmartDeviceLink_Example/SubscribeButtonManager.swift index 6567d9e64..1bf128c1d 100644 --- a/SmartDeviceLink_Example/SubscribeButtonManager.swift +++ b/SmartDeviceLink_Example/SubscribeButtonManager.swift @@ -38,16 +38,13 @@ class SubscribeButtonManager: NSObject { guard let buttonPress = buttonPress else { return } - let alert: SDLAlert let buttonNameString = buttonName.rawValue.rawValue switch buttonPress.buttonPressMode { case .short: - alert = AlertManager.alertWithMessageAndCloseButton("\(buttonNameString) short pressed") + AlertManager.sendAlert(textField1: "\(buttonNameString) short pressed", sdlManager: sdlManager) case .long: - alert = AlertManager.alertWithMessageAndCloseButton("\(buttonNameString) long pressed") + AlertManager.sendAlert(textField1: "\(buttonNameString) long pressed", sdlManager: sdlManager) default: fatalError() } - - sdlManager.send(alert) } } |