summaryrefslogtreecommitdiff
path: root/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unsubscribe_button_request.cc
diff options
context:
space:
mode:
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.cc82
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