summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Kalinich (GitHub) <AKalinich@luxoft.com>2021-10-14 16:48:26 -0400
committerGitHub <noreply@github.com>2021-10-14 16:48:26 -0400
commitc1ae269995ac18a5fd2cbbb9ed0ab2beb213d7d2 (patch)
tree8eaaf2adaab90dfbcb6cb20848d4932f005da8b4
parentb0ccb4809af33a1b8fd30c16bfa77ac738e860ea (diff)
downloadsdl_core-c1ae269995ac18a5fd2cbbb9ed0ab2beb213d7d2.tar.gz
Fix/crash after ptu for another app hmi type (#3795)
* Added RC plugin extension after PTU * Add new event `kAppHmiTypesChanged` Co-authored-by: OlhaVorobiova <olha.vorobiova@dxc.com>
-rw-r--r--src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h1
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/include/app_service_rpc_plugin/app_service_app_extension.h3
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_app_extension.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc21
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_app_extension.h5
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_rpc_plugin.h12
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_app_extension.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc77
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc6
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/on_interior_vehicle_data_notification_test.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_app_extension_test.cc6
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/rc_pending_resumption_handler_test.cc9
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager/resource_allocation_manager_impl_test.cc37
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/extensions/system_capability_app_extension.h2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_app_extension.h2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/extensions/system_capability_app_extension.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc41
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_app_extension.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_app_extension.h2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_app_extension.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc22
-rw-r--r--src/components/application_manager/src/application_impl.cc13
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc13
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) {