summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCollin <iCollin@users.noreply.github.com>2020-05-21 06:10:39 -0700
committerGitHub <noreply@github.com>2020-05-21 09:10:39 -0400
commit4900a41b0759ddb4c35e445412b4c4ebd2149ab8 (patch)
treea5d45bbdd29d11eaf06f54ec987cf8b95b901444
parented2815162dfb192faa5a42750bd264414952374b (diff)
downloadsdl_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
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h20
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc47
-rw-r--r--src/components/include/application_manager/application_manager.h20
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h3
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());