From fe35283cb8fd61f0442905dd3973dc8bf56ec51e Mon Sep 17 00:00:00 2001 From: sniukalov Date: Wed, 26 Jun 2019 09:58:03 +0300 Subject: Adjustment of external policy component for multiple devices. --- .../policy_external/policy/policy_listener.h | 12 ++++- .../policy/policy_external/policy/policy_manager.h | 29 ++++++++-- .../include/policy/policy_manager_impl.h | 31 +++++++++-- .../policy_external/src/policy_manager_impl.cc | 63 ++++++++++++++++++++-- 4 files changed, 122 insertions(+), 13 deletions(-) diff --git a/src/components/include/policy/policy_external/policy/policy_listener.h b/src/components/include/policy/policy_external/policy/policy_listener.h index c64a6d5496..fc1af920d5 100644 --- a/src/components/include/policy/policy_external/policy/policy_listener.h +++ b/src/components/include/policy/policy_external/policy/policy_listener.h @@ -45,10 +45,18 @@ namespace custom_str = utils::custom_string; class PolicyListener { public: virtual ~PolicyListener() {} - virtual void OnPermissionsUpdated(const std::string& policy_app_id, + DEPRECATED virtual void OnPermissionsUpdated( + const std::string& policy_app_id, + const Permissions& permissions, + const policy::HMILevel& default_hmi) = 0; + virtual void OnPermissionsUpdated(const std::string& device_id, + const std::string& policy_app_id, const Permissions& permissions, const policy::HMILevel& default_hmi) = 0; - virtual void OnPermissionsUpdated(const std::string& policy_app_id, + DEPRECATED virtual void OnPermissionsUpdated( + const std::string& policy_app_id, const Permissions& permissions) = 0; + virtual void OnPermissionsUpdated(const std::string& device_id, + const std::string& policy_app_id, const Permissions& permissions) = 0; virtual void OnPendingPermissionChange(const std::string& policy_app_id) = 0; virtual void OnUpdateStatusChanged(const std::string&) = 0; diff --git a/src/components/include/policy/policy_external/policy/policy_manager.h b/src/components/include/policy/policy_external/policy/policy_manager.h index aecc4b607a..d399e2ef8e 100644 --- a/src/components/include/policy/policy_external/policy/policy_manager.h +++ b/src/components/include/policy/policy_external/policy/policy_manager.h @@ -405,12 +405,21 @@ class PolicyManager : public usage_statistics::StatisticsManager { const std::string& language) = 0; /** + * DEPRECATED * @brief Send OnPermissionsUpdated for choosen application * @param application_id Unique application id */ - virtual void SendNotificationOnPermissionsUpdated( + DEPRECATED virtual void SendNotificationOnPermissionsUpdated( const std::string& application_id) = 0; + /** + * @brief Send OnPermissionsUpdated for choosen application + * @param device_id device identifier + * @param application_id Unique application id + */ + virtual void SendNotificationOnPermissionsUpdated( + const std::string& device_id, const std::string& application_id) = 0; + /** * @brief Marks device as upaired * @param device_id id device @@ -501,13 +510,27 @@ class PolicyManager : public usage_statistics::StatisticsManager { */ virtual void OnAppsSearchCompleted(const bool trigger_ptu) = 0; + /** + * DEPRECATED + * @brief OnAppRegisteredOnMobile allows to handle event when application were + * succesfully registered on mobile device. + * It will send OnAppPermissionSend notification and will try to start PTU. + * + * @param application_id registered application. + */ + DEPRECATED virtual void OnAppRegisteredOnMobile( + const std::string& application_id) = 0; + /** * @brief OnAppRegisteredOnMobile allows to handle event when application were * succesfully registered on mobile device. - * It will send OnAppPermissionSend notification and will try to start PTU. * + * It will send OnAppPermissionSend notification and will try to start PTU. + * + * @param device_id device identifier * @param application_id registered application. */ - virtual void OnAppRegisteredOnMobile(const std::string& application_id) = 0; + virtual void OnAppRegisteredOnMobile(const std::string& device_id, + const std::string& application_id) = 0; virtual void OnDeviceSwitching(const std::string& device_id_from, const std::string& device_id_to) = 0; diff --git a/src/components/policy/policy_external/include/policy/policy_manager_impl.h b/src/components/policy/policy_external/include/policy/policy_manager_impl.h index 9dd2b3c6ec..c7d9c8478f 100644 --- a/src/components/policy/policy_external/include/policy/policy_manager_impl.h +++ b/src/components/policy/policy_external/include/policy/policy_manager_impl.h @@ -423,10 +423,11 @@ class PolicyManagerImpl : public PolicyManager { /** * @brief Send OnPermissionsUpdated for choosen application + * @param device_id device identifier * @param application_id Unique application id */ void SendNotificationOnPermissionsUpdated( - const std::string& application_id) OVERRIDE; + const std::string& device_id, const std::string& application_id) OVERRIDE; /** * @brief Removes unpaired device records and related records from DB @@ -686,13 +687,27 @@ class PolicyManagerImpl : public PolicyManager { bool UnknownRPCPassthroughAllowed( const std::string& policy_app_id) const OVERRIDE; + /** + * DEPRECATED + * @brief OnAppRegisteredOnMobile allows to handle event when application were + * succesfully registered on mobile device. + * It will send OnAppPermissionSend notification and will try to start PTU. + * + * @param application_id registered application. + */ + DEPRECATED void OnAppRegisteredOnMobile( + const std::string& application_id) OVERRIDE; + /** * @brief OnAppRegisteredOnMobile allows to handle event when application were * succesfully registered on mobile device. - * It will send OnAppPermissionSend notification and will try to start PTU. * + * It will send OnAppPermissionSend notification and will try to start PTU. + * + * @param device_id device identifier * @param application_id registered application. */ - void OnAppRegisteredOnMobile(const std::string& application_id) OVERRIDE; + void OnAppRegisteredOnMobile(const std::string& device_id, + const std::string& application_id) OVERRIDE; void OnDeviceSwitching(const std::string& device_id_from, const std::string& device_id_to) OVERRIDE; @@ -837,6 +852,14 @@ class PolicyManagerImpl : public PolicyManager { const BinaryMessage& pt_content); private: + /** + * DEPRECATED + * @brief Send OnPermissionsUpdated for choosen application + * @param application_id Unique application id + */ + void SendNotificationOnPermissionsUpdated( + const std::string& application_id) OVERRIDE; + /** * @brief Checks if PT update should be started and schedules it if needed */ @@ -1036,11 +1059,13 @@ class PolicyManagerImpl : public PolicyManager { /** * @brief Notify application about its permissions changes by preparing and * sending OnPermissionsChanged notification + * @param device_id device identifier * @param policy_app_id Application id to send notification to * @param app_group_permissons Current permissions for groups assigned to * application */ void NotifyPermissionsChanges( + const std::string& device_id, const std::string& policy_app_id, const std::vector& app_group_permissions); diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc index 42b67734ae..bc2e54800f 100644 --- a/src/components/policy/policy_external/src/policy_manager_impl.cc +++ b/src/components/policy/policy_external/src/policy_manager_impl.cc @@ -1017,6 +1017,48 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated( policy_table::Strings app_groups = GetGroupsNames(app_group_permissions); + Permissions notification_data; + PrepareNotificationData(functional_groupings, + app_groups, + app_group_permissions, + notification_data); + + LOG4CXX_INFO(logger_, + "Send notification for application_id: " << application_id); + + const ApplicationOnDevice who = {device_id, application_id}; + if (access_remote_->IsAppRemoteControl(who)) { + listener()->OnPermissionsUpdated( + device_id, application_id, notification_data); + return; + } + + std::string default_hmi; + GetDefaultHmi(application_id, &default_hmi); + + listener()->OnPermissionsUpdated( + device_id, application_id, notification_data, default_hmi); +} + +void PolicyManagerImpl::SendNotificationOnPermissionsUpdated( + const std::string& device_id, const std::string& application_id) { + LOG4CXX_AUTO_TRACE(logger_); + if (device_id.empty()) { + LOG4CXX_WARN(logger_, + "Couldn't find device info for application id " + "'" << application_id + << "'"); + return; + } + + std::vector app_group_permissions; + GetPermissionsForApp(device_id, application_id, app_group_permissions); + + policy_table::FunctionalGroupings functional_groupings; + cache_->GetFunctionalGroupings(functional_groupings); + + policy_table::Strings app_groups = GetGroupsNames(app_group_permissions); + Permissions notification_data; PrepareNotificationData(functional_groupings, app_groups, @@ -1028,7 +1070,8 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated( const ApplicationOnDevice who = {device_id, application_id}; if (access_remote_->IsAppRemoteControl(who)) { - listener()->OnPermissionsUpdated(application_id, notification_data); + listener()->OnPermissionsUpdated( + device_id, application_id, notification_data); return; } @@ -1036,7 +1079,7 @@ void PolicyManagerImpl::SendNotificationOnPermissionsUpdated( GetDefaultHmi(application_id, &default_hmi); listener()->OnPermissionsUpdated( - application_id, notification_data, default_hmi); + device_id, application_id, notification_data, default_hmi); } bool PolicyManagerImpl::CleanupUnpairedDevices() { @@ -1219,6 +1262,7 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges( } void PolicyManagerImpl::NotifyPermissionsChanges( + const std::string& device_id, const std::string& policy_app_id, const std::vector& app_group_permissions) { LOG4CXX_AUTO_TRACE(logger_); @@ -1234,7 +1278,7 @@ void PolicyManagerImpl::NotifyPermissionsChanges( PrepareNotificationData( functional_groups, app_groups, app_group_permissions, notification_data); - listener()->OnPermissionsUpdated(policy_app_id, notification_data); + listener()->OnPermissionsUpdated(device_id, policy_app_id, notification_data); } void PolicyManagerImpl::SetUserConsentForApp( @@ -1273,7 +1317,8 @@ void PolicyManagerImpl::SetUserConsentForApp( CheckPendingPermissionsChanges(verified_permissions.policy_app_id, updated_app_group_permissons); - NotifyPermissionsChanges(verified_permissions.policy_app_id, + NotifyPermissionsChanges(verified_permissions.device_id, + verified_permissions.policy_app_id, updated_app_group_permissons); } @@ -1610,6 +1655,7 @@ void PolicyManagerImpl::SendPermissionsToApp( LOG4CXX_INFO(logger_, "Send notification for application_id: " << app_id); listener()->OnPermissionsUpdated( + device_id, app_id, notification_data, policy_table::EnumToJsonString(app_policy.second.default_hmi)); @@ -1926,6 +1972,12 @@ void PolicyManagerImpl::OnAppRegisteredOnMobile( SendNotificationOnPermissionsUpdated(application_id); } +void PolicyManagerImpl::OnAppRegisteredOnMobile( + const std::string& device_id, const std::string& application_id) { + StartPTExchange(); + SendNotificationOnPermissionsUpdated(device_id, application_id); +} + void PolicyManagerImpl::OnDeviceSwitching(const std::string& device_id_from, const std::string& device_id_to) { LOG4CXX_AUTO_TRACE(logger_); @@ -2251,7 +2303,8 @@ void PolicyManagerImpl::SendAppPermissionsChanged( const std::string& device_id, const std::string& application_id) { Permissions notification_data; GetPermissions(device_id, application_id, ¬ification_data); - listener()->OnPermissionsUpdated(application_id, notification_data); + listener()->OnPermissionsUpdated( + device_id, application_id, notification_data); } void PolicyManagerImpl::SendAuthTokenUpdated(const std::string policy_app_id) { -- cgit v1.2.1