diff options
-rw-r--r-- | src/components/application_manager/src/application_data_impl.cc | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/components/application_manager/src/application_data_impl.cc b/src/components/application_manager/src/application_data_impl.cc index 9f30c00014..25fc60f3d9 100644 --- a/src/components/application_manager/src/application_data_impl.cc +++ b/src/components/application_manager/src/application_data_impl.cc @@ -568,28 +568,35 @@ void DynamicApplicationDataImpl::set_display_capabilities( display_capabilities_.reset( new smart_objects::SmartObject(display_capabilities)); - auto has_window_id = [&tmp_window_capabilities](const WindowID window_id) { + auto get_window_index = [&tmp_window_capabilities](const WindowID window_id) { const auto tmp_window_capabilities_arr = tmp_window_capabilities.asArray(); if (!tmp_window_capabilities_arr) { - return false; + return -1; } + int index = 0; for (auto element : *tmp_window_capabilities_arr) { if (element.keyExists(strings::window_id)) { if (window_id == element[strings::window_id].asInt()) - return true; + return index; } else if (window_id == 0) { - return true; + return index; } + index++; } - - return false; + return -1; }; for (uint32_t i = 0; i < incoming_window_capabilities.length(); ++i) { - const auto window_id = - incoming_window_capabilities[i][strings::window_id].asInt(); - if (!has_window_id(window_id)) { + int64_t window_id = 0; + if (incoming_window_capabilities[i].keyExists(strings::window_id)) { + window_id = incoming_window_capabilities[i][strings::window_id].asInt(); + } + int found_index = get_window_index(window_id); + if (0 <= found_index) { + // Update the existing window capability + tmp_window_capabilities[found_index] = incoming_window_capabilities[i]; + } else { tmp_window_capabilities[tmp_window_capabilities.length()] = incoming_window_capabilities[i]; } |