summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander <akutsan@luxoft.com>2018-06-16 20:43:22 +0300
committerIra Lytvynenko (GitHub) <ILytvynenko@luxoft.com>2018-06-26 12:01:48 +0300
commitf86f1829ed1fc41d6bf1fc9a5203d637b80255cb (patch)
tree585808d461a0d6ab708ea25d909611202e9a5daf
parentc536c08394fd1dafbf8dc673f391c3226a6f8a28 (diff)
downloadsdl_core-f86f1829ed1fc41d6bf1fc9a5203d637b80255cb.tar.gz
Add to IVI plugin functionality to clear all application data.
-rw-r--r--src/components/application_manager/include/application_manager/plugin_manager/rpc_plugin.h3
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc57
3 files changed, 61 insertions, 1 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 ecc6b2c265..c9a34a75d6 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
@@ -56,7 +56,8 @@ enum PolicyEvent { kApplicationPolicyUpdated = 0, kApplicationsDisabled };
enum ApplicationEvent {
kApplicationExit = 0,
kApplicationRegistered,
- kApplicationUnregistered
+ kApplicationUnregistered,
+ kDeleteApplicationData
};
class RPCPlugin {
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
index 2e4978a40e..16b644cfb3 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
@@ -66,6 +66,8 @@ class VehicleInfoPlugin : public plugins::RPCPlugin {
VehicleInfoAppExtension& ext);
private:
+ void DeleteSubscriptions(app_mngr::ApplicationSharedPtr app);
+
std::unique_ptr<app_mngr::CommandFactory> command_factory_;
app_mngr::ApplicationManager* application_manager_;
static const VehicleData vehicle_data_;
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 815a7e435b..09d9ce999f 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
@@ -158,6 +158,63 @@ void VehicleInfoPlugin::ProcessResumptionSubscription(
(*request)[strings::msg_params] = msg_params;
application_manager_->GetRPCService().ManageHMICommand(request);
}
+
+auto FindAppSubscribedToIVI(mobile_apis::VehicleDataType::eType ivi_data,
+ application_manager::ApplicationManager& app_mngr) {
+ auto& applications = app_mngr.applications();
+
+ for (auto& app : applications) {
+ auto& ext = VehicleInfoAppExtension::ExtractVIExtension(app);
+ if (ext.isSubscribedToVehicleInfo(ivi_data)) {
+ return app;
+ }
+ }
+ return application_manager::ApplicationSharedPtr;
+}
+
+auto GetUnsubscribeIVIRequest(
+ int32_t ivi_id, application_manager::ApplicationManager& app_mngr) {
+ using namespace smart_objects;
+
+ auto find_ivi_name = [ivi_id]() {
+ for (auto item : VehicleInfoPlugin::vehicle_data_) {
+ if (ivi_id == item.second) {
+ return item.first;
+ }
+ }
+ return std::string();
+ };
+ std::string key_name = find_ivi_name();
+ DCHECK_OR_RETURN_VOID(!key_name.empty());
+ smart_objects::SmartObject msg_params =
+ smart_objects::SmartObject(smart_objects::SmartType_Map);
+ msg_params[key_name] = true;
+
+ SmartObjectSPtr message = CreateMessageForHMI(
+ hmi_apis::messageType::request, app_mngr.GetNextHMICorrelationID());
+ DCHECK(message);
+
+ SmartObject& object = *message;
+ object[strings::params][strings::function_id] =
+ hmi_apis::FunctionID::VehicleInfo_UnsubscribeVehicleData;
+
+ object[strings::msg_params] = msg_params;
+ return message;
+}
+
+void VehicleInfoPlugin::DeleteSubscriptions(
+ application_manager::ApplicationSharedPtr app) {
+ auto& ext = VehicleInfoAppExtension::ExtractVIExtension(app);
+ auto subscriptions = ext.Subscriptions();
+ for (auto& ivi : subscriptions) {
+ ext.unsubscribeFromVehicleInfo(ivi);
+ still_subscribed_app = FindAppSubscribedToIVI(ivi, application_manager_);
+ if (!still_subscribed_app) {
+ auto message = GetUnsubscribeIVIRequest(ivi, application_manager_);
+ app_mngr.GetRPCService().ManageHMICommand(message);
+ }
+ }
+}
}
extern "C" application_manager::plugin_manager::RPCPlugin* Create() {