1 /* 2 * Copyright (c) 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_NG_BASE_CUSTOM_NODE_BASE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_CUSTOM_NODE_BASE_H 18 19 #include <functional> 20 #include <list> 21 #include <string> 22 23 #include "base/memory/ace_type.h" 24 #include "base/utils/macros.h" 25 #include "core/components_ng/base/frame_node.h" 26 #include "core/components_ng/base/view_stack_processor.h" 27 #include "core/components_ng/pattern/custom/custom_node_pattern.h" 28 #include "core/components_ng/pattern/recycle_view/recycle_manager.h" 29 #include "core/pipeline/base/element_register.h" 30 31 namespace OHOS::Ace::NG { 32 class ACE_FORCE_EXPORT CustomNodeBase : public virtual AceType { 33 DECLARE_ACE_TYPE(CustomNodeBase, AceType); 34 35 public: 36 CustomNodeBase() = default; 37 ~CustomNodeBase() override; 38 SetRenderFunction(const RenderFunction & renderFunction)39 virtual void SetRenderFunction(const RenderFunction& renderFunction) {}; 40 virtual void SetCompleteReloadFunc(RenderFunction&& func) = 0; 41 42 // called for Component Info 43 void SetJSViewName(std::string&& name); 44 std::string& GetJSViewName(); 45 46 void SetIsV2(bool isV2); 47 bool GetIsV2(); 48 49 void SetThisFunc(std::function<void*()>&& getThisFunc); 50 void* FireThisFunc(); 51 52 // called for Component life Cycle 53 void Reset(); 54 void SetAppearFunction(std::function<void()>&& appearFunc); 55 void FireOnAppear(); 56 bool CheckFireOnAppear(); 57 58 void SetDidBuildFunction(std::function<void()>&& didBuildFunc); 59 void FireDidBuild(); 60 61 void SetDestroyFunction(std::function<void()>&& destroyFunc); 62 void FireOnDisappear(); 63 64 // called for Component update 65 void SetUpdateFunction(std::function<void()>&& updateFunc); 66 void SetForceUpdateNodeFunc(std::function<void(int32_t)>&& forceNodeUpdateFunc); 67 void FireNodeUpdateFunc(ElementIdType id); 68 69 void SetHasNodeUpdateFunc(std::function<bool(int32_t)>&& hasNodeUpdateFunc); 70 bool FireHasNodeUpdateFunc(ElementIdType id); 71 72 void SetReloadFunction(std::function<void(bool)>&& reloadFunc); 73 void FireReloadFunction(bool deep); 74 75 void Update(); // called by pipeline in js thread of update. 76 void MarkNeedUpdate(); // called by view in js thread 77 78 // called for Component reuse 79 void ResetRecycle(); 80 void SetOnRecycleFunc(std::function<void()>&& func); 81 void FireRecycleSelf(); 82 83 void SetRecycleFunction(std::function<void(RefPtr<CustomNodeBase>)>&& recycleCustomNode); 84 void FireOnRecycleFunc(); 85 86 void SetRecycleRenderFunc(std::function<void()>&& func); 87 virtual void FireRecycleRenderFunc(); 88 bool HasRecycleRenderFunc(); 89 90 void FireClearAllRecycleFunc(); 91 92 void SetOnReuseFunc(std::function<void(void*)>&& func); 93 void FireOnReuseFunc(void* params); 94 95 // called for Component freezing 96 void SetSetActiveFunc(std::function<void(bool, bool)>&& func); 97 void FireSetActiveFunc(bool active, bool isReuse = false); 98 99 // called for DFX 100 void SetExtraInfo(const ExtraInfo extraInfo); 101 const ExtraInfo& GetExtraInfo() const; 102 bool HasExtraInfo(); 103 104 void SetOnDumpInfoFunc(std::function<void(const std::vector<std::string>&)>&& func); 105 void FireOnDumpInfoFunc(const std::vector<std::string>& params); 106 107 void SetOnDumpInspectorFunc(std::function<std::string()>&& func); 108 std::string FireOnDumpInspectorFunc(); 109 110 // called for PageTransition animation 111 void SetPageTransitionFunction(std::function<void()>&& pageTransitionFunc); 112 void CallPageTransitionFunction() const; 113 114 void SetClearAllRecycleFunc(std::function<void()>&& func); 115 116 void SetReuseId(const std::string& reuseId); 117 const std::string& GetReuseId() const; 118 119 protected: 120 std::string jsViewName_; 121 ExtraInfo extraInfo_; 122 bool isV2_ = false; 123 bool executeFireOnAppear_ = false; 124 std::string reuseId_; 125 126 private: 127 std::function<void()> updateFunc_; 128 std::function<void()> appearFunc_; 129 std::function<void()> didBuildFunc_; 130 std::function<void()> destroyFunc_; 131 std::function<void()> pageTransitionFunc_; 132 std::function<void(bool)> reloadFunc_; 133 std::function<void()> completeReloadFunc_; 134 std::function<void(int32_t)> forceNodeUpdateFunc_; 135 std::function<bool(int32_t)> hasNodeUpdateFunc_; 136 std::function<void(RefPtr<CustomNodeBase>)> recycleCustomNodeFunc_; 137 std::function<void()> recycleRenderFunc_; 138 std::function<void(bool, bool)> setActiveFunc_; 139 std::function<void(const std::vector<std::string>&)> onDumpInfoFunc_; 140 std::function<std::string()> onDumpInspectorFunc_; 141 std::function<void()> clearAllRecycleFunc_; 142 std::function<void*()> getThisFunc_; 143 std::function<void()> onRecycleFunc_; 144 std::function<void(void*)> onReuseFunc_; 145 bool needRebuild_ = false; 146 RecycleNodeInfo recycleInfo_; 147 }; 148 } // namespace OHOS::Ace::NG 149 150 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_CUSTOM_NODE_BASE_H 151