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 RefPtr<CardFrontend> frontend_; 164 RefPtr<TaskExecutor> taskExecutor_; 165 RefPtr<PipelineBase> pipelineContext_; 166 WeakPtr<PipelineBase> outSidePipelineContext_; 167 RefPtr<AssetManager> assetManager_; 168 int32_t instanceId_; 169 170 int64_t runningCardId_ = 0; 171 int64_t windowId_ = -1; 172 173 bool allowUpdate_ = true; 174 175 FrontendType cardType_ = FrontendType::JS_CARD; 176 FrontendType uiSyntax_ = FrontendType::JS_CARD; 177 178 RefPtr<Component> formComponent_; 179 WeakPtr<Element> formElement_; 180 OnFormAcquiredCallback onFormAcquiredCallback_; 181 182 OnFormLoadCallback onFormLoadCallback_; 183 OnFormVisibleCallback onFormVisibleCallback_; 184 WindowConfig cardWindowConfig_; 185 186 double surfaceWidth_ = 1.0f; 187 double surfaceHeight_ = 1.0f; 188 Dimension rootWidht_ = 0.0_vp; 189 Dimension rootHeight_ = 0.0_vp; 190 double density_ = 1.0f; 191 192 // Use for NG. 193 WeakPtr<NG::FormPattern> formPattern_; 194 int64_t nodeId_ = 0; 195 }; 196 197 } // namespace OHOS::Ace 198 199 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FORM_SUB_CONTAINER_H 200