diff options
Diffstat (limited to 'src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc')
-rw-r--r-- | src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc | 82 |
1 files changed, 57 insertions, 25 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc index 69f85568eb..74eec08c46 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc @@ -1,6 +1,5 @@ /* - - Copyright (c) 2018, Ford Motor Company + Copyright (c) 2021, Ford Motor Company All rights reserved. Redistribution and use in source and binary forms, with or without @@ -34,6 +33,8 @@ #include "sdl_rpc_plugin/commands/mobile/unsubscribe_button_request.h" #include "application_manager/application_impl.h" +#include "application_manager/message_helper.h" +#include "utils/helpers.h" #include "utils/semantic_version.h" namespace sdl_rpc_plugin { @@ -51,11 +52,11 @@ UnsubscribeButtonRequest::UnsubscribeButtonRequest( 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) {} UnsubscribeButtonRequest::~UnsubscribeButtonRequest() {} @@ -93,15 +94,59 @@ void UnsubscribeButtonRequest::Run() { return; } - if (!app->UnsubscribeFromButton( - static_cast<mobile_apis::ButtonName::eType>(btn_id))) { - SDL_LOG_ERROR("App doesn't subscribe to button " << btn_id); + if (!app->IsSubscribedToButton(btn_id)) { + SDL_LOG_ERROR("App is not subscribed to button " << btn_id); + SendResponse(false, mobile_apis::Result::IGNORED); + return; + } + + if (mobile_apis::ButtonName::CUSTOM_BUTTON == btn_id) { + SDL_LOG_ERROR("App cannot unsubscribe from CUSTOM_BUTTON"); SendResponse(false, mobile_apis::Result::IGNORED); return; } - SendUnsubscribeButtonNotification(); - SendResponse(true, mobile_apis::Result::SUCCESS); + (*message_)[str::msg_params][str::app_id] = app->app_id(); + StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_Buttons); + SendHMIRequest(hmi_apis::FunctionID::Buttons_UnsubscribeButton, + &(*message_)[app_mngr::strings::msg_params], + true); +} + +void UnsubscribeButtonRequest::on_event(const event_engine::Event& event) { + SDL_LOG_AUTO_TRACE(); + using namespace helpers; + + const smart_objects::SmartObject& message = event.smart_object(); + + if (hmi_apis::FunctionID::Buttons_UnsubscribeButton != 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); + + 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 UnsubscribeButtonRequest::Init() { @@ -109,19 +154,6 @@ bool UnsubscribeButtonRequest::Init() { return true; } -void UnsubscribeButtonRequest::SendUnsubscribeButtonNotification() { - 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].asInt()); - msg_params[strings::is_suscribed] = false; - CreateHMINotification(FunctionID::Buttons_OnButtonSubscription, msg_params); -} - } // namespace commands } // namespace sdl_rpc_plugin |