summaryrefslogtreecommitdiff
path: root/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc')
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc77
1 files changed, 52 insertions, 25 deletions
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();