diff options
Diffstat (limited to 'src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc')
-rw-r--r-- | src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc index 72abf233c..a65fd981b 100644 --- a/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc +++ b/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2013, Ford Motor Company * All rights reserved. * @@ -32,6 +32,7 @@ #include "application_manager/commands/hmi/sdl_activate_app_request.h" #include "application_manager/policies/policy_handler.h" +#include "application_manager/message_helper.h" namespace application_manager { @@ -45,10 +46,53 @@ SDLActivateAppRequest::~SDLActivateAppRequest() { } void SDLActivateAppRequest::Run() { - LOG4CXX_INFO(logger_, "SDLActivateAppRequest::Run"); - policy::PolicyHandler::instance()->OnActivateApp( - (*message_)[strings::msg_params][strings::app_id].asUInt(), - (*message_)[strings::params][strings::correlation_id].asInt()); + LOG4CXX_AUTO_TRACE(logger_); + using namespace hmi_apis::FunctionID; + + const uint32_t application_id = app_id(); + ApplicationConstSharedPtr app = + ApplicationManagerImpl::instance()->application(application_id); + + if (app && !app->IsRegistered()) { + MessageHelper::SendLaunchApp(application_id, + app->SchemaUrl(), + app->PackageName()); + subscribe_on_event(BasicCommunication_OnAppRegistered); + } else { + policy::PolicyHandler::instance()->OnActivateApp(application_id, + correlation_id()); + } +} + +void SDLActivateAppRequest::onTimeOut() { + using namespace hmi_apis::FunctionID; + using namespace hmi_apis::Common_Result; + using namespace application_manager; + unsubscribe_from_event(BasicCommunication_OnAppRegistered); + const bool is_success = false; + SendResponse(is_success, correlation_id(), + BasicCommunication_ActivateApp, APPLICATION_NOT_REGISTERED); +} + +void SDLActivateAppRequest::on_event(const event_engine::Event& event) { + using namespace hmi_apis::FunctionID; + if (event.id() != BasicCommunication_OnAppRegistered) { + return; + } + unsubscribe_from_event(BasicCommunication_OnAppRegistered); + policy::PolicyHandler::instance()->OnActivateApp(app_id(), + correlation_id()); +} + +uint32_t SDLActivateAppRequest::app_id() const { + + if ((*message_).keyExists(strings::msg_params)) { + if ((*message_)[strings::msg_params].keyExists(strings::app_id)){ + return (*message_)[strings::msg_params][strings::app_id].asUInt(); + } + } + LOG4CXX_DEBUG(logger_, "app_id section is absent in the message."); + return 0; } } // namespace commands |