diff options
Diffstat (limited to 'src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc')
-rw-r--r-- | src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc | 90 |
1 files changed, 66 insertions, 24 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc index 42cb3c60c9..da48f193e6 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subscribe_button_request.cc @@ -32,6 +32,7 @@ */ #include "sdl_rpc_plugin/commands/mobile/subscribe_button_request.h" +#include "application_manager/message_helper.h" #include "utils/semantic_version.h" namespace sdl_rpc_plugin { @@ -49,11 +50,11 @@ SubscribeButtonRequest::SubscribeButtonRequest( app_mngr::rpc_service::RPCService& rpc_service, app_mngr::HMICapabilities& hmi_capabilities, policy::PolicyHandlerInterface& policy_handler) - : CommandRequestImpl(message, - application_manager, - rpc_service, - hmi_capabilities, - policy_handler) {} + : RequestFromMobileImpl(message, + application_manager, + rpc_service, + hmi_capabilities, + policy_handler) {} SubscribeButtonRequest::~SubscribeButtonRequest() {} @@ -104,11 +105,11 @@ void SubscribeButtonRequest::Run() { return; } - app->SubscribeToButton(static_cast<mobile_apis::ButtonName::eType>(btn_id)); - SendSubscribeButtonNotification(); - - const bool is_succeeded = true; - SendResponse(is_succeeded, mobile_apis::Result::SUCCESS); + (*message_)[str::msg_params][str::app_id] = app->app_id(); + StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_Buttons); + SendHMIRequest(hmi_apis::FunctionID::Buttons_SubscribeButton, + &(*message_)[app_mngr::strings::msg_params], + true); } bool SubscribeButtonRequest::Init() { @@ -116,6 +117,59 @@ bool SubscribeButtonRequest::Init() { return true; } +void SubscribeButtonRequest::on_event(const event_engine::Event& event) { + SDL_LOG_AUTO_TRACE(); + + const smart_objects::SmartObject& message = event.smart_object(); + + if (hmi_apis::FunctionID::Buttons_SubscribeButton != event.id()) { + SDL_LOG_ERROR("Received unknown event."); + return; + } + EndAwaitForInterface(HmiInterfaces::HMI_INTERFACE_Buttons); + ApplicationSharedPtr app = + application_manager_.application(CommandRequestImpl::connection_key()); + + if (!app) { + SDL_LOG_ERROR("NULL pointer."); + return; + } + + hmi_apis::Common_Result::eType hmi_result = + static_cast<hmi_apis::Common_Result::eType>( + message[strings::params][hmi_response::code].asInt()); + std::string response_info; + GetInfo(message, response_info); + const bool result = PrepareResultForMobileResponse( + hmi_result, HmiInterfaces::HMI_INTERFACE_Buttons); + + if (result) { + const auto btn_id = static_cast<mobile_apis::ButtonName::eType>( + (*message_)[str::msg_params][str::button_name].asInt()); + app->SubscribeToButton(btn_id); + } + mobile_apis::Result::eType result_code = + MessageHelper::HMIToMobileResult(hmi_result); + + SendResponse(result, + result_code, + response_info.empty() ? nullptr : response_info.c_str(), + &(message[strings::msg_params])); +} + +bool IsPresetButton(const mobile_apis::ButtonName::eType btn_id) { + return (mobile_apis::ButtonName::PRESET_0 == btn_id) || + (mobile_apis::ButtonName::PRESET_1 == btn_id) || + (mobile_apis::ButtonName::PRESET_2 == btn_id) || + (mobile_apis::ButtonName::PRESET_3 == btn_id) || + (mobile_apis::ButtonName::PRESET_4 == btn_id) || + (mobile_apis::ButtonName::PRESET_5 == btn_id) || + (mobile_apis::ButtonName::PRESET_6 == btn_id) || + (mobile_apis::ButtonName::PRESET_7 == btn_id) || + (mobile_apis::ButtonName::PRESET_8 == btn_id) || + (mobile_apis::ButtonName::PRESET_9 == btn_id); +} + bool SubscribeButtonRequest::IsSubscriptionAllowed( ApplicationSharedPtr app, mobile_apis::ButtonName::eType btn_id) { if (!app->is_media_application() && @@ -123,7 +177,8 @@ bool SubscribeButtonRequest::IsSubscriptionAllowed( (mobile_apis::ButtonName::SEEKLEFT == btn_id) || (mobile_apis::ButtonName::SEEKRIGHT == btn_id) || (mobile_apis::ButtonName::TUNEUP == btn_id) || - (mobile_apis::ButtonName::TUNEDOWN == btn_id))) { + (mobile_apis::ButtonName::TUNEDOWN == btn_id) || + IsPresetButton(btn_id))) { return false; } @@ -149,19 +204,6 @@ bool SubscribeButtonRequest::IsSubscriptionAllowed( return true; } -void SubscribeButtonRequest::SendSubscribeButtonNotification() { - using namespace smart_objects; - using namespace hmi_apis; - - // send OnButtonSubscription notification - SmartObject msg_params = SmartObject(SmartType_Map); - msg_params[strings::app_id] = connection_key(); - msg_params[strings::name] = static_cast<Common_ButtonName::eType>( - (*message_)[strings::msg_params][strings::button_name].asUInt()); - msg_params[strings::is_suscribed] = true; - CreateHMINotification(FunctionID::Buttons_OnButtonSubscription, msg_params); -} - } // namespace commands } // namespace sdl_rpc_plugin |