summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2022-09-13 09:22:24 -0400
committerGitHub <noreply@github.com>2022-09-13 09:22:24 -0400
commit9aec1f6391d109faabbfe335f3bf90e5a5e00ac1 (patch)
treeba427050cc2052cea81d0075eff73b0fef519e2f
parentea380bae0a35b03e982d55d7e986fa6a1dcc831d (diff)
parent9c06a6bdd9bb9cc74952d41e1f2b35bba8f9f6d2 (diff)
downloadsdl_ios-9aec1f6391d109faabbfe335f3bf90e5a5e00ac1.tar.gz
Merge pull request #2106 from smartdevicelink/bugfix/issue-2105-screen-params-nil
Fix SystemCapabilityManager windowID, screenParams nil, and mediaClockFormats empty when updating DisplayCapability
-rw-r--r--SmartDeviceLink/public/SDLSystemCapabilityManager.m5
-rw-r--r--SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m27
2 files changed, 27 insertions, 5 deletions
diff --git a/SmartDeviceLink/public/SDLSystemCapabilityManager.m b/SmartDeviceLink/public/SDLSystemCapabilityManager.m
index 849f8f2e8..4b1cf804b 100644
--- a/SmartDeviceLink/public/SDLSystemCapabilityManager.m
+++ b/SmartDeviceLink/public/SDLSystemCapabilityManager.m
@@ -157,6 +157,8 @@ typedef NSString * SDLServiceID;
NSUInteger currentWindowID = windowCapability.windowID != nil ? windowCapability.windowID.unsignedIntegerValue : SDLPredefinedWindowsDefaultWindow;
if (currentWindowID != windowID) { continue; }
+ // A nil windowID is assumed to be the DefaultWindow according to the spec, but that can be hard for developers to check, so set it explicitly.
+ windowCapability.windowID = @(currentWindowID);
return windowCapability;
}
@@ -255,8 +257,9 @@ typedef NSString * SDLServiceID;
convertedCapabilities.imageFields = [defaultMainWindowCapabilities.imageFields copy];
convertedCapabilities.templatesAvailable = [defaultMainWindowCapabilities.templatesAvailable copy];
convertedCapabilities.numCustomPresetsAvailable = [defaultMainWindowCapabilities.numCustomPresetsAvailable copy];
- convertedCapabilities.mediaClockFormats = @[]; // mandatory field but allows empty array
+ convertedCapabilities.mediaClockFormats = self.displayCapabilities.mediaClockFormats ?: @[];
convertedCapabilities.graphicSupported = @([defaultMainWindowCapabilities.imageTypeSupported containsObject:SDLImageTypeDynamic]);
+ convertedCapabilities.screenParams = self.displayCapabilities.screenParams;
self.displayCapabilities = convertedCapabilities;
self.buttonCapabilities = defaultMainWindowCapabilities.buttonCapabilities;
diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
index 613030611..5343c4397 100644
--- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
@@ -95,9 +95,16 @@ describe(@"a system capability manager", ^{
imageField.imageTypeSupported = @[SDLFileTypePNG];
imageField.imageResolution = [[SDLImageResolution alloc] initWithWidth:42 height:4711];
testDisplayCapabilities.imageFields = @[imageField];
- testDisplayCapabilities.mediaClockFormats = @[];
+ testDisplayCapabilities.mediaClockFormats = @[SDLMediaClockFormatClock1, SDLMediaClockFormatClock2];
testDisplayCapabilities.templatesAvailable = @[@"DEFAULT", @"MEDIA"];
testDisplayCapabilities.numCustomPresetsAvailable = @(8);
+ SDLScreenParams *screenParams = [[SDLScreenParams alloc] init];
+ [screenParams setResolution:[[SDLImageResolution alloc] initWithWidth:675 height:960]];
+ [screenParams setTouchEventAvailable:[[SDLTouchEventCapabilities alloc] init]];
+ [screenParams.touchEventAvailable setPressAvailable:@YES];
+ [screenParams.touchEventAvailable setMultiTouchAvailable:@YES];
+ [screenParams.touchEventAvailable setDoublePressAvailable:@YES];
+ testDisplayCapabilities.screenParams = screenParams;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -702,18 +709,28 @@ describe(@"a system capability manager", ^{
expect(testSystemCapabilityManager.defaultMainWindowCapability.textFields).to(haveCount(38));
expect(testSystemCapabilityManager.defaultMainWindowCapability.imageFields).to(haveCount(18));
});
+
+ it(@"should set the default window id if window id is missing", ^{
+ // Set window id to nil. windowID can be potentially nil in real applications
+ testSystemCapabilityManager.displays[0].windowCapabilities[0].windowID = nil;
+
+ expect(testSystemCapabilityManager.defaultMainWindowCapability.windowID).to(equal(SDLPredefinedWindowsDefaultWindow));
+ expect([testSystemCapabilityManager windowCapabilityWithWindowID:0].windowID).to(equal(SDLPredefinedWindowsDefaultWindow));
+ });
});
});
// when updating display capabilities with OnSystemCapabilityUpdated
describe(@"when updating display capabilities with OnSystemCapabilityUpdated", ^{
it(@"should properly update display capability including conversion two times", ^{
+ // Set to display capabilities that have screenParams and mediaClockFormats set
+ testSystemCapabilityManager.displayCapabilities = testDisplayCapabilities;
// two times because capabilities are just saved in first run but merged/updated in subsequent runs
for (int i = 0; i < 2; i++) {
testDisplayCapabilities.displayName = [NSString stringWithFormat:@"Display %i", i];
testDisplayCapabilities.graphicSupported = i == 0 ? @(NO) : @(YES);
testDisplayCapabilities.templatesAvailable = @[[NSString stringWithFormat:@"Template %i", i]];
-
+
SDLWindowTypeCapabilities *windowTypeCapabilities = [[SDLWindowTypeCapabilities alloc] initWithType:SDLWindowTypeMain maximumNumberOfWindows:1];
SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:testDisplayCapabilities.displayName];
displayCapability.windowTypeSupported = @[windowTypeCapabilities];
@@ -728,16 +745,18 @@ describe(@"a system capability manager", ^{
defaultWindowCapability.imageTypeSupported = testDisplayCapabilities.graphicSupported.boolValue ? @[SDLImageTypeStatic, SDLImageTypeDynamic] : @[SDLImageTypeStatic];
displayCapability.windowCapabilities = @[defaultWindowCapability];
NSArray<SDLDisplayCapability *> *newDisplayCapabilityList = testDisplayCapabilityList = @[displayCapability];
-
+
SDLSystemCapability *newCapability = [[SDLSystemCapability alloc] initWithDisplayCapabilities:newDisplayCapabilityList];
SDLOnSystemCapabilityUpdated *testUpdateNotification = [[SDLOnSystemCapabilityUpdated alloc] initWithSystemCapability:newCapability];
SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemCapabilityUpdatedNotification object:nil rpcNotification:testUpdateNotification];
[[NSNotificationCenter defaultCenter] postNotification:notification];
-
+
expect(testSystemCapabilityManager.displays).to(equal(testDisplayCapabilityList));
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
expect(testSystemCapabilityManager.displayCapabilities).to(equal(testDisplayCapabilities));
+ expect(testSystemCapabilityManager.displayCapabilities.screenParams).to(equal(testDisplayCapabilities.screenParams));
+ expect(testSystemCapabilityManager.displayCapabilities.mediaClockFormats).to(equal(testDisplayCapabilities.mediaClockFormats));
expect(testSystemCapabilityManager.buttonCapabilities).to(equal(testButtonCapabilities));
expect(testSystemCapabilityManager.softButtonCapabilities).to(equal(testSoftButtonCapabilities));
expect(testSystemCapabilityManager.presetBankCapabilities).to(beNil());