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 void FireRecycleRenderFunc(); 88 bool HasRecycleRenderFunc(); 89 90 void SetOnReuseFunc(std::function<void(void*)>&& func); 91 void FireOnReuseFunc(void* params); 92 93 // called for Component freezing 94 void SetSetActiveFunc(std::function<void(bool, bool)>&& func); 95 void FireSetActiveFunc(bool active, bool isReuse = false); 96 97 // called for DFX 98 void SetExtraInfo(const ExtraInfo extraInfo); 99 const ExtraInfo& GetExtraInfo() const; 100 bool HasExtraInfo(); 101 102 void SetOnDumpInfoFunc(std::function<void(const std::vector<std::string>&)>&& func); 103 void FireOnDumpInfoFunc(const std::vector<std::string>& params); 104 105 void SetOnDumpInspectorFunc(std::function<std::string()>&& func); 106 std::string FireOnDumpInspectorFunc(); 107 108 // called for PageTransition animation 109 void SetPageTransitionFunction(std::function<void()>&& pageTransitionFunc); 110 void CallPageTransitionFunction() const; 111 112 protected: 113 std::string jsViewName_; 114 ExtraInfo extraInfo_; 115 bool isV2_ = false; 116 bool executeFireOnAppear_ = false; 117 118 private: 119 std::function<void()> updateFunc_; 120 std::function<void()> appearFunc_; 121 std::function<void()> didBuildFunc_; 122 std::function<void()> destroyFunc_; 123 std::function<void()> pageTransitionFunc_; 124 std::function<void(bool)> reloadFunc_; 125 std::function<void()> completeReloadFunc_; 126 std::function<void(int32_t)> forceNodeUpdateFunc_; 127 std::function<bool(int32_t)> hasNodeUpdateFunc_; 128 std::function<void(RefPtr<CustomNodeBase>)> recycleCustomNodeFunc_; 129 std::function<void()> recycleRenderFunc_; 130 std::function<void(bool, bool)> setActiveFunc_; 131 std::function<void(const std::vector<std::string>&)> onDumpInfoFunc_; 132 std::function<std::string()> onDumpInspectorFunc_; 133 std::function<void*()> getThisFunc_; 134 std::function<void()> onRecycleFunc_; 135 std::function<void(void*)> onReuseFunc_; 136 bool needRebuild_ = false; 137 RecycleNodeInfo recycleInfo_; 138 }; 139 } // namespace OHOS::Ace::NG 140 141 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_BASE_CUSTOM_NODE_BASE_H 142