From: Andrey Oleynik Date: Thu, 3 Apr 2014 15:29:18 +0000 (+0300) Subject: APPLINK-6565. Implementation of GetUserFriendlyMessage request/response. X-Git-Tag: 3.5~131 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6f11a76080ef069bf5bc1f5d46ba3f91274a867;p=profile%2Fivi%2Fsmartdevicelink.git APPLINK-6565. Implementation of GetUserFriendlyMessage request/response. Signed-off-by: Justin Dickow Conflicts: src/components/policy --- diff --git a/src/components/application_manager/include/application_manager/commands/hmi/sdl_get_user_friendly_message_request.h b/src/components/application_manager/include/application_manager/commands/hmi/sdl_get_user_friendly_message_request.h index b729a16..6fdd6e9 100644 --- a/src/components/application_manager/include/application_manager/commands/hmi/sdl_get_user_friendly_message_request.h +++ b/src/components/application_manager/include/application_manager/commands/hmi/sdl_get_user_friendly_message_request.h @@ -62,6 +62,8 @@ class SDLGetUserFriendlyMessageRequest : public RequestFromHMI { virtual void Run(); private: + std::string CommonLanguageToString( + hmi_apis::Common_Language::eType language); DISALLOW_COPY_AND_ASSIGN(SDLGetUserFriendlyMessageRequest); }; diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h index da1f995..ee01287 100644 --- a/src/components/application_manager/include/application_manager/message_helper.h +++ b/src/components/application_manager/include/application_manager/message_helper.h @@ -245,6 +245,15 @@ class MessageHelper { */ static void SendOnSDLConsentNeeded(const policy::DeviceParams& device_info); + /** + * @brief Send GetUserFriendlyMessage response to HMI + * @param msg Appopriate messages params + * @param correlation_id Correlation id of request + */ + static void SendGetUserFriendlyMessageResponse( + const std::vector& msg, + uint32_t correlation_id); + /* * @brief Sends notification to HMI to start video streaming * diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h index d112c87..eb9d866 100644 --- a/src/components/application_manager/include/application_manager/policies/policy_handler.h +++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h @@ -111,21 +111,6 @@ class PolicyHandler : public utils::Singleton, uint32_t application_id = 0); /** - * @brief Process application permission, which was set by user - * @param List of user-defined permissions for application - */ - void OnAllowAppResponse(PermissionsList& list_of_permissions); - - /** - * @brief Process application permission, which was set by user - * @param List of user-defined permissions for application - * @param Unique application id, if omitted - allow/disallow all - * applications - */ - void OnAllowAppNotification(PermissionsList& list_of_permissions, - uint32_t appication_id = 0); - - /** * @brief Increment counter for ignition cycles */ void OnIgnitionCycleOver(); @@ -154,6 +139,17 @@ class PolicyHandler : public utils::Singleton, */ void OnAppPermissionConsent(const PermissionConsent& permissions); + /** + * @brief Get appropriate message parameters and send them with response + * to HMI + * @param message_codes RPC message codes + * @param language Language + * @param correlation_id correlation id of request + */ + void OnGetUserFriendlyMessage(const std::vector& message_codes, + const std::string& language, + uint32_t correlation_id); + protected: /** * Starts next retry exchange policy table diff --git a/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_request.cc b/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_request.cc index 41f2470..b38d446 100644 --- a/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_request.cc +++ b/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_request.cc @@ -31,12 +31,15 @@ */ #include "application_manager/commands/hmi/sdl_get_user_friendly_message_request.h" +#include "application_manager/application_manager_impl.h" +#include "application_manager/policies/policy_handler.h" namespace application_manager { namespace commands { -SDLGetUserFriendlyMessageRequest::SDLGetUserFriendlyMessageRequest(const MessageSharedPtr& message) +SDLGetUserFriendlyMessageRequest::SDLGetUserFriendlyMessageRequest( + const MessageSharedPtr& message) : RequestFromHMI(message) { } @@ -45,6 +48,97 @@ SDLGetUserFriendlyMessageRequest::~SDLGetUserFriendlyMessageRequest() { void SDLGetUserFriendlyMessageRequest::Run() { LOG4CXX_INFO(logger_, "SDLGetUserFriendlyMessageRequest::Run"); + const std::string messageCodes = "messageCodes"; + if (!(*message_)[strings::msg_params].keyExists(messageCodes)) { + LOG4CXX_WARN(logger_, + "Mandatory parameter '"+messageCodes+"'' is missing"); + return; + } + smart_objects::SmartArray* msg = + (*message_)[strings::msg_params][messageCodes].asArray(); + + std::vector msg_codes; + + smart_objects::SmartArray::const_iterator it = msg->begin(); + smart_objects::SmartArray::const_iterator it_end = msg->end(); + for (; it != it_end; ++it) { + msg_codes.push_back((*it).asString()); + } + + std::string required_language; + const std::string language = "language"; + if ((*message_)[strings::msg_params].keyExists(language)) { + uint32_t lang_code = (*message_)[strings::msg_params][language].asUInt(); + required_language = CommonLanguageToString( + static_cast(lang_code)); + } else { + hmi_apis::Common_Language::eType ui_language = + application_manager::ApplicationManagerImpl::instance() + ->hmi_capabilities().active_ui_language(); + + required_language = CommonLanguageToString(ui_language); + } + + policy::PolicyHandler::instance()->OnGetUserFriendlyMessage( + msg_codes, required_language, + (*message_)[strings::params][strings::correlation_id].asInt()); +} + +std::string SDLGetUserFriendlyMessageRequest::CommonLanguageToString( + hmi_apis::Common_Language::eType language) { + switch (language) { + case hmi_apis::Common_Language::EN_US: + return "en-us"; + case hmi_apis::Common_Language::ES_MX: + return "es-mx"; + case hmi_apis::Common_Language::FR_CA: + return "fr-ca"; + case hmi_apis::Common_Language::DE_DE: + return "de-de"; + case hmi_apis::Common_Language::ES_ES: + return "es-es"; + case hmi_apis::Common_Language::EN_GB: + return "en-gb"; + case hmi_apis::Common_Language::RU_RU: + return "ru-ru"; + case hmi_apis::Common_Language::TR_TR: + return "tr-tr"; + case hmi_apis::Common_Language::PL_PL: + return "pl-pl"; + case hmi_apis::Common_Language::FR_FR: + return "fr-fr"; + case hmi_apis::Common_Language::IT_IT: + return "it-it"; + case hmi_apis::Common_Language::SV_SE: + return "sv-se"; + case hmi_apis::Common_Language::PT_PT: + return "pt-pt"; + case hmi_apis::Common_Language::NL_NL: + return "nl-nl"; + case hmi_apis::Common_Language::EN_AU: + return "en-au"; + case hmi_apis::Common_Language::ZH_CN: + return "zh-cn"; + case hmi_apis::Common_Language::ZH_TW: + return "zh-tw"; + case hmi_apis::Common_Language::JA_JP: + return "ja-jp"; + case hmi_apis::Common_Language::AR_SA: + return "as-sa"; + case hmi_apis::Common_Language::KO_KR: + return "ko-kr"; + case hmi_apis::Common_Language::PT_BR: + return "pt-br"; + case hmi_apis::Common_Language::CS_CZ: + return "cs-cz"; + case hmi_apis::Common_Language::DA_DK: + return "da-dk"; + case hmi_apis::Common_Language::NO_NO: + return "no-no"; + default: + LOG4CXX_WARN(logger_, "Language is unknown."); + return ""; + } } } // namespace commands diff --git a/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_response.cc b/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_response.cc index 45cdd46..c849204 100644 --- a/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_response.cc +++ b/src/components/application_manager/src/commands/hmi/sdl_get_user_friendly_message_response.cc @@ -31,6 +31,7 @@ */ #include "application_manager/commands/hmi/sdl_get_user_friendly_message_response.h" +#include "application_manager/application_manager_impl.h" namespace application_manager { @@ -45,6 +46,10 @@ SDLGetUserFriendlyMessageResponse::~SDLGetUserFriendlyMessageResponse() { void SDLGetUserFriendlyMessageResponse::Run() { LOG4CXX_INFO(logger_, "SDLGetUserFriendlyMessageResponse::Run"); + (*message_)[strings::params][strings::protocol_type] = hmi_protocol_type_; + (*message_)[strings::params][strings::protocol_version] = protocol_version_; + + ApplicationManagerImpl::instance()->SendMessageToHMI(message_); } } // namespace commands diff --git a/src/components/application_manager/src/message_helper.cc b/src/components/application_manager/src/message_helper.cc index 2ef722c..b9f063d 100644 --- a/src/components/application_manager/src/message_helper.cc +++ b/src/components/application_manager/src/message_helper.cc @@ -37,7 +37,6 @@ #include "utils/macro.h" #include "application_manager/application_manager_impl.h" #include "application_manager/message_helper.h" -//#include "application_manager/policies/policy_handler.h" #include "application_manager/commands/command_impl.h" #include "connection_handler/connection_handler_impl.h" #include "application_manager/application.h" @@ -1330,6 +1329,71 @@ void MessageHelper::SendOnSDLConsentNeeded( ApplicationManagerImpl::instance()->ManageHMICommand(message); } +void MessageHelper::SendGetUserFriendlyMessageResponse( + const std::vector& msg, + uint32_t correlation_id) { + smart_objects::SmartObject* message = new smart_objects::SmartObject( + smart_objects::SmartType_Map); + if (!message) { + return; + } + + (*message)[strings::params][strings::function_id] = + hmi_apis::FunctionID::SDL_GetUserFriendlyMessage; + (*message)[strings::params][strings::message_type] = + MessageType::kResponse; + (*message)[strings::params][strings::correlation_id] = correlation_id; + (*message)[strings::params]["code"] = 0; + + // If no any messages found - skip sending of "messages" param + if (msg.empty()) { + ApplicationManagerImpl::instance()->ManageHMICommand(message); + } + + const std::string messages = "messages"; + (*message)[strings::msg_params][messages] = + smart_objects::SmartObject(smart_objects::SmartType_Array); + + smart_objects::SmartObject& user_friendly_messages = + (*message)[strings::msg_params][messages]; + + + const std::string tts = "ttsString"; + const std::string label = "label"; + const std::string line1 = "line1"; + const std::string line2 = "line2"; + const std::string textBody = "textBody"; + + std::vector::const_iterator it = msg.begin(); + std::vector::const_iterator it_end = msg.end(); + for (uint32_t index = 0; it != it_end; ++it, ++index) { + user_friendly_messages[index] = smart_objects::SmartObject( + smart_objects::SmartType_Map); + + smart_objects::SmartObject& msg = user_friendly_messages[index]; + + if (!it->tts.empty()) { + msg[tts] = it->tts; + } + if (!it->label.empty()) { + msg[label] = it->label; + } + if (!it->line1.empty()) { + msg[line1] = it->line1; + } + if (!it->line2.empty()) { + msg[line2] = it->line2; + } + if (!it->text_body.empty()) { + msg[textBody] = it->text_body; + } + } + + PrintSmartObject(*message); + + ApplicationManagerImpl::instance()->ManageHMICommand(message); +} + smart_objects::SmartObject* MessageHelper::CreateNegativeResponse( uint32_t connection_key, int32_t function_id, uint32_t correlation_id, int32_t result_code) { diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index 66477b3..0a77d41 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -241,6 +241,17 @@ void PolicyHandler::OnAppPermissionConsent( //TODO(AOleynik): Handle situation for all apps (policy_app_id is empty) } +void PolicyHandler::OnGetUserFriendlyMessage( + const std::vector& message_codes, const std::string& language, + uint32_t correlation_id) { + LOG4CXX_INFO(logger_, "OnGetUserFriendlyMessage"); + std::vector result = + policy_manager_->GetUserFriendlyMessages(message_codes, language); + // Send response to HMI with gathered data + application_manager::MessageHelper::SendGetUserFriendlyMessageResponse( + result, correlation_id); +} + void PolicyHandler::OnAppRevoked(const std::string& policy_app_id) { LOG4CXX_INFO(logger_, "OnAppRevoked"); const ApplicationList app_list = @@ -401,26 +412,6 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(bool is_allowed, // TODO(AOleynik): Handle situation, if general functionality is concerned } -void PolicyHandler::SendAllowApp(const PermissionsList& list_of_permissions, - uint32_t application_id) { - LOG4CXX_INFO(logger_, - "Sending allow request for application id:" << application_id); - // TODO(PV): change - /*application_manager::MessageHelper::SendAllowAppRequest(list_of_permissions, - application_id);*/ -} - -void PolicyHandler::OnAllowAppResponse(PermissionsList& list_of_permissions) { - // TODO(AOleynik): Impelement response processing for user-defined permissions - // for application -} - -void PolicyHandler::OnAllowAppNotification(PermissionsList& list_of_permissions, - uint32_t appication_id) { - // TODO(AOleynik): Implement notification processing for user-defined - // permissions for applicaiton -} - void PolicyHandler::OnIgnitionCycleOver() { LOG4CXX_INFO(logger_, "OnIgnitionCycleOver"); policy_manager_->IncrementIgnitionCycles();