diff options
author | JackLivio <jack@livio.io> | 2018-06-26 13:38:14 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-26 13:38:14 -0400 |
commit | b2ba572865bffd6033e602522c24bdf93b8f7042 (patch) | |
tree | 1d5b609d2207abaa5cd3afb35c18086c2a3ff536 | |
parent | 071be264d09aea50ee52667e2a4c34ff4b30f80c (diff) | |
parent | 0ee90cad1abd27350bd93206e514c9d3b9483c2d (diff) | |
download | sdl_core-b2ba572865bffd6033e602522c24bdf93b8f7042.tar.gz |
Merge pull request #2203 from smartdevicelink/feature/submenu_icon
Feature/submenu icon
5 files changed, 84 insertions, 8 deletions
diff --git a/src/components/application_manager/src/commands/mobile/add_sub_menu_request.cc b/src/components/application_manager/src/commands/mobile/add_sub_menu_request.cc index fe44e5a41f..486e0a7921 100644 --- a/src/components/application_manager/src/commands/mobile/add_sub_menu_request.cc +++ b/src/components/application_manager/src/commands/mobile/add_sub_menu_request.cc @@ -58,8 +58,27 @@ void AddSubMenuRequest::Run() { return; } + + smart_objects::SmartObject received_msg_params = + (*message_)[strings::msg_params]; + mobile_apis::Result::eType verification_result = + mobile_apis::Result::INVALID_ENUM; + + if (received_msg_params.keyExists(strings::menu_icon)) { + verification_result = MessageHelper::VerifyImage( + received_msg_params[strings::menu_icon], + app, + application_manager_); + + if (mobile_apis::Result::SUCCESS != verification_result) { + LOG4CXX_ERROR(logger_,"MessageHelper::VerifyImage return " << verification_result); + SendResponse(false, verification_result); + return; + } + } + const int32_t menu_id = - (*message_)[strings::msg_params][strings::menu_id].asInt(); + received_msg_params[strings::menu_id].asInt(); if (app->FindSubMenu(menu_id)) { LOG4CXX_ERROR(logger_, "Menu with id " << menu_id << " is not found."); SendResponse(false, mobile_apis::Result::INVALID_ID); @@ -67,7 +86,7 @@ void AddSubMenuRequest::Run() { } const std::string& menu_name = - (*message_)[strings::msg_params][strings::menu_name].asString(); + received_msg_params[strings::menu_name].asString(); if (app->IsSubMenuNameAlreadyExist(menu_name)) { LOG4CXX_ERROR(logger_, "Menu name " << menu_name << " is duplicated."); @@ -85,15 +104,19 @@ void AddSubMenuRequest::Run() { smart_objects::SmartObject(smart_objects::SmartType_Map); msg_params[strings::menu_id] = - (*message_)[strings::msg_params][strings::menu_id]; - if ((*message_)[strings::msg_params].keyExists(strings::position)) { + received_msg_params[strings::menu_id]; + if (received_msg_params.keyExists(strings::position)) { msg_params[strings::menu_params][strings::position] = - (*message_)[strings::msg_params][strings::position]; + received_msg_params[strings::position]; } msg_params[strings::menu_params][strings::menu_name] = - (*message_)[strings::msg_params][strings::menu_name]; + received_msg_params[strings::menu_name]; msg_params[strings::app_id] = app->app_id(); + if (mobile_apis::Result::SUCCESS == verification_result) { + msg_params[strings::menu_icon] = received_msg_params[strings::menu_icon]; + } + StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI); SendHMIRequest(hmi_apis::FunctionID::UI_AddSubMenu, &msg_params, true); } diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc index b854d83c6e..ab2e70d349 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -1798,6 +1798,14 @@ smart_objects::SmartObjectList MessageHelper::CreateAddSubMenuRequestToHMI( (*i->second)[strings::menu_name]; msg_params[strings::app_id] = app->app_id(); (*ui_sub_menu)[strings::msg_params] = msg_params; + if (((*i->second).keyExists(strings::menu_icon)) && + (0 < (*i->second)[strings::menu_icon][strings::value].length())) { + msg_params[strings::menu_icon] = + (*i->second)[strings::menu_icon]; + msg_params[strings::menu_icon][strings::value] = + (*i->second)[strings::menu_icon][strings::value] + .asString(); + } requsets.push_back(ui_sub_menu); } return requsets; diff --git a/src/components/application_manager/test/commands/mobile/add_sub_menu_request_test.cc b/src/components/application_manager/test/commands/mobile/add_sub_menu_request_test.cc index f5bb7888d8..90f92ea81f 100644 --- a/src/components/application_manager/test/commands/mobile/add_sub_menu_request_test.cc +++ b/src/components/application_manager/test/commands/mobile/add_sub_menu_request_test.cc @@ -61,10 +61,50 @@ typedef SharedPtr<AddSubMenuRequest> AddSubMenuPtr; namespace { const uint32_t kConnectionKey = 2u; +const uint32_t kAppId = 1u; } // namespace class AddSubMenuRequestTest - : public CommandRequestTest<CommandsTestMocks::kIsNice> {}; + : public CommandRequestTest<CommandsTestMocks::kIsNice> { + public: + AddSubMenuRequestTest() + : mock_app(CreateMockApp()) { + EXPECT_CALL(app_mngr_, application(kConnectionKey)) + .WillRepeatedly(Return(mock_app)); + } + + MockAppPtr mock_app; + + MessageSharedPtr CreateMsgParams() { + MessageSharedPtr msg = CreateMessage(); + (*msg)[am::strings::params][am::strings::connection_key] = kConnectionKey; + (*msg)[am::strings::msg_params][am::strings::app_id] = kAppId; + return msg; + } +}; + + +TEST_F(AddSubMenuRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) { + const uint32_t menu_id = 10u; + MessageSharedPtr msg = CreateMsgParams(); + SmartObject& msg_params = (*msg)[am::strings::msg_params]; + + msg_params[am::strings::menu_icon] = 1; + msg_params[am::strings::menu_icon][am::strings::value] = "10"; + msg_params[am::strings::menu_id] = menu_id; + msg_params[am::strings::menu_name] = "test"; + SmartObject& image = msg_params[am::strings::menu_icon]; + + EXPECT_CALL(mock_message_helper_, VerifyImage(image, _, _)) + .WillOnce(Return(mobile_apis::Result::INVALID_DATA)); + EXPECT_CALL(app_mngr_, + ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::INVALID_DATA), _)); + utils::SharedPtr<AddSubMenuRequest> request_ptr = + CreateCommand<AddSubMenuRequest>(msg); + + request_ptr->Run(); +} + TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) { const uint32_t menu_id = 10u; @@ -75,7 +115,6 @@ TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) { utils::SharedPtr<AddSubMenuRequest> command = CreateCommand<AddSubMenuRequest>(msg); - MockAppPtr mock_app = CreateMockApp(); ON_CALL(app_mngr_, application(kConnectionKey)) .WillByDefault(Return(mock_app)); ON_CALL(*mock_app, app_id()).WillByDefault(Return(kConnectionKey)); diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml index 65cc9bea5b..77a9a62f22 100644 --- a/src/components/interfaces/HMI_API.xml +++ b/src/components/interfaces/HMI_API.xml @@ -3583,6 +3583,9 @@ <param name="menuParams" type="Common.MenuParams" mandatory="true"> <description>Position and name of menu to be added. 'parent' field is omitted for this RPC. </description> </param> + <param name="menuIcon" type="Common.Image" mandatory="false"> + <description>The image field for AddSubMenu</description> + </param> <param name="appID" type="Integer" mandatory="true"> <description>ID of application that requested this RPC.</description> </param> diff --git a/src/components/interfaces/MOBILE_API.xml b/src/components/interfaces/MOBILE_API.xml index 8b8da6a63a..45da668aef 100644 --- a/src/components/interfaces/MOBILE_API.xml +++ b/src/components/interfaces/MOBILE_API.xml @@ -3453,6 +3453,9 @@ <param name="menuName" maxlength="500" type="String" mandatory="true"> <description>Text to show in the menu for this sub menu.</description> </param> + <param name="menuIcon" type="Image" mandatory="false"> + <description>The image field for AddSubMenu</description> + </param> </function> <function name="AddSubMenu" functionID="AddSubMenuID" messagetype="response"> |