diff options
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)); |