summaryrefslogtreecommitdiff
path: root/src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc
diff options
context:
space:
mode:
authorAndrey Oleynik <AOleynik@luxoft.com>2015-01-28 14:49:59 +0200
committerAleksandr Galiuzov <AGaliuzov@luxoft.com>2015-02-23 13:57:10 +0200
commitb4e41caedc6c47b3cdf49c35d6ed3414aae73392 (patch)
treeae71d5e40442672c4b7cccccc1dc5605591941d5 /src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc
parent0d909907d12ff75d91479c861692177badc96b8f (diff)
downloadsdl_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.cc41
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