diff options
author | Andrey Oleynik <AOleynik@luxoft.com> | 2015-01-28 14:49:59 +0200 |
---|---|---|
committer | Aleksandr Galiuzov <AGaliuzov@luxoft.com> | 2015-02-23 13:57:10 +0200 |
commit | b4e41caedc6c47b3cdf49c35d6ed3414aae73392 (patch) | |
tree | ae71d5e40442672c4b7cccccc1dc5605591941d5 /src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc | |
parent | 0d909907d12ff75d91479c861692177badc96b8f (diff) | |
download | sdl_core-b4e41caedc6c47b3cdf49c35d6ed3414aae73392.tar.gz |
APPLINK-11088. Fixed several bugs, changed implementation of SDL.ActivateApp handling. Part 2.
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 | 41 |
1 files changed, 39 insertions, 2 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 a65fd981bc..5d2888023a 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 @@ -50,11 +50,32 @@ void SDLActivateAppRequest::Run() { 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, + if (!app) { + LOG4CXX_WARN(logger_, "Can't find application within regular apps: " + << application_id); + + app = ApplicationManagerImpl::instance()->waiting_app(application_id); + + if (!app) { + LOG4CXX_WARN(logger_, "Can't find application within waiting apps: " + << application_id); + return; + } + } + + if (!app->IsRegistered()) { + ApplicationSharedPtr app_for_sending = + FindRegularAppOnSameConnection(app->connection_id()); + if (!app_for_sending) { + LOG4CXX_ERROR(logger_, "Can't find regular app with the same " + "connection id:" << app->connection_id()); + return; + } + MessageHelper::SendLaunchApp(app_for_sending->app_id(), app->SchemaUrl(), app->PackageName()); subscribe_on_event(BasicCommunication_OnAppRegistered); @@ -95,6 +116,22 @@ uint32_t SDLActivateAppRequest::app_id() const { return 0; } +ApplicationSharedPtr +SDLActivateAppRequest::FindRegularAppOnSameConnection(int32_t connection_id) { + ApplicationManagerImpl::ApplicationListAccessor accessor; + ApplicationManagerImpl::ApplictionSet app_list = accessor.GetData(); + + ApplicationManagerImpl::ApplictionSetIt it = app_list.begin(); + ApplicationManagerImpl::ApplictionSetIt it_end = app_list.end(); + + for (;it != it_end; ++it) { + if (connection_id == (*it)->connection_id()) { + return *it; + } + } + return ApplicationSharedPtr(); +} + } // namespace commands } // namespace application_manager |