From e3c96a14a0fc69f174f4956f70f51da998fd3ba4 Mon Sep 17 00:00:00 2001 From: chenkai008 Date: Mon, 23 May 2022 10:20:52 +0800 Subject: [PATCH] add SetCreator Signed-off-by: chenkai008 --- .../file_extension/include/file_ext_ability.h | 11 +++++++++++ .../innerkits/file_extension/src/file_ext_ability.cpp | 10 ++++++++++ .../src/file_ext_ability_module_loader.cpp | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/frameworks/innerkits/file_extension/include/file_ext_ability.h b/frameworks/innerkits/file_extension/include/file_ext_ability.h index c98a352a..8c9aaa70 100644 --- a/frameworks/innerkits/file_extension/include/file_ext_ability.h +++ b/frameworks/innerkits/file_extension/include/file_ext_ability.h @@ -21,6 +21,8 @@ namespace OHOS { namespace AbilityRuntime { class Runtime; +class FileExtAbility; +using CreatorFunc = std::function& runtime)>; class FileExtAbility : public ExtensionBase<> { public: FileExtAbility() = default; @@ -40,6 +42,15 @@ public: virtual int Delete(const Uri &sourceFileUri); virtual int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri); virtual int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri); + + /** + * @brief Set a creator function. + * + * @param creator The function for create a file extension ability. + */ + static void SetCreator(const CreatorFunc& creator); +private: + static CreatorFunc creator_; }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/innerkits/file_extension/src/file_ext_ability.cpp b/frameworks/innerkits/file_extension/src/file_ext_ability.cpp index e137a15f..a406d564 100644 --- a/frameworks/innerkits/file_extension/src/file_ext_ability.cpp +++ b/frameworks/innerkits/file_extension/src/file_ext_ability.cpp @@ -25,12 +25,22 @@ namespace OHOS { namespace AbilityRuntime { using namespace OHOS::AppExecFwk; + +CreatorFunc FileExtAbility::creator_ = nullptr; +void FileExtAbility::SetCreator(const CreatorFunc& creator) +{ + creator_ = creator; +} + FileExtAbility* FileExtAbility::Create(const std::unique_ptr& runtime) { HILOG_INFO("tag dsa %{public}s begin.", __func__); if (!runtime) { return new FileExtAbility(); } + if (creator_) { + return creator_(runtime); + } HILOG_INFO("tag dsa FileExtAbility::Create runtime"); switch (runtime->GetLanguage()) { case Runtime::Language::JS: diff --git a/frameworks/innerkits/file_extension/src/file_ext_ability_module_loader.cpp b/frameworks/innerkits/file_extension/src/file_ext_ability_module_loader.cpp index 96ae5c4a..99be2507 100644 --- a/frameworks/innerkits/file_extension/src/file_ext_ability_module_loader.cpp +++ b/frameworks/innerkits/file_extension/src/file_ext_ability_module_loader.cpp @@ -31,4 +31,9 @@ extern "C" __attribute__((visibility("default"))) void* OHOS_EXTENSION_GetExtens HILOG_INFO("tag dsa %{public}s begin.", __func__); return &FileExtAbilityModuleLoader::GetInstance(); } + +extern "C" __attribute__((visibility("default"))) void SetCreator(const CreatorFunc& creator) +{ + return FileExtAbility::SetCreator(creator); +} } // namespace OHOS::AbilityRuntime \ No newline at end of file -- Gitee