diff options
27 files changed, 186 insertions, 121 deletions
diff --git a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h index 0c7538e809..4f143dc365 100644 --- a/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h +++ b/src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h @@ -62,6 +62,7 @@ enum ApplicationEvent { kApplicationUnregistered, kDeleteApplicationData, kGlobalPropertiesUpdated, + kAppHmiTypesChanged, kRCStatusChanged }; diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_app_extension.h b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_app_extension.h index 8d307325fc..b7898709ab 100644 --- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_app_extension.h +++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_app_extension.h @@ -44,7 +44,6 @@ class AppServiceRpcPlugin; namespace app_mngr = application_manager; -typedef int AppExtensionUID; typedef mobile_apis::VehicleDataType::eType VehicleDataType; /** * @brief Defines set of app service types @@ -114,6 +113,8 @@ class AppServiceAppExtension : public app_mngr::AppExtension { static AppServiceAppExtension& ExtractASExtension( application_manager::Application& app); + static const app_mngr::AppExtensionUID AppServiceAppExtensionUID = 455; + private: AppServiceSubscriptions subscribed_data_; AppServiceRpcPlugin& plugin_; diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_app_extension.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_app_extension.cc index 1b8c5bfd1d..1cd2fd690a 100644 --- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_app_extension.cc +++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_app_extension.cc @@ -38,8 +38,6 @@ SDL_CREATE_LOG_VARIABLE("AppServiceRpcPlugin") namespace app_service_rpc_plugin { -const AppExtensionUID AppServiceAppExtensionUID = 455; - AppServiceAppExtension::AppServiceAppExtension( AppServiceRpcPlugin& plugin, application_manager::Application& app) : app_mngr::AppExtension(AppServiceAppExtensionUID) diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc index 0e805da46c..e842ea7276 100644 --- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc +++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc @@ -76,11 +76,22 @@ void AppServiceRpcPlugin::OnPolicyEvent(plugins::PolicyEvent event) {} void AppServiceRpcPlugin::OnApplicationEvent( plugins::ApplicationEvent event, app_mngr::ApplicationSharedPtr application) { - if (plugins::ApplicationEvent::kApplicationRegistered == event) { - application->AddExtension( - std::make_shared<AppServiceAppExtension>(*this, *application)); - } else if (plugins::ApplicationEvent::kDeleteApplicationData == event) { - DeleteSubscriptions(application); + switch (event) { + case plugins::ApplicationEvent::kApplicationRegistered: { + application->AddExtension( + std::make_shared<AppServiceAppExtension>(*this, *application)); + break; + } + + case plugins::ApplicationEvent::kApplicationUnregistered: + case plugins::ApplicationEvent::kDeleteApplicationData: { + DeleteSubscriptions(application); + break; + } + + default: { + break; + } } } diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_app_extension.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_app_extension.h index 8b2162c9ab..031e89fd85 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_app_extension.h +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_app_extension.h @@ -143,8 +143,7 @@ class RCRPCPlugin; class RCAppExtension : public application_manager::AppExtension { public: - explicit RCAppExtension(application_manager::AppExtensionUID uid, - RCRPCPlugin& plugin, + explicit RCAppExtension(RCRPCPlugin& plugin, application_manager::Application& application); ~RCAppExtension(); @@ -232,6 +231,8 @@ class RCAppExtension : public application_manager::AppExtension { */ void SetUserLocation(const Grid& grid); + static const application_manager::AppExtensionUID RCAppExtensionID = 153; + private: /** * @brief Checks if the application's pointer is valid and update the diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h index c1f7339aa3..e45d48d63a 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h @@ -125,7 +125,17 @@ class RCRPCPlugin : public plugins::RPCPlugin { bool IsOtherAppsSubscribed(const rc_rpc_types::ModuleUid& module, const uint32_t app_id); - static const uint32_t kRCPluginID = 153; + /** + * @brief Creates the RC extension for specified application + * @param application pointer to app to work with + */ + void CreateRcExtension(application_manager::ApplicationSharedPtr application); + + /** + * @brief Removes the RC extensions for specified application + * @param application pointer to app to work with + */ + void RemoveRcExtension(application_manager::ApplicationSharedPtr application); typedef std::vector<application_manager::ApplicationSharedPtr> Apps; static Apps GetRCApplications( diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_app_extension.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_app_extension.cc index b623350388..b38df8f985 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_app_extension.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_app_extension.cc @@ -71,10 +71,11 @@ std::set<rc_rpc_plugin::ModuleUid> ConvertSmartObjectToModuleCollection( } // namespace namespace rc_rpc_plugin { -RCAppExtension::RCAppExtension(application_manager::AppExtensionUID uid, - RCRPCPlugin& plugin, +RCAppExtension::RCAppExtension(RCRPCPlugin& plugin, application_manager::Application& application) - : AppExtension(uid), plugin_(plugin), application_(application) {} + : AppExtension(RCAppExtensionID) + , plugin_(plugin) + , application_(application) {} void RCAppExtension::SubscribeToInteriorVehicleData(const ModuleUid& module) { subscribed_interior_vehicle_data_.insert(module); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc index b2d1f1513b..7b6d5041c0 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc @@ -186,7 +186,8 @@ const std::vector<std::string> RCHelpers::GetModuleTypesList() { RCAppExtensionPtr RCHelpers::GetRCExtension( application_manager::Application& app) { SDL_LOG_AUTO_TRACE(); - auto extension_interface = app.QueryInterface(RCRPCPlugin::kRCPluginID); + auto extension_interface = + app.QueryInterface(RCAppExtension::RCAppExtensionID); auto extension = std::static_pointer_cast<RCAppExtension>(extension_interface); return extension; diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc index 8250437e78..b110d3157d 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc @@ -111,42 +111,50 @@ void RCRPCPlugin::OnApplicationEvent( application_manager::plugin_manager::ApplicationEvent event, application_manager::ApplicationSharedPtr application) { SDL_LOG_AUTO_TRACE(); - if (!application->is_remote_control_supported()) { - SDL_LOG_DEBUG( - "Remote control is not supported for application with app_id: " - << application->app_id()); - return; - } + switch (event) { case plugins::kApplicationRegistered: { - auto extension = std::shared_ptr<RCAppExtension>( - new RCAppExtension(kRCPluginID, *this, *application)); - DCHECK_OR_RETURN_VOID(application->AddExtension(extension)); - const auto driver_location = - rc_capabilities_manager_ - ->GetDriverLocationFromSeatLocationCapability(); - extension->SetUserLocation(driver_location); + if (application->is_remote_control_supported()) { + CreateRcExtension(application); + } + break; } + case plugins::kApplicationUnregistered: case plugins::kApplicationExit: { - resource_allocation_manager_->OnApplicationEvent(event, application); - interior_data_manager_->OnApplicationEvent(event, application); - break; - } - case plugins::kApplicationUnregistered: { - resource_allocation_manager_->OnApplicationEvent(event, application); - interior_data_manager_->OnApplicationEvent(event, application); + if (application->is_remote_control_supported()) { + resource_allocation_manager_->OnApplicationEvent(event, application); + interior_data_manager_->OnApplicationEvent(event, application); + } + break; } case plugins::kGlobalPropertiesUpdated: { - const auto user_location = application->get_user_location(); - auto extension = RCHelpers::GetRCExtension(*application); - extension->SetUserLocation(user_location); + if (application->is_remote_control_supported()) { + const auto user_location = application->get_user_location(); + auto extension = RCHelpers::GetRCExtension(*application); + extension->SetUserLocation(user_location); + } + break; } case plugins::kRCStatusChanged: { - resource_allocation_manager_->SendOnRCStatusNotifications( - NotificationTrigger::APP_REGISTRATION, application); + if (application->is_remote_control_supported()) { + resource_allocation_manager_->SendOnRCStatusNotifications( + NotificationTrigger::APP_REGISTRATION, application); + } + + break; + } + case plugins::kAppHmiTypesChanged: { + auto extension = + application->QueryInterface(RCAppExtension::RCAppExtensionID); + if (!application->is_remote_control_supported() && extension) { + RemoveRcExtension(application); + } else if (application->is_remote_control_supported() && !extension) { + CreateRcExtension(application); + } + break; } default: @@ -154,6 +162,25 @@ void RCRPCPlugin::OnApplicationEvent( } } +void RCRPCPlugin::CreateRcExtension( + application_manager::ApplicationSharedPtr application) { + auto extension = + std::shared_ptr<RCAppExtension>(new RCAppExtension(*this, *application)); + DCHECK_OR_RETURN_VOID(application->AddExtension(extension)); + const auto driver_location = + rc_capabilities_manager_->GetDriverLocationFromSeatLocationCapability(); + extension->SetUserLocation(driver_location); +} + +void RCRPCPlugin::RemoveRcExtension( + application_manager::ApplicationSharedPtr application) { + resource_allocation_manager_->OnApplicationEvent( + plugins::kApplicationUnregistered, application); + interior_data_manager_->OnApplicationEvent(plugins::kApplicationUnregistered, + application); + application->RemoveExtension(RCAppExtension::RCAppExtensionID); +} + void RCRPCPlugin::ProcessResumptionSubscription( application_manager::Application& app, RCAppExtension& ext) { SDL_LOG_AUTO_TRACE(); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc index 3772a25f47..f4ef39f488 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc @@ -65,7 +65,6 @@ using ::testing::ReturnRef; using ::testing::SaveArg; namespace { -const int kModuleId = 153u; const uint32_t kConnectionKey = 1u; const uint32_t kAppId = 0u; const std::string kPolicyAppId = "Test"; @@ -83,13 +82,13 @@ class ButtonPressRequestTest smart_objects::SmartType_Map)) , mock_app_(std::make_shared<NiceMock<MockApplication> >()) , rc_app_extension_(std::make_shared<rc_rpc_plugin::RCAppExtension>( - kModuleId, rc_plugin_, *mock_app_)) {} + rc_plugin_, *mock_app_)) {} void SetUp() OVERRIDE { smart_objects::SmartObject control_caps((smart_objects::SmartType_Array)); (*rc_capabilities_)[strings::kradioControlCapabilities] = control_caps; ON_CALL(app_mngr_, application(_)).WillByDefault(Return(mock_app_)); - ON_CALL(*mock_app_, QueryInterface(RCRPCPlugin::kRCPluginID)) + ON_CALL(*mock_app_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillByDefault(Return(rc_app_extension_)); ON_CALL(app_mngr_, GetPolicyHandler()) .WillByDefault(ReturnRef(mock_policy_handler_)); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc index fdfa3ea03a..5fa474c631 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc @@ -95,9 +95,9 @@ class GetInteriorVehicleDataRequestTest : mock_app_(std::make_shared<NiceMock<MockApplication> >()) , mock_app2_(std::make_shared<NiceMock<MockApplication> >()) , rc_app_extension_( - std::make_shared<RCAppExtension>(kModuleId, rc_plugin_, *mock_app_)) - , rc_app_extension2_(std::make_shared<RCAppExtension>( - kModuleId, rc_plugin_, *mock_app2_)) + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_)) + , rc_app_extension2_( + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app2_)) , apps_lock_(std::make_shared<sync_primitives::Lock>()) , apps_da_(apps_, apps_lock_) , rc_capabilities_(std::make_shared<smart_objects::SmartObject>( diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc index 6c7a7ba67e..9acfc084c5 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc @@ -62,7 +62,6 @@ const uint32_t kConnectionKey = 1u; const std::string kPolicyAppId = "Test"; const std::string module_type = "CLIMATE"; const std::string module_id = "34045662-a9dc-4823-8435-91056d4c26cb"; -const int kModuleId = 153u; } // namespace namespace rc_rpc_plugin_test { @@ -75,7 +74,7 @@ class OnInteriorVehicleDataNotificationTest OnInteriorVehicleDataNotificationTest() : mock_app_(std::make_shared<NiceMock<MockApplication> >()) , rc_app_extension_( - std::make_shared<RCAppExtension>(kModuleId, rc_plugin_, *mock_app_)) + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_)) , apps_lock_(std::make_shared<sync_primitives::Lock>()) , apps_da_(apps_, apps_lock_) { ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId)); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc index 1b83034daf..82d1b128f0 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc @@ -99,7 +99,6 @@ const std::string kResource = "CLIMATE"; const std::string kResourceId = "34045662-a9dc-4823-8435-91056d4c26cb"; const std::string kPolicyAppId = "policy_app_id"; const std::string kMacAddress = "device1"; -const uint32_t kPluginID = RCRPCPlugin::kRCPluginID; } // namespace class RCGetInteriorVehicleDataConsentTest @@ -124,7 +123,7 @@ class RCGetInteriorVehicleDataConsentTest hmi_so_factory_, mobile_so_factoy_) , rc_app_extension_( - std::make_shared<RCAppExtension>(kPluginID, rc_plugin_, *mock_app_)) + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_)) , mock_rpc_plugin_manager( std::make_shared<NiceMock<MockRPCPluginManager> >()) , rpc_plugin(mock_rpc_plugin) @@ -140,7 +139,7 @@ class RCGetInteriorVehicleDataConsentTest .WillByDefault(Return(application_manager::HmiInterfaces:: InterfaceState::STATE_AVAILABLE)); ON_CALL(app_mngr_, application(kAppId)).WillByDefault(Return(mock_app_)); - ON_CALL(*mock_app_, QueryInterface(RCRPCPlugin::kRCPluginID)) + ON_CALL(*mock_app_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillByDefault(Return(rc_app_extension_)); testing::NiceMock<rc_rpc_plugin_test::MockInteriorDataCache> mock_interior_data_cache_; diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc index 9ba959de29..fe190a796f 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc @@ -74,7 +74,7 @@ class SetInteriorVehicleDataRequestTest SetInteriorVehicleDataRequestTest() : mock_app_(std::make_shared<NiceMock<MockApplication> >()) , rc_app_extension_( - std::make_shared<RCAppExtension>(kModuleId, rc_plugin_, *mock_app_)) + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_)) , rc_capabilities_(std::make_shared<smart_objects::SmartObject>( smart_objects::SmartType::SmartType_Array)) {} @@ -89,7 +89,7 @@ class SetInteriorVehicleDataRequestTest .WillByDefault(Return(application_manager::HmiInterfaces:: InterfaceState::STATE_AVAILABLE)); ON_CALL(app_mngr_, application(kAppId)).WillByDefault(Return(mock_app_)); - ON_CALL(*mock_app_, QueryInterface(RCRPCPlugin::kRCPluginID)) + ON_CALL(*mock_app_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillByDefault(Return(rc_app_extension_)); ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kPolicyAppId)); diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_app_extension_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_app_extension_test.cc index 60c3fb9135..ea099ef901 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_app_extension_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_app_extension_test.cc @@ -40,10 +40,6 @@ #include "rc_rpc_plugin/rc_module_constants.h" #include "rc_rpc_plugin/rc_rpc_plugin.h" -namespace { -const uint32_t kRCAppExtensionId = 1ull; -} // namespace - namespace test { namespace components { namespace rc_rpc_plugin_test { @@ -57,7 +53,7 @@ class RcAppExtensionTest : public testing::Test { RcAppExtensionTest() : mock_app_(new NiceMock<MockApplication>()) , rc_app_extension_(std::make_shared<rc_rpc_plugin::RCAppExtension>( - kRCAppExtensionId, rc_plugin_, *mock_app_)) {} + rc_plugin_, *mock_app_)) {} protected: std::unique_ptr<MockApplication> mock_app_; diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_pending_resumption_handler_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_pending_resumption_handler_test.cc index 077d0d2927..8ea478cd19 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_pending_resumption_handler_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_pending_resumption_handler_test.cc @@ -78,7 +78,6 @@ const std::string kModuleType_1 = "CLIMATE"; const std::string kModuleId_1 = "9cb963f3-c5e8-41cb-b001-19421cc16552"; const std::string kModuleType_2 = "RADIO"; const std::string kModuleId_2 = "357a3918-9f35-4d86-a8b6-60cd4308d76f"; -const uint32_t kRCPluginID = rc_rpc_plugin::RCRPCPlugin::kRCPluginID; const auto kSourceHMI = application_manager::commands::Command::SOURCE_HMI; } // namespace @@ -171,9 +170,11 @@ class RCPendingResumptionHandlerTest : public ::testing::Test { } rc_rpc_plugin::RCAppExtensionPtr CreateExtension(MockApplication& app) { - auto rc_app_ext = std::make_shared<rc_rpc_plugin::RCAppExtension>( - kRCPluginID, rc_plugin_, app); - ON_CALL(app, QueryInterface(kRCPluginID)).WillByDefault(Return(rc_app_ext)); + auto rc_app_ext = + std::make_shared<rc_rpc_plugin::RCAppExtension>(rc_plugin_, app); + ON_CALL(app, + QueryInterface(rc_rpc_plugin::RCAppExtension::RCAppExtensionID)) + .WillByDefault(Return(rc_app_ext)); return rc_app_ext; } diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager/resource_allocation_manager_impl_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager/resource_allocation_manager_impl_test.cc index 501fbc323d..bae6ed805c 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager/resource_allocation_manager_impl_test.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager/resource_allocation_manager_impl_test.cc @@ -112,9 +112,8 @@ class RAManagerTest : public ::testing::Test { , mock_rc_helpers_(MockRCHelpers::rc_helpers_mock()) { ON_CALL(mock_app_mngr_, GetPolicyHandler()) .WillByDefault(ReturnRef(mock_policy_handler_)); - auto plugin_id = rc_rpc_plugin::RCRPCPlugin::kRCPluginID; app_ext_ptr_ = std::make_shared<rc_rpc_plugin::RCAppExtension>( - plugin_id, rc_plugin_, *mock_app_1_); + rc_plugin_, *mock_app_1_); ON_CALL(*mock_app_1_, app_id()).WillByDefault(Return(kAppId1)); PrepareResources(); @@ -130,13 +129,12 @@ class RAManagerTest : public ::testing::Test { ON_CALL(mock_app_mngr_, application(kAppId1)) .WillByDefault(Return(mock_app_1_)); ON_CALL(*mock_app_1_, - QueryInterface(rc_rpc_plugin::RCRPCPlugin::kRCPluginID)) + QueryInterface(rc_rpc_plugin::RCAppExtension::RCAppExtensionID)) .WillByDefault(Return(app_ext_ptr_)); ON_CALL(mock_app_mngr_, application(kAppId2)) .WillByDefault(Return(mock_app_2_)); - ON_CALL(*mock_app_2_, - QueryInterface(rc_rpc_plugin::RCRPCPlugin::kRCPluginID)) + ON_CALL(*mock_app_2_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillByDefault(Return(app_ext_ptr_)); OnRCStatusNotificationExpectations(); @@ -144,10 +142,7 @@ class RAManagerTest : public ::testing::Test { void SetUp() OVERRIDE { rc_app_extension_ = std::make_shared<rc_rpc_plugin::RCAppExtension>( - static_cast<application_manager::AppExtensionUID>( - rc_rpc_plugin::RCRPCPlugin::kRCPluginID), - rc_plugin_, - *mock_app_1_); + rc_plugin_, *mock_app_1_); ON_CALL(mock_rc_capabilities_manager_, GetDriverLocationFromSeatLocationCapability()) .WillByDefault(Return(kDriverLocation)); @@ -407,11 +402,8 @@ TEST_F(RAManagerTest, AppUnregistered_ReleaseResource) { mock_app_mngr_, mock_rpc_service_, mock_rc_capabilities_manager_); ra_manager.SetAccessMode(hmi_apis::Common_RCAccessMode::eType::AUTO_DENY); - RCAppExtensionPtr rc_extension_ptr = std::make_shared<RCAppExtension>( - application_manager::AppExtensionUID( - rc_rpc_plugin::RCRPCPlugin::kRCPluginID), - rc_plugin_, - *mock_app_1_); + RCAppExtensionPtr rc_extension_ptr = + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_1_); EXPECT_EQ(rc_rpc_plugin::AcquireResult::ALLOWED, ra_manager.AcquireResource(kModuleType1, kModuleId, kAppId1)); @@ -483,13 +475,10 @@ TEST_F(RAManagerTest, AppsDisallowed_ReleaseAllResources) { EXPECT_CALL(mock_app_mngr_, applications()).WillRepeatedly(Return(apps_da)); - RCAppExtensionPtr rc_extension_ptr = std::make_shared<RCAppExtension>( - application_manager::AppExtensionUID( - rc_rpc_plugin::RCRPCPlugin::kRCPluginID), - rc_plugin_, - *mock_app_1_); + RCAppExtensionPtr rc_extension_ptr = + std::make_shared<RCAppExtension>(rc_plugin_, *mock_app_1_); - EXPECT_CALL(*mock_app_1_, QueryInterface(RCRPCPlugin::kRCPluginID)) + EXPECT_CALL(*mock_app_1_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillRepeatedly(Return(rc_extension_ptr)); // Act @@ -517,13 +506,9 @@ TEST_F(RAManagerTest, AppGotRevokedModulesWithPTU_ReleaseRevokedResource) { .WillRepeatedly(Return(mock_app_1_)); RCAppExtensionPtr rc_extension_ptr = - std::make_shared<rc_rpc_plugin::RCAppExtension>( - application_manager::AppExtensionUID( - rc_rpc_plugin::RCRPCPlugin::kRCPluginID), - rc_plugin_, - *mock_app_1_); + std::make_shared<rc_rpc_plugin::RCAppExtension>(rc_plugin_, *mock_app_1_); - EXPECT_CALL(*mock_app_1_, QueryInterface(RCRPCPlugin::kRCPluginID)) + EXPECT_CALL(*mock_app_1_, QueryInterface(RCAppExtension::RCAppExtensionID)) .WillRepeatedly(Return(rc_extension_ptr)); ON_CALL(*mock_app_1_, is_remote_control_supported()) diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/extensions/system_capability_app_extension.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/extensions/system_capability_app_extension.h index 09fbc565c5..6b25bb7316 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/extensions/system_capability_app_extension.h +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/extensions/system_capability_app_extension.h @@ -69,7 +69,7 @@ class SystemCapabilityAppExtension : public app_mngr_::AppExtension { void RevertResumption( const smart_objects::SmartObject& subscriptions) OVERRIDE; - static const app_mngr_::AppExtensionUID SystemCapabilityAppExtensionUID; + static const app_mngr_::AppExtensionUID SystemCapabilityAppExtensionUID = 200; static SystemCapabilityAppExtension& ExtractExtension( app_mngr_::Application& app); diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_app_extension.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_app_extension.h index 9243baedee..ce4f56bd84 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_app_extension.h +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_app_extension.h @@ -59,7 +59,7 @@ class WayPointsAppExtension : public app_mngr::AppExtension { * @brief WayPointsAppExtensionUID unique identifier of waypoints * aplication extension */ - static unsigned WayPointsAppExtensionUID; + static const app_mngr::AppExtensionUID WayPointsAppExtensionUID = 138; private: SDLRPCPlugin& plugin_; diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/extensions/system_capability_app_extension.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/extensions/system_capability_app_extension.cc index 117e65d2cb..0217c6f6a5 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/extensions/system_capability_app_extension.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/extensions/system_capability_app_extension.cc @@ -7,9 +7,6 @@ SDL_CREATE_LOG_VARIABLE("GetSystemCapabilitiesAppExtension") namespace app_mngr_ = application_manager; namespace strings = app_mngr::strings; -const app_mngr_::AppExtensionUID - SystemCapabilityAppExtension::SystemCapabilityAppExtensionUID = 200; - SystemCapabilityAppExtension::SystemCapabilityAppExtension( sdl_rpc_plugin::SDLRPCPlugin& plugin, app_mngr_::Application& app) : app_mngr_::AppExtension( diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc index 7cdfc73ed0..a0ad320cac 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc @@ -81,21 +81,32 @@ void SDLRPCPlugin::OnApplicationEvent( plugins::ApplicationEvent event, app_mngr::ApplicationSharedPtr application) { SDL_LOG_AUTO_TRACE(); - if (plugins::ApplicationEvent::kApplicationRegistered == event) { - application->AddExtension( - std::make_shared<WayPointsAppExtension>(*this, *application)); - - auto sys_cap_ext_ptr = - std::make_shared<SystemCapabilityAppExtension>(*this, *application); - application->AddExtension(sys_cap_ext_ptr); - // Processing automatic subscription to SystemCapabilities for DISPLAY type - const auto capability_type = - mobile_apis::SystemCapabilityType::eType::DISPLAYS; - SDL_LOG_DEBUG("Subscription to DISPLAYS capability is enabled"); - sys_cap_ext_ptr->SubscribeTo(capability_type); - - } else if (plugins::ApplicationEvent::kDeleteApplicationData == event) { - ClearSubscriptions(application); + switch (event) { + case plugins::ApplicationEvent::kApplicationRegistered: { + application->AddExtension( + std::make_shared<WayPointsAppExtension>(*this, *application)); + + auto sys_cap_ext_ptr = + std::make_shared<SystemCapabilityAppExtension>(*this, *application); + application->AddExtension(sys_cap_ext_ptr); + // Processing automatic subscription to SystemCapabilities for DISPLAY + // type + const auto capability_type = + mobile_apis::SystemCapabilityType::eType::DISPLAYS; + SDL_LOG_DEBUG("Subscription to DISPLAYS capability is enabled"); + sys_cap_ext_ptr->SubscribeTo(capability_type); + break; + } + + case plugins::ApplicationEvent::kApplicationUnregistered: + case plugins::ApplicationEvent::kDeleteApplicationData: { + ClearSubscriptions(application); + break; + } + + default: { + break; + } } } diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_app_extension.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_app_extension.cc index ed8283e1f9..3c73a61f1b 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_app_extension.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_app_extension.cc @@ -32,7 +32,6 @@ SDL_CREATE_LOG_VARIABLE("WayPointsAppExtension") namespace sdl_rpc_plugin { namespace strings = application_manager::strings; -unsigned WayPointsAppExtension::WayPointsAppExtensionUID = 138; WayPointsAppExtension::WayPointsAppExtension( SDLRPCPlugin& plugin, application_manager::Application& app) diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_app_extension.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_app_extension.h index 7e3eabb6a1..1d3fcd1e74 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_app_extension.h +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_app_extension.h @@ -152,7 +152,7 @@ class VehicleInfoAppExtension : public app_mngr::AppExtension { * @brief VehicleInfoAppExtensionUID unique identifier of VehicleInfo * aplication extension */ - static unsigned VehicleInfoAppExtensionUID; + static const app_mngr::AppExtensionUID VehicleInfoAppExtensionUID = 146; /** * @brief ExtractVIExtension utility function to extract application extension diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_app_extension.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_app_extension.cc index 1b503ff943..cff5d294ad 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_app_extension.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_app_extension.cc @@ -38,8 +38,6 @@ SDL_CREATE_LOG_VARIABLE("VehicleInfoPlugin") namespace vehicle_info_plugin { namespace strings = application_manager::strings; -unsigned VehicleInfoAppExtension::VehicleInfoAppExtensionUID = 146; - VehicleInfoAppExtension::VehicleInfoAppExtension( VehicleInfoPlugin& plugin, application_manager::Application& app) : app_mngr::AppExtension( diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc index b20e52636c..84bd9f6b04 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc @@ -110,12 +110,22 @@ void VehicleInfoPlugin::OnApplicationEvent( plugins::ApplicationEvent event, app_mngr::ApplicationSharedPtr application) { SDL_LOG_AUTO_TRACE(); - if (plugins::ApplicationEvent::kApplicationRegistered == event) { - application->AddExtension( - std::make_shared<VehicleInfoAppExtension>(*this, *application)); - } else if ((plugins::ApplicationEvent::kDeleteApplicationData == event) || - (plugins::ApplicationEvent::kApplicationUnregistered == event)) { - DeleteSubscriptions(application); + switch (event) { + case plugins::ApplicationEvent::kApplicationRegistered: { + application->AddExtension( + std::make_shared<VehicleInfoAppExtension>(*this, *application)); + break; + } + + case plugins::ApplicationEvent::kApplicationUnregistered: + case plugins::ApplicationEvent::kDeleteApplicationData: { + DeleteSubscriptions(application); + break; + } + + default: { + break; + } } } diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc index a53141b5be..42afd93459 100644 --- a/src/components/application_manager/src/application_impl.cc +++ b/src/components/application_manager/src/application_impl.cc @@ -204,6 +204,7 @@ void ApplicationImpl::ChangeSupportingAppHMIType() { set_voice_communication_supported(false); set_mobile_projection_enabled(false); set_webengine_projection_enabled(false); + set_remote_control_supported(false); const smart_objects::SmartObject& array_app_types = *app_types_; uint32_t lenght_app_types = array_app_types.length(); @@ -224,6 +225,9 @@ void ApplicationImpl::ChangeSupportingAppHMIType() { case mobile_apis::AppHMIType::WEB_VIEW: set_webengine_projection_enabled(true); break; + case mobile_apis::AppHMIType::REMOTE_CONTROL: + set_remote_control_supported(true); + break; default: break; } @@ -1302,6 +1306,7 @@ AppExtensionPtr ApplicationImpl::QueryInterface(AppExtensionUID uid) { } bool ApplicationImpl::AddExtension(AppExtensionPtr extension) { + SDL_LOG_AUTO_TRACE(); if (!QueryInterface(extension->uid())) { SDL_LOG_TRACE("Add extenstion to add id" << app_id() << " with uid " << extension->uid()); @@ -1312,12 +1317,18 @@ bool ApplicationImpl::AddExtension(AppExtensionPtr extension) { } bool ApplicationImpl::RemoveExtension(AppExtensionUID uid) { + SDL_LOG_AUTO_TRACE(); auto it = std::find_if( extensions_.begin(), extensions_.end(), [uid](AppExtensionPtr extension) { return extension->uid() == uid; }); - return it != extensions_.end(); + if (extensions_.end() != it) { + extensions_.erase(it); + return true; + } + + return false; } const std::list<AppExtensionPtr>& ApplicationImpl::Extensions() const { diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index f350c9fc5a..b0b05a3031 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -4493,8 +4493,17 @@ void ApplicationManagerImpl::OnUpdateHMIAppType( } if (flag_diffirence_app_hmi_type) { - (*it)->set_app_types(transform_app_hmi_types); - (*it)->ChangeSupportingAppHMIType(); + ApplicationSharedPtr app = *it; + + app->set_app_types(transform_app_hmi_types); + app->ChangeSupportingAppHMIType(); + + auto on_app_hmi_types_changed = [app]( + plugin_manager::RPCPlugin& plugin) { + plugin.OnApplicationEvent(plugin_manager::kAppHmiTypesChanged, app); + }; + ApplyFunctorForEachPlugin(on_app_hmi_types_changed); + const mobile_apis::HMILevel::eType app_hmi_level = (*it)->hmi_level(mobile_apis::PredefinedWindows::DEFAULT_WINDOW); if (app_hmi_level == mobile_api::HMILevel::HMI_BACKGROUND) { |