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_FORM_SUB_CONTAINER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FORM_SUB_CONTAINER_H 18 19 #include "ashmem.h" 20 #include "form_ashmem.h" 21 22 #include "base/thread/task_executor.h" 23 #include "core/common/frontend.h" 24 #include "core/components_ng/pattern/form/form_pattern.h" 25 #include "frameworks/bridge/card_frontend/card_frontend.h" 26 #include "frameworks/bridge/card_frontend/card_frontend_declarative.h" 27 #include "frameworks/core/pipeline/pipeline_context.h" 28 #include "frameworks/core/pipeline_ng/pipeline_context.h" 29 30 namespace OHOS::Ace { 31 class ACE_EXPORT SubContainer : public virtual AceType { 32 DECLARE_ACE_TYPE(SubContainer, AceType); 33 34 public: 35 using OnFormAcquiredCallback = std::function<void(const int64_t)>; 36 using OnFormLoadCallback = std::function<void()>; 37 using OnFormVisibleCallback = std::function<void()>; 38 SubContainer(const WeakPtr<PipelineBase> & context)39 explicit SubContainer(const WeakPtr<PipelineBase>& context) : outSidePipelineContext_(context) {} SubContainer(const WeakPtr<PipelineBase> & context,int32_t instanceId)40 SubContainer(const WeakPtr<PipelineBase>& context, int32_t instanceId) 41 : outSidePipelineContext_(context), instanceId_(instanceId) 42 {} 43 ~SubContainer(); 44 45 void Initialize(); 46 void RunCard(int64_t formId, const std::string& path, const std::string& module, const std::string& data, 47 const std::map<std::string, sptr<AppExecFwk::FormAshmem>>& imageDataMap, const std::string& formSrc, 48 const FrontendType& cardType, const FrontendType& uiSyntax); 49 void RunSameCard(); 50 void UpdateCard( 51 const std::string& content, const std::map<std::string, sptr<AppExecFwk::FormAshmem>>& imageDataMap); 52 void Destroy(); 53 void GetNamesOfSharedImage(std::vector<std::string>& picNameArray); 54 void UpdateSharedImage(std::vector<std::string>& picNameArray, std::vector<int32_t>& byteLenArray, 55 std::vector<int32_t>& fileDescriptorArray); 56 void GetImageDataFromAshmem( 57 const std::string& picName, Ashmem& ashmem, const RefPtr<PipelineBase>& pipelineContext, int len); 58 void ProcessSharedImage(const std::map<std::string, sptr<AppExecFwk::FormAshmem>> imageDataMap); 59 SetFormElement(const WeakPtr<Element> & element)60 void SetFormElement(const WeakPtr<Element>& element) 61 { 62 formElement_ = element; 63 } 64 GetFormElement()65 const WeakPtr<Element> GetFormElement() const 66 { 67 return formElement_; 68 } 69 SetFormComponent(const RefPtr<Component> & mountPoint)70 void SetFormComponent(const RefPtr<Component>& mountPoint) 71 { 72 formComponent_ = mountPoint; 73 } 74 GetTaskExecutor()75 RefPtr<TaskExecutor> GetTaskExecutor() const 76 { 77 return taskExecutor_; 78 } 79 GetPipelineContext()80 RefPtr<PipelineBase> GetPipelineContext() const 81 { 82 return pipelineContext_; 83 } 84 85 void UpdateRootElementSize(); 86 void UpdateSurfaceSize(); 87 void UpdateSurfaceSizeWithAnimathion(); 88 void UpdateConfiguration(); AddFormAcquireCallback(const OnFormAcquiredCallback & callback)89 void AddFormAcquireCallback(const OnFormAcquiredCallback& callback) 90 { 91 if (callback) { 92 onFormAcquiredCallback_ = callback; 93 } 94 } 95 AddFormVisiableCallback(OnFormVisibleCallback && callback)96 void AddFormVisiableCallback(OnFormVisibleCallback&& callback) 97 { 98 onFormVisibleCallback_ = std::move(callback); 99 } 100 SetAllowUpdate(bool update)101 void SetAllowUpdate(bool update) 102 { 103 allowUpdate_ = update; 104 } 105 GetRunningCardId()106 int64_t GetRunningCardId() const 107 { 108 return runningCardId_; 109 } 110 bool Dump(const std::vector<std::string>& params); 111 GetWindowConfig()112 WindowConfig GetWindowConfig() const 113 { 114 return cardWindowConfig_; 115 } 116 SetWindowConfig(const WindowConfig cardWindowConfig)117 void SetWindowConfig(const WindowConfig cardWindowConfig) 118 { 119 cardWindowConfig_ = cardWindowConfig; 120 } 121 SetFormPattern(const WeakPtr<NG::FormPattern> & formPattern)122 void SetFormPattern(const WeakPtr<NG::FormPattern>& formPattern) 123 { 124 formPattern_ = formPattern; 125 } 126 GetFormPattern()127 RefPtr<NG::FormPattern> GetFormPattern() const 128 { 129 return formPattern_.Upgrade(); 130 } 131 GetCardType()132 FrontendType GetCardType() const 133 { 134 return cardType_; 135 } 136 GetUISyntaxType()137 FrontendType GetUISyntaxType() const 138 { 139 return uiSyntax_; 140 } 141 SetNodeId(int32_t nodeId)142 void SetNodeId(int32_t nodeId) 143 { 144 nodeId_ = static_cast<int64_t>(nodeId); 145 } 146 SetFormLoadCallback(const OnFormLoadCallback && callback)147 void SetFormLoadCallback(const OnFormLoadCallback&& callback) 148 { 149 onFormLoadCallback_ = std::move(callback); 150 } 151 GetNodeId()152 int64_t GetNodeId() const 153 { 154 return nodeId_; 155 } 156 GetInstanceId()157 int32_t GetInstanceId() const 158 { 159 return instanceId_; 160 } 161 162 private: 163 void InitFrontend(const std::string &path, const std::string &module, 164 const std::map<std::string, sptr<AppExecFwk::FormAshmem>> &imageDataMap, 165 const std::string& formSrc, 166 const FrontendType &cardType); 167 void InitCardThemeManager(const std::string &path, int32_t instanceId, const std::string &module, 168 const std::map<std::string, sptr<AppExecFwk::FormAshmem>> &imageDataMap, RefPtr<AssetManager> assetManager); 169 RefPtr<AssetManager> GetAssetManager(const std::string& path, const std::string& module); 170 void InitPipelineContext(); 171 void RunJSCard(const std::string& data); 172 RefPtr<CardFrontend> frontend_; 173 RefPtr<TaskExecutor> taskExecutor_; 174 RefPtr<PipelineBase> pipelineContext_; 175 WeakPtr<PipelineBase> outSidePipelineContext_; 176 RefPtr<AssetManager> assetManager_; 177 int32_t instanceId_; 178 179 int64_t runningCardId_ = 0; 180 int64_t windowId_ = -1; 181 182 bool allowUpdate_ = true; 183 184 FrontendType cardType_ = FrontendType::JS_CARD; 185 FrontendType uiSyntax_ = FrontendType::JS_CARD; 186 187 RefPtr<Component> formComponent_; 188 WeakPtr<Element> formElement_; 189 OnFormAcquiredCallback onFormAcquiredCallback_; 190 191 OnFormLoadCallback onFormLoadCallback_; 192 OnFormVisibleCallback onFormVisibleCallback_; 193 WindowConfig cardWindowConfig_; 194 195 double surfaceWidth_ = 1.0f; 196 double surfaceHeight_ = 1.0f; 197 Dimension rootWidht_ = 0.0_vp; 198 Dimension rootHeight_ = 0.0_vp; 199 double density_ = 1.0f; 200 201 // Use for NG. 202 WeakPtr<NG::FormPattern> formPattern_; 203 int64_t nodeId_ = 0; 204 }; 205 206 } // namespace OHOS::Ace 207 208 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FORM_SUB_CONTAINER_H 209