1 /* 2 * Copyright (c) 2022-2023 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_PATTERNS_REFRESH_PATTERN_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_REFRESH_PATTERN_H 18 19 #include <string> 20 21 #include "frameworks/base/geometry/dimension.h" 22 #include "frameworks/base/geometry/ng/offset_t.h" 23 #include "frameworks/base/memory/referenced.h" 24 #include "frameworks/base/utils/noncopyable.h" 25 #include "frameworks/core/components_ng/pattern/pattern.h" 26 #include "frameworks/core/components_ng/pattern/refresh/refresh_accessibility_property.h" 27 #include "frameworks/core/components_ng/pattern/refresh/refresh_event_hub.h" 28 #include "frameworks/core/components_ng/pattern/refresh/refresh_layout_algorithm.h" 29 #include "frameworks/core/components_ng/pattern/refresh/refresh_layout_property.h" 30 #include "frameworks/core/components_ng/pattern/refresh/refresh_render_property.h" 31 #include "frameworks/core/components_ng/pattern/text/text_layout_property.h" 32 #include "frameworks/core/components_ng/property/property.h" 33 #include "frameworks/core/components_ng/pattern/list/list_layout_property.h" 34 35 namespace OHOS::Ace::NG { 36 37 class RefreshPattern : public Pattern { 38 DECLARE_ACE_TYPE(RefreshPattern, Pattern); 39 40 public: 41 RefreshPattern() = default; 42 ~RefreshPattern() override = default; 43 CreateLayoutProperty()44 RefPtr<LayoutProperty> CreateLayoutProperty() override 45 { 46 return MakeRefPtr<RefreshLayoutProperty>(); 47 } 48 CreatePaintProperty()49 RefPtr<PaintProperty> CreatePaintProperty() override 50 { 51 return MakeRefPtr<RefreshRenderProperty>(); 52 } 53 CreateEventHub()54 RefPtr<EventHub> CreateEventHub() override 55 { 56 return MakeRefPtr<RefreshEventHub>(); 57 } 58 CreateAccessibilityProperty()59 RefPtr<AccessibilityProperty> CreateAccessibilityProperty() override 60 { 61 return MakeRefPtr<RefreshAccessibilityProperty>(); 62 } 63 IsRefreshing()64 bool IsRefreshing() const 65 { 66 return isRefreshing_; 67 } 68 IsAtomicNode()69 bool IsAtomicNode() const override 70 { 71 return false; 72 } 73 GetScrollOffsetValue()74 OffsetF GetScrollOffsetValue() const 75 { 76 return scrollOffset_; 77 } 78 79 RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override; 80 void OnModifyDone() override; 81 void FireStateChange(int32_t value); 82 void FireRefreshing(); 83 void FireChangeEvent(const std::string& value); OnActive()84 void OnActive() override {} 85 void CheckCoordinationEvent(); 86 RefPtr<FrameNode> FindScrollableChild(); 87 void AddCustomBuilderNode(const RefPtr<NG::UINode>& builder); GetFocusPattern()88 FocusPattern GetFocusPattern() const override 89 { 90 return { FocusType::NODE, true }; 91 } 92 GetLoadingDistance()93 float GetLoadingDistance() const 94 { 95 return triggerLoadingDistance_; 96 } 97 GetCustomBuilderOffset()98 float GetCustomBuilderOffset() const 99 { 100 return customBuilderOffset_; 101 } 102 GetIsCustomBuilderExist()103 bool GetIsCustomBuilderExist() const 104 { 105 return isCustomBuilderExist_; 106 } 107 HasCustomBuilderIndex()108 bool HasCustomBuilderIndex() const 109 { 110 return customBuilderIndex_.has_value(); 111 } 112 113 private: 114 void InitPanEvent(const RefPtr<GestureEventHub>& gestureHub); 115 void HandleDragStart(); 116 void HandleDragUpdate(float delta); 117 void HandleDragEnd(); 118 void HandleDragCancel(); 119 void TriggerRefresh(); 120 void TriggerInActive(); 121 void TriggerDone(); 122 void TriggerFinish(); 123 void TriggerStatusChange(RefreshStatus newStatus); 124 void TransitionPeriodAnimation(); 125 void RefreshStatusChange(RefreshStatus newStatus); 126 void LoadingProgressExit(); 127 void LoadingProgressAppear(); 128 void LoadingProgressRecycle(); 129 void UpdateLoadingProgress(int32_t state, float ratio); 130 void ReplaceLoadingProgressNode(); 131 void LoadingProgressReset(); 132 void OnExitAnimationFinish(); 133 void ResetLoadingProgressColor(); 134 float GetFollowRatio(); 135 float GetFadeAwayRatio(); 136 float GetCustomBuilderOpacityRatio(); 137 float GetScrollOffset(float delta); 138 bool ScrollComponentReactInMove(); 139 void CustomBuilderAppear(); 140 void CustomBuilderExit(); 141 void HandleCustomBuilderDragUpdateStage(); 142 void HandleCustomBuilderDragEndStage(); 143 void CustomBuilderReset(); 144 void UpdateCustomBuilderProperty(RefreshState state, float ratio); 145 void CustomBuilderRefreshingAnimation(); 146 void ScrollableNodeResetAnimation(); 147 void OnAppearAnimationFinish(); 148 void UpdateLoadingMarginTop(float top); 149 void SetAccessibilityAction(); 150 void InitOnKeyEvent(); 151 bool OnKeyEvent(const KeyEvent& event); 152 void QuickEndFresh(); 153 void QuickStartFresh(); 154 void UpdateCustomBuilderIndex(int32_t index); 155 RefreshStatus refreshStatus_ = RefreshStatus::INACTIVE; 156 RefPtr<PanEvent> panEvent_; 157 OffsetF scrollOffset_; 158 159 bool isRefreshing_ = false; 160 bool isKeyEventRegisted_ = false; 161 float triggerLoadingDistance_ = 0.0f; 162 RefPtr<FrameNode> progressChild_; 163 RefPtr<FrameNode> customBuilder_; 164 WeakPtr<FrameNode> scrollableNode_; 165 // customBuilder 166 bool isCustomBuilderExist_ = false; 167 float customBuilderOffset_ = 0.0f; 168 std::optional<int32_t> customBuilderIndex_; 169 ACE_DISALLOW_COPY_AND_MOVE(RefreshPattern); 170 }; 171 } // namespace OHOS::Ace::NG 172 173 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_TEXT_PATTERN_H 174