Skip to content

Commit

Permalink
Merge pull request #2000 from smartdevicelink/bugfix/issue-1999-sdlpr…
Browse files Browse the repository at this point in the history
…edefinedlayoutnonmedia-not-found-in-templatesavailable

Fix SDLPredefinedLayoutNonMedia not found in templatesAvailable
  • Loading branch information
joeljfischer authored Jun 4, 2021
2 parents ecf53ba + e92d29c commit 81786b6
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 1 deletion.
11 changes: 10 additions & 1 deletion SmartDeviceLink/public/SDLSystemCapabilityManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -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<NSString *> *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];
Expand Down
59 changes: 59 additions & 0 deletions SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ @interface SDLSystemCapabilityManager ()
defaultWindowCapability.imageTypeSupported = @[SDLImageTypeStatic];
displayCapability.windowCapabilities = @[defaultWindowCapability];
testDisplayCapabilityList = @[displayCapability];

testDisplayCapabilities2 = [testDisplayCapabilities copy];
testDisplayCapabilities2.templatesAvailable = @[@"DEFAULT", @"MEDIA", @"NON_MEDIA"];
});

afterEach(^{
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 81786b6

Please sign in to comment.