summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRomanReznichenkoLuxoft <85177915+RomanReznichenkoLuxoft@users.noreply.github.com>2022-01-11 20:57:59 +0200
committerGitHub <noreply@github.com>2022-01-11 13:57:59 -0500
commit47c10a0fff783b485264593a689f355912823835 (patch)
tree4dd8328e4e99578ca4139237328a8a8e795988fe /src
parentfaa56860daf9b7f4f2916b256beea2b13ca1c0c7 (diff)
downloadsdl_core-47c10a0fff783b485264593a689f355912823835.tar.gz
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 <jacob.keeler@livioradio.com> Co-authored-by: Jacob Keeler <jacob.keeler@livioradio.com>
Diffstat (limited to 'src')
-rwxr-xr-xsrc/appMain/hmi_capabilities.json5
-rw-r--r--src/components/application_manager/include/application_manager/hmi_capabilities_impl.h6
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/ui_get_capabilities_response.cc2
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc51
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc1.json5
-rw-r--r--src/components/application_manager/test/hmi_capabilities_sc2.json5
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc57
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h5
-rw-r--r--src/components/include/application_manager/hmi_capabilities.h13
9 files changed, 139 insertions, 10 deletions
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<smart_objects::SmartObject>(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<uint8_t> 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<uint8_t> 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<uint8_t> 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<uint8_t> 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<uint8_t> 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<uint8_t> 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
@@ -253,6 +253,19 @@ class HMICapabilities {
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
*/