1 /* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PLUGIN_SUB_CONTAINER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PLUGIN_SUB_CONTAINER_H 18 19 #include "base/thread/task_executor.h" 20 #include "bridge/plugin_frontend/plugin_frontend.h" 21 #include "core/components_ng/pattern/plugin/plugin_node.h" 22 #include "core/components_ng/pattern/plugin/plugin_pattern.h" 23 #include "core/pipeline/pipeline_base.h" 24 #include "frameworks/bridge/plugin_frontend/plugin_frontend.h" 25 #include "frameworks/core/pipeline/pipeline_context.h" 26 #include "frameworks/core/pipeline_ng/pipeline_context.h" 27 28 namespace OHOS::Ace { 29 class ACE_EXPORT PluginSubContainer : public virtual AceType { 30 DECLARE_ACE_TYPE(PluginSubContainer, AceType); 31 32 public: 33 using OnPluginAcquiredCallback = std::function<void(const size_t)>; 34 using onPluginUpdateWithValueParams = std::function<void(const std::string&)>; 35 PluginSubContainer(const WeakPtr<PipelineBase> & context)36 explicit PluginSubContainer(const WeakPtr<PipelineBase>& context) : outSidePipelineContext_(context) {} PluginSubContainer(const WeakPtr<PipelineBase> & context,int32_t instanceId)37 PluginSubContainer(const WeakPtr<PipelineBase>& context, int32_t instanceId) 38 : outSidePipelineContext_(context), instanceId_(instanceId) 39 {} 40 ~PluginSubContainer() = default; 41 42 void Initialize(); 43 void RunPlugin(const std::string& path, const std::string& module, const std::string& source, 44 const std::string& moduleResPath, const std::string& data); 45 void UpdatePlugin(const std::string& content); 46 void Destroy(); 47 SetPluginElement(const WeakPtr<Element> & element)48 void SetPluginElement(const WeakPtr<Element>& element) 49 { 50 pluginElement_ = element; 51 } 52 GetPluginElement()53 const WeakPtr<Element> GetPluginElement() const 54 { 55 return pluginElement_; 56 } 57 SetPluginComponent(const RefPtr<Component> & mountPoint)58 void SetPluginComponent(const RefPtr<Component>& mountPoint) 59 { 60 pluginComponent_ = mountPoint; 61 } 62 GetTaskExecutor()63 RefPtr<TaskExecutor> GetTaskExecutor() const 64 { 65 return taskExecutor_; 66 } 67 GetPipelineContext()68 RefPtr<PipelineBase> GetPipelineContext() const 69 { 70 return pipelineContext_; 71 } 72 73 void UpdateRootElementSize(); 74 void UpdateSurfaceSize(); 75 AddPluginAcquireCallback(const OnPluginAcquiredCallback & callback)76 void AddPluginAcquireCallback(const OnPluginAcquiredCallback& callback) 77 { 78 if (callback) { 79 onPluginAcquiredCallback_ = callback; 80 } 81 } 82 SetAllowUpdate(bool update)83 void SetAllowUpdate(bool update) 84 { 85 allowUpdate_ = update; 86 } 87 SetInstanceId(int32_t instanceId)88 void SetInstanceId(int32_t instanceId) 89 { 90 instanceId_ = instanceId; 91 } 92 GetInstanceId()93 int32_t GetInstanceId() const 94 { 95 return instanceId_; 96 } 97 SetPluginPattern(const WeakPtr<NG::PluginPattern> & pluginPattern)98 void SetPluginPattern(const WeakPtr<NG::PluginPattern>& pluginPattern) 99 { 100 pluginPattern_ = pluginPattern; 101 } 102 GetPluginPattern()103 RefPtr<NG::PluginPattern> GetPluginPattern() const 104 { 105 return pluginPattern_.Upgrade(); 106 } 107 SetPluginNode(const WeakPtr<NG::FrameNode> & pluginNode)108 void SetPluginNode(const WeakPtr<NG::FrameNode>& pluginNode) 109 { 110 pluginNode_ = pluginNode; 111 } 112 GetPluginNode()113 WeakPtr<NG::FrameNode> GetPluginNode() const 114 { 115 return pluginNode_; 116 } 117 SetDeclarativeOnUpdateWithValueParamsCallback(onPluginUpdateWithValueParams && callback)118 void SetDeclarativeOnUpdateWithValueParamsCallback(onPluginUpdateWithValueParams&& callback) 119 { 120 if (frontend_) { 121 frontend_->SetDeclarativeOnUpdateWithValueParamsCallback(std::move(callback)); 122 } 123 } 124 private: 125 void SetPluginComponentTheme(const std::string& path, const RefPtr<AssetManager>& flutterAssetManager); 126 void SetActionEventHandler(); 127 RefPtr<AssetManager> SetAssetManager(const std::string& path, const std::string& module); 128 129 private: 130 RefPtr<PluginFrontend> frontend_; 131 RefPtr<TaskExecutor> taskExecutor_; 132 RefPtr<PipelineBase> pipelineContext_; 133 WeakPtr<PipelineBase> outSidePipelineContext_; 134 RefPtr<AssetManager> assetManager_; 135 136 int32_t instanceId_ = 0; 137 bool isArkApp_ = false; 138 139 bool allowUpdate_ = true; 140 141 RefPtr<Component> pluginComponent_; 142 WeakPtr<Element> pluginElement_; 143 144 double surfaceWidth_ = 1.0f; 145 double surfaceHeight_ = 1.0f; 146 Dimension rootWidth_ = 0.0_vp; 147 Dimension rootHeight_ = 0.0_vp; 148 double density_ = 1.0f; 149 150 // Use for NG. 151 OnPluginAcquiredCallback onPluginAcquiredCallback_; 152 WeakPtr<NG::PluginPattern> pluginPattern_; 153 WeakPtr<NG::FrameNode> pluginNode_; 154 }; 155 } // namespace OHOS::Ace 156 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PLUGIN_SUB_CONTAINER_H 157