From 247af86e1bf610e87f8ce2c64ffb3721bc4b8274 Mon Sep 17 00:00:00 2001 From: wlh2624 <1968860844@qq.com> Date: Mon, 24 Feb 2025 16:28:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Duser0=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wlh2624 <1968860844@qq.com> Change-Id: I5f823b9abfbb2ea42b6eaca45343077cec23e7ed --- .../appmgr/include/multi_user_config_mgr.h | 2 + services/appmgr/src/multi_user_config_mgr.cpp | 50 +++++++++++-------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/services/appmgr/include/multi_user_config_mgr.h b/services/appmgr/include/multi_user_config_mgr.h index 5d6898d12c..53d6356566 100644 --- a/services/appmgr/include/multi_user_config_mgr.h +++ b/services/appmgr/include/multi_user_config_mgr.h @@ -36,6 +36,8 @@ public: private: void UpdateMultiUserConfiguration(const Configuration& config); void UpdateMultiUserConfigurationForGlobal(const Configuration& globalConfig); + void SetOrUpdateConfigByUserId(const int32_t userId, const Configuration& config, + std::vector& changeKeyV); std::map multiUserConfiguration_; std::mutex multiUserConfigurationMutex_; diff --git a/services/appmgr/src/multi_user_config_mgr.cpp b/services/appmgr/src/multi_user_config_mgr.cpp index d2784706f5..678bb255d7 100644 --- a/services/appmgr/src/multi_user_config_mgr.cpp +++ b/services/appmgr/src/multi_user_config_mgr.cpp @@ -61,12 +61,36 @@ std::shared_ptr MultiUserConfigurationMgr::GetConfigu } } +void MultiUserConfigurationMgr::SetOrUpdateConfigByUserId( + const int32_t userId, const Configuration& config, std::vector& changeKeyV) +{ + std::lock_guard guard(multiUserConfigurationMutex_); + auto it = multiUserConfiguration_.find(userId); + if (it != multiUserConfiguration_.end()) { + it->second.CompareDifferent(changeKeyV, config); + if (!changeKeyV.empty()) { + it->second.Merge(changeKeyV, config); + } + } else { + if (globalConfiguration_ == nullptr) { + TAG_LOGE(AAFwkTag::APPMGR, "globalConfiguration_ null"); + return; + } + Configuration userConfig = *globalConfiguration_; + userConfig.CompareDifferent(changeKeyV, config); + if (!changeKeyV.empty()) { + userConfig.Merge(changeKeyV, config); + } + multiUserConfiguration_[userId] = userConfig; + } +} + void MultiUserConfigurationMgr::HandleConfiguration( const int32_t userId, const Configuration& config, std::vector& changeKeyV, bool &isNotifyUser0) { - std::lock_guard guard(multiUserConfigurationMutex_); isNotifyUser0 = false; if (userId == -1) { + std::lock_guard guard(multiUserConfigurationMutex_); if (globalConfiguration_ == nullptr) { TAG_LOGE(AAFwkTag::APPMGR, "globalConfiguration_ null"); return; @@ -81,29 +105,11 @@ void MultiUserConfigurationMgr::HandleConfiguration( } UpdateMultiUserConfiguration(config); } else { - auto it = multiUserConfiguration_.find(userId); - if (it != multiUserConfiguration_.end()) { - it->second.CompareDifferent(changeKeyV, config); - if (changeKeyV.size() != 0) { - it->second.Merge(changeKeyV, config); - } - } else { - if (globalConfiguration_ == nullptr) { - TAG_LOGE(AAFwkTag::APPMGR, "globalConfiguration_ null"); - return; - } - Configuration userConfig = *globalConfiguration_; - userConfig.CompareDifferent(changeKeyV, config); - if (changeKeyV.size() != 0) { - userConfig.Merge(changeKeyV, config); - } - multiUserConfiguration_[userId] = userConfig; - } + SetOrUpdateConfigByUserId(userId, config, changeKeyV); if (userId != USER0 && userId == MultiUserConfigurationMgr::GetForegroundOsAccountLocalId()) { std::vector diff; - multiUserConfiguration_[USER0].CompareDifferent(diff, multiUserConfiguration_[userId]); - if (diff.size() != 0) { - multiUserConfiguration_[USER0].Merge(diff, multiUserConfiguration_[userId]); + SetOrUpdateConfigByUserId(USER0, config, diff); + if (!diff.empty()) { isNotifyUser0 = true; } }