summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2017-08-18 09:57:23 -0400
committerJoel Fischer <joeljfischer@gmail.com>2017-08-18 09:57:23 -0400
commit43af4f5a5ea8ea793df57afb293fe2177cb9a6a1 (patch)
tree3188e4adcec6b8e1ef38ae8f04879e71e4bf8863
parent235e718d16609040dcd937f51abb4ce63ca90cd5 (diff)
parent4fd91c7ac2ba08780111584cf8e6dbb4725b1adf (diff)
downloadsdl_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.podspec2
-rw-r--r--SmartDeviceLink-iOS.xcodeproj/project.pbxproj28
-rw-r--r--SmartDeviceLink.podspec2
-rw-r--r--SmartDeviceLink/SDLMetadataTags.h71
-rw-r--r--SmartDeviceLink/SDLMetadataTags.m145
-rw-r--r--SmartDeviceLink/SDLMetadataType.h126
-rw-r--r--SmartDeviceLink/SDLMetadataType.m149
-rw-r--r--SmartDeviceLink/SDLNames.h1
-rw-r--r--SmartDeviceLink/SDLShow.h23
-rw-r--r--SmartDeviceLink/SDLShow.m87
-rw-r--r--SmartDeviceLink/SmartDeviceLink.h2
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMetadataTypeSpec.m90
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m33
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMetadataTagsSpec.m56
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