diff options
author | Joel Fischer <joeljfischer@gmail.com> | 2022-09-13 09:22:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-13 09:22:24 -0400 |
commit | 9aec1f6391d109faabbfe335f3bf90e5a5e00ac1 (patch) | |
tree | ba427050cc2052cea81d0075eff73b0fef519e2f | |
parent | ea380bae0a35b03e982d55d7e986fa6a1dcc831d (diff) | |
parent | 9c06a6bdd9bb9cc74952d41e1f2b35bba8f9f6d2 (diff) | |
download | sdl_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.m | 5 | ||||
-rw-r--r-- | SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m | 27 |
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()); |