summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAGaliuzov <AGaliuzov@luxoft.com>2016-06-15 07:27:49 -0700
committerGitHub <noreply@github.com>2016-06-15 07:27:49 -0700
commit7bc2576db25ab3576906e4acf591ae13d5f43fc0 (patch)
tree5a60a1a7d3505299cd50db5433d35d7675852617
parent3afea4568893ada3fbadabb942b2725e0c46604c (diff)
parent11e611033a6da7ee379c2f8b0d26f5dd9f67eaa8 (diff)
downloadsdl_core-7bc2576db25ab3576906e4acf591ae13d5f43fc0.tar.gz
Merge pull request #598 from AGritsevich/Fix/SDL_does_not_send_LAUNCH_APP_to_mobile
Fix APP_LAUNCH request
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h2
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc24
-rw-r--r--src/components/application_manager/src/commands/hmi/sdl_activate_app_request.cc12
-rw-r--r--src/components/include/application_manager/application_manager.h5
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h3
5 files changed, 42 insertions, 4 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index 881011f01c..2161f2dbf9 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -252,6 +252,8 @@ class ApplicationManagerImpl
ApplicationSharedPtr get_limited_navi_application() const OVERRIDE;
ApplicationSharedPtr get_limited_voice_application() const OVERRIDE;
+ ApplicationSharedPtr FindAppToRegister(const uint32_t app_id) const OVERRIDE;
+
uint32_t application_id(const int32_t correlation_id) OVERRIDE;
void set_application_id(const int32_t correlation_id,
const uint32_t app_id) OVERRIDE;
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 45a956e104..5dcc5868fa 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -220,6 +220,22 @@ ApplicationSharedPtr FindApp(DataAccessor<ApplicationSet> accessor,
}
template <class UnaryPredicate>
+ApplicationSharedPtr FindApp(
+ DataAccessor<ApplicationManagerImpl::AppsWaitRegistrationSet> accessor,
+ UnaryPredicate finder) {
+ ApplicationManagerImpl::AppsWaitRegistrationSet::const_iterator it =
+ std::find_if(
+ accessor.GetData().begin(), accessor.GetData().end(), finder);
+ if (accessor.GetData().end() == it) {
+ LOGGER_DEBUG(logger_, "Unable to find application");
+ return ApplicationSharedPtr();
+ }
+ ApplicationSharedPtr app = *it;
+ LOGGER_DEBUG(logger_, " Found Application app_id = " << app->app_id());
+ return app;
+}
+
+template <class UnaryPredicate>
std::vector<ApplicationSharedPtr> FindAllApps(
DataAccessor<ApplicationSet> accessor, UnaryPredicate finder) {
std::vector<ApplicationSharedPtr> result;
@@ -258,6 +274,14 @@ ApplicationSharedPtr ApplicationManagerImpl::application_by_policy_id(
return FindApp(accessor, finder);
}
+ApplicationSharedPtr ApplicationManagerImpl::FindAppToRegister(
+ const uint32_t app_id) const {
+ HmiAppIdPredicate finder(app_id);
+ DataAccessor<AppsWaitRegistrationSet> accessor(apps_to_register_,
+ apps_to_register_list_lock_);
+ return FindApp(accessor, finder);
+}
+
bool ActiveAppPredicate(const ApplicationSharedPtr app) {
return app ? app->IsFullscreen() : false;
}
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 9352713550..a08644322c 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
@@ -55,9 +55,15 @@ void SDLActivateAppRequest::Run() {
application_manager_.application(application_id);
if (!app) {
- LOGGER_ERROR(
- logger_,
- "Can't find application within regular apps: " << application_id);
+ LOGGER_INFO(logger_, "Can't find app_id in applications list");
+ LOGGER_DEBUG(logger_, "Try find app_id in app_to_register list");
+ app = application_manager_.FindAppToRegister(application_id);
+ }
+
+ if (!app) {
+ LOGGER_ERROR(logger_,
+ "Can't find application in any lists within regular apps: "
+ << application_id);
return;
}
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index e7ab07c28e..905e8e756f 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Ford Motor Company
+ * Copyright (c) 2016, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -134,6 +134,9 @@ class ApplicationManager {
virtual ApplicationSharedPtr application_by_policy_id(
const std::string& policy_app_id) const = 0;
+ virtual ApplicationSharedPtr FindAppToRegister(
+ const uint32_t app_id) const = 0;
+
virtual std::vector<ApplicationSharedPtr> applications_by_button(
uint32_t button) = 0;
virtual std::vector<ApplicationSharedPtr> applications_with_navi() = 0;
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index f7e2d88927..c935227e74 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -73,6 +73,9 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_CONST_METHOD1(
application_by_hmi_app,
application_manager::ApplicationSharedPtr(uint32_t hmi_app_id));
+ MOCK_CONST_METHOD1(
+ FindAppToRegister,
+ application_manager::ApplicationSharedPtr(const uint32_t app_id));
MOCK_CONST_METHOD1(application_by_policy_id,
application_manager::ApplicationSharedPtr(
const std::string& policy_app_id));