diff options
Diffstat (limited to 'src/components/application_manager/src/commands/mobile/perform_interaction_request.cc')
-rw-r--r-- | src/components/application_manager/src/commands/mobile/perform_interaction_request.cc | 152 |
1 files changed, 78 insertions, 74 deletions
diff --git a/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc b/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc index 141cb44a09..4c0fe88f46 100644 --- a/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc +++ b/src/components/application_manager/src/commands/mobile/perform_interaction_request.cc @@ -34,15 +34,18 @@ #include <string.h> #include <string> #include "application_manager/commands/mobile/perform_interaction_request.h" -#include "application_manager/application_manager_impl.h" + #include "application_manager/application_impl.h" #include "application_manager/message_helper.h" -#include "config_profile/profile.h" + #include "interfaces/MOBILE_API.h" #include "interfaces/HMI_API.h" #include "utils/file_system.h" #include "utils/helpers.h" #include "utils/custom_string.h" +#include "utils/gen_hash.h" + + namespace application_manager { @@ -53,22 +56,23 @@ namespace custom_str = utils::custom_string; uint32_t PerformInteractionRequest::pi_requests_count_ = 0; PerformInteractionRequest::PerformInteractionRequest( - const MessageSharedPtr& message) - : CommandRequestImpl(message), - interaction_mode_(mobile_apis::InteractionMode::INVALID_ENUM), - ui_response_recived_(false), - vr_response_recived_(false), - ui_result_(false), - vr_result_(false), - app_pi_was_active_before_(false), - vr_resultCode_(mobile_apis::Result::INVALID_ENUM), - ui_resultCode_(mobile_apis::Result::INVALID_ENUM) { + const MessageSharedPtr& message, ApplicationManager& application_manager) +: CommandRequestImpl(message, application_manager), + interaction_mode_(mobile_apis::InteractionMode::INVALID_ENUM), + ui_response_recived_(false), + vr_response_recived_(false), + ui_result_(false), + vr_result_(false), + app_pi_was_active_before_(false), + vr_resultCode_(mobile_apis::Result::INVALID_ENUM), + ui_resultCode_(mobile_apis::Result::INVALID_ENUM) { subscribe_on_event(hmi_apis::FunctionID::UI_OnResetTimeout); subscribe_on_event(hmi_apis::FunctionID::VR_OnCommand); subscribe_on_event(hmi_apis::FunctionID::Buttons_OnButtonPress); } -PerformInteractionRequest::~PerformInteractionRequest() {} +PerformInteractionRequest::~PerformInteractionRequest() { +} bool PerformInteractionRequest::Init() { /* Timeout in milliseconds. @@ -92,7 +96,7 @@ void PerformInteractionRequest::Run() { LOG4CXX_AUTO_TRACE(logger_); ApplicationSharedPtr app = - ApplicationManagerImpl::instance()->application(connection_key()); + application_manager_.application(connection_key()); if (!app) { LOG4CXX_ERROR(logger_, "Application is not registered"); @@ -116,9 +120,8 @@ void PerformInteractionRequest::Run() { if ((mobile_apis::InteractionMode::VR_ONLY == interaction_mode_) && (mobile_apis::LayoutMode::KEYBOARD == interaction_layout)) { - LOG4CXX_ERROR(logger_, - "PerformInteraction contains InteractionMode" - "=VR_ONLY and interactionLayout=KEYBOARD"); + LOG4CXX_ERROR(logger_, "PerformInteraction contains InteractionMode" + "=VR_ONLY and interactionLayout=KEYBOARD"); SendResponse(false, mobile_apis::Result::INVALID_DATA); return; } @@ -129,17 +132,15 @@ void PerformInteractionRequest::Run() { if (0 == choice_set_id_list_length) { if (mobile_apis::LayoutMode::KEYBOARD == interaction_layout) { if (mobile_apis::InteractionMode::BOTH == interaction_mode_) { - LOG4CXX_ERROR(logger_, - "interactionChoiceSetIDList is empty," - " InteractionMode=BOTH and" - " interactionLayout=KEYBOARD"); + LOG4CXX_ERROR(logger_,"interactionChoiceSetIDList is empty," + " InteractionMode=BOTH and" + " interactionLayout=KEYBOARD"); SendResponse(false, mobile_apis::Result::INVALID_DATA); return; } } else { - LOG4CXX_ERROR(logger_, - "interactionChoiceSetIDList is empty" - " and interactionLayout!=KEYBOARD"); + LOG4CXX_ERROR(logger_,"interactionChoiceSetIDList is empty" + " and interactionLayout!=KEYBOARD"); SendResponse(false, mobile_apis::Result::INVALID_DATA); return; } @@ -157,11 +158,10 @@ void PerformInteractionRequest::Run() { } if (msg_params.keyExists(strings::vr_help)) { - if (mobile_apis::Result::SUCCESS != - MessageHelper::VerifyImageVrHelpItems(msg_params[strings::vr_help], - app)) { - LOG4CXX_ERROR(logger_, - "Verification of " << strings::vr_help << " failed."); + if (mobile_apis::Result::SUCCESS != MessageHelper::VerifyImageVrHelpItems( + msg_params[strings::vr_help], app, application_manager_)) { + LOG4CXX_ERROR(logger_, "Verification of " << strings::vr_help + << " failed."); SendResponse(false, mobile_apis::Result::INVALID_DATA); return; } @@ -177,7 +177,8 @@ void PerformInteractionRequest::Run() { switch (interaction_mode_) { case mobile_apis::InteractionMode::BOTH: { LOG4CXX_DEBUG(logger_, "Interaction Mode: BOTH"); - if (!CheckChoiceSetVRSynonyms(app) || !CheckChoiceSetMenuNames(app) || + if (!CheckChoiceSetVRSynonyms(app) || + !CheckChoiceSetMenuNames(app) || !CheckVrHelpItemPositions(app)) { return; } @@ -185,7 +186,8 @@ void PerformInteractionRequest::Run() { } case mobile_apis::InteractionMode::MANUAL_ONLY: { LOG4CXX_DEBUG(logger_, "Interaction Mode: MANUAL_ONLY"); - if (!CheckChoiceSetVRSynonyms(app) || !CheckChoiceSetMenuNames(app) || + if (!CheckChoiceSetVRSynonyms(app) || + !CheckChoiceSetMenuNames(app) || !CheckVrHelpItemPositions(app)) { return; } @@ -193,7 +195,8 @@ void PerformInteractionRequest::Run() { } case mobile_apis::InteractionMode::VR_ONLY: { LOG4CXX_DEBUG(logger_, "Interaction Mode: VR_ONLY"); - if (!CheckChoiceSetVRSynonyms(app) || !CheckVrHelpItemPositions(app)) { + if (!CheckChoiceSetVRSynonyms(app) || + !CheckVrHelpItemPositions(app)) { return; } break; @@ -221,8 +224,8 @@ void PerformInteractionRequest::on_event(const event_engine::Event& event) { switch (event.id()) { case hmi_apis::FunctionID::UI_OnResetTimeout: { LOG4CXX_DEBUG(logger_, "Received UI_OnResetTimeout event"); - ApplicationManagerImpl::instance()->updateRequestTimeout( - connection_key(), correlation_id(), default_timeout()); + application_manager_.updateRequestTimeout( + connection_key(), correlation_id(), default_timeout()); break; } case hmi_apis::FunctionID::UI_PerformInteraction: { @@ -266,14 +269,14 @@ void PerformInteractionRequest::onTimeOut() { DisablePerformInteraction(); CommandRequestImpl::onTimeOut(); } else { - ApplicationManagerImpl::instance()->updateRequestTimeout( - connection_key(), correlation_id(), default_timeout()); + application_manager_.updateRequestTimeout( + connection_key(), correlation_id(), default_timeout()); } break; } case mobile_apis::InteractionMode::VR_ONLY: { - ApplicationManagerImpl::instance()->updateRequestTimeout( - connection_key(), correlation_id(), default_timeout()); + application_manager_.updateRequestTimeout( + connection_key(), correlation_id(), default_timeout()); break; } case mobile_apis::InteractionMode::MANUAL_ONLY: { @@ -289,6 +292,7 @@ void PerformInteractionRequest::onTimeOut() { }; } + void PerformInteractionRequest::ProcessVRResponse( const smart_objects::SmartObject& message, smart_objects::SmartObject& msg_params) { @@ -299,7 +303,7 @@ void PerformInteractionRequest::ProcessVRResponse( using namespace helpers; ApplicationSharedPtr app = - ApplicationManagerImpl::instance()->application(connection_key()); + application_manager_.application(connection_key()); if (!app) { LOG4CXX_ERROR(logger_, "NULL pointer"); @@ -324,16 +328,17 @@ void PerformInteractionRequest::ProcessVRResponse( return; } LOG4CXX_DEBUG(logger_, "Update timeout for UI"); - ApplicationManagerImpl::instance()->updateRequestTimeout( - connection_key(), correlation_id(), default_timeout()); + application_manager_. + updateRequestTimeout(connection_key(), + correlation_id(), + default_timeout()); return; } if (SUCCESS == vr_resultCode_ && InteractionMode::MANUAL_ONLY == interaction_mode_) { - LOG4CXX_DEBUG(logger_, - "VR response SUCCESS in MANUAL_ONLY mode " - << "Wait for UI response"); + LOG4CXX_DEBUG(logger_, "VR response SUCCESS in MANUAL_ONLY mode " << + "Wait for UI response"); // in case MANUAL_ONLY mode VR.PI SUCCESS just return return; } @@ -344,8 +349,7 @@ void PerformInteractionRequest::ProcessVRResponse( if (!CheckChoiceIDFromResponse(app, choise_id)) { LOG4CXX_ERROR(logger_, "Wrong choiceID was received from HMI"); TerminatePerformInteraction(); - SendResponse( - false, GENERIC_ERROR, "Wrong choiceID was received from HMI"); + SendResponse(false, GENERIC_ERROR,"Wrong choiceID was received from HMI"); return; } msg_params[strings::choice_id] = choise_id; @@ -372,7 +376,7 @@ void PerformInteractionRequest::ProcessPerformInteractionResponse( using namespace smart_objects; ApplicationSharedPtr app = - ApplicationManagerImpl::instance()->application(connection_key()); + application_manager_.application(connection_key()); if (!app) { LOG4CXX_ERROR(logger_, "NULL pointer"); return; @@ -430,6 +434,8 @@ void PerformInteractionRequest::ProcessPerformInteractionResponse( } } + DisablePerformInteraction(); + const SmartObject* response_params = msg_params.empty() ? NULL @@ -521,8 +527,8 @@ void PerformInteractionRequest::SendUIPerformInteractionRequest( (*message_)[strings::msg_params][hmi_request::interaction_layout] .asInt(); } - SendHMIRequest( - hmi_apis::FunctionID::UI_PerformInteraction, &msg_params, true); + SendHMIRequest(hmi_apis::FunctionID::UI_PerformInteraction, + &msg_params, true); } void PerformInteractionRequest::SendVRPerformInteractionRequest( @@ -533,7 +539,7 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( smart_objects::SmartObject(smart_objects::SmartType_Map); smart_objects::SmartObject& choice_list = - (*message_)[strings::msg_params][strings::interaction_choice_set_id_list]; + (*message_)[strings::msg_params][strings::interaction_choice_set_id_list]; if (mobile_apis::InteractionMode::MANUAL_ONLY != interaction_mode_) { msg_params[strings::grammar_id] = @@ -547,7 +553,7 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( LOG4CXX_WARN(logger_, "Couldn't found choiset"); continue; } - msg_params[strings::grammar_id][grammar_id_index++] = + msg_params[strings::grammar_id][grammar_id_index++]= (*choice_set)[strings::grammar_id].asUInt(); } } @@ -577,7 +583,7 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( // construct prompt and append delimiter to each item item[strings::type] = hmi_apis::Common_SpeechCapabilities::SC_TEXT; item[strings::text] = vr_commands[0].asString() + - profile::Profile::instance()->tts_delimiter(); + application_manager_.get_settings().tts_delimiter(); msg_params[strings::help_prompt][index++] = item; } } @@ -589,7 +595,7 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( if ((*message_)[strings::msg_params].keyExists(strings::timeout_prompt)) { msg_params[strings::timeout_prompt] = - (*message_)[strings::msg_params][strings::timeout_prompt]; + (*message_)[strings::msg_params][strings::timeout_prompt]; } else { if (msg_params.keyExists(strings::help_prompt)) { msg_params[strings::timeout_prompt] = msg_params[strings::help_prompt]; @@ -597,8 +603,8 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( } if ((*message_)[strings::msg_params].keyExists(strings::initial_prompt)) { - msg_params[strings::initial_prompt] = - (*message_)[strings::msg_params][strings::initial_prompt]; + msg_params[strings::initial_prompt] = + (*message_)[strings::msg_params][strings::initial_prompt]; } mobile_apis::InteractionMode::eType mode = @@ -612,8 +618,8 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest( msg_params[strings::timeout] = default_timeout_; } msg_params[strings::app_id] = app->app_id(); - SendHMIRequest( - hmi_apis::FunctionID::VR_PerformInteraction, &msg_params, true); + SendHMIRequest(hmi_apis::FunctionID::VR_PerformInteraction, &msg_params, + true); } bool PerformInteractionRequest::CheckChoiceSetMenuNames( @@ -625,12 +631,12 @@ bool PerformInteractionRequest::CheckChoiceSetMenuNames( for (size_t i = 0; i < choice_list.length(); ++i) { // choice_set contains SmartObject msg_params - smart_objects::SmartObject* i_choice_set = - app->FindChoiceSet(choice_list[i].asInt()); + smart_objects::SmartObject* i_choice_set = app->FindChoiceSet( + choice_list[i].asInt()); for (size_t j = 0; j < choice_list.length(); ++j) { - smart_objects::SmartObject* j_choice_set = - app->FindChoiceSet(choice_list[j].asInt()); + smart_objects::SmartObject* j_choice_set = app->FindChoiceSet( + choice_list[j].asInt()); if (i == j) { // skip check the same element @@ -656,8 +662,7 @@ bool PerformInteractionRequest::CheckChoiceSetMenuNames( if (ii_menu_name == jj_menu_name) { LOG4CXX_ERROR(logger_, "Choice set has duplicated menu name"); - SendResponse(false, - mobile_apis::Result::DUPLICATE_NAME, + SendResponse(false, mobile_apis::Result::DUPLICATE_NAME, "Choice set has duplicated menu name"); return false; } @@ -672,6 +677,7 @@ bool PerformInteractionRequest::CheckChoiceSetMenuNames( bool PerformInteractionRequest::CheckChoiceSetVRSynonyms( application_manager::ApplicationSharedPtr const app) { LOG4CXX_AUTO_TRACE(logger_); + std::set<uint32_t> vr_command_set; smart_objects::SmartObject& choice_list = (*message_)[strings::msg_params][strings::interaction_choice_set_id_list]; @@ -726,7 +732,6 @@ bool PerformInteractionRequest::CheckChoiceSetVRSynonyms( } } } - return true; } @@ -746,8 +751,7 @@ bool PerformInteractionRequest::CheckVrHelpItemPositions( for (size_t i = 0; i < vr_help.length(); ++i) { if (position != vr_help[i][strings::position].asInt()) { LOG4CXX_ERROR(logger_, "Non-sequential vrHelp item position"); - SendResponse(false, - mobile_apis::Result::REJECTED, + SendResponse(false, mobile_apis::Result::REJECTED, "Non-sequential vrHelp item position"); return false; } @@ -759,8 +763,7 @@ bool PerformInteractionRequest::CheckVrHelpItemPositions( void PerformInteractionRequest::DisablePerformInteraction() { LOG4CXX_AUTO_TRACE(logger_); - ApplicationSharedPtr app = - ApplicationManagerImpl::instance()->application(connection_key()); + ApplicationSharedPtr app = application_manager_.application(connection_key()); if (!app) { LOG4CXX_ERROR(logger_, "NULL pointer"); return; @@ -787,6 +790,7 @@ bool PerformInteractionRequest::IsWhiteSpaceExist() { return true; } + if ((*message_)[strings::msg_params].keyExists(strings::initial_prompt)) { const smart_objects::SmartArray* ip_array = (*message_)[strings::msg_params][strings::initial_prompt].asArray(); @@ -865,8 +869,8 @@ bool PerformInteractionRequest::IsWhiteSpaceExist() { void PerformInteractionRequest::TerminatePerformInteraction() { LOG4CXX_AUTO_TRACE(logger_); - smart_objects::SmartObject msg_params = - smart_objects::SmartObject(smart_objects::SmartType_Map); + smart_objects::SmartObject msg_params = smart_objects::SmartObject( + smart_objects::SmartType_Map); msg_params[hmi_request::method_name] = "UI.PerformInteraction"; SendHMIRequest(hmi_apis::FunctionID::UI_ClosePopUp, &msg_params); DisablePerformInteraction(); @@ -885,8 +889,8 @@ bool PerformInteractionRequest::CheckChoiceIDFromResponse( const PerformChoice& choice = choice_set_map_it->second; PerformChoice::const_iterator it = choice.begin(); for (; choice.end() != it; ++it) { - const smart_objects::SmartObject& choice_set = - (*it->second).getElement(strings::choice_set); + const smart_objects::SmartObject& choice_set = (*it->second).getElement( + strings::choice_set); for (size_t j = 0; j < choice_set.length(); ++j) { if (choice_id == choice_set.getElement(j).getElement(strings::choice_id).asInt()) { @@ -976,10 +980,10 @@ void PerformInteractionRequest::SendBothModeResponse( result = false; } - const bool is_error_code = (SUCCESS != perform_interaction_result_code || + const bool is_success_code = (SUCCESS != perform_interaction_result_code || WARNINGS != perform_interaction_result_code); - if (vr_resultCode_ == ui_resultCode_ && is_error_code) { + if (vr_resultCode_ == ui_resultCode_ && is_success_code) { result = false; } |