From 3e6571aa8a65faf9de26974c18586ddb4cb2a445 Mon Sep 17 00:00:00 2001 From: wangkailong Date: Wed, 5 Jul 2023 19:44:50 +0800 Subject: [PATCH] data Signed-off-by: wangkailong Change-Id: Ib352ed7f427c0387136c2f7f183d560ba12d82a7 --- .../ability_runtime/ability_context_impl.cpp | 12 ++++ .../context/application_context.cpp | 12 ++++ .../ability_runtime/context/context_impl.cpp | 60 ++++++++++++++++++- .../ability_runtime/ability_context_impl.h | 2 + .../context/application_context.h | 2 + .../appkit/ability_runtime/context/context.h | 19 +++++- .../ability_runtime/context/context_impl.h | 22 ++++++- .../mock_context_impl.cpp | 10 ++++ .../mock_context_impl.h | 4 ++ .../mock_context.cpp | 10 ++++ .../mock_context.h | 4 ++ .../mock_ability_runtime_context.cpp | 10 ++++ .../mock_ability_runtime_context.h | 2 + 13 files changed, 164 insertions(+), 5 deletions(-) diff --git a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp index c427f8ddec2..bdd01c33b3b 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 a33ee28e13d..29035de0ce9 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 e21d2680a05..23cd5b1589e 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 7f3c9a94e3e..6584a09715b 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 cacb52bd1bd..4d15dbbbe79 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 bb870c74587..10739291953 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 1720abb426d..75b5cc97f93 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 3b41749b0c1..cc0a59bea98 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 54695d9c377..c02d12308be 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 5a81e0ca483..a7bd7d050db 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 2ccf632ad2b..dee2834b8d7 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 0aa23a5ddba..36a56dbbcce 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 e89090d3918..40a6560040f 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 -- Gitee