diff --git a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp index c427f8ddec2b5d221147c4fb5cf8f59ae8b97325..bdd01c33b3b525e3e71bd31d8b98b466ab9f5b5b 100644 --- a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp +++ b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp @@ -65,11 +65,23 @@ std::string AbilityContextImpl::GetDatabaseDir() return stageContext_ ? stageContext_->GetDatabaseDir() : ""; } +int AbilityContextImpl::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + return stageContext_ ? + stageContext_->GetSystemDatabaseDir(groupId, databaseDir) : ERR_INVALID_VALUE; +} + std::string AbilityContextImpl::GetPreferencesDir() { return stageContext_ ? stageContext_->GetPreferencesDir() : ""; } +int AbilityContextImpl::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + return stageContext_ ? + stageContext_->GetSystemPreferencesDir(groupId, preferencesDir) : ERR_INVALID_VALUE; +} + std::string AbilityContextImpl::GetGroupDir(std::string groupId) { return stageContext_ ? stageContext_->GetGroupDir(groupId) : ""; diff --git a/frameworks/native/appkit/ability_runtime/context/application_context.cpp b/frameworks/native/appkit/ability_runtime/context/application_context.cpp index a33ee28e13d0fed2da61283083ba1d79ad71ddfe..29035de0ce9bc339a5f57f8be87aa14fc5016da8 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context.cpp @@ -368,6 +368,18 @@ std::string ApplicationContext::GetPreferencesDir() return (contextImpl_ != nullptr) ? contextImpl_->GetPreferencesDir() : ""; } +int ApplicationContext::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + return contextImpl_ ? + contextImpl_->GetSystemDatabaseDir(groupId, databaseDir) : ERR_INVALID_VALUE; +} + +int ApplicationContext::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + return contextImpl_ ? + contextImpl_->GetSystemPreferencesDir(groupId, preferencesDir) : ERR_INVALID_VALUE; +} + std::string ApplicationContext::GetGroupDir(std::string groupId) { return (contextImpl_ != nullptr) ? contextImpl_->GetGroupDir(groupId) : ""; diff --git a/frameworks/native/appkit/ability_runtime/context/context_impl.cpp b/frameworks/native/appkit/ability_runtime/context/context_impl.cpp index e21d2680a0546ebd8b23e4e8d4a134e6ef6d3802..23cd5b1589e75b40d281f4404f59b316f36a3211 100644 --- a/frameworks/native/appkit/ability_runtime/context/context_impl.cpp +++ b/frameworks/native/appkit/ability_runtime/context/context_impl.cpp @@ -48,6 +48,7 @@ const std::string PATTERN_VERSION = std::string(FILE_SEPARATOR) + "v\\d+" + FILE const size_t Context::CONTEXT_TYPE_ID(std::hash {} ("Context")); const int64_t ContextImpl::CONTEXT_CREATE_BY_SYSTEM_APP(0x00000001); const mode_t MODE = 0770; +const mode_t GROUP_MODE = 02770; const std::string ContextImpl::CONTEXT_DATA_APP("/data/app/"); const std::string ContextImpl::CONTEXT_BUNDLE("/bundle/"); const std::string ContextImpl::CONTEXT_DISTRIBUTEDFILES_BASE_BEFORE("/mnt/hmdfs/"); @@ -112,6 +113,21 @@ bool ContextImpl::PrintDrawnCompleted() return false; } +int ContextImpl::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + std::string dir; + if (groupId.empty()) { + databaseDir = GetDatabaseDir(); + } else { + databaseDir = GetGroupDatabaseDir(groupId); + } + HILOG_DEBUG("ContextImpl::GetSystemDatabaseDir:%{public}s", dir.c_str()); + if (databaseDir.empty()) { + return ERR_INVALID_VALUE; + } + return ERR_OK; +} + std::string ContextImpl::GetDatabaseDir() { std::string dir; @@ -129,6 +145,33 @@ std::string ContextImpl::GetDatabaseDir() return dir; } +std::string ContextImpl::GetGroupDatabaseDir(std::string groupId) +{ + std::string dir = GetGroupDir(groupId); + if (dir.empty()) { + return dir; + } + dir = dir + CONTEXT_FILE_SEPARATOR + CONTEXT_DATABASE; + CreateDirIfNotExist(dir, GROUP_MODE); + HILOG_DEBUG("ContextImpl::GetGroupDatabaseDir:%{public}s", dir.c_str()); + return dir; +} + +int ContextImpl::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + std::string dir; + if (groupId.empty()) { + preferencesDir = GetPreferencesDir(); + } else { + preferencesDir = GetGroupPreferencesDir(groupId); + } + HILOG_DEBUG("ContextImpl::GetSystemPreferencesDir:%{public}s", dir.c_str()); + if (preferencesDir.empty()) { + return ERR_INVALID_VALUE; + } + return ERR_OK; +} + std::string ContextImpl::GetPreferencesDir() { std::string dir = GetBaseDir() + CONTEXT_FILE_SEPARATOR + CONTEXT_PREFERENCES; @@ -137,15 +180,30 @@ std::string ContextImpl::GetPreferencesDir() return dir; } +std::string ContextImpl::GetGroupPreferencesDir(std::string groupId) +{ + std::string dir = GetGroupDir(groupId); + if (dir.empty()) { + return dir; + } + dir = dir + CONTEXT_FILE_SEPARATOR + CONTEXT_PREFERENCES; + CreateDirIfNotExist(dir, GROUP_MODE); + HILOG_DEBUG("ContextImpl::GetGroupPreferencesDir:%{public}s", dir.c_str()); + return dir; +} + std::string ContextImpl::GetGroupDir(std::string groupId) { std::string dir = ""; + if (currArea_ == CONTEXT_ELS[0]) { + HILOG_ERROR("GroupDir currently only supports the el2 level"); + return dir; + } sptr bundleMgr = GetBundleManager(); if (bundleMgr == nullptr) { HILOG_ERROR("GetBundleManager is nullptr"); return dir; } - std::string groupDir; bool ret = bundleMgr->GetGroupDir(groupId, groupDir); if (!ret || groupDir.empty()) { diff --git a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h index 7f3c9a94e3ee130bf94b8cb317bdcc821070d830..6584a09715bfeacefdb7bdd19dadd25cf2c6cec6 100644 --- a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h +++ b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h @@ -43,6 +43,8 @@ public: std::string GetGroupDir(std::string groupId) override; std::string GetPreferencesDir() override; std::string GetDistributedFilesDir() override; + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; void SwitchArea(int mode) override; int GetArea() override; std::string GetBundleName() const override; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h index cacb52bd1bdefe5a3fb12a9d2b7142d912e90c19..4d15dbbbe79238df084f424e2bac0168a2c1a78b 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h @@ -72,6 +72,8 @@ public: bool PrintDrawnCompleted() override; std::string GetDatabaseDir() override; std::string GetPreferencesDir() override; + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; std::string GetGroupDir(std::string groupId) override; std::string GetDistributedFilesDir() override; sptr GetToken() override; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/context.h b/interfaces/kits/native/appkit/ability_runtime/context/context.h index bb870c74587c13c67e2a32671505047135477060..1073929195305ea1fbea457c56e4bcec00db7b12 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/context.h @@ -143,6 +143,14 @@ public: */ virtual std::string GetDatabaseDir() = 0; + /** + * @brief Obtains the local system database path. + * If the local system database path does not exist, the system creates one and returns the created path. + * + * @return Returns the local database file. + */ + virtual int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) = 0; + /** * @brief Obtains the path storing the storage file of the application. * @@ -151,9 +159,16 @@ public: virtual std::string GetPreferencesDir() = 0; /** - * @brief Obtains the path storing the storage file of the application by the groupId. + * @brief Obtains the path storing the system storage file of the application. * - * @return Returns the local storage file. + * @return Returns the local system storage file. + */ + virtual int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) = 0; + + /** + * @brief Obtains the path storing the group file of the application by the groupId. + * + * @return Returns the local group file. */ virtual std::string GetGroupDir(std::string groupId) = 0; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h b/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h index 1720abb426d605942949f57d86546c58d5c77415..75b5cc97f938ae7601cad4be6a9fc772484b01ac 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/context_impl.h @@ -91,6 +91,14 @@ public: */ std::string GetDatabaseDir() override; + /** + * @brief Obtains the local system database path. + * If the local group database path does not exist, the system creates one and returns the created path. + * + * @return Returns the local group database file. + */ + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + /** * @brief Obtains the path storing the storage file of the application. * @@ -99,9 +107,16 @@ public: std::string GetPreferencesDir() override; /** - * @brief Obtains the path storing the storage file of the application by the groupId. + * @brief Obtains the path storing the system storage file of the application. * - * @return Returns the local storage file. + * @return Returns the local system storage file. + */ + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; + + /** + * @brief Obtains the path storing the group file of the application by the groupId. + * + * @return Returns the local group file. */ std::string GetGroupDir(std::string groupId) override; @@ -335,6 +350,9 @@ private: void ChangeToLocalPath(const std::string &bundleName, const std::string &sourcDir, std::string &localPath); + std::string GetGroupDatabaseDir(std::string groupId); + std::string GetGroupPreferencesDir(std::string groupId); + static Global::Resource::DeviceType deviceType_; std::shared_ptr applicationInfo_ = nullptr; std::shared_ptr parentContext_ = nullptr; diff --git a/test/unittest/application_context_test/mock_context_impl.cpp b/test/unittest/application_context_test/mock_context_impl.cpp index 3b41749b0c18022914d4f7f75dcf0de1a752bf48..cc0a59bea9826dcf5708366a1e3619367d3fa724 100644 --- a/test/unittest/application_context_test/mock_context_impl.cpp +++ b/test/unittest/application_context_test/mock_context_impl.cpp @@ -74,6 +74,16 @@ std::string MockContextImpl::GetGroupDir(std::string groupId) return "/group"; } +int MockContextImpl::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + return 0; +} + +int MockContextImpl::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + return 0; +} + std::shared_ptr MockContextImpl::CreateModuleContext(const std::string &moduleName) { std::shared_ptr appContext = std::make_shared(); diff --git a/test/unittest/application_context_test/mock_context_impl.h b/test/unittest/application_context_test/mock_context_impl.h index 54695d9c3773abc799805fc5962359b7d31ac872..c02d12308bef09ac5b8c53712bb9fb5c90aa4c9e 100644 --- a/test/unittest/application_context_test/mock_context_impl.h +++ b/test/unittest/application_context_test/mock_context_impl.h @@ -44,6 +44,10 @@ public: std::string GetPreferencesDir() override; + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; + std::string GetDistributedFilesDir() override; std::shared_ptr CreateModuleContext(const std::string &moduleName) override; diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.cpp index 5a81e0ca483a1cd21c66f5c6f3535e816efeb10d..a7bd7d050db910d1aa3717679a456d74b4782b3a 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.cpp @@ -164,5 +164,15 @@ std::string MockContext::GetGroupDir(std::string groupId) { return "/group"; } + +int MockContext::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + return 0; +} + +int MockContext::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + return 0; +} } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.h b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.h index 2ccf632ad2bb113615f04c465ff4af3c3d69b04e..dee2834b8d767c3e4c1b5ad48911a1f4054389ee 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.h +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_context.h @@ -49,6 +49,10 @@ public: std::string GetDistributedFilesDir() override; + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; + void SwitchArea(int mode) override; std::shared_ptr CreateModuleContext(const std::string &moduleName) override; diff --git a/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.cpp b/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.cpp index 0aa23a5ddba4fe441f55be57c66ffc97b0e691df..36a56dbbcced8671769e2fa1cf5f308f117bcb9f 100644 --- a/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.cpp +++ b/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.cpp @@ -148,5 +148,15 @@ std::string MockAbilityRuntimeContext::GetGroupDir(std::string groupId) { return {}; } + +int MockAbilityRuntimeContext::GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) +{ + return 0; +} + +int MockAbilityRuntimeContext::GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) +{ + return 0; +} } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.h b/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.h index e89090d3918a6e52df759a523cb4d6678f9a7fcb..40a6560040f67c3fffae3d2373e4d783a9366f62 100644 --- a/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.h +++ b/test/unittest/frameworks_kits_ability_native_test/mock_ability_runtime_context.h @@ -57,6 +57,8 @@ public: std::string GetBaseDir() const override; Global::Resource::DeviceType GetDeviceType() const override; std::string GetGroupDir(std::string groupId) override; + int GetSystemDatabaseDir(std::string groupId, std::string &databaseDir) override; + int GetSystemPreferencesDir(std::string groupId, std::string &preferencesDir) override; }; } // namespace AbilityRuntime } // namespace OHOS