diff options
6 files changed, 42 insertions, 0 deletions
diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h index 2dd64a2941..ca1952197a 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl.h @@ -66,6 +66,12 @@ class AppLaunchCtrl { * @brief OnMasterReset clear database of saved applications */ virtual void OnMasterReset() = 0; + + /** + * @brief Stop - allows to stop app launcher. + */ + virtual void Stop() = 0; + virtual ~AppLaunchCtrl() {} }; diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h index 986f4ad4ff..32cbc46245 100644 --- a/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h +++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_ctrl_impl.h @@ -69,6 +69,7 @@ class AppLaunchCtrlImpl : public AppLaunchCtrl { void OnAppRegistered(const application_manager::Application& app) OVERRIDE; void OnDeviceConnected(const std::string& device_mac) OVERRIDE; void OnMasterReset() OVERRIDE; + void Stop() OVERRIDE; private: const AppLaunchSettings& settings_; @@ -77,6 +78,7 @@ class AppLaunchCtrlImpl : public AppLaunchCtrl { AppsLauncher apps_launcher_; DeviceAppsLauncher device_apps_launcher_; + sync_primitives::Lock device_apps_launcher_lock_; DISALLOW_COPY_AND_ASSIGN(AppLaunchCtrlImpl); }; diff --git a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h index f27e4569fc..2ffec0e065 100644 --- a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h +++ b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h @@ -35,6 +35,7 @@ class DeviceAppsLauncherImpl { }; bool StopLaunchingAppsOnDevice(const std::string& device_mac); + void StopLaunchingAppsOnAllDevices(); private: sync_primitives::Lock launchers_lock_; @@ -60,6 +61,7 @@ class DeviceAppsLauncher { const std::string& device_mac, const std::vector<ApplicationDataPtr>& applications_to_launch); bool StopLaunchingAppsOnDevice(const std::string& device_mac); + void StopLaunchingAppsOnAllDevices(); const AppLaunchSettings& settings() const; diff --git a/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc b/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc index 4dafe9a8e6..05231b66b1 100644 --- a/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc +++ b/src/components/application_manager/src/app_launch/app_launch_ctrl_impl.cc @@ -83,6 +83,7 @@ bool HmiLevelSorter(const std::pair<int32_t, ApplicationDataPtr>& lval, void AppLaunchCtrlImpl::OnDeviceConnected(const std::string& device_mac) { SDL_LOG_AUTO_TRACE(); + std::vector<ApplicationDataPtr> apps_on_device = app_launch_data_.GetApplicationDataByDevice(device_mac); std::vector<std::pair<int32_t, ApplicationDataPtr> > apps_hmi_levels; @@ -102,6 +103,7 @@ void AppLaunchCtrlImpl::OnDeviceConnected(const std::string& device_mac) { std::back_inserter(apps_on_device), GetAppFromHmiLevelPair); if (apps_on_device.size() > 0) { + sync_primitives::AutoLock lock(device_apps_launcher_lock_); device_apps_launcher_.LaunchAppsOnDevice(device_mac, apps_on_device); } else { SDL_LOG_DEBUG("No apps in saved for device " << device_mac); @@ -112,4 +114,11 @@ void AppLaunchCtrlImpl::OnMasterReset() { SDL_LOG_AUTO_TRACE(); app_launch_data_.Clear(); } + +void AppLaunchCtrlImpl::Stop() { + SDL_LOG_AUTO_TRACE(); + sync_primitives::AutoLock lock(device_apps_launcher_lock_); + device_apps_launcher_.StopLaunchingAppsOnAllDevices(); +} + } // namespace app_launch diff --git a/src/components/application_manager/src/app_launch/device_apps_launcher.cc b/src/components/application_manager/src/app_launch/device_apps_launcher.cc index 5f36e41efb..1bf2bbf46d 100644 --- a/src/components/application_manager/src/app_launch/device_apps_launcher.cc +++ b/src/components/application_manager/src/app_launch/device_apps_launcher.cc @@ -157,6 +157,20 @@ bool DeviceAppsLauncherImpl::StopLaunchingAppsOnDevice( return true; } +void DeviceAppsLauncherImpl::StopLaunchingAppsOnAllDevices() { + SDL_LOG_AUTO_TRACE(); + sync_primitives::AutoLock lock(launchers_lock_); + + std::for_each(works_launchers_.begin(), + works_launchers_.end(), + [this](LauncherPtr launcher) { + launcher->Clear(); + free_launchers_.push_back(launcher); + }); + + works_launchers_.clear(); +} + bool DeviceAppsLauncher::LaunchAppsOnDevice( const std::string& device_mac, const std::vector<ApplicationDataPtr>& applications_to_launch) { @@ -176,6 +190,10 @@ bool DeviceAppsLauncher::StopLaunchingAppsOnDevice( return impl_->StopLaunchingAppsOnDevice(device_mac); } +void DeviceAppsLauncher::StopLaunchingAppsOnAllDevices() { + impl_->StopLaunchingAppsOnAllDevices(); +} + const AppLaunchSettings& DeviceAppsLauncher::settings() const { return settings_; } diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index e8e3912f9a..8f959460ca 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2651,6 +2651,11 @@ bool ApplicationManagerImpl::Init( bool ApplicationManagerImpl::Stop() { SDL_LOG_AUTO_TRACE(); InitiateStopping(); + + if (app_launch_ctrl_) { + app_launch_ctrl_->Stop(); + } + application_list_update_timer_.Stop(); try { if (unregister_reason_ == |