diff options
author | Herasym Oleh <oolleehh@gmail.com> | 2016-03-25 16:21:56 +0200 |
---|---|---|
committer | Herasym Oleh <oolleehh@gmail.com> | 2016-04-13 11:31:31 +0300 |
commit | 29c964ac33c41ff315639a1a194d45bf3626b3f7 (patch) | |
tree | 6d76be4bd95d86cf75b5a62840307a420c29e86c /src | |
parent | 47e02bf586513eccb2ba00656a17b237efb1442c (diff) | |
download | sdl_core-29c964ac33c41ff315639a1a194d45bf3626b3f7.tar.gz |
Change resumption SubscribedForWaypoints
Conflicts:
src/components/application_manager/src/resumption/resumption_data_db.cc
Add implementation SubscribeWayPoints&UnsubsribeWayPoints
Add mobile request/response SubscribeWayPoints
Add mobile request/response UnSubscribeWayPoints
Add HMI request/response SubscribeWayPoints
Add HMI request/response UnsubscribeWayPoints
Add SendUnsubscribeWayPoints method in MessageHelper
Add save subscribe app status to resumption DB & json
Add Sending UnsubscribeWayPoints in case unexpected disconnect
Related:
APPLINK-21629
Related:
APPLINK-21631
Diffstat (limited to 'src')
15 files changed, 115 insertions, 57 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 d0e8c99fae..01f137a2fd 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 @@ -286,7 +286,7 @@ class ApplicationManagerImpl * @return true if Application is subscribed for way points * otherwise false */ - bool IsAppSubscribedForWayPoints(const uint32_t app); + bool IsAppSubscribedForWayPoints(const uint32_t app_id) const; /** * @brief Subscribe Application for way points diff --git a/src/components/application_manager/include/application_manager/commands/hmi/navi_subscribe_way_points_request.h b/src/components/application_manager/include/application_manager/commands/hmi/navi_subscribe_way_points_request.h index 2e9465b1e3..6d6a80a29d 100644 --- a/src/components/application_manager/include/application_manager/commands/hmi/navi_subscribe_way_points_request.h +++ b/src/components/application_manager/include/application_manager/commands/hmi/navi_subscribe_way_points_request.h @@ -18,7 +18,7 @@ public: * * @param message Incoming SmartObject message **/ - explicit NaviSubscribeWayPointsRequest(const MessageSharedPtr &); + explicit NaviSubscribeWayPointsRequest(const MessageSharedPtr& message); /** * @brief NaviSubscribeWayPointsRequest class destructor **/ @@ -26,7 +26,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(NaviSubscribeWayPointsRequest); diff --git a/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_request.h b/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_request.h index 58d0fc266f..dc5d06fa91 100644 --- a/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_request.h +++ b/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_request.h @@ -18,7 +18,7 @@ public: * * @param message Incoming SmartObject message **/ - explicit NaviUnSubscribeWayPointsRequest(const MessageSharedPtr &); + explicit NaviUnSubscribeWayPointsRequest(const MessageSharedPtr& message); /** * @brief NaviUnSubscribeWayPointsRequest class destructor **/ @@ -26,7 +26,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(NaviUnSubscribeWayPointsRequest); diff --git a/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_response.h b/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_response.h index e8a524f78d..eba9062e6b 100644 --- a/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_response.h +++ b/src/components/application_manager/include/application_manager/commands/hmi/navi_unsubscribe_way_points_response.h @@ -36,5 +36,4 @@ class NaviUnSubscribeWaypointsResponse } // namespace commands } // namespace application_manager - #endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_COMMANDS_HMI_NAVI_UNSUBSCRIBE_WAY_POINTS_RESPONSE_H_ diff --git a/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_request.h b/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_request.h index c665904067..3e1a7b2075 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_request.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_request.h @@ -25,7 +25,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; /** * @brief Interface method that is called whenever new event received * diff --git a/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_response.h b/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_response.h index 6514a3e7aa..2a2ad9e014 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_response.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/subscribe_way_points_response.h @@ -26,7 +26,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(SubscribeWayPointsResponse); }; diff --git a/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_request.h b/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_request.h index 25637598e2..d90c2b70a8 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_request.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_request.h @@ -22,7 +22,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; /** * @brief Interface method that is called whenever new event received * diff --git a/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_response.h b/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_response.h index 219cdb200f..d25649f845 100644 --- a/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_response.h +++ b/src/components/application_manager/include/application_manager/commands/mobile/unsubscribe_way_points_response.h @@ -26,7 +26,7 @@ public: /** * @brief Execute command **/ - virtual void Run(); + virtual void Run() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(UnSubscribeWayPointsResponse); }; diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h index 5dda974ac0..7678c7971d 100644 --- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h +++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h @@ -345,6 +345,14 @@ class ResumeCtrl: public app_mngr::event_engine::EventObserver { void AddSubscriptions(app_mngr::ApplicationSharedPtr application, const smart_objects::SmartObject& saved_app); + /** + * @brief AddSubscribedForWayPoints allows to restore subscription + * for WayPoints + * @param application application which will be resumed + * @param saved_app application specific section from backup file + */ + void AddSubscribedForWayPoints(app_mngr::ApplicationSharedPtr application, + const smart_objects::SmartObject& saved_app); bool CheckIgnCycleRestrictions(const smart_objects::SmartObject& saved_app); diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index a8aa4a2731..def90caa46 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -1262,11 +1262,6 @@ void ApplicationManagerImpl::OnServiceEndedCallback( break; } } - // SDL sends UnsubscribeWayPoints only for last application - if (subscribed_way_points_apps_list_.size() == 1) { - LOG4CXX_ERROR(logger_, "Send UnsubscribeWayPoints"); - MessageHelper::SendUnSubscribedWayPoints(); - } UnregisterApplication( session_key, reason, is_resuming, is_unexpected_disconnect); return; @@ -2506,6 +2501,12 @@ void ApplicationManagerImpl::UnregisterApplication( << "; is_unexpected_disconnect = " << is_unexpected_disconnect); + // SDL sends UnsubscribeWayPoints only for last application + if (subscribed_way_points_apps_list_.size() == 1) { + LOG4CXX_ERROR(logger_, "Send UnsubscribeWayPoints"); + MessageHelper::SendUnSubscribedWayPoints(); + } + NaviServiceStatusMap::iterator it = navi_service_status_.find(app_id); if (navi_service_status_.end() != it) { navi_service_status_.erase(it); @@ -3462,14 +3463,14 @@ void ApplicationManagerImpl::ClearTTSGlobalPropertiesList() { tts_global_properties_app_list_.clear(); } -bool ApplicationManagerImpl::IsAppSubscribedForWayPoints(const uint32_t app) { +bool ApplicationManagerImpl::IsAppSubscribedForWayPoints( + const uint32_t app_id) const { LOG4CXX_AUTO_TRACE(logger_); - if (subscribed_way_points_apps_list_.find(app) == + if (subscribed_way_points_apps_list_.find(app_id) == subscribed_way_points_apps_list_.end()) { return false; - } else { - return true; } + return true; } void ApplicationManagerImpl::SubscribeAppForWayPoints(const uint32_t app) { @@ -3486,9 +3487,48 @@ bool ApplicationManagerImpl::IsAnyAppSubscribedForWayPoints() const { LOG4CXX_AUTO_TRACE(logger_); if (subscribed_way_points_apps_list_.size() == 0) { return false; - } else { - return true; } + return true; +} + +const std::set<int32_t>& ApplicationManagerImpl::GetSubscribedForWayPoints() + const { + LOG4CXX_AUTO_TRACE(logger_); + return subscribed_way_points_apps_list_; +} + +void ApplicationManagerImpl::SetSubscribedForWayPoints( + const std::set<int32_t>& subscribed_way_points_apps) { + LOG4CXX_AUTO_TRACE(logger_); + subscribed_way_points_apps_list_ = subscribed_way_points_apps; +} + +bool ApplicationManagerImpl::IsAppSubscribedForWayPoints( + const uint32_t app_id) const { + LOG4CXX_AUTO_TRACE(logger_); + if (subscribed_way_points_apps_list_.find(app_id) == + subscribed_way_points_apps_list_.end()) { + return false; + } + return true; +} + +void ApplicationManagerImpl::SubscribeAppForWayPoints(const uint32_t app) { + LOG4CXX_AUTO_TRACE(logger_); + subscribed_way_points_apps_list_.insert(app); +} + +void ApplicationManagerImpl::UnSubscribeAppForWayPoints(const uint32_t app) { + LOG4CXX_AUTO_TRACE(logger_); + subscribed_way_points_apps_list_.erase(app); +} + +bool ApplicationManagerImpl::IsAnyAppSubscribedForWayPoints() const { + LOG4CXX_AUTO_TRACE(logger_); + if (subscribed_way_points_apps_list_.size() == 0) { + return false; + } + return true; } const std::set<int32_t>& ApplicationManagerImpl::GetSubscribedForWayPoints() diff --git a/src/components/application_manager/src/commands/hmi/navi_subscribe_way_points_response.cc b/src/components/application_manager/src/commands/hmi/navi_subscribe_way_points_response.cc index 0d7c544d22..cf21ec85f2 100644 --- a/src/components/application_manager/src/commands/hmi/navi_subscribe_way_points_response.cc +++ b/src/components/application_manager/src/commands/hmi/navi_subscribe_way_points_response.cc @@ -32,7 +32,6 @@ #include "application_manager/commands/hmi/navi_subscribe_way_points_response.h" #include "application_manager/event_engine/event.h" -#include "interfaces/MOBILE_API.h" #include "interfaces/HMI_API.h" namespace application_manager { diff --git a/src/components/application_manager/src/resumption/resume_ctrl.cc b/src/components/application_manager/src/resumption/resume_ctrl.cc index 0c98c89aba..93c1326b77 100644 --- a/src/components/application_manager/src/resumption/resume_ctrl.cc +++ b/src/components/application_manager/src/resumption/resume_ctrl.cc @@ -455,6 +455,7 @@ bool ResumeCtrl::RestoreApplicationData(ApplicationSharedPtr application) { AddChoicesets(application, saved_app); SetGlobalProperties(application, saved_app); AddSubscriptions(application, saved_app); + AddSubscribedForWayPoints(application, saved_app); result = true; } else { LOG4CXX_WARN(logger_, @@ -565,6 +566,20 @@ void ResumeCtrl::SetGlobalProperties( } } +void ResumeCtrl::AddSubscribedForWayPoints(app_mngr::ApplicationSharedPtr application, + const smart_objects::SmartObject& saved_app) { + LOG4CXX_AUTO_TRACE(logger_); + + if (saved_app.keyExists(strings::subscribed_for_way_points)) { + const smart_objects::SmartObject& subscribed_for_way_points_so = + saved_app[strings::subscribed_for_way_points]; + if (true == subscribed_for_way_points_so.asBool()) { + application_manager::ApplicationManagerImpl::instance()-> + SubscribeAppForWayPoints(application->app_id()); + } + } +} + void ResumeCtrl::AddSubscriptions(ApplicationSharedPtr application, const smart_objects::SmartObject& saved_app) { LOG4CXX_AUTO_TRACE(logger_); diff --git a/src/components/application_manager/src/resumption/resumption_data_db.cc b/src/components/application_manager/src/resumption/resumption_data_db.cc index 4252e86c4c..ab75e3b6d9 100644 --- a/src/components/application_manager/src/resumption/resumption_data_db.cc +++ b/src/components/application_manager/src/resumption/resumption_data_db.cc @@ -1415,21 +1415,24 @@ bool ResumptionDataDB::SelectDataFromAppTable( LOG4CXX_WARN(logger_, "Problem with execution kSelectAppTable query"); return false; } - /* Position of data in "query" : - field "appID" from table "application" = 0 - field "connection_key" from table "application" = 1 - field "grammarID" from table "application" = 2 - field "hashID" from table "application" = 3 - field "hmiAppID" from table "application" = 4 - field "hmiLevel" from table "application" = 5 - field "ign_off_count" from table "application" = 6 - field "suspend_count" from table "application" = 7 - field "timeStamp" from table "application" = 7 - field "deviceID" from table "application" = 8 - field "isMediaApplication" from table "application" = 9 - */ + + // Position of data in "query" : + // field "appID" from table "application" = 0 + // field "connection_key" from table "application" = 1 + // field "grammarID" from table "application" = 2 + // field "hashID" from table "application" = 3 + // field "hmiAppID" from table "application" = 4 + // field "hmiLevel" from table "application" = 5 + // field "ign_off_count" from table "application" = 6 + // field "suspend_count" from table "application" = 7 + // field "timeStamp" from table "application" = 8 + // field "deviceID" from table "application" = 9 + // field "isMediaApplication" from table "application" = 10 + // field "IsSubscribedForWayPoints" from table "application" = 11 + uint32_t connection_key = query.GetUInteger(1); + saved_app[strings::app_id] = query.GetString(0); - saved_app[strings::connection_key] = query.GetUInteger(1); + saved_app[strings::connection_key] = connection_key; uint32_t grammarID = query.GetUInteger(2); if (grammarID) { saved_app[strings::grammar_id] = grammarID; @@ -1442,6 +1445,7 @@ bool ResumptionDataDB::SelectDataFromAppTable( saved_app[strings::time_stamp] = query.GetUInteger(8); saved_app[strings::device_id] = query.GetString(9); saved_app[strings::is_media_application] = query.GetBoolean(10); + saved_app[strings::subscribed_for_way_points] = query.GetBoolean(11); LOG4CXX_INFO(logger_, "Data from application table was restored successfully"); @@ -2621,6 +2625,9 @@ bool ResumptionDataDB::InsertApplicationData( const int64_t hmi_app_id = application.m_hmi_app_id; const mobile_apis::HMILevel::eType hmi_level = application.m_hmi_level; bool is_media_application = application.m_is_media_application; + bool is_subscribed_for_way_points = + app_mngr::ApplicationManagerImpl::instance()->IsAppSubscribedForWayPoints( + connection_key); if (!query.Prepare(kInsertApplication)) { LOG4CXX_WARN(logger_, @@ -2641,7 +2648,8 @@ bool ResumptionDataDB::InsertApplicationData( field "idglobalProperties" from table "application" = 8 field "isMediaApplication" from table "application" = 9 field "appID" from table "application" = 10 - field "deviceID" from table "application" = 11*/ + field "deviceID" from table "application" = 11 + field "isSubscribedForWayPoints" from table "application" = 12*/ query.Bind(0, connection_key); query.Bind(1, grammar_id); query.Bind(2, hash); @@ -2658,6 +2666,7 @@ bool ResumptionDataDB::InsertApplicationData( query.Bind(9, is_media_application); query.Bind(10, policy_app_id); query.Bind(11, device_id); + query.Bind(12, is_subscribed_for_way_points); if (!query.Exec()) { LOG4CXX_WARN(logger_, "Problem with execution query"); diff --git a/src/components/application_manager/src/resumption/resumption_data_json.cc b/src/components/application_manager/src/resumption/resumption_data_json.cc index 883d495c16..becc9c19ce 100644 --- a/src/components/application_manager/src/resumption/resumption_data_json.cc +++ b/src/components/application_manager/src/resumption/resumption_data_json.cc @@ -63,8 +63,9 @@ void ResumptionDataJson::SaveApplication( const uint32_t time_stamp = (uint32_t)time(NULL); const std::string device_mac = application->mac_address(); const mobile_apis::HMILevel::eType hmi_level = application->hmi_level(); - const std::set<int32_t> subscribed_for_way_points = - app_mngr::ApplicationManagerImpl::instance()->GetSubscribedForWayPoints(); + const bool is_subscribed_for_way_points = + app_mngr::ApplicationManagerImpl::instance()-> + IsAppSubscribedForWayPoints(application->app_id()); sync_primitives::AutoLock autolock(resumption_lock_); Json::Value tmp; @@ -99,9 +100,7 @@ void ResumptionDataJson::SaveApplication( GetApplicationFiles(application), tmp); json_app[strings::application_files] = tmp; json_app[strings::time_stamp] = time_stamp; - Formatters::CFormatterJsonBase::objToJsonValue( - GetSubscribedForWayPoints(subscribed_for_way_points), tmp); - json_app[strings::subscribed_for_way_points] = tmp; + json_app[strings::subscribed_for_way_points] = is_subscribed_for_way_points; LOG4CXX_DEBUG(logger_, "SaveApplication : " << json_app.toStyledString()); } @@ -272,18 +271,6 @@ bool ResumptionDataJson::GetSavedApplication( const Json::Value& json_saved_app = GetSavedApplications()[idx]; Formatters::CFormatterJsonBase::jsonValueToObj(json_saved_app, saved_app); - smart_objects::SmartArray app_id_list = - *(saved_app[strings::subscribed_for_way_points].asArray()); - - std::set<int32_t> subscribed_for_way_points; - - for (smart_objects::SmartArray::iterator i = app_id_list.begin(); - i != app_id_list.end(); ++i) { - subscribed_for_way_points.insert((*i).asInt()); - } - - app_mngr::ApplicationManagerImpl::instance()->SetSubscribedForWayPoints( - subscribed_for_way_points); return true; } diff --git a/src/components/application_manager/src/resumption/resumption_sql_queries.cc b/src/components/application_manager/src/resumption/resumption_sql_queries.cc index 1c1bcc3b35..5f318e6955 100644 --- a/src/components/application_manager/src/resumption/resumption_sql_queries.cc +++ b/src/components/application_manager/src/resumption/resumption_sql_queries.cc @@ -223,6 +223,7 @@ const std::string kCreateSchema = " `deviceID` TEXT, " " `idglobalProperties` INTEGER, " " `isMediaApplication` BOOL, " + " `isSubscribedForWayPoints` BOOL, " " CONSTRAINT `fk_globalProperties` " " FOREIGN KEY(`idglobalProperties`) " " REFERENCES `globalProperties`(`idglobalProperties`) " @@ -790,9 +791,9 @@ const std::string kInsertApplication = "(`connection_key`, `grammarID`, `hashID`, " "`hmiAppID`, `hmiLevel`, `ign_off_count`, " "`timeStamp`, `idglobalProperties`, " - "`isMediaApplication`, `appID`, `deviceID`) " + "`isMediaApplication`, `appID`, `deviceID`, `isSubscribedForWayPoints`) " "VALUES " - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; const std::string kSelectCountFiles = "SELECT COUNT (`idfile`) " @@ -945,7 +946,7 @@ const std::string kSelectTTSChunk = const std::string kSelectAppTable = "SELECT `appID`, `connection_key`, `grammarID`, `hashID`, `hmiAppID`, " "`hmiLevel`, `ign_off_count`, " - "`timeStamp`, `deviceID`, `isMediaApplication` " + "`timeStamp`, `deviceID`, `isMediaApplication`, `isSubscribedForWayPoints` " "FROM `application` " "WHERE `appID` = ? AND `deviceID` = ?;"; |