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; } }