diff options
author | ChrisB-Elektrobit <chris.boguslawski@elektrobit.com> | 2017-08-08 15:51:37 -0400 |
---|---|---|
committer | ChrisB-Elektrobit <chris.boguslawski@elektrobit.com> | 2017-08-08 15:51:37 -0400 |
commit | 54e2ef2aef655e842d99b4d0026392e29f5e6f72 (patch) | |
tree | dda25a2cb437ef53fcc5944e4b112b1d4f86c509 | |
parent | a2d33105ac96a1fea9fa755188fef40e311fc411 (diff) | |
download | sdl_core-54e2ef2aef655e842d99b4d0026392e29f5e6f72.tar.gz |
- added new ShowRequest::HandleMetadata function for the Show RPC to
handle mapping metadata values from incoming mobile protocol to
outgoing HMI protocol
- hooked HandleMetadata() into ShowRequest::run() for the four
mainFields
- added new metadata json string entries to smart_object_keys.h/.cc
4 files changed, 65 insertions, 0 deletions
diff --git a/src/components/application_manager/include/application_manager/commands/mobile/show_request.h b/src/components/application_manager/include/application_manager/commands/mobile/show_request.h index cbe2ca396a..7e07be1c9a 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/show_request.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/show_request.h @@ -78,6 +78,14 @@ class ShowRequest : public CommandRequestImpl { */ bool CheckStringsOfShowRequest(); + /** + * @brief Handle the conversion of metadata information from the incoming + * mobile json message format to the outgoing hmi json message format + */ + void HandleMetadata(const char* field_id, + int32_t field_index, + smart_objects::SmartObject& msg_params); + DISALLOW_COPY_AND_ASSIGN(ShowRequest); }; diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h index 9b8acd0675..88a904764b 100644 --- a/src/components/application_manager/include/application_manager/smart_object_keys.h +++ b/src/components/application_manager/include/application_manager/smart_object_keys.h @@ -90,6 +90,7 @@ extern const char* main_field_1; extern const char* main_field_2; extern const char* main_field_3; extern const char* main_field_4; +extern const char* text_field_metadata; extern const char* eta; extern const char* time_to_destination; extern const char* total_distance; @@ -388,6 +389,7 @@ namespace hmi_request { extern const char* parent_id; extern const char* field_name; extern const char* field_text; +extern const char* field_types; extern const char* alert_strings; extern const char* duration; extern const char* soft_buttons; diff --git a/src/components/application_manager/src/commands/mobile/show_request.cc b/src/components/application_manager/src/commands/mobile/show_request.cc index cf2509cdb9..53c6ece67c 100644 --- a/src/components/application_manager/src/commands/mobile/show_request.cc +++ b/src/components/application_manager/src/commands/mobile/show_request.cc @@ -49,6 +49,41 @@ ShowRequest::ShowRequest(const MessageSharedPtr& message, ShowRequest::~ShowRequest() {} +void ShowRequest::HandleMetadata(const char* field_id, + int32_t field_index, + smart_objects::SmartObject& msg_params) { + smart_objects::SmartObject& metadata_struct = + (*message_)[strings::msg_params][strings::text_field_metadata]; + + if (metadata_struct.keyExists(field_id)) { + LOG4CXX_INFO(logger_, "field " << field_id << " exists."); + + if (field_index != -1) { + LOG4CXX_INFO(logger_, "have a field index of " << field_index); + msg_params[hmi_request::show_strings][field_index] + [hmi_request::field_types] = + smart_objects::SmartObject(smart_objects::SmartType_Array); + + const size_t num_tags = metadata_struct[field_id].length(); + LOG4CXX_INFO(logger_, "num_tags = " << num_tags); + + for (size_t i = 0; i < num_tags; ++i) { + const int32_t current_tag = metadata_struct[field_id][i].asInt(); + msg_params[hmi_request::show_strings][field_index] + [hmi_request::field_types][i] = current_tag; + LOG4CXX_INFO(logger_, "tag " << i << ": " << current_tag); + } + } else { + LOG4CXX_INFO(logger_, + "tag provided with no item for " << field_id + << ", ignore with warning"); + // tag provided with no item, ignore with warning + } + } else { + LOG4CXX_INFO(logger_, "field " << field_id << " does not exist."); + } +} + void ShowRequest::Run() { LOG4CXX_AUTO_TRACE(logger_); @@ -125,38 +160,56 @@ void ShowRequest::Run() { smart_objects::SmartObject(smart_objects::SmartType_Array); int32_t index = 0; + int32_t main_field_1_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_1)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField1); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_1]; + main_field_1_index = index; ++index; } + int32_t main_field_2_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_2)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField2); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_2]; + main_field_2_index = index; ++index; } + int32_t main_field_3_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_3)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField3); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_3]; + main_field_3_index = index; ++index; } + int32_t main_field_4_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_4)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField4); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_4]; + main_field_4_index = index; ++index; } + if ((*message_)[strings::msg_params].keyExists( + strings::text_field_metadata)) { + LOG4CXX_INFO(logger_, "TextFieldMetadata exists."); + + HandleMetadata(strings::main_field_1, main_field_1_index, msg_params); + HandleMetadata(strings::main_field_2, main_field_2_index, msg_params); + HandleMetadata(strings::main_field_3, main_field_3_index, msg_params); + HandleMetadata(strings::main_field_4, main_field_4_index, msg_params); + } + if ((*message_)[strings::msg_params].keyExists(strings::media_clock)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mediaClock); diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc index 7f8fd5d00f..cafb7f7388 100644 --- a/src/components/application_manager/src/smart_object_keys.cc +++ b/src/components/application_manager/src/smart_object_keys.cc @@ -57,6 +57,7 @@ const char* main_field_1 = "mainField1"; const char* main_field_2 = "mainField2"; const char* main_field_3 = "mainField3"; const char* main_field_4 = "mainField4"; +const char* text_field_metadata = "textFieldMetadata"; const char* eta = "eta"; const char* time_to_destination = "timeToDestination"; const char* total_distance = "totalDistance"; @@ -349,6 +350,7 @@ namespace hmi_request { const char* parent_id = "parentID"; const char* field_name = "fieldName"; const char* field_text = "fieldText"; +const char* field_types = "fieldTypes"; const char* alert_strings = "alertStrings"; const char* duration = "duration"; const char* soft_buttons = "softButtons"; |