From 47c10a0fff783b485264593a689f355912823835 Mon Sep 17 00:00:00 2001 From: RomanReznichenkoLuxoft <85177915+RomanReznichenkoLuxoft@users.noreply.github.com> Date: Tue, 11 Jan 2022 20:57:59 +0200 Subject: fix/sdl_did_not_read_correctly_value_of_hmicapabilities_from_hmicapabilitiescachefile (#3820) * sdl_read_value_navigation_and_phonecall_from_hmicapabilities_and_did_not_from_systemcapabilities * Update src/appMain/hmi_capabilities.json Co-authored-by: Jacob Keeler Co-authored-by: Jacob Keeler --- src/appMain/hmi_capabilities.json | 5 ++ .../application_manager/hmi_capabilities_impl.h | 6 +++ .../commands/hmi/ui_get_capabilities_response.cc | 2 + .../src/hmi_capabilities_impl.cc | 51 +++++++++++++++---- .../test/hmi_capabilities_sc1.json | 5 ++ .../test/hmi_capabilities_sc2.json | 5 ++ .../test/hmi_capabilities_test.cc | 57 +++++++++++++++++++++- .../application_manager/mock_hmi_capabilities.h | 5 ++ .../include/application_manager/hmi_capabilities.h | 13 +++++ 9 files changed, 139 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/appMain/hmi_capabilities.json b/src/appMain/hmi_capabilities.json index e5ee4f00b6..a0df3d9731 100755 --- a/src/appMain/hmi_capabilities.json +++ b/src/appMain/hmi_capabilities.json @@ -322,6 +322,11 @@ "audioType": "PCM" }, "hmiZoneCapabilities": "FRONT", + "hmiCapabilities":{ + "navigation":true, + "phoneCall":true, + "videoStreaming":true + }, "softButtonCapabilities": [{ "shortPressAvailable": true, "longPressAvailable": true, diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h index 9a22b2a4aa..ee424aecc4 100644 --- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h +++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h @@ -135,6 +135,11 @@ class HMICapabilitiesImpl : public HMICapabilities { void set_hmi_zone_capabilities( const smart_objects::SmartObject& hmi_zone_capabilities) OVERRIDE; + const smart_objects::SmartObjectSPtr ui_hmi_capabilities() const OVERRIDE; + + void set_ui_hmi_capabilities( + const smart_objects::SmartObject& ui_hmi_capabilities) OVERRIDE; + const smart_objects::SmartObjectSPtr soft_button_capabilities() const OVERRIDE; @@ -463,6 +468,7 @@ class HMICapabilitiesImpl : public HMICapabilities { smart_objects::SmartObjectSPtr display_capabilities_; smart_objects::SmartObjectSPtr system_display_capabilities_; smart_objects::SmartObjectSPtr hmi_zone_capabilities_; + smart_objects::SmartObjectSPtr ui_hmi_capabilities_; smart_objects::SmartObjectSPtr soft_buttons_capabilities_; smart_objects::SmartObjectSPtr button_capabilities_; smart_objects::SmartObjectSPtr preset_bank_capabilities_; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc index 128f41e01f..73e00f0f09 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc @@ -104,6 +104,8 @@ void UIGetCapabilitiesResponse::Run() { } if (msg_params.keyExists(strings::hmi_capabilities)) { + hmi_capabilities_.set_ui_hmi_capabilities( + msg_params[strings::hmi_capabilities]); if (msg_params[strings::hmi_capabilities].keyExists(strings::navigation)) { sections_to_update.push_back(strings::navigation); hmi_capabilities_.set_navigation_supported( diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc index a8001eba91..a1a85a7a44 100644 --- a/src/components/application_manager/src/hmi_capabilities_impl.cc +++ b/src/components/application_manager/src/hmi_capabilities_impl.cc @@ -97,6 +97,7 @@ HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr) , vr_supported_languages_(NULL) , display_capabilities_(NULL) , hmi_zone_capabilities_(NULL) + , ui_hmi_capabilities_(NULL) , soft_buttons_capabilities_(NULL) , button_capabilities_(NULL) , preset_bank_capabilities_(NULL) @@ -281,6 +282,14 @@ void HMICapabilitiesImpl::set_hmi_zone_capabilities( hmi_zone_capabilities_.swap(new_value); } +void HMICapabilitiesImpl::set_ui_hmi_capabilities( + const smart_objects::SmartObject& ui_hmi_capabilities) { + auto new_value = + std::make_shared(ui_hmi_capabilities); + sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_); + ui_hmi_capabilities_.swap(new_value); +} + void HMICapabilitiesImpl::set_soft_button_capabilities( const smart_objects::SmartObject& soft_button_capabilities) { auto new_value = @@ -491,6 +500,12 @@ HMICapabilitiesImpl::hmi_zone_capabilities() const { return hmi_zone_capabilities_; } +const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::ui_hmi_capabilities() + const { + sync_primitives::AutoReadLock lock(hmi_capabilities_lock_); + return ui_hmi_capabilities_; +} + const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::soft_button_capabilities() const { sync_primitives::AutoReadLock lock(hmi_capabilities_lock_); @@ -1017,6 +1032,33 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() { set_soft_button_capabilities(soft_button_capabilities_so); } + auto ui_hmi_capabilities_node = + json_ui_getter.GetCachedJsonMember(strings::hmi_capabilities); + + if (!ui_hmi_capabilities_node.isNull()) { + smart_objects::SmartObject ui_hmi_capabilities_so; + formatters::CFormatterJsonBase::jsonValueToObj(ui_hmi_capabilities_node, + ui_hmi_capabilities_so); + set_ui_hmi_capabilities(ui_hmi_capabilities_so); + + if (JsonIsMemberSafe(ui_hmi_capabilities_node, strings::navigation)) { + Json::Value navigation = + ui_hmi_capabilities_node.get(strings::navigation, ""); + set_navigation_supported(navigation.asBool()); + } + if (JsonIsMemberSafe(ui_hmi_capabilities_node, strings::phone_call)) { + Json::Value phoneCall = + ui_hmi_capabilities_node.get(strings::phone_call, ""); + set_phone_call_supported(phoneCall.asBool()); + } + if (JsonIsMemberSafe(ui_hmi_capabilities_node, + strings::video_streaming)) { + Json::Value video_streaming = + ui_hmi_capabilities_node.get(strings::video_streaming, ""); + set_video_streaming_supported(video_streaming.asBool()); + } + } + auto ui_system_capabilities_node = json_ui_getter.GetJsonMember(strings::system_capabilities, hmi_apis::FunctionID::UI_GetCapabilities, @@ -1030,9 +1072,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() { formatters::CFormatterJsonBase::jsonValueToObj( navigation_capability, navigation_capability_so); set_navigation_capability(navigation_capability_so); - if (!navigation_capability_so.empty()) { - set_navigation_supported(true); - } } if (JsonIsMemberSafe(ui_system_capabilities_node, strings::phone_capability)) { @@ -1042,9 +1081,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() { formatters::CFormatterJsonBase::jsonValueToObj(phone_capability, phone_capability_so); set_phone_capability(phone_capability_so); - if (!phone_capability_so.empty()) { - set_phone_call_supported(true); - } } if (JsonIsMemberSafe(ui_system_capabilities_node, strings::video_streaming_capability)) { @@ -1090,9 +1126,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() { vs_capability_so[strings::supported_formats] = converted_array; } set_video_streaming_capability(vs_capability_so); - if (!vs_capability_so.empty()) { - set_video_streaming_supported(true); - } } if (JsonIsMemberSafe(ui_system_capabilities_node, diff --git a/src/components/application_manager/test/hmi_capabilities_sc1.json b/src/components/application_manager/test/hmi_capabilities_sc1.json index 3731f8eb78..4f17f031f0 100644 --- a/src/components/application_manager/test/hmi_capabilities_sc1.json +++ b/src/components/application_manager/test/hmi_capabilities_sc1.json @@ -1,5 +1,10 @@ { "UI": { + "hmiCapabilities":{ + "navigation":false, + "phoneCall":true, + "videoStreaming":false + }, "systemCapabilities": { "phoneCapability": { "dialNumberEnabled": true diff --git a/src/components/application_manager/test/hmi_capabilities_sc2.json b/src/components/application_manager/test/hmi_capabilities_sc2.json index 318fcf7a3e..0105a63ff6 100644 --- a/src/components/application_manager/test/hmi_capabilities_sc2.json +++ b/src/components/application_manager/test/hmi_capabilities_sc2.json @@ -1,5 +1,10 @@ { "UI": { + "hmiCapabilities":{ + "navigation":true, + "phoneCall":false, + "videoStreaming":false + }, "language": "EN_US", "languages": [ "EN_US", diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc index 2127f46b69..2ebcb386d4 100644 --- a/src/components/application_manager/test/hmi_capabilities_test.cc +++ b/src/components/application_manager/test/hmi_capabilities_test.cc @@ -504,6 +504,15 @@ TEST_F(HMICapabilitiesTest, TEST_F( HMICapabilitiesTest, LoadCapabilitiesFromFile_CheckNavigationCapabilities_SuccessLoadAndConvert) { + const std::string content_to_save = + "{\"UI\": {\"hmiCapabilities\": {\"navigation\":true}}}"; + + CreateFile(kHmiCapabilitiesCacheFile); + + const std::vector binary_data_to_save(content_to_save.begin(), + content_to_save.end()); + file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save); + hmi_capabilities_->Init(last_state_wrapper_); const auto navigation_capability_so = *(hmi_capabilities_->navigation_capability()); @@ -524,13 +533,42 @@ TEST_F(HMICapabilitiesTest, EXPECT_TRUE(phone_capability_so.keyExists("dialNumberEnabled")); EXPECT_TRUE(phone_capability_so["dialNumberEnabled"].asBool()); +} + +TEST_F(HMICapabilitiesTest, + LoadCapabilitiesFromFile_CheckHMICapabilities_SuccessLoadAndConvert) { + const std::string content_to_save = + "{\"UI\": {\"hmiCapabilities\": " + "{\"navigation\":true,\"phoneCall\":true,\"videoStreaming\":true}}}"; + + CreateFile(kHmiCapabilitiesCacheFile); + + const std::vector binary_data_to_save(content_to_save.begin(), + content_to_save.end()); + file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save); + hmi_capabilities_->Init(last_state_wrapper_); + + const auto ui_hmi_capability_so = *(hmi_capabilities_->ui_hmi_capabilities()); + EXPECT_TRUE(ui_hmi_capability_so.keyExists("navigation")); + EXPECT_TRUE(ui_hmi_capability_so.keyExists("phoneCall")); + EXPECT_TRUE(ui_hmi_capability_so.keyExists("videoStreaming")); EXPECT_TRUE(hmi_capabilities_->phone_call_supported()); + EXPECT_TRUE(hmi_capabilities_->navigation_supported()); + EXPECT_TRUE(hmi_capabilities_->video_streaming_supported()); } TEST_F( HMICapabilitiesTest, LoadCapabilitiesFromFile_CheckVideoStreamingCapability_SuccessLoadAndConvert) { + const std::string content_to_save = + "{\"UI\": {\"hmiCapabilities\": {\"videoStreaming\":true}}}"; + + CreateFile(kHmiCapabilitiesCacheFile); + + const std::vector binary_data_to_save(content_to_save.begin(), + content_to_save.end()); + file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save); hmi_capabilities_->Init(last_state_wrapper_); const auto vs_capability_so = *(hmi_capabilities_->video_streaming_capability()); @@ -836,7 +874,15 @@ TEST_F(HMICapabilitiesTest, const std::string hmi_capabilities_file = "hmi_capabilities_sc1.json"; ON_CALL(mock_application_manager_settings_, hmi_capabilities_file_name()) .WillByDefault(ReturnRef(hmi_capabilities_file)); + const std::string content_to_save = + "{\"UI\": {\"hmiCapabilities\": " + "{\"navigation\":false,\"phoneCall\":true,\"videoStreaming\":false}}}"; + + CreateFile(kHmiCapabilitiesCacheFile); + const std::vector binary_data_to_save(content_to_save.begin(), + content_to_save.end()); + file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save); hmi_capabilities_->Init(last_state_wrapper_); // Check system capabilities; only phone capability is available @@ -857,6 +903,15 @@ TEST_F(HMICapabilitiesTest, const std::string hmi_capabilities_file = "hmi_capabilities_sc2.json"; ON_CALL(mock_application_manager_settings_, hmi_capabilities_file_name()) .WillByDefault(ReturnRef(hmi_capabilities_file)); + const std::string content_to_save = + "{\"UI\": {\"hmiCapabilities\": " + "{\"navigation\":true,\"phoneCall\":false,\"videoStreaming\":false}}}"; + + CreateFile(kHmiCapabilitiesCacheFile); + + const std::vector binary_data_to_save(content_to_save.begin(), + content_to_save.end()); + file_system::Write(kHmiCapabilitiesCacheFile, binary_data_to_save); hmi_capabilities_->Init(last_state_wrapper_); @@ -1219,7 +1274,7 @@ TEST_F(HMICapabilitiesTest, "\"EN-US\",\"languages\":[],\"displayCapabilities\" : " "{},\"audioPassThruCapabilities\":[],\"pcmStreamCapabilities\" : " "{},\"hmiZoneCapabilities\": \"\",\"softButtonCapabilities\" : " - "[],\"systemCapabilities\" : {}}}"; + "[],\"systemCapabilities\" : {},\"hmiCapabilities\" : {}}}"; const std::vector binary_data_to_save( predefined_ui_capabilities.begin(), predefined_ui_capabilities.end()); diff --git a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h index f0da952d18..3a0bdc0741 100644 --- a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h +++ b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h @@ -114,6 +114,11 @@ class MockHMICapabilities : public ::application_manager::HMICapabilities { MOCK_METHOD1(set_hmi_zone_capabilities, void(const smart_objects::SmartObject& hmi_zone_capabilities)); + MOCK_CONST_METHOD0(ui_hmi_capabilities, + const smart_objects::SmartObjectSPtr()); + MOCK_METHOD1(set_ui_hmi_capabilities, + void(const smart_objects::SmartObject& ui_hmi_capabilities)); + MOCK_CONST_METHOD0(soft_button_capabilities, const smart_objects::SmartObjectSPtr()); MOCK_METHOD1( diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h index 93cb09737d..16bc1b8a2c 100644 --- a/src/components/include/application_manager/hmi_capabilities.h +++ b/src/components/include/application_manager/hmi_capabilities.h @@ -252,6 +252,19 @@ class HMICapabilities { virtual void set_hmi_zone_capabilities( const smart_objects::SmartObject& hmi_zone_capabilities) = 0; + /** + * @brief Retrieves information about the HMI capabilities + * @return Currently supported UI HMI capabilities + */ + virtual const smart_objects::SmartObjectSPtr ui_hmi_capabilities() const = 0; + + /** + * @brief Sets supported HMI capabilities + * @param ui_hmi_capabilities supported HMI capabilities + */ + virtual void set_ui_hmi_capabilities( + const smart_objects::SmartObject& ui_hmi_capabilities) = 0; + /** * @brief Retrieves information about the SoftButton's capabilities * @return Currently supported SoftButton's capabilities -- cgit v1.2.1