diff options
author | Collin <iCollin@users.noreply.github.com> | 2020-05-21 06:10:39 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-21 09:10:39 -0400 |
commit | 4900a41b0759ddb4c35e445412b4c4ebd2149ab8 (patch) | |
tree | a5d45bbdd29d11eaf06f54ec987cf8b95b901444 | |
parent | ed2815162dfb192faa5a42750bd264414952374b (diff) | |
download | sdl_core-4900a41b0759ddb4c35e445412b4c4ebd2149ab8.tar.gz |
unsubscripe app from waypoints when it is unregistered (#3373)
* unsubscripe app from waypoints when it is unregistered
* address review comments
* fix style
4 files changed, 71 insertions, 19 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 49059e4955..0d940d6ab1 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 @@ -271,6 +271,14 @@ class ApplicationManagerImpl /** * @brief Checks if Application is subscribed for way points + * @param Application id + * @return true if Application is subscribed for way points + * otherwise false + */ + bool IsAppSubscribedForWayPoints(uint32_t app_id) const OVERRIDE; + + /** + * @brief Checks if Application is subscribed for way points * @param Application pointer * @return true if Application is subscribed for way points * otherwise false @@ -279,12 +287,24 @@ class ApplicationManagerImpl /** * @brief Subscribe Application for way points + * @param Application id + */ + void SubscribeAppForWayPoints(uint32_t app_id) OVERRIDE; + + /** + * @brief Subscribe Application for way points * @param Application pointer */ void SubscribeAppForWayPoints(ApplicationSharedPtr app) OVERRIDE; /** * @brief Unsubscribe Application for way points + * @param Application id + */ + void UnsubscribeAppFromWayPoints(uint32_t app_id) OVERRIDE; + + /** + * @brief Unsubscribe Application for way points * @param Application pointer */ void UnsubscribeAppFromWayPoints(ApplicationSharedPtr app) OVERRIDE; diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index bf5eeef65c..b1a348dafb 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -3212,19 +3212,15 @@ void ApplicationManagerImpl::UnregisterApplication( << "; is_resuming = " << is_resuming << "; is_unexpected_disconnect = " << is_unexpected_disconnect); - size_t subscribed_for_way_points_app_count = 0; GetAppServiceManager().UnpublishServices(app_id); - // SDL sends UnsubscribeWayPoints only for last application - { - sync_primitives::AutoLock lock(subscribed_way_points_apps_lock_); - subscribed_for_way_points_app_count = - subscribed_way_points_apps_list_.size(); - } - if (1 == subscribed_for_way_points_app_count) { - LOG4CXX_ERROR(logger_, "Send UnsubscribeWayPoints"); - MessageHelper::SendUnsubscribedWayPoints(*this); + if (IsAppSubscribedForWayPoints(app_id)) { + UnsubscribeAppFromWayPoints(app_id); + if (!IsAnyAppSubscribedForWayPoints()) { + LOG4CXX_ERROR(logger_, "Send UnsubscribeWayPoints"); + MessageHelper::SendUnsubscribedWayPoints(*this); + } } EndNaviServices(app_id); @@ -4635,41 +4631,54 @@ void ApplicationManagerImpl::ClearTTSGlobalPropertiesList() { } bool ApplicationManagerImpl::IsAppSubscribedForWayPoints( - ApplicationSharedPtr app) const { + uint32_t app_id) const { LOG4CXX_AUTO_TRACE(logger_); sync_primitives::AutoLock lock(subscribed_way_points_apps_lock_); LOG4CXX_DEBUG(logger_, "There are applications subscribed: " << subscribed_way_points_apps_list_.size()); - if (subscribed_way_points_apps_list_.find(app->app_id()) == + if (subscribed_way_points_apps_list_.find(app_id) == subscribed_way_points_apps_list_.end()) { return false; } return true; } -void ApplicationManagerImpl::SubscribeAppForWayPoints( - ApplicationSharedPtr app) { +bool ApplicationManagerImpl::IsAppSubscribedForWayPoints( + ApplicationSharedPtr app) const { + return IsAppSubscribedForWayPoints(app->app_id()); +} + +void ApplicationManagerImpl::SubscribeAppForWayPoints(uint32_t app_id) { LOG4CXX_AUTO_TRACE(logger_); sync_primitives::AutoLock lock(subscribed_way_points_apps_lock_); - LOG4CXX_DEBUG(logger_, "Subscribing " << app->app_id()); - subscribed_way_points_apps_list_.insert(app->app_id()); + LOG4CXX_DEBUG(logger_, "Subscribing " << app_id); + subscribed_way_points_apps_list_.insert(app_id); LOG4CXX_DEBUG(logger_, "There are applications subscribed: " << subscribed_way_points_apps_list_.size()); } -void ApplicationManagerImpl::UnsubscribeAppFromWayPoints( +void ApplicationManagerImpl::SubscribeAppForWayPoints( ApplicationSharedPtr app) { + SubscribeAppForWayPoints(app->app_id()); +} + +void ApplicationManagerImpl::UnsubscribeAppFromWayPoints(uint32_t app_id) { LOG4CXX_AUTO_TRACE(logger_); sync_primitives::AutoLock lock(subscribed_way_points_apps_lock_); - LOG4CXX_DEBUG(logger_, "Unsubscribing " << app->app_id()); - subscribed_way_points_apps_list_.erase(app->app_id()); + LOG4CXX_DEBUG(logger_, "Unsubscribing " << app_id); + subscribed_way_points_apps_list_.erase(app_id); LOG4CXX_DEBUG(logger_, "There are applications subscribed: " << subscribed_way_points_apps_list_.size()); } +void ApplicationManagerImpl::UnsubscribeAppFromWayPoints( + ApplicationSharedPtr app) { + UnsubscribeAppFromWayPoints(app->app_id()); +} + bool ApplicationManagerImpl::IsAnyAppSubscribedForWayPoints() const { LOG4CXX_AUTO_TRACE(logger_); sync_primitives::AutoLock lock(subscribed_way_points_apps_lock_); diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h index a3aace0f3f..61ff026987 100644 --- a/src/components/include/application_manager/application_manager.h +++ b/src/components/include/application_manager/application_manager.h @@ -344,6 +344,14 @@ class ApplicationManager { /** * @brief Checks if Application is subscribed for way points + * @param Application id + * @return true if Application is subscribed for way points + * otherwise false + */ + virtual bool IsAppSubscribedForWayPoints(uint32_t app_id) const = 0; + + /** + * @brief Checks if Application is subscribed for way points * @param Application pointer * @return true if Application is subscribed for way points * otherwise false @@ -352,12 +360,24 @@ class ApplicationManager { /** * @brief Subscribe Application for way points + * @param Application id + */ + virtual void SubscribeAppForWayPoints(uint32_t id) = 0; + + /** + * @brief Subscribe Application for way points * @param Application pointer */ virtual void SubscribeAppForWayPoints(ApplicationSharedPtr app) = 0; /** * @brief Unsubscribe Application for way points + * @param Application id + */ + virtual void UnsubscribeAppFromWayPoints(uint32_t app_id) = 0; + + /** + * @brief Unsubscribe Application for way points * @param Application pointer */ virtual void UnsubscribeAppFromWayPoints(ApplicationSharedPtr app) = 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 3bd3b9b7d6..34786910b9 100644 --- a/src/components/include/test/application_manager/mock_application_manager.h +++ b/src/components/include/test/application_manager/mock_application_manager.h @@ -338,10 +338,13 @@ class MockApplicationManager : public application_manager::ApplicationManager { MOCK_METHOD2(IsSOStructValid, bool(const hmi_apis::StructIdentifiers::eType struct_id, const smart_objects::SmartObject& display_capabilities)); + MOCK_CONST_METHOD1(IsAppSubscribedForWayPoints, bool(uint32_t)); MOCK_CONST_METHOD1(IsAppSubscribedForWayPoints, bool(application_manager::ApplicationSharedPtr)); + MOCK_METHOD1(SubscribeAppForWayPoints, void(uint32_t)); MOCK_METHOD1(SubscribeAppForWayPoints, void(application_manager::ApplicationSharedPtr)); + MOCK_METHOD1(UnsubscribeAppFromWayPoints, void(uint32_t)); MOCK_METHOD1(UnsubscribeAppFromWayPoints, void(application_manager::ApplicationSharedPtr)); MOCK_CONST_METHOD0(IsAnyAppSubscribedForWayPoints, bool()); |