diff options
author | Joel Fischer <joeljfischer@gmail.com> | 2017-08-18 09:57:23 -0400 |
---|---|---|
committer | Joel Fischer <joeljfischer@gmail.com> | 2017-08-18 09:57:23 -0400 |
commit | 43af4f5a5ea8ea793df57afb293fe2177cb9a6a1 (patch) | |
tree | 3188e4adcec6b8e1ef38ae8f04879e71e4bf8863 | |
parent | 235e718d16609040dcd937f51abb4ce63ca90cd5 (diff) | |
parent | 4fd91c7ac2ba08780111584cf8e6dbb4725b1adf (diff) | |
download | sdl_ios-bugfix/RPCs_as_public_files.tar.gz |
Merge branch 'develop' into bugfix/RPCs_as_public_filesbugfix/RPCs_as_public_files
# Conflicts:
# SmartDeviceLink-iOS.podspec
# SmartDeviceLink-iOS.xcodeproj/project.pbxproj
# SmartDeviceLink.podspec
-rw-r--r-- | SmartDeviceLink-iOS.podspec | 2 | ||||
-rw-r--r-- | SmartDeviceLink-iOS.xcodeproj/project.pbxproj | 28 | ||||
-rw-r--r-- | SmartDeviceLink.podspec | 2 | ||||
-rw-r--r-- | SmartDeviceLink/SDLMetadataTags.h | 71 | ||||
-rw-r--r-- | SmartDeviceLink/SDLMetadataTags.m | 145 | ||||
-rw-r--r-- | SmartDeviceLink/SDLMetadataType.h | 126 | ||||
-rw-r--r-- | SmartDeviceLink/SDLMetadataType.m | 149 | ||||
-rw-r--r-- | SmartDeviceLink/SDLNames.h | 1 | ||||
-rw-r--r-- | SmartDeviceLink/SDLShow.h | 23 | ||||
-rw-r--r-- | SmartDeviceLink/SDLShow.m | 87 | ||||
-rw-r--r-- | SmartDeviceLink/SmartDeviceLink.h | 2 | ||||
-rw-r--r-- | SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMetadataTypeSpec.m | 90 | ||||
-rw-r--r-- | SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m | 33 | ||||
-rw-r--r-- | SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMetadataTagsSpec.m | 56 |
14 files changed, 806 insertions, 9 deletions
diff --git a/SmartDeviceLink-iOS.podspec b/SmartDeviceLink-iOS.podspec index ed8a36b4f..8db70e206 100644 --- a/SmartDeviceLink-iOS.podspec +++ b/SmartDeviceLink-iOS.podspec @@ -295,6 +295,8 @@ s.public_header_files = [ 'SmartDeviceLink/SDLRequestHandler.h', 'SmartDeviceLink/SDLRPCNotificationNotification.h', 'SmartDeviceLink/SDLRPCResponseNotification.h', +'SmartDeviceLink/SDLMetadataTags.h', +'SmartDeviceLink/SDLMetadataType.h' ] end diff --git a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj index 55f2afe81..9806b0777 100644 --- a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj +++ b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj @@ -936,7 +936,13 @@ 5DEE55C01B8509CB004F0D0F /* SDLURLRequestTaskSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DEE55BF1B8509CB004F0D0F /* SDLURLRequestTaskSpec.m */; }; 5DF2BB9D1B94E38A00CE5994 /* SDLURLSessionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DF2BB9C1B94E38A00CE5994 /* SDLURLSessionSpec.m */; }; 5DFFB9151BD7C89700DB3F04 /* SDLConnectionManagerType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFFB9141BD7C89700DB3F04 /* SDLConnectionManagerType.h */; }; - 8BD729A61F2A2CF30029AC93 /* SDLVideoStreamingCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD729A41F2A2CF30029AC93 /* SDLVideoStreamingCodec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B06061F1F30BCED005ADB2F /* SDLMetadataType.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B06061D1F30BCED005ADB2F /* SDLMetadataType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B0606201F30BCED005ADB2F /* SDLMetadataType.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B06061E1F30BCED005ADB2F /* SDLMetadataType.m */; }; + 8B0606221F30C108005ADB2F /* SDLMetadataTypeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B0606211F30C108005ADB2F /* SDLMetadataTypeSpec.m */; }; + 8B0606291F3103CE005ADB2F /* SDLMetadataTags.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B0606271F3103CE005ADB2F /* SDLMetadataTags.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B06062A1F3103CE005ADB2F /* SDLMetadataTags.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B0606281F3103CE005ADB2F /* SDLMetadataTags.m */; }; + 8B06062C1F310ED2005ADB2F /* SDLMetadataTagsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B06062B1F310ED2005ADB2F /* SDLMetadataTagsSpec.m */; }; + 8BD729A61F2A2CF30029AC93 /* SDLVideoStreamingCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD729A41F2A2CF30029AC93 /* SDLVideoStreamingCodec.h */; }; 8BD729A71F2A2CF30029AC93 /* SDLVideoStreamingCodec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD729A51F2A2CF30029AC93 /* SDLVideoStreamingCodec.m */; }; 8BD729AA1F2A41F40029AC93 /* SDLVideoStreamingProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD729A81F2A41F40029AC93 /* SDLVideoStreamingProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8BD729AB1F2A41F40029AC93 /* SDLVideoStreamingProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD729A91F2A41F40029AC93 /* SDLVideoStreamingProtocol.m */; }; @@ -2041,6 +2047,12 @@ 5DEE55BF1B8509CB004F0D0F /* SDLURLRequestTaskSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLURLRequestTaskSpec.m; path = "UtilitiesSpecs/HTTP Connection/SDLURLRequestTaskSpec.m"; sourceTree = "<group>"; }; 5DF2BB9C1B94E38A00CE5994 /* SDLURLSessionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLURLSessionSpec.m; path = "UtilitiesSpecs/HTTP Connection/SDLURLSessionSpec.m"; sourceTree = "<group>"; }; 5DFFB9141BD7C89700DB3F04 /* SDLConnectionManagerType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLConnectionManagerType.h; sourceTree = "<group>"; }; + 8B06061D1F30BCED005ADB2F /* SDLMetadataType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLMetadataType.h; sourceTree = "<group>"; }; + 8B06061E1F30BCED005ADB2F /* SDLMetadataType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLMetadataType.m; sourceTree = "<group>"; }; + 8B0606211F30C108005ADB2F /* SDLMetadataTypeSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLMetadataTypeSpec.m; sourceTree = "<group>"; }; + 8B0606271F3103CE005ADB2F /* SDLMetadataTags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLMetadataTags.h; sourceTree = "<group>"; }; + 8B0606281F3103CE005ADB2F /* SDLMetadataTags.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLMetadataTags.m; sourceTree = "<group>"; }; + 8B06062B1F310ED2005ADB2F /* SDLMetadataTagsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLMetadataTagsSpec.m; sourceTree = "<group>"; }; 8BD729A41F2A2CF30029AC93 /* SDLVideoStreamingCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLVideoStreamingCodec.h; sourceTree = "<group>"; }; 8BD729A51F2A2CF30029AC93 /* SDLVideoStreamingCodec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLVideoStreamingCodec.m; sourceTree = "<group>"; }; 8BD729A81F2A41F40029AC93 /* SDLVideoStreamingProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLVideoStreamingProtocol.h; sourceTree = "<group>"; }; @@ -2250,6 +2262,7 @@ 162E82161A9BDE8A00906325 /* SDLTBTStateSpec.m */, 162E82171A9BDE8A00906325 /* SDLTextAlignmentSpec.m */, 162E82181A9BDE8A00906325 /* SDLTextFieldNameSpec.m */, + 8B0606211F30C108005ADB2F /* SDLMetadataTypeSpec.m */, 162E82191A9BDE8A00906325 /* SDLTimerModeSpec.m */, 162E821A1A9BDE8A00906325 /* SDLTouchTypeSpec.m */, 162E821B1A9BDE8A00906325 /* SDLTriggerSource.m */, @@ -2468,9 +2481,10 @@ 162E82B31A9BDE8A00906325 /* SDLTurnSpec.m */, 162E82B41A9BDE8A00906325 /* SDLVehicleDataResultSpec.m */, 162E82B51A9BDE8A00906325 /* SDLVehicleTypeSpec.m */, - 162E82B61A9BDE8A00906325 /* SDLVrHelpItemSpec.m */, 8BF9DE061F2BAEEE004FFCBB /* SDLVideoStreamingFormatSpec.m */, 8BF9DE081F2BAF0C004FFCBB /* SDLVideoStreamingCapabilitySpec.m */, + 162E82B61A9BDE8A00906325 /* SDLVrHelpItemSpec.m */, + 8B06062B1F310ED2005ADB2F /* SDLMetadataTagsSpec.m */, ); path = StructSpecs; sourceTree = "<group>"; @@ -3059,6 +3073,8 @@ DA9F7E981DCC052C00ACAE48 /* SDLLocationDetails.m */, 5D61FB0B1A84238A00846EE7 /* SDLMenuParams.h */, 5D61FB0C1A84238A00846EE7 /* SDLMenuParams.m */, + 8B0606271F3103CE005ADB2F /* SDLMetadataTags.h */, + 8B0606281F3103CE005ADB2F /* SDLMetadataTags.m */, 5D61FB0D1A84238A00846EE7 /* SDLMyKey.h */, 5D61FB0E1A84238A00846EE7 /* SDLMyKey.m */, 5D00AC751F15283E004000D9 /* SDLNavigationCapability.h */, @@ -3231,6 +3247,8 @@ 5D61FBDB1A84238C00846EE7 /* SDLTextAlignment.m */, 5D61FBDE1A84238C00846EE7 /* SDLTextFieldName.h */, 5D61FBDF1A84238C00846EE7 /* SDLTextFieldName.m */, + 8B06061D1F30BCED005ADB2F /* SDLMetadataType.h */, + 8B06061E1F30BCED005ADB2F /* SDLMetadataType.m */, 5D61FBE01A84238C00846EE7 /* SDLTimerMode.h */, 5D61FBE11A84238C00846EE7 /* SDLTimerMode.m */, 5D61FBEA1A84238C00846EE7 /* SDLTouchType.h */, @@ -4331,6 +4349,7 @@ 5D00AC6F1F1511B9004000D9 /* SDLGetSystemCapability.h in Headers */, 5D61FD891A84238C00846EE7 /* SDLSetGlobalPropertiesResponse.h in Headers */, 5D61FD8D1A84238C00846EE7 /* SDLSetMediaClockTimerResponse.h in Headers */, + 8B0606291F3103CE005ADB2F /* SDLMetadataTags.h in Headers */, 5D61FD3B1A84238C00846EE7 /* SDLPresetBankCapabilities.h in Headers */, 5D8204311BD001C700D0A41B /* SDLArtwork.h in Headers */, 5D53C46D1B7A99B9003526EA /* SDLStreamingMediaManager.h in Headers */, @@ -4480,6 +4499,7 @@ 5D16545A1D3E7A1600554D93 /* SDLLifecycleManager.h in Headers */, 5D61FCBD1A84238C00846EE7 /* SDLHeadLampStatus.h in Headers */, 5D61FDC31A84238C00846EE7 /* SDLTBTState.h in Headers */, + 8B06061F1F30BCED005ADB2F /* SDLMetadataType.h in Headers */, 5D61FD951A84238C00846EE7 /* SDLShowResponse.h in Headers */, 5D61FCA31A84238C00846EE7 /* SDLEndAudioPassThru.h in Headers */, 5D61FCB11A84238C00846EE7 /* SDLGetDTCs.h in Headers */, @@ -4826,6 +4846,7 @@ 5D61FDB21A84238C00846EE7 /* SDLSubscribeVehicleData.m in Sources */, 5D61FC991A84238C00846EE7 /* SDLECallInfo.m in Sources */, 5D61FD601A84238C00846EE7 /* SDLRegisterAppInterfaceResponse.m in Sources */, + 8B0606201F30BCED005ADB2F /* SDLMetadataType.m in Sources */, 5DB996581F268ECB002D8795 /* SDLControlFramePayloadAudioStartServiceAck.m in Sources */, DAC572621D10C5020004288B /* SDLPinchGesture.m in Sources */, 5D61FCF51A84238C00846EE7 /* SDLMaintenanceModeStatus.m in Sources */, @@ -4995,6 +5016,7 @@ 5D1665C51CF8CA2700CC4CA1 /* SDLListFilesOperation.m in Sources */, 5D61FE021A84238C00846EE7 /* SDLVehicleDataNotificationStatus.m in Sources */, 5D61FDD81A84238C00846EE7 /* SDLTouchType.m in Sources */, + 8B06062A1F3103CE005ADB2F /* SDLMetadataTags.m in Sources */, 5D61FDD61A84238C00846EE7 /* SDLTouchEventCapabilities.m in Sources */, 5DA49CE61F1EA83300E65FC5 /* SDLControlFramePayloadRPCStartService.m in Sources */, 5DA102A51D4122C700C15826 /* NSMutableDictionary+SafeRemove.m in Sources */, @@ -5102,6 +5124,7 @@ 162E83331A9BDE8B00906325 /* SDLPerformInteractionSpec.m in Sources */, 5D0A9F951F15585B00CC80DD /* SDLPhoneCapabilitySpec.m in Sources */, 1680B11A1A9CD7AD00DBD79E /* SDLAbstractProtocolSpec.m in Sources */, + 8B06062C1F310ED2005ADB2F /* SDLMetadataTagsSpec.m in Sources */, 1680B1151A9CD7AD00DBD79E /* SDLV2ProtocolHeaderSpec.m in Sources */, 162E83101A9BDE8B00906325 /* SDLOnAudioPassThruSpec.m in Sources */, 162E82D91A9BDE8A00906325 /* SDLDisplayTypeSpec.m in Sources */, @@ -5111,6 +5134,7 @@ DA9F7EB41DCC086400ACAE48 /* SDLDateTimeSpec.m in Sources */, 162E830E1A9BDE8B00906325 /* SDLRPCRequestFactorySpec.m in Sources */, 162E82E41A9BDE8B00906325 /* SDLImageFieldNameSpec.m in Sources */, + 8B0606221F30C108005ADB2F /* SDLMetadataTypeSpec.m in Sources */, 162E83991A9BDE8B00906325 /* SDLEnumSpec.m in Sources */, 162E82ED1A9BDE8B00906325 /* SDLMaintenanceModeStatusSpec.m in Sources */, 5DB92D2D1AC4A34F00C15BB0 /* SDLPrioritizedObjectCollectionSpec.m in Sources */, diff --git a/SmartDeviceLink.podspec b/SmartDeviceLink.podspec index 665708e54..bb12c8bac 100644 --- a/SmartDeviceLink.podspec +++ b/SmartDeviceLink.podspec @@ -176,6 +176,7 @@ s.public_header_files = [ 'SmartDeviceLink/SDLImageResolution.h', 'SmartDeviceLink/SDLKeyboardProperties.h', 'SmartDeviceLink/SDLMenuParams.h', +'SmartDeviceLink/SDLMetadataTags.h', 'SmartDeviceLink/SDLMyKey.h', 'SmartDeviceLink/SDLNavigationCapability.h', 'SmartDeviceLink/SDLOasisAddress.h', @@ -242,6 +243,7 @@ s.public_header_files = [ 'SmartDeviceLink/SDLLockScreenStatus.h', 'SmartDeviceLink/SDLMaintenanceModeStatus.h', 'SmartDeviceLink/SDLMediaClockFormat.h', +'SmartDeviceLink/SDLMetadataType.h', 'SmartDeviceLink/SDLPRNDL.h', 'SmartDeviceLink/SDLPermissionStatus.h', 'SmartDeviceLink/SDLPowerModeQualificationStatus.h', diff --git a/SmartDeviceLink/SDLMetadataTags.h b/SmartDeviceLink/SDLMetadataTags.h new file mode 100644 index 000000000..dfa3c2812 --- /dev/null +++ b/SmartDeviceLink/SDLMetadataTags.h @@ -0,0 +1,71 @@ +// +// SDLMetadataTags.h +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import "SDLRPCMessage.h" + +@class SDLMetadataType; + +@interface SDLMetadataTags : SDLRPCStruct { +} + +/** + * @abstract Constructs a newly allocated SDLMetadataTags object + */ +- (instancetype)init; + +/** + * @abstract Constructs a newly allocated SDLMetadataTags object indicated by the dictionary parameter + * + * @param dict The dictionary to use to construct the object + */ +- (instancetype)initWithDictionary:(NSMutableDictionary *)dict; + +/** + * @abstract Constructs a newly allocated SDLMetadataTags object with NSArrays + */ +- (instancetype)initWithTextFieldTypes:(NSArray<SDLMetadataType *> *)mainField1 mainField2:(NSArray<SDLMetadataType *> *)mainField2; + +- (instancetype)initWithTextFieldTypes:(NSArray<SDLMetadataType *> *)mainField1 mainField2:(NSArray<SDLMetadataType *> *)mainField2 mainField3:(NSArray<SDLMetadataType *> *)mainField3 mainField4:(NSArray<SDLMetadataType *> *)mainField4; + +/** + * @abstract The type of data contained in the "mainField1" text field, Optional. + * + * minsize= 0 + * + * maxsize= 5 + */ +@property (strong, nonatomic) NSMutableArray<SDLMetadataType *> *mainField1; + +/** + * @abstract The type of data contained in the "mainField2" text field, Optional. + * + * minsize= 0 + * + * maxsize= 5 + */ +@property (strong, nonatomic) NSMutableArray<SDLMetadataType *> *mainField2; + +/** + * @abstract The type of data contained in the "mainField3" text field, Optional. + * + * minsize= 0 + * + * maxsize= 5 + */ +@property (strong, nonatomic) NSMutableArray<SDLMetadataType *> *mainField3; + +/** + * @abstract The type of data contained in the "mainField4" text field, Optional. + * + * minsize= 0 + * + * maxsize= 5 + */ +@property (strong, nonatomic) NSMutableArray<SDLMetadataType *> *mainField4; + +@end diff --git a/SmartDeviceLink/SDLMetadataTags.m b/SmartDeviceLink/SDLMetadataTags.m new file mode 100644 index 000000000..745e43a39 --- /dev/null +++ b/SmartDeviceLink/SDLMetadataTags.m @@ -0,0 +1,145 @@ +// +// SDLMetadataTags.m +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import "SDLMetadataTags.h" +#import "SDLMetadataType.h" +#import "SDLNames.h" + +@implementation SDLMetadataTags + +- (instancetype)init { + if (self = [super init]) { + } + return self; +} + +- (instancetype)initWithDictionary:(NSMutableDictionary *)dict { + if (self = [super initWithDictionary:dict]) { + } + return self; +} + +- (instancetype)initWithTextFieldTypes:(NSArray<SDLMetadataType *> *)mainField1 mainField2:(NSArray<SDLMetadataType *> *)mainField2 { + self = [self init]; + if (!self) { + return self; + } + + self.mainField1 = [mainField1 mutableCopy]; + self.mainField2 = [mainField2 mutableCopy]; + + return self; +} + +- (instancetype)initWithTextFieldTypes:(NSArray<SDLMetadataType *> *)mainField1 mainField2:(NSArray<SDLMetadataType *> *)mainField2 mainField3:(NSArray<SDLMetadataType *> *)mainField3 mainField4:(NSArray<SDLMetadataType *> *)mainField4 { + self = [self init]; + if (!self) { + return self; + } + + self.mainField1 = [mainField1 mutableCopy]; + self.mainField2 = [mainField2 mutableCopy]; + self.mainField3 = [mainField3 mutableCopy]; + self.mainField4 = [mainField4 mutableCopy]; + + return self; +} + +- (void)setMainField1:(NSMutableArray<SDLMetadataType *> *)mainField1 { + if (mainField1 != nil) { + [store setObject:mainField1 forKey:NAMES_mainField1]; + } else { + [store removeObjectForKey:NAMES_mainField1]; + } +} + +- (NSMutableArray<SDLMetadataType *> *)mainField1 { + NSMutableArray *array = [store objectForKey:NAMES_mainField1]; + if ([array isEqual:[NSNull null]]) { + return [NSMutableArray array]; + } else if (array.count < 1 || [array.firstObject isKindOfClass:SDLMetadataType.class]) { + return array; + } else { + NSMutableArray *newList = [NSMutableArray arrayWithCapacity:[array count]]; + for (SDLMetadataType *type in array) { + [newList addObject:type]; + } + return newList; + } +} + +- (void)setMainField2:(NSMutableArray<SDLMetadataType *> *)mainField2 { + if (mainField2 != nil) { + [store setObject:mainField2 forKey:NAMES_mainField2]; + } else { + [store removeObjectForKey:NAMES_mainField2]; + } +} + +- (NSMutableArray<SDLMetadataType *> *)mainField2 { + NSMutableArray *array = [store objectForKey:NAMES_mainField2]; + if ([array isEqual:[NSNull null]]) { + return [NSMutableArray array]; + } else if (array.count < 1 || [array.firstObject isKindOfClass:SDLMetadataType.class]) { + return array; + } else { + NSMutableArray *newList = [NSMutableArray arrayWithCapacity:[array count]]; + for (SDLMetadataType *type in array) { + [newList addObject:type]; + } + return newList; + } +} + +- (void)setMainField3:(NSMutableArray<SDLMetadataType *> *)mainField3 { + if (mainField3 != nil) { + [store setObject:mainField3 forKey:NAMES_mainField3]; + } else { + [store removeObjectForKey:NAMES_mainField3]; + } +} + +- (NSMutableArray<SDLMetadataType *> *)mainField3 { + NSMutableArray *array = [store objectForKey:NAMES_mainField3]; + if ([array isEqual:[NSNull null]]) { + return [NSMutableArray array]; + } else if (array.count < 1 || [array.firstObject isKindOfClass:SDLMetadataType.class]) { + return array; + } else { + NSMutableArray *newList = [NSMutableArray arrayWithCapacity:[array count]]; + for (SDLMetadataType *type in array) { + [newList addObject:type]; + } + return newList; + } +} + +- (void)setMainField4:(NSMutableArray<SDLMetadataType *> *)mainField4 { + if (mainField4 != nil) { + [store setObject:mainField4 forKey:NAMES_mainField4]; + } else { + [store removeObjectForKey:NAMES_mainField4]; + } +} + +- (NSMutableArray<SDLMetadataType *> *)mainField4 { + NSMutableArray *array = [store objectForKey:NAMES_mainField4]; + if ([array isEqual:[NSNull null]]) { + return [NSMutableArray array]; + } else if (array.count < 1 || [array.firstObject isKindOfClass:SDLMetadataType.class]) { + return array; + } else { + NSMutableArray *newList = [NSMutableArray arrayWithCapacity:[array count]]; + for (SDLMetadataType *type in array) { + [newList addObject:type]; + } + return newList; + } +} + +@end diff --git a/SmartDeviceLink/SDLMetadataType.h b/SmartDeviceLink/SDLMetadataType.h new file mode 100644 index 000000000..2141756cc --- /dev/null +++ b/SmartDeviceLink/SDLMetadataType.h @@ -0,0 +1,126 @@ +// +// SDLTextFieldType.h +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import "SDLEnum.h" + +/** + * The list of possible metadata for text fields + * + * @since SDL 4.7.0 + */ +@interface SDLMetadataType : SDLEnum { +} + +/** + * Convert String to SDLTextAlignment + * + * @param value The value of the string to get an object for + * + * @return SDLTextAlignment + */ ++ (SDLMetadataType *)valueOf:(NSString *)value; + +/** + * @abstract Store the enumeration of all possible SDLTextFieldType + * + * @return an array that store all possible SDLTextFieldType + */ ++ (NSArray *)values; + +/** + * @abstract The data in this field contains the title of the currently playing audio track. + * + * @return A SDLTextFieldType object with value of *MEDIA_TITLE* + */ ++ (SDLMetadataType *)MEDIA_TITLE; + +/** + * @abstract The data in this field contains the artist or creator of the currently playing audio track. + * + * @return A SDLTextFieldType object with value of *MEDIA_ARTIST* + */ ++ (SDLMetadataType *)MEDIA_ARTIST; + +/** + * @abstract The data in this field contains the album title of the currently playing audio track. + * + * @return A SDLTextFieldType object with value of *MEDIA_ALBUM* + */ ++ (SDLMetadataType *)MEDIA_ALBUM; + +/** + * @abstract The data in this field contains the creation year of the currently playing audio track. + * + * @return A SDLTextFieldType object with value of *MEDIA_YEAR* + */ ++ (SDLMetadataType *)MEDIA_YEAR; + +/** + * @abstract The data in this field contains the genre of the currently playing audio track. + * + * @return A SDLTextFieldType object with value of *MEDIA_GENRE* + */ ++ (SDLMetadataType *)MEDIA_GENRE; + +/** + * @abstract The data in this field contains the name of the current source for the media. + * + * @return A SDLTextFieldType object with value of *MEDIA_STATION* + */ ++ (SDLMetadataType *)MEDIA_STATION; + +/** + * @abstract The data in this field is a rating. + * + * @return A SDLTextFieldType object with value of *RATING* + */ ++ (SDLMetadataType *)RATING; + +/** + * @abstract The data in this field is the current temperature. + * + * @return A SDLTextFieldType object with value of *CURRENT_TEMPERATURE* + */ ++ (SDLMetadataType *)CURRENT_TEMPERATURE; + +/** + * @abstract The data in this field is the maximum temperature for the day. + * + * @return A SDLTextFieldType object with value of *MAXIMUM_TEMPERATURE* + */ ++ (SDLMetadataType *)MAXIMUM_TEMPERATURE; + +/** + * @abstract The data in this field is the minimum temperature for the day. + * + * @return A SDLTextFieldType object with value of *MINIMUM_TEMPERATURE* + */ ++ (SDLMetadataType *)MINIMUM_TEMPERATURE; + +/** + * @abstract The data in this field describes the current weather (ex. cloudy, clear, etc.). + * + * @return A SDLTextFieldType object with value of *WEATHER_TERM* + */ ++ (SDLMetadataType *)WEATHER_TERM; + +/** + * @abstract The data in this field describes the current humidity value. + * + * @return A SDLTextFieldType object with value of *HUMIDITY* + */ ++ (SDLMetadataType *)HUMIDITY; + +/** + The data in this field is not of a common type or should not be processed. Any time a field does not have a type parameter it is considered as the none type. + + @return A SDLTextFieldType object with value of *none* + */ ++ (SDLMetadataType *)NONE; + +@end diff --git a/SmartDeviceLink/SDLMetadataType.m b/SmartDeviceLink/SDLMetadataType.m new file mode 100644 index 000000000..7e089230d --- /dev/null +++ b/SmartDeviceLink/SDLMetadataType.m @@ -0,0 +1,149 @@ +// +// SDLMetadataType.m +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import "SDLMetadataType.h" + +SDLMetadataType *SDLMetadataType_MEDIA_TITLE = nil; +SDLMetadataType *SDLMetadataType_MEDIA_ARTIST = nil; +SDLMetadataType *SDLMetadataType_MEDIA_ALBUM = nil; +SDLMetadataType *SDLMetadataType_MEDIA_YEAR = nil; +SDLMetadataType *SDLMetadataType_MEDIA_GENRE = nil; +SDLMetadataType *SDLMetadataType_MEDIA_STATION = nil; +SDLMetadataType *SDLMetadataType_RATING = nil; +SDLMetadataType *SDLMetadataType_CURRENT_TEMPERATURE = nil; +SDLMetadataType *SDLMetadataType_MAXIMUM_TEMPERATURE = nil; +SDLMetadataType *SDLMetadataType_MINIMUM_TEMPERATURE = nil; +SDLMetadataType *SDLMetadataType_WEATHER_TERM = nil; +SDLMetadataType *SDLMetadataType_HUMIDITY = nil; +SDLMetadataType *SDLMetadataType_NONE = nil; + +NSArray *SDLMetadataType_values = nil; + +@implementation SDLMetadataType + ++ (SDLMetadataType *)valueOf:(NSString *)value { + for (SDLMetadataType *item in SDLMetadataType.values) { + if ([item.value isEqualToString:value]) { + return item; + } + } + return nil; +} + ++ (NSArray *)values { + if (SDLMetadataType_values == nil) { + SDLMetadataType_values = @[ + SDLMetadataType.MEDIA_TITLE, + SDLMetadataType.MEDIA_ARTIST, + SDLMetadataType.MEDIA_ALBUM, + SDLMetadataType.MEDIA_YEAR, + SDLMetadataType.MEDIA_GENRE, + SDLMetadataType.MEDIA_STATION, + SDLMetadataType.RATING, + SDLMetadataType.CURRENT_TEMPERATURE, + SDLMetadataType.MAXIMUM_TEMPERATURE, + SDLMetadataType.MINIMUM_TEMPERATURE, + SDLMetadataType.WEATHER_TERM, + SDLMetadataType.HUMIDITY, + SDLMetadataType.NONE]; + } + return SDLMetadataType_values; +} + ++ (SDLMetadataType *)MEDIA_TITLE { + if (SDLMetadataType_MEDIA_TITLE== nil) { + SDLMetadataType_MEDIA_TITLE = [[SDLMetadataType alloc] initWithValue:@"mediaTitle"]; + } + return SDLMetadataType_MEDIA_TITLE; +} + ++ (SDLMetadataType *)MEDIA_ARTIST { + if (SDLMetadataType_MEDIA_ARTIST== nil) { + SDLMetadataType_MEDIA_ARTIST = [[SDLMetadataType alloc] initWithValue:@"mediaArtist"]; + } + return SDLMetadataType_MEDIA_ARTIST; +} + ++ (SDLMetadataType *)MEDIA_ALBUM { + if (SDLMetadataType_MEDIA_ALBUM== nil) { + SDLMetadataType_MEDIA_ALBUM = [[SDLMetadataType alloc] initWithValue:@"mediaAlbum"]; + } + return SDLMetadataType_MEDIA_ALBUM; +} + ++ (SDLMetadataType *)MEDIA_YEAR { + if (SDLMetadataType_MEDIA_YEAR == nil) { + SDLMetadataType_MEDIA_YEAR = [[SDLMetadataType alloc] initWithValue:@"mediaYear"]; + } + return SDLMetadataType_MEDIA_YEAR; +} + ++ (SDLMetadataType *)MEDIA_GENRE { + if (SDLMetadataType_MEDIA_GENRE == nil) { + SDLMetadataType_MEDIA_GENRE = [[SDLMetadataType alloc] initWithValue:@"mediaGenre"]; + } + return SDLMetadataType_MEDIA_GENRE; +} + ++ (SDLMetadataType *)MEDIA_STATION { + if (SDLMetadataType_MEDIA_STATION == nil) { + SDLMetadataType_MEDIA_STATION = [[SDLMetadataType alloc] initWithValue:@"mediaStation"]; + } + return SDLMetadataType_MEDIA_STATION; +} + ++ (SDLMetadataType *)RATING { + if (SDLMetadataType_RATING == nil) { + SDLMetadataType_RATING = [[SDLMetadataType alloc] initWithValue:@"rating"]; + } + return SDLMetadataType_RATING; +} + ++ (SDLMetadataType *)CURRENT_TEMPERATURE { + if (SDLMetadataType_CURRENT_TEMPERATURE == nil) { + SDLMetadataType_CURRENT_TEMPERATURE = [[SDLMetadataType alloc] initWithValue:@"currentTemperature"]; + } + return SDLMetadataType_CURRENT_TEMPERATURE; +} + ++ (SDLMetadataType *)MAXIMUM_TEMPERATURE { + if (SDLMetadataType_MAXIMUM_TEMPERATURE == nil) { + SDLMetadataType_MAXIMUM_TEMPERATURE = [[SDLMetadataType alloc] initWithValue:@"maximumTemperature"]; + } + return SDLMetadataType_MAXIMUM_TEMPERATURE; +} + ++ (SDLMetadataType *)MINIMUM_TEMPERATURE { + if (SDLMetadataType_MINIMUM_TEMPERATURE == nil) { + SDLMetadataType_MINIMUM_TEMPERATURE = [[SDLMetadataType alloc] initWithValue:@"minimumTemperature"]; + } + return SDLMetadataType_MINIMUM_TEMPERATURE; +} + ++ (SDLMetadataType *)WEATHER_TERM { + if (SDLMetadataType_WEATHER_TERM == nil) { + SDLMetadataType_WEATHER_TERM = [[SDLMetadataType alloc] initWithValue:@"weatherTerm"]; + } + return SDLMetadataType_WEATHER_TERM; +} + ++ (SDLMetadataType *)HUMIDITY { + if (SDLMetadataType_HUMIDITY == nil) { + SDLMetadataType_HUMIDITY = [[SDLMetadataType alloc] initWithValue:@"humidity"]; + } + return SDLMetadataType_HUMIDITY; +} + ++ (SDLMetadataType *)NONE { + if (SDLMetadataType_NONE == nil) { + SDLMetadataType_NONE = [[SDLMetadataType alloc] initWithValue:@"none"]; + } + return SDLMetadataType_NONE; +} + +@end diff --git a/SmartDeviceLink/SDLNames.h b/SmartDeviceLink/SDLNames.h index effb5855d..5b468d034 100644 --- a/SmartDeviceLink/SDLNames.h +++ b/SmartDeviceLink/SDLNames.h @@ -212,6 +212,7 @@ #define NAMES_messageData @"messageData" #define NAMES_messageDataResult @"messageDataResult" #define NAMES_messageLength @"messageLength" +#define NAMES_metadataTags @"metadataTags" #define NAMES_middleRow1BeltDeployed @"middleRow1BeltDeployed" #define NAMES_middleRow1BuckleBelted @"middleRow1BuckleBelted" #define NAMES_middleRow2BuckleBelted @"middleRow2BuckleBelted" diff --git a/SmartDeviceLink/SDLShow.h b/SmartDeviceLink/SDLShow.h index 45849cd48..b941d1625 100644 --- a/SmartDeviceLink/SDLShow.h +++ b/SmartDeviceLink/SDLShow.h @@ -5,7 +5,9 @@ @class SDLImage; @class SDLSoftButton; +@class SDLMetadataTags; @class SDLTextAlignment; +@class SDLMetadataType; /** @@ -45,11 +47,17 @@ - (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 alignment:(SDLTextAlignment *)alignment; +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField1Type:(SDLMetadataType *)mainField1Type mainField2:(NSString *)mainField2 mainField2Type:(SDLMetadataType *)mainField2Type alignment:(SDLTextAlignment *)alignment; + - (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment; +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField1Type:(SDLMetadataType *)mainField1Type mainField2:(NSString *)mainField2 mainField2Type:(SDLMetadataType *)mainField2Type mainField3:(NSString *)mainField3 mainField3Type:(SDLMetadataType *)mainField3Type mainField4:(NSString *)mainField4 mainField4Type:(SDLMetadataType *)mainField4Type alignment:(SDLTextAlignment *)alignment; + - (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack; -- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack graphic:(SDLImage *)graphic softButtons:(NSArray<SDLSoftButton *> *)softButtons customPresets:(NSArray<NSString *> *)customPresets; +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack graphic:(SDLImage *)graphic softButtons:(NSArray<SDLSoftButton *> *)softButtons customPresets:(NSArray<NSString *> *)customPresets __deprecated_msg(("Use initWithMainField1:(NSString *)mainField1 (NSString *)mainField2 (NSString *)mainField3 (NSString *)mainField4 (SDLTextAlignment *)alignment (NSString *)statusBar (NSString *)mediaClock (NSString *)mediaTrack (SDLImage *)graphic (NSArray<SDLSoftButton *> *)softButtons (NSArray<NSString *> *)customPresets (SDLMetadataStruct *)metadata instead")); + +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack graphic:(SDLImage *)graphic softButtons:(NSArray<SDLSoftButton *> *)softButtons customPresets:(NSArray<NSString *> *)customPresets textFieldMetadata:(SDLMetadataTags *)metadata; /** @@ -240,4 +248,17 @@ */ @property (strong) NSMutableArray *customPresets; +/** + * @abstract Text Field Metadata + * + * @discussion A Vector value representing the Custom Presets defined by the + * App + * <p> + * App defined metadata information. See MetadataStruct. Uses mainField1, mainField2, mainField3, mainField4. + * If omitted on supported displays, the currently set metadata tags will not change. + * If any text field contains no tags or the none tag, the metadata tag for that textfield should be removed. + * @since SmartDeviceLink 2.0 + */ +@property (strong) SDLMetadataTags *metadataTags; + @end diff --git a/SmartDeviceLink/SDLShow.m b/SmartDeviceLink/SDLShow.m index ed6ab93ce..0a7949b3e 100644 --- a/SmartDeviceLink/SDLShow.m +++ b/SmartDeviceLink/SDLShow.m @@ -5,6 +5,7 @@ #import "SDLShow.h" #import "SDLImage.h" +#import "SDLMetadataTags.h" #import "SDLNames.h" #import "SDLSoftButton.h" #import "SDLTextAlignment.h" @@ -28,12 +29,52 @@ return [self initWithMainField1:mainField1 mainField2:mainField2 mainField3:nil mainField4:nil alignment:alignment]; } -- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment { - return [self initWithMainField1:mainField1 mainField2:mainField2 mainField3:mainField3 mainField4:mainField4 alignment:alignment statusBar:nil mediaClock:nil mediaTrack:nil graphic:nil softButtons:nil customPresets:nil]; +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField1Type:(SDLMetadataType *)mainField1Type mainField2:(NSString *)mainField2 mainField2Type:(SDLMetadataType *)mainField2Type alignment:(SDLTextAlignment *)alignment { + self = [self init]; + if (!self) { + return nil; + } + + NSArray<SDLMetadataType *> *field1Array = @[mainField1Type]; + NSArray<SDLMetadataType *> *field2Array = @[mainField2Type]; + SDLMetadataTags* fieldsStruct = [[SDLMetadataTags alloc] initWithTextFieldTypes:field1Array mainField2:field2Array]; + + self.mainField1 = mainField1; + self.mainField2 = mainField2; + self.alignment = alignment; + self.metadataTags = fieldsStruct; + + return self; } - (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack { - return [self initWithMainField1:mainField1 mainField2:mainField2 mainField3:nil mainField4:nil alignment:alignment statusBar:statusBar mediaClock:mediaClock mediaTrack:mediaTrack graphic:nil softButtons:nil customPresets:nil]; + return [self initWithMainField1:mainField1 mainField2:mainField2 mainField3:nil mainField4:nil alignment:alignment statusBar:statusBar mediaClock:mediaClock mediaTrack:mediaTrack graphic:nil softButtons:nil customPresets:nil textFieldMetadata:nil]; +} + +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment { + return [self initWithMainField1:mainField1 mainField2:mainField2 mainField3:mainField3 mainField4:mainField4 alignment:alignment statusBar:nil mediaClock:nil mediaTrack:nil graphic:nil softButtons:nil customPresets:nil textFieldMetadata:nil]; +} + +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField1Type:(SDLMetadataType *)mainField1Type mainField2:(NSString *)mainField2 mainField2Type:(SDLMetadataType *)mainField2Type mainField3:(NSString *)mainField3 mainField3Type:(SDLMetadataType *)mainField3Type mainField4:(NSString *)mainField4 mainField4Type:(SDLMetadataType *)mainField4Type alignment:(SDLTextAlignment *)alignment{ + self = [self init]; + if (!self) { + return nil; + } + + NSArray<SDLMetadataType *> *field1Array = @[mainField1Type]; + NSArray<SDLMetadataType *> *field2Array = @[mainField2Type]; + NSArray<SDLMetadataType *> *field3Array = @[mainField3Type]; + NSArray<SDLMetadataType *> *field4Array = @[mainField4Type]; + SDLMetadataTags* fieldsStruct = [[SDLMetadataTags alloc] initWithTextFieldTypes:field1Array mainField2:field2Array mainField3:field3Array mainField4:field4Array]; + + self.mainField1 = mainField1; + self.mainField2 = mainField2; + self.mainField3 = mainField3; + self.mainField4 = mainField4; + self.alignment = alignment; + self.metadataTags = fieldsStruct; + + return self; } - (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack graphic:(SDLImage *)graphic softButtons:(NSArray<SDLSoftButton *> *)softButtons customPresets:(NSArray<NSString *> *)customPresets { @@ -57,6 +98,29 @@ return self; } +- (instancetype)initWithMainField1:(NSString *)mainField1 mainField2:(NSString *)mainField2 mainField3:(NSString *)mainField3 mainField4:(NSString *)mainField4 alignment:(SDLTextAlignment *)alignment statusBar:(NSString *)statusBar mediaClock:(NSString *)mediaClock mediaTrack:(NSString *)mediaTrack graphic:(SDLImage *)graphic softButtons:(NSArray<SDLSoftButton *> *)softButtons customPresets:(NSArray<NSString *> *)customPresets textFieldMetadata:(SDLMetadataTags *)metadata { + self = [self init]; + if (!self) { + return nil; + } + + self.mainField1 = mainField1; + self.mainField2 = mainField2; + self.mainField3 = mainField3; + self.mainField4 = mainField4; + self.statusBar = statusBar; + self.mediaClock = mediaClock; + self.mediaTrack = mediaTrack; + self.alignment = alignment; + self.graphic = graphic; + self.softButtons = [softButtons mutableCopy]; + self.customPresets = [customPresets mutableCopy]; + self.metadataTags = metadata; + + return self; + +} + - (void)setMainField1:(NSString *)mainField1 { if (mainField1 != nil) { [parameters setObject:mainField1 forKey:NAMES_mainField1]; @@ -227,4 +291,21 @@ return [parameters objectForKey:NAMES_customPresets]; } +- (void)setMetadataTags:(SDLMetadataTags *)metadataTags { + if (metadataTags != nil) { + [parameters setObject:metadataTags forKey:NAMES_metadataTags]; + } else { + [parameters removeObjectForKey:NAMES_metadataTags]; + } +} + +- (SDLMetadataTags *)metadataTags { + NSObject *obj = [parameters objectForKey:NAMES_metadataTags]; + if (obj == nil || [obj isKindOfClass:SDLMetadataTags.class]) { + return (SDLMetadataTags *)obj; + } else { + return [[SDLMetadataTags alloc] initWithDictionary:(NSMutableDictionary *)obj]; + } +} + @end diff --git a/SmartDeviceLink/SmartDeviceLink.h b/SmartDeviceLink/SmartDeviceLink.h index 2db383189..6a5240b85 100644 --- a/SmartDeviceLink/SmartDeviceLink.h +++ b/SmartDeviceLink/SmartDeviceLink.h @@ -199,6 +199,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[]; #import "SDLLocationCoordinate.h" #import "SDLLocationDetails.h" #import "SDLMenuParams.h" +#import "SDLMetadataTags.h" #import "SDLMyKey.h" #import "SDLNavigationCapability.h" #import "SDLParameterPermissions.h" @@ -264,6 +265,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[]; #import "SDLLockScreenStatus.h" #import "SDLMaintenanceModeStatus.h" #import "SDLMediaClockFormat.h" +#import "SDLMetadataType.h" #import "SDLPRNDL.h" #import "SDLPermissionStatus.h" #import "SDLPowerModeQualificationStatus.h" diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMetadataTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMetadataTypeSpec.m new file mode 100644 index 000000000..5eea451e1 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMetadataTypeSpec.m @@ -0,0 +1,90 @@ +// +// SDLTextFieldTypeSpec.m +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import <Quick/Quick.h> +#import <Nimble/Nimble.h> + +#import "SDLMetadataType.h" + +QuickSpecBegin(SDLMetadataTypeSpec) + +describe(@"Individual Enum Value Tests", ^ { + it(@"Should match internal values", ^ { + expect([SDLMetadataType MEDIA_TITLE].value).to(equal(@"mediaTitle")); + expect([SDLMetadataType MEDIA_ARTIST].value).to(equal(@"mediaArtist")); + expect([SDLMetadataType MEDIA_ALBUM].value).to(equal(@"mediaAlbum")); + expect([SDLMetadataType MEDIA_YEAR].value).to(equal(@"mediaYear")); + expect([SDLMetadataType MEDIA_GENRE].value).to(equal(@"mediaGenre")); + expect([SDLMetadataType MEDIA_STATION].value).to(equal(@"mediaStation")); + expect([SDLMetadataType RATING].value).to(equal(@"rating")); + expect([SDLMetadataType CURRENT_TEMPERATURE].value).to(equal(@"currentTemperature")); + expect([SDLMetadataType MAXIMUM_TEMPERATURE].value).to(equal(@"maximumTemperature")); + expect([SDLMetadataType MINIMUM_TEMPERATURE].value).to(equal(@"minimumTemperature")); + expect([SDLMetadataType WEATHER_TERM].value).to(equal(@"weatherTerm")); + expect([SDLMetadataType HUMIDITY].value).to(equal(@"humidity")); + expect([SDLMetadataType NONE].value).to(equal(@"none")); + }); +}); +describe(@"ValueOf Tests", ^ { + it(@"Should return correct values when valid", ^ { + expect([SDLMetadataType valueOf:@"mediaTitle"]).to(equal([SDLMetadataType MEDIA_TITLE])); + expect([SDLMetadataType valueOf:@"mediaArtist"]).to(equal([SDLMetadataType MEDIA_ARTIST])); + expect([SDLMetadataType valueOf:@"mediaAlbum"]).to(equal([SDLMetadataType MEDIA_ALBUM])); + expect([SDLMetadataType valueOf:@"mediaYear"]).to(equal([SDLMetadataType MEDIA_YEAR])); + expect([SDLMetadataType valueOf:@"mediaGenre"]).to(equal([SDLMetadataType MEDIA_GENRE])); + expect([SDLMetadataType valueOf:@"mediaStation"]).to(equal([SDLMetadataType MEDIA_STATION])); + expect([SDLMetadataType valueOf:@"rating"]).to(equal([SDLMetadataType RATING])); + expect([SDLMetadataType valueOf:@"currentTemperature"]).to(equal([SDLMetadataType CURRENT_TEMPERATURE])); + expect([SDLMetadataType valueOf:@"maximumTemperature"]).to(equal([SDLMetadataType MAXIMUM_TEMPERATURE])); + expect([SDLMetadataType valueOf:@"minimumTemperature"]).to(equal([SDLMetadataType MINIMUM_TEMPERATURE])); + expect([SDLMetadataType valueOf:@"weatherTerm"]).to(equal([SDLMetadataType WEATHER_TERM])); + expect([SDLMetadataType valueOf:@"humidity"]).to(equal([SDLMetadataType HUMIDITY])); + expect([SDLMetadataType valueOf:@"none"]).to(equal([SDLMetadataType NONE])); + }); + + it(@"Should return nil when invalid", ^ { + expect([SDLMetadataType valueOf:nil]).to(beNil()); + expect([SDLMetadataType valueOf:@"JKUYTFHYTHJGFRFGYTR"]).to(beNil()); + }); +}); + +describe(@"Value List Tests", ^ { + NSArray* storedValues = [SDLMetadataType values]; + __block NSArray* definedValues; + beforeSuite(^ { + definedValues = [@[[SDLMetadataType MEDIA_TITLE], + [SDLMetadataType MEDIA_ARTIST], + [SDLMetadataType MEDIA_ALBUM], + [SDLMetadataType MEDIA_YEAR], + [SDLMetadataType MEDIA_GENRE], + [SDLMetadataType MEDIA_STATION], + [SDLMetadataType RATING], + [SDLMetadataType CURRENT_TEMPERATURE], + [SDLMetadataType MAXIMUM_TEMPERATURE], + [SDLMetadataType MINIMUM_TEMPERATURE], + [SDLMetadataType WEATHER_TERM], + [SDLMetadataType HUMIDITY], + [SDLMetadataType NONE]] copy]; + }); + + it(@"Should contain all defined enum values", ^ { + for (int i = 0; i < definedValues.count; i++) { + expect(storedValues).to(contain(definedValues[i])); + } + }); + + it(@"Should contain only defined enum values", ^ { + for (int i = 0; i < storedValues.count; i++) { + expect(definedValues).to(contain(storedValues[i])); + } + }); +}); + +QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m index 3058872e6..8d0896240 100644 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m @@ -9,18 +9,22 @@ #import <Nimble/Nimble.h> #import "SDLImage.h" +#import "SDLMetadataTags.h" +#import "SDLMetadataType.h" #import "SDLNames.h" #import "SDLShow.h" #import "SDLSoftButton.h" #import "SDLTextAlignment.h" - QuickSpecBegin(SDLShowSpec) SDLImage* image1 = [[SDLImage alloc] init]; SDLImage* image2 = [[SDLImage alloc] init]; SDLSoftButton* button = [[SDLSoftButton alloc] init]; +NSArray<SDLMetadataType *> *formatArray = @[[SDLMetadataType MEDIA_ARTIST], [SDLMetadataType MEDIA_TITLE]]; +SDLMetadataTags* testMetadata = [[SDLMetadataTags alloc] initWithTextFieldTypes:formatArray mainField2:formatArray mainField3:formatArray mainField4:formatArray]; + describe(@"Getter/Setter Tests", ^ { it(@"Should set and get correctly", ^ { SDLShow* testRequest = [[SDLShow alloc] init]; @@ -37,6 +41,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.secondaryGraphic = image2; testRequest.softButtons = [@[button] mutableCopy]; testRequest.customPresets = [@[@"preset1", @"preset2"] mutableCopy]; + testRequest.metadataTags = testMetadata; expect(testRequest.mainField1).to(equal(@"field1")); expect(testRequest.mainField2).to(equal(@"field2")); @@ -50,6 +55,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testRequest.secondaryGraphic).to(equal(image2)); expect(testRequest.softButtons).to(equal([@[button] mutableCopy])); expect(testRequest.customPresets).to(equal([@[@"preset1", @"preset2"] mutableCopy])); + expect(testRequest.metadataTags).to(equal(testMetadata)); }); it(@"Should get correctly when initialized", ^ { @@ -66,7 +72,8 @@ describe(@"Getter/Setter Tests", ^ { NAMES_graphic:image1, NAMES_secondaryGraphic:image2, NAMES_softButtons:[@[button] mutableCopy], - NAMES_customPresets:[@[@"preset1", @"preset2"] mutableCopy]}, + NAMES_customPresets:[@[@"preset1", @"preset2"] mutableCopy], + NAMES_metadataTags: testMetadata}, NAMES_operation_name:NAMES_Show}} mutableCopy]; SDLShow* testRequest = [[SDLShow alloc] initWithDictionary:dict]; @@ -82,6 +89,25 @@ describe(@"Getter/Setter Tests", ^ { expect(testRequest.secondaryGraphic).to(equal(image2)); expect(testRequest.softButtons).to(equal([@[button] mutableCopy])); expect(testRequest.customPresets).to(equal([@[@"preset1", @"preset2"] mutableCopy])); + expect(testRequest.metadataTags).to(equal(testMetadata)); + }); + + it(@"Should get correctly when initialized without a dictionary", ^ { + + SDLShow* testRequest = [[SDLShow alloc] initWithMainField1:@"field1" mainField2:@"field2" mainField3:@"field3" mainField4:@"field4" alignment:[SDLTextAlignment LEFT_ALIGNED] statusBar:@"status" mediaClock:@"TheTime" mediaTrack:@"In The Clear" graphic:image1 softButtons:[@[button] mutableCopy] customPresets:[@[@"preset1", @"preset2"] mutableCopy] textFieldMetadata:testMetadata]; + + expect(testRequest.mainField1).to(equal(@"field1")); + expect(testRequest.mainField2).to(equal(@"field2")); + expect(testRequest.mainField3).to(equal(@"field3")); + expect(testRequest.mainField4).to(equal(@"field4")); + expect(testRequest.alignment).to(equal([SDLTextAlignment LEFT_ALIGNED])); + expect(testRequest.statusBar).to(equal(@"status")); + expect(testRequest.mediaClock).to(equal(@"TheTime")); + expect(testRequest.mediaTrack).to(equal(@"In The Clear")); + expect(testRequest.graphic).to(equal(image1)); + expect(testRequest.softButtons).to(equal([@[button] mutableCopy])); + expect(testRequest.customPresets).to(equal([@[@"preset1", @"preset2"] mutableCopy])); + expect(testRequest.metadataTags).to(equal(testMetadata)); }); it(@"Should return nil if not set", ^ { @@ -99,7 +125,8 @@ describe(@"Getter/Setter Tests", ^ { expect(testRequest.secondaryGraphic).to(beNil()); expect(testRequest.softButtons).to(beNil()); expect(testRequest.customPresets).to(beNil()); + expect(testRequest.metadataTags).to(beNil()); }); }); -QuickSpecEnd
\ No newline at end of file +QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMetadataTagsSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMetadataTagsSpec.m new file mode 100644 index 000000000..aa1b10ac3 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMetadataTagsSpec.m @@ -0,0 +1,56 @@ +// +// SDLMetadataTagsSpec.m +// SmartDeviceLink-iOS +// +// Created by Brett McIsaac on 8/1/17. +// Copyright © 2017 smartdevicelink. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import <Quick/Quick.h> +#import <Nimble/Nimble.h> + +#import "SDLNames.h" +#import "SDLMetadataTags.h" +#import "SDLMetadataType.h" + +QuickSpecBegin(SDLMetadataTagsSpec) + +describe(@"Initialization tests", ^{ + it(@"Should get correctly when initialized with a dictionary", ^ { + NSArray<SDLMetadataType *> *formatArray = @[[SDLMetadataType MEDIA_ARTIST], [SDLMetadataType MEDIA_TITLE]]; + NSMutableDictionary* dict = [@{NAMES_mainField1: formatArray, + NAMES_mainField2: formatArray, + NAMES_mainField3: formatArray, + NAMES_mainField4: formatArray} mutableCopy]; + + SDLMetadataTags* testStruct = [[SDLMetadataTags alloc] initWithDictionary:dict]; + + expect(testStruct.mainField1).to(equal(formatArray)); + expect(testStruct.mainField2).to(equal(formatArray)); + expect(testStruct.mainField3).to(equal(formatArray)); + expect(testStruct.mainField4).to(equal(formatArray)); + }); + + it(@"Should return nil if not set", ^ { + SDLMetadataTags* testStruct = [[SDLMetadataTags alloc] init]; + + expect(testStruct.mainField1).to(beNil()); + expect(testStruct.mainField2).to(beNil()); + expect(testStruct.mainField3).to(beNil()); + expect(testStruct.mainField4).to(beNil()); + }); + + it(@"Should get correctly when initialized with Arrays", ^ { + NSArray<SDLMetadataType *> *formatArray = @[[SDLMetadataType MEDIA_ARTIST], [SDLMetadataType MEDIA_TITLE]]; + SDLMetadataTags* testStruct = [[SDLMetadataTags alloc] initWithTextFieldTypes:formatArray mainField2:formatArray mainField3:formatArray mainField4:formatArray]; + + expect(testStruct.mainField1).to(equal(formatArray)); + expect(testStruct.mainField2).to(equal(formatArray)); + expect(testStruct.mainField3).to(equal(formatArray)); + expect(testStruct.mainField4).to(equal(formatArray)); + }); +}); + +QuickSpecEnd |