summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-06-26 13:38:14 -0400
committerGitHub <noreply@github.com>2018-06-26 13:38:14 -0400
commitb2ba572865bffd6033e602522c24bdf93b8f7042 (patch)
tree1d5b609d2207abaa5cd3afb35c18086c2a3ff536
parent071be264d09aea50ee52667e2a4c34ff4b30f80c (diff)
parent0ee90cad1abd27350bd93206e514c9d3b9483c2d (diff)
downloadsdl_core-b2ba572865bffd6033e602522c24bdf93b8f7042.tar.gz
Merge pull request #2203 from smartdevicelink/feature/submenu_icon
Feature/submenu icon
-rw-r--r--src/components/application_manager/src/commands/mobile/add_sub_menu_request.cc35
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc8
-rw-r--r--src/components/application_manager/test/commands/mobile/add_sub_menu_request_test.cc43
-rw-r--r--src/components/interfaces/HMI_API.xml3
-rw-r--r--src/components/interfaces/MOBILE_API.xml3
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">