diff --git a/frameworks/innerkits/file_extension/include/file_ext_ability.h b/frameworks/innerkits/file_extension/include/file_ext_ability.h index c98a352abdc09d3c199035c4c489e079bae59584..8c9aaa706a41ca4b80f726a0629a6292aab89e90 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 e137a15f4b775f8fcfc26c9c4ebe8e6b99ac7e6f..a406d564efd33dc4b6fcfd586c203f734b78d016 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 96ae5c4a8818b3b9fa1c9a3fc94345d7fb193441..99be25075ca51e311a434a12564ef504cc8326f4 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