diff --git a/SmartDeviceLink/public/SDLSystemCapabilityManager.m b/SmartDeviceLink/public/SDLSystemCapabilityManager.m index 916787fbe..1b2255d26 100644 --- a/SmartDeviceLink/public/SDLSystemCapabilityManager.m +++ b/SmartDeviceLink/public/SDLSystemCapabilityManager.m @@ -200,8 +200,17 @@ - (nullable SDLWindowCapability *)defaultMainWindowCapability { return @[displayCapability]; } + // HAX: Issue #1999, Ford Sync bug returning incorrect template name for "NON-MEDIA" (https://github.com/smartdevicelink/sdl_ios/issues/1999). + NSMutableArray *mutableTemplatesAvailable = [self.displayCapabilities.templatesAvailable mutableCopy]; + for (NSUInteger i = 0; i < mutableTemplatesAvailable.count; i++) { + if ([mutableTemplatesAvailable[i] isEqualToString:@"NON_MEDIA"]) { + mutableTemplatesAvailable[i] = @"NON-MEDIA"; + break; + } + } + // Copy all available display capability properties - defaultWindowCapability.templatesAvailable = [self.displayCapabilities.templatesAvailable copy]; + defaultWindowCapability.templatesAvailable = [mutableTemplatesAvailable copy]; defaultWindowCapability.numCustomPresetsAvailable = [self.displayCapabilities.numCustomPresetsAvailable copy]; defaultWindowCapability.textFields = [self.displayCapabilities.textFields copy]; defaultWindowCapability.imageFields = [self.displayCapabilities.imageFields copy]; diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m index 29e99ddda..681e074b5 100644 --- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m +++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m @@ -135,6 +135,9 @@ @interface SDLSystemCapabilityManager () defaultWindowCapability.imageTypeSupported = @[SDLImageTypeStatic]; displayCapability.windowCapabilities = @[defaultWindowCapability]; testDisplayCapabilityList = @[displayCapability]; + + testDisplayCapabilities2 = [testDisplayCapabilities copy]; + testDisplayCapabilities2.templatesAvailable = @[@"DEFAULT", @"MEDIA", @"NON_MEDIA"]; }); afterEach(^{ @@ -502,6 +505,62 @@ @interface SDLSystemCapabilityManager () }); }); + describe(@"when notified of a SetDisplayLayout Response with NON_MEDIA in templates", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + __block SDLSetDisplayLayoutResponse *testSetDisplayLayoutResponse = nil; +#pragma clang diagnostic pop + + beforeEach(^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + testSetDisplayLayoutResponse = [[SDLSetDisplayLayoutResponse alloc] init]; +#pragma clang diagnostic pop + testSetDisplayLayoutResponse.displayCapabilities = testDisplayCapabilities2; + testSetDisplayLayoutResponse.buttonCapabilities = testButtonCapabilities; + testSetDisplayLayoutResponse.softButtonCapabilities = testSoftButtonCapabilities; + testSetDisplayLayoutResponse.presetBankCapabilities = testPresetBankCapabilities; + }); + + describe(@"if the SetDisplayLayout request succeeds", ^{ + beforeEach(^{ + testSetDisplayLayoutResponse.success = @YES; + SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveSetDisplayLayoutResponse object:self rpcResponse:testSetDisplayLayoutResponse]; + [[NSNotificationCenter defaultCenter] postNotification:notification]; + }); + + it(@"should should save the capabilities", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" + expect(testSystemCapabilityManager.displayCapabilities).to(equal(testDisplayCapabilities2)); + expect(testSystemCapabilityManager.softButtonCapabilities).to(equal(testSoftButtonCapabilities)); + expect(testSystemCapabilityManager.buttonCapabilities).to(equal(testButtonCapabilities)); + expect(testSystemCapabilityManager.presetBankCapabilities).to(equal(testPresetBankCapabilities)); +#pragma clang diagnostic pop + + expect(testSystemCapabilityManager.hmiCapabilities).to(beNil()); + expect(testSystemCapabilityManager.hmiZoneCapabilities).to(beNil()); + expect(testSystemCapabilityManager.speechCapabilities).to(beNil()); + expect(testSystemCapabilityManager.prerecordedSpeechCapabilities).to(beNil()); + expect(testSystemCapabilityManager.vrCapability).to(beFalse()); + expect(testSystemCapabilityManager.audioPassThruCapabilities).to(beNil()); + expect(testSystemCapabilityManager.pcmStreamCapability).to(beNil()); + expect(testSystemCapabilityManager.phoneCapability).to(beNil()); + expect(testSystemCapabilityManager.navigationCapability).to(beNil()); + expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil()); + expect(testSystemCapabilityManager.remoteControlCapability).to(beNil()); + expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil()); + }); + + describe(@"if templatesAvailable has NON_MEDIA", ^{ + it(@"should be changed to include NON-MEDIA and not NON_MEDIA", ^{ + expect(testSystemCapabilityManager.defaultMainWindowCapability.templatesAvailable).to(equal(@[@"DEFAULT", @"MEDIA", @"NON-MEDIA"])); + expect(testSystemCapabilityManager.defaultMainWindowCapability.templatesAvailable).notTo(contain(@"NON_MEDIA")); + }); + }); + }); + }); + // when notified of a SetDisplayLayout Response context(@"when notified of a SetDisplayLayout Response", ^ { #pragma clang diagnostic push