From af1c8e552f6eab090e8a801650d7a379d6acfac0 Mon Sep 17 00:00:00 2001 From: sunjie Date: Tue, 2 Sep 2025 17:18:39 +0800 Subject: [PATCH 1/3] dh support mutliuser Signed-off-by: sunjie --- .../resmgr/include/resource_manager_ext_mgr.h | 5 +++-- frameworks/resmgr/src/resource_manager.cpp | 15 ++++++++++++--- .../resmgr/src/resource_manager_ext_mgr.cpp | 4 ++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frameworks/resmgr/include/resource_manager_ext_mgr.h b/frameworks/resmgr/include/resource_manager_ext_mgr.h index aefaa40..0ea792d 100644 --- a/frameworks/resmgr/include/resource_manager_ext_mgr.h +++ b/frameworks/resmgr/include/resource_manager_ext_mgr.h @@ -23,12 +23,13 @@ namespace Global { namespace Resource { typedef int (*IResMgrExt) (std::shared_ptr &resMgrExt, const std::string &bundleName, - const int32_t appType); + const int32_t appType, const int32_t userId); class ResourceManagerExtMgr { public: ResourceManagerExtMgr(); virtual ~ResourceManagerExtMgr(); - bool Init(std::shared_ptr &resMgrExt, const std::string &bundleName, const int32_t appType); + bool Init(std::shared_ptr &resMgrExt, const std::string &bundleName, + const int32_t appType, const int32_t userId); private: void *handle_ = nullptr; diff --git a/frameworks/resmgr/src/resource_manager.cpp b/frameworks/resmgr/src/resource_manager.cpp index cd93162..901653e 100644 --- a/frameworks/resmgr/src/resource_manager.cpp +++ b/frameworks/resmgr/src/resource_manager.cpp @@ -25,6 +25,10 @@ namespace OHOS { namespace Global { namespace Resource { +namespace { +constexpr int32_t INVALID_USER_ID = -1; +constexpr int32_t DEFAULT_USER_ID = 100; +} static std::map> resMgrMap; #if !defined(__WINNT__) && !defined(__IDE_PREVIEW__) && !defined(__ARKUI_CROSS__) static std::mutex resMgrExtLock; @@ -65,7 +69,11 @@ std::shared_ptr CreateResourceManagerDef( } resourceManagerImpl->bundleInfo.first = bundleName; resourceManagerImpl->bundleInfo.second = moduleName; + if (userId == INVALID_USER_ID) { + resourceManagerImpl->userId = DEFAULT_USER_ID; + } else { resourceManagerImpl->userId = userId; + } uint32_t currentId = resConfig.GetThemeId(); auto themePackManager = ThemePackManager::GetThemePackManager(); if (themePackManager->IsFirstLoadResource() || themePackManager->UpdateThemeId(currentId) @@ -77,7 +85,8 @@ std::shared_ptr CreateResourceManagerDef( } #if !defined(__WINNT__) && !defined(__IDE_PREVIEW__) && !defined(__ARKUI_CROSS__) -std::shared_ptr CreateResourceManagerExt(const std::string &bundleName, const int32_t appType) +std::shared_ptr CreateResourceManagerExt( + const std::string &bundleName, const int32_t appType, const int32_t userId) { if (bundleName.empty()) { RESMGR_HILOGE(RESMGR_TAG, "bundleName is empty when CreateResourceManagerExt"); @@ -85,7 +94,7 @@ std::shared_ptr CreateResourceManagerExt(const std::string &bun } std::lock_guard lock(resMgrExtLock); std::shared_ptr resMgrExt; - if (!resMgrExtMgr->Init(resMgrExt, bundleName, appType) || resMgrExt == nullptr) { + if (!resMgrExtMgr->Init(resMgrExt, bundleName, appType, userId) || resMgrExt == nullptr) { RESMGR_HILOGE(RESMGR_TAG, "ResourceManagerExt init fail"); return nullptr; } @@ -101,7 +110,7 @@ std::shared_ptr CreateResourceManager(const std::string &bundle return CreateResourceManagerDef(bundleName, moduleName, hapPath, overlayPath, resConfig, userId); } else { #if !defined(__WINNT__) && !defined(__IDE_PREVIEW__) && !defined(__ARKUI_CROSS__) - return CreateResourceManagerExt(bundleName, appType); + return CreateResourceManagerExt(bundleName, appType, userId); #else return nullptr; #endif diff --git a/frameworks/resmgr/src/resource_manager_ext_mgr.cpp b/frameworks/resmgr/src/resource_manager_ext_mgr.cpp index da0e77c..0abf18b 100644 --- a/frameworks/resmgr/src/resource_manager_ext_mgr.cpp +++ b/frameworks/resmgr/src/resource_manager_ext_mgr.cpp @@ -39,7 +39,7 @@ ResourceManagerExtMgr::~ResourceManagerExtMgr() } bool ResourceManagerExtMgr::Init(std::shared_ptr &resMgrExt, const std::string &bundleName, - const int32_t appType) + const int32_t appType, const int32_t userId) { if (handle_ == nullptr) { std::string pluginPath = "system/lib64/libglobal_resmgr_broker.z.so"; @@ -56,7 +56,7 @@ bool ResourceManagerExtMgr::Init(std::shared_ptr &resMgrExt, co return true; } IResMgrExt iResMgrExt = (IResMgrExt)dlsym(handle_, "CreateResMgrExt"); - int ret = (*iResMgrExt)(resMgrExt, bundleName, appType); + int ret = (*iResMgrExt)(resMgrExt, bundleName, appType, userId); if (ret) { RESMGR_HILOGE(RESMGR_TAG, "CreateResMgrExt fail."); return false; -- Gitee From ec5025947bff9cd7c1848e9cff99b290120c4233 Mon Sep 17 00:00:00 2001 From: sunjie Date: Tue, 2 Sep 2025 20:35:34 +0800 Subject: [PATCH 2/3] dh userid default value Signed-off-by: sunjie --- interfaces/inner_api/include/resource_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_api/include/resource_manager.h b/interfaces/inner_api/include/resource_manager.h index b6c1637..4fd4f23 100644 --- a/interfaces/inner_api/include/resource_manager.h +++ b/interfaces/inner_api/include/resource_manager.h @@ -326,7 +326,7 @@ EXPORT_FUNC ResourceManager *GetSystemResourceManagerNoSandBox(); */ EXPORT_FUNC std::shared_ptr CreateResourceManager(const std::string &bundleName, const std::string &moduleName, const std::string &hapPath, const std::vector &overlayPath, - ResConfig &resConfig, int32_t appType = 0, int32_t userId = 100); + ResConfig &resConfig, int32_t appType = 0, int32_t userId = -1); /** * Release system resource manager. This object may be held by multiple objects, and once released, the -- Gitee From d28c9661668329f1172c79c380bfeba5b348860a Mon Sep 17 00:00:00 2001 From: sj Date: Fri, 5 Sep 2025 09:50:51 +0000 Subject: [PATCH 3/3] update frameworks/resmgr/src/resource_manager.cpp. Signed-off-by: sj --- frameworks/resmgr/src/resource_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/resmgr/src/resource_manager.cpp b/frameworks/resmgr/src/resource_manager.cpp index 901653e..a5e3494 100644 --- a/frameworks/resmgr/src/resource_manager.cpp +++ b/frameworks/resmgr/src/resource_manager.cpp @@ -72,7 +72,7 @@ std::shared_ptr CreateResourceManagerDef( if (userId == INVALID_USER_ID) { resourceManagerImpl->userId = DEFAULT_USER_ID; } else { - resourceManagerImpl->userId = userId; + resourceManagerImpl->userId = userId; } uint32_t currentId = resConfig.GetThemeId(); auto themePackManager = ThemePackManager::GetThemePackManager(); -- Gitee