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_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H
18 
19 #include <cstdint>
20 #include <string>
21 
22 #include "base/memory/ace_type.h"
23 #include "base/utils/noncopyable.h"
24 #include "base/window/drag_window.h"
25 #include "core/common/interaction/interaction_data.h"
26 #include "core/components_ng/base/frame_node.h"
27 #include "core/components_ng/manager/drag_drop/drag_drop_proxy.h"
28 #include "core/gestures/velocity_tracker.h"
29 #include "core/components_ng/manager/drag_drop/utils/internal_drag_action.h"
30 
31 namespace OHOS::Ace {
32 class UnifiedData;
33 class GridColumnInfo;
34 }
35 namespace OHOS::Ace::NG {
36 enum class DragDropMgrState : int32_t {
37     IDLE,
38     ABOUT_TO_PREVIEW,
39     DRAGGING
40 };
41 
42 struct GatherAnimationInfo {
43     float scale = 0.0f;
44     float width = 0.0f;
45     float height = 0.0f;
46     OffsetF gatherNodeCenter;
47     std::optional<BorderRadiusProperty> borderRadius;
48 };
49 
50 class ACE_EXPORT DragDropManager : public virtual AceType {
51     DECLARE_ACE_TYPE(DragDropManager, AceType);
52 
53 public:
54     DragDropManager() = default;
55     ~DragDropManager() override = default;
56 
57     RefPtr<DragDropProxy> CreateAndShowDragWindow(const RefPtr<PixelMap>& pixelMap, const GestureEvent& info);
58     RefPtr<DragDropProxy> CreateAndShowDragWindow(const RefPtr<UINode>& customNode, const GestureEvent& info);
59     RefPtr<DragDropProxy> CreateTextDragDropProxy();
60 
AddDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)61     void AddDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode)
62     {
63         dragFrameNodes_.try_emplace(id, dragFrameNode);
64     }
65 
66     void RemoveDragFrameNode(int32_t id);
67 
AddGridDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)68     void AddGridDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode)
69     {
70         gridDragFrameNodes_.try_emplace(id, dragFrameNode);
71     }
72 
AddListDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)73     void AddListDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode)
74     {
75         listDragFrameNodes_.try_emplace(id, dragFrameNode);
76     }
77 
AddTextFieldDragFrameNode(int32_t id,const WeakPtr<FrameNode> & dragFrameNode)78     void AddTextFieldDragFrameNode(int32_t id, const WeakPtr<FrameNode>& dragFrameNode)
79     {
80         textFieldDragFrameNodes_.try_emplace(id, dragFrameNode);
81     }
82 
SetEventStrictReportingEnabled(bool dragEventStrictReportingEnabled)83     void SetEventStrictReportingEnabled(bool dragEventStrictReportingEnabled)
84     {
85         eventStrictReportingEnabled_ = dragEventStrictReportingEnabled;
86     }
87 
IsEventStrictReportingEnabled()88     bool IsEventStrictReportingEnabled()
89     {
90         return eventStrictReportingEnabled_;
91     }
92 
93     void UpdateDragWindowPosition(int32_t globalX, int32_t globalY);
94     void OnDragStart(const Point& point);
95     void OnDragStart(const Point& point, const RefPtr<FrameNode>& frameNode);
96     void OnDragMove(const PointerEvent& pointerEvent, const std::string& extraInfo,
97         const RefPtr<FrameNode>& node = nullptr);
98     void OnDragEnd(const PointerEvent& pointerEvent, const std::string& extraInfo,
99         const RefPtr<FrameNode>& node = nullptr);
100     void HandleOnDragMove(const PointerEvent& pointerEvent, const std::string& extraInfo,
101         const RefPtr<FrameNode>& dragFrameNode);
102     void HandleOnDragEnd(const PointerEvent& pointerEvent, const std::string& extraInfo,
103         const RefPtr<FrameNode>& dragFrameNode);
104     void DoDragReset();
105     void DoDropAction(const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent,
106         const RefPtr<UnifiedData>& unifiedData, const std::string& udKey);
107     void RequestDragSummaryInfoAndPrivilege();
108     RefPtr<UnifiedData> RequestUDMFDataWithUDKey(const std::string& udKey);
109     void TryGetDataBackGround(
110         const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent,
111         const std::string& udKey, int32_t count = 0);
112     void OnDragDrop(RefPtr<OHOS::Ace::DragEvent>& event, const RefPtr<FrameNode>& dragFrameNode,
113         const OHOS::Ace::PointerEvent& pointerEvent);
114     void ResetDragDropStatus(const Point& point, const DragDropRet& dragDropRet, int32_t windowId);
115     bool CheckRemoteData(
116         const RefPtr<FrameNode>& dragFrameNode, const PointerEvent& pointerEvent, const std::string& udKey);
117     void OnDragMoveOut(const PointerEvent& pointerEvent);
118     void OnTextDragEnd(float globalX, float globalY, const std::string& extraInfo);
119     void onDragCancel();
120     void OnItemDragStart(float globalX, float globalY, const RefPtr<FrameNode>& frameNode);
121     void OnItemDragMove(float globalX, float globalY, int32_t draggedIndex, DragType dragType);
122     void OnItemDragEnd(float globalX, float globalY, int32_t draggedIndex, DragType dragType);
123     void onItemDragCancel();
124     void AddDataToClipboard(const std::string& extraInfo);
125     void GetExtraInfoFromClipboard(std::string& extraInfo);
126     void RestoreClipboardData();
127     void DestroyDragWindow();
128     void CancelItemDrag();
129     std::string GetExtraInfo();
130     void SetExtraInfo(const std::string& extraInfo);
131     void ClearExtraInfo();
132     float GetWindowScale() const;
133     void UpdateDragStyle(
134         const DragCursorStyleCore& dragCursorStyleCore = DragCursorStyleCore::DEFAULT, const int32_t eventId = -1);
135     void UpdateDragAllowDrop(const RefPtr<FrameNode>& dragFrameNode, const DragBehavior dragBehavior,
136         const int32_t eventId = -1, bool isCapi = false);
137     bool CheckExtraSituation(const RefPtr<FrameNode>& dragFrameNode) const;
138     bool CheckInRichEditor(const RefPtr<FrameNode>& dragFrameNode) const;
139     void RequireSummary();
140     void ClearSummary();
SetSummaryMap(const std::map<std::string,int64_t> & summaryMap)141     void SetSummaryMap(const std::map<std::string, int64_t>& summaryMap)
142     {
143         summaryMap_ = summaryMap;
144     }
145     void ResetRecordSize(uint32_t recordSize = 0);
146     uint32_t GetRecordSize() const;
147     Rect GetDragWindowRect(const Point& point);
148     RefPtr<DragDropProxy> CreateFrameworkDragDropProxy();
149     void HideDragPreviewOverlay();
150     void HideDragPreviewWindow(int32_t containerId);
151     bool IsMSDPDragging() const;
152     void UpdateDragEvent(RefPtr<OHOS::Ace::DragEvent>& event, const OHOS::Ace::PointerEvent& pointerEvent);
153     void UpdateNotifyDragEvent(
154         RefPtr<NotifyDragEvent>& notifyEvent, const Point& point, const DragEventType dragEventType);
155     bool CheckDragDropProxy(int64_t id) const;
156     void NotifyEnterTextEditorArea();
157     void FireOnEditableTextComponent(const RefPtr<FrameNode>& frameNode, DragEventType type);
158     void FireOnDragLeave(const RefPtr<FrameNode>& preTargetFrameNode_, const PointerEvent& pointerEvent,
159         const std::string& extraInfo);
160 
IsWindowConsumed()161     bool IsWindowConsumed() const
162     {
163         return isWindowConsumed_;
164     }
165 
SetIsWindowConsumed(bool consumed)166     void SetIsWindowConsumed(bool consumed)
167     {
168         isWindowConsumed_ = consumed;
169     }
170 
IsDragged()171     bool IsDragged() const
172     {
173         return isDragged_;
174     }
175 
176     void SetIsDragged(bool isDragged);
177 
SetDragDampStartPoint(const Point & point)178     void SetDragDampStartPoint(const Point& point)
179     {
180         dragDampStartPoint_ = point;
181     }
182 
GetDragDampStartPoint()183     const Point& GetDragDampStartPoint() const
184     {
185         return dragDampStartPoint_;
186     }
187 
SetIsDragCancel(bool isDragCancel)188     void SetIsDragCancel(bool isDragCancel)
189     {
190         isDragCancel_ = isDragCancel;
191     }
192 
SetIsMouseDrag(bool isMouseDragged)193     void SetIsMouseDrag(bool isMouseDragged)
194     {
195         isMouseDragged_ = isMouseDragged;
196     }
197 
SetIsDragWindowShow(bool isDragWindowShow)198     void SetIsDragWindowShow(bool isDragWindowShow)
199     {
200         isDragWindowShow_ = isDragWindowShow;
201     }
202 
IsDragWindowShow()203     bool IsDragWindowShow() const
204     {
205         return isDragWindowShow_;
206     }
207 
SetPreviewRect(const Rect & rect)208     void SetPreviewRect(const Rect& rect)
209     {
210         previewRect_ = rect;
211     }
212 
GetPreviewRect()213     Rect GetPreviewRect() const
214     {
215         return previewRect_;
216     }
217 
SetDragCursorStyleCore(DragCursorStyleCore dragCursorStyleCore)218     void SetDragCursorStyleCore(DragCursorStyleCore dragCursorStyleCore)
219     {
220         dragCursorStyleCore_ = dragCursorStyleCore;
221     }
222 
GetDragAction()223     std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> GetDragAction()
224     {
225         return dragAction_;
226     }
227 
228     RefPtr<FrameNode> FindTargetInChildNodes(const RefPtr<UINode> parentNode,
229         std::vector<RefPtr<FrameNode>> hitFrameNodes, bool findDrop);
230 
231     bool CheckFrameNodeCanDrop(const RefPtr<FrameNode>& node);
232 
233     RefPtr<FrameNode> FindTargetDropNode(const RefPtr<UINode> parentNode, PointF localPoint);
234 
235     std::unordered_set<int32_t> FindHitFrameNodes(const Point& point);
236 
237     void UpdateDragListener(const Point& point);
238 
239     void NotifyDragRegisterFrameNode(std::unordered_map<int32_t, WeakPtr<FrameNode>> nodes, DragEventType dragEventType,
240         RefPtr<NotifyDragEvent>& notifyEvent);
241 
242     void RegisterDragStatusListener(int32_t nodeId, const WeakPtr<FrameNode>& node);
243 
UnRegisterDragStatusListener(int32_t nodeId)244     void UnRegisterDragStatusListener(int32_t nodeId)
245     {
246         nodesForDragNotify_.erase(nodeId);
247     }
248 
SetNotifyInDraggedCallback(const std::function<void (void)> & callback)249     void SetNotifyInDraggedCallback(const std::function<void(void)>& callback)
250     {
251         notifyInDraggedCallback_ = callback;
252     }
253 
IsDragging()254     bool IsDragging() const
255     {
256         return dragDropState_ == DragDropMgrState::DRAGGING;
257     }
258 
IsItemDragging()259     bool IsItemDragging() const
260     {
261         return dragDropState_ == DragDropMgrState::DRAGGING && draggedGridFrameNode_ != nullptr;
262     }
263 
IsAboutToPreview()264     bool IsAboutToPreview() const
265     {
266         return dragDropState_ == DragDropMgrState::ABOUT_TO_PREVIEW;
267     }
268 
269     void ResetDragging(DragDropMgrState dragDropMgrState = DragDropMgrState::IDLE)
270     {
271         dragDropState_ = dragDropMgrState;
272     }
273 
274     void ResetPreTargetFrameNode(int32_t instanceId);
275 
SetDraggingPressedState(bool pointerPressed)276     void SetDraggingPressedState(bool pointerPressed)
277     {
278         draggingPressedState_ = pointerPressed;
279     }
280 
281     bool IsDraggingPressed(int32_t currentPointerId) const;
282 
IsSameDraggingPointer(int32_t currentPointerId)283     bool IsSameDraggingPointer(int32_t currentPointerId) const
284     {
285         return currentPointerId_ == currentPointerId;
286     }
287 
SetDraggingPointer(int32_t currentPointerId)288     void SetDraggingPointer(int32_t currentPointerId)
289     {
290         currentPointerId_ = currentPointerId;
291     }
292 
IsEditableTextComponent(const std::string & frameTag)293     static inline bool IsEditableTextComponent(const std::string& frameTag)
294     {
295         if (frameTag != V2::TEXTINPUT_ETS_TAG && frameTag != V2::TEXTAREA_ETS_TAG &&
296             frameTag != V2::RICH_EDITOR_ETS_TAG && frameTag != V2::SEARCH_Field_ETS_TAG) {
297             return false;
298         }
299         return true;
300     }
301 
302     typedef struct DragPreviewInfo {
303         double width { 0.0 };
304         double height { 0.0 };
305         double maxWidth { 0.0 };
306         double scale { -1.0 };
307         VectorF originScale { 1.0f, 1.0f };
308         OffsetF originOffset;
309         RefPtr<FrameNode> imageNode { nullptr };
310         RefPtr<FrameNode> textNode { nullptr };
311     } DragPreviewInfo;
312     bool IsNeedScaleDragPreview();
313     void DoDragMoveAnimate(const PointerEvent& pointerEvent);
314     void DragMoveAnimation(const Offset& newOffset, const RefPtr<OverlayManager>& overlayManager, Point point);
315     void DoDragStartAnimation(const RefPtr<OverlayManager>& overlayManager,
316         const GestureEvent& event, const RefPtr<GestureEventHub>& gestureHub, bool isSubwindowOverlay = false);
317     void DragStartAnimation(const Offset& newOffset, const RefPtr<OverlayManager>& overlayManager,
318         const OffsetF& gatherNodeCenter, Point point = { 1, 1 });
319     void SetDragResult(const DragNotifyMsgCore& notifyMessage, const RefPtr<OHOS::Ace::DragEvent>& dragEvent);
320     void SetDragBehavior(const DragNotifyMsgCore& notifyMessage, const RefPtr<OHOS::Ace::DragEvent>& dragEvent);
ResetDragPreviewInfo()321     void ResetDragPreviewInfo()
322     {
323         info_ = DragPreviewInfo();
324     }
325 
326     void ResetPullMoveReceivedForCurrentDrag(bool isPullMoveReceivedForCurrentDrag = false)
327     {
328         isPullMoveReceivedForCurrentDrag_ = isPullMoveReceivedForCurrentDrag;
329     }
330 
IsPullMoveReceivedForCurrentDrag()331     bool IsPullMoveReceivedForCurrentDrag() const
332     {
333         return isPullMoveReceivedForCurrentDrag_;
334     }
335 
SetPrepareDragFrameNode(const WeakPtr<FrameNode> & prepareDragFrameNode)336     void SetPrepareDragFrameNode(const WeakPtr<FrameNode>& prepareDragFrameNode)
337     {
338         prepareDragFrameNode_ = prepareDragFrameNode;
339     }
340 
GetPrepareDragFrameNode()341     const WeakPtr<FrameNode> GetPrepareDragFrameNode() const
342     {
343         return prepareDragFrameNode_;
344     }
345 
SetPreDragStatus(PreDragStatus preDragStatus)346     void SetPreDragStatus(PreDragStatus preDragStatus)
347     {
348         preDragStatus_ = preDragStatus;
349     }
350 
GetPreDragStatus()351     PreDragStatus GetPreDragStatus() const
352     {
353         return preDragStatus_;
354     }
355 
356     static RectF GetMenuPreviewRect();
357     static void UpdateGatherNodeAttr(const RefPtr<OverlayManager>& overlayManager, const GatherAnimationInfo& info);
358     static void UpdateGatherNodePosition(const RefPtr<OverlayManager>& overlayManager,
359         const RefPtr<FrameNode>& imageNode);
360     static void UpdateTextNodePosition(const RefPtr<FrameNode>& textNode, const Offset& localPoint);
361     double CalcGatherNodeMaxDistanceWithPoint(const RefPtr<OverlayManager>& overlayManager, int32_t x, int32_t y);
362 
SetPixelMapOffset(OffsetF pixelMapOffset)363     void SetPixelMapOffset(OffsetF pixelMapOffset)
364     {
365         pixelMapOffset_ = pixelMapOffset;
366     }
367 
368     bool IsNeedDisplayInSubwindow();
ClearGatherPixelMap()369     void ClearGatherPixelMap()
370     {
371         gatherPixelMaps_.clear();
372     }
373 
374     void PushGatherPixelMap(const RefPtr<PixelMap>& pixelMap);
375     void GetGatherPixelMap(DragDataCore& dragData, float scale, float previewWidth = 0.0f, float previewHeight = 0.0f);
HasGatherNode()376     bool HasGatherNode() const
377     {
378         return hasGatherNode_;
379     }
380 
SetHasGatherNode(bool hasGatherNode)381     void SetHasGatherNode(bool hasGatherNode)
382     {
383         hasGatherNode_ = hasGatherNode;
384     }
385 
GetDragDropPointerEvent()386     const PointerEvent& GetDragDropPointerEvent() const
387     {
388         return dragDropPointerEvent_;
389     }
390 
SetDragDropPointerEvent(const PointerEvent & dragDropPointerEvent)391     void SetDragDropPointerEvent(const PointerEvent& dragDropPointerEvent)
392     {
393         dragDropPointerEvent_ = dragDropPointerEvent;
394     }
395 
SetIsShowBadgeAnimation(bool isShowBadgeAnimation)396     void SetIsShowBadgeAnimation(bool isShowBadgeAnimation)
397     {
398         isShowBadgeAnimation_ = isShowBadgeAnimation;
399     }
400 
IsShowBadgeAnimation()401     bool IsShowBadgeAnimation()
402     {
403         return isShowBadgeAnimation_;
404     }
405 
IsDragWithContextMenu()406     bool IsDragWithContextMenu() const
407     {
408         return isDragWithContextMenu_;
409     }
410 
SetIsDragWithContextMenu(bool isDragWithContextMenu)411     void SetIsDragWithContextMenu(bool isDragWithContextMenu)
412     {
413         isDragWithContextMenu_ = isDragWithContextMenu;
414     }
415 
416     void SetIsDragNodeNeedClean(bool isDragNodeNeedClean = false)
417     {
418         isDragNodeNeedClean_ = isDragNodeNeedClean;
419     }
420 
IsDragNodeNeedClean()421     bool IsDragNodeNeedClean() const
422     {
423         return isDragNodeNeedClean_;
424     }
425 
426     void UpdateDragMovePosition(const NG::OffsetF& offset, bool isRedragStart = false);
427 
428     void ResetContextMenuDragPosition();
429 
430     void ResetContextMenuRedragPosition();
431 
GetUpdateDragMovePosition()432     OffsetF GetUpdateDragMovePosition() const
433     {
434         return dragTotalMovePosition_;
435     }
436 
437     bool IsDropAllowed(const RefPtr<FrameNode>& dragFrameNode);
438 
SetDragAction(const std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> & dragAction)439     void SetDragAction(const std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction>& dragAction)
440     {
441         dragAction_ = dragAction;
442     }
443 
444     void AddNewDragAnimation();
445 
446     bool IsAllAnimationFinished();
447 
448     float GetCurrentDistance(float x, float y);
449 
450     static double GetMaxWidthBaseOnGridSystem(const RefPtr<PipelineBase>& pipeline);
451 
GetDampingOverflowCount()452     uint32_t GetDampingOverflowCount() const
453     {
454         return dampingOverflowCount_ ;
455     }
456 
SetDampingOverflowCount()457     void SetDampingOverflowCount()
458     {
459         dampingOverflowCount_++;
460     }
461 
GetMenuWrapperNode()462     RefPtr<FrameNode> GetMenuWrapperNode()
463     {
464         return menuWrapperNode_.Upgrade();
465     }
466 
SetMenuWrapperNode(const RefPtr<FrameNode> & frameNode)467     void SetMenuWrapperNode(const RefPtr<FrameNode>& frameNode)
468     {
469         menuWrapperNode_ = frameNode;
470     }
471 
472     bool CheckIsNewDrag(const PointerEvent& pointerEvent) const;
473 
474     void RequireSummaryIfNecessary(const PointerEvent& pointerEvent);
475 
ResetPullId()476     inline void ResetPullId()
477     {
478         summaryMap_.clear();
479         parentHitNodes_.clear();
480         currentPullId_ = -1;
481     }
482 
483     void ResetDraggingStatus(const TouchEvent& touchPoint);
484 
485 private:
486     double CalcDragPreviewDistanceWithPoint(
487         const OHOS::Ace::Dimension& preserverHeight, int32_t x, int32_t y, const DragPreviewInfo& info);
488     Offset CalcDragMoveOffset(
489         const OHOS::Ace::Dimension& preserverHeight, int32_t x, int32_t y, const DragPreviewInfo& info);
490     bool UpdateDragMovePositionFinished(
491         bool needDoDragMoveAnimate, bool isMenuShow, const Offset& newOffset, int32_t containerId);
492     void UpdateDragPreviewScale();
493     bool GetDragPreviewInfo(const OHOS::Ace::RefPtr<OHOS::Ace::NG::OverlayManager>& overlayManager,
494         DragPreviewInfo& dragPreviewInfo, const RefPtr<GestureEventHub>& gestureHub);
495     bool IsNeedDoDragMoveAnimate(const PointerEvent& pointerEvent);
496     const RefPtr<NG::OverlayManager> GetDragAnimationOverlayManager(int32_t containerId);
497     RefPtr<FrameNode> FindDragFrameNodeByPosition(float globalX, float globalY,
498         const RefPtr<FrameNode>& node = nullptr);
499     void FireOnDragEvent(
500         const RefPtr<FrameNode>& frameNode, const PointerEvent& pointerEvent,
501         DragEventType type, const std::string& extraInfo);
502     void FireOnItemDragEvent(const RefPtr<FrameNode>& frameNode, DragType dragType,
503         const ItemDragInfo& itemDragInfo, DragEventType type, int32_t draggedIndex, int32_t insertIndex = 0);
504     bool FireOnItemDropEvent(const RefPtr<FrameNode>& frameNode, DragType dragType,
505         const ItemDragInfo& itemDragInfo, int32_t draggedIndex, int32_t insertIndex, bool isSuccess);
506     int32_t GetItemIndex(const RefPtr<FrameNode>& frameNode, DragType dragType, float globalX, float globalY);
507     void CreateDragWindow(const GestureEvent& info, uint32_t width, uint32_t height);
508     RefPtr<FrameNode> CreateDragRootNode(const RefPtr<UINode>& customNode);
509     void ClearVelocityInfo();
510     void UpdateVelocityTrackerPoint(const Point& point, bool isEnd = false);
511     void PrintDragFrameNode(const OHOS::Ace::PointerEvent& pointerEvent, const RefPtr<FrameNode>& dragFrameNode);
512     void PrintGridDragFrameNode(const float globalX, const float globalY, const RefPtr<FrameNode>& dragFrameNode);
513     void FireOnDragEventWithDragType(const RefPtr<EventHub>& eventHub, DragEventType type,
514         RefPtr<OHOS::Ace::DragEvent>& event, const std::string& extraParams);
515     void NotifyDragFrameNode(
516         const Point& point, const DragEventType& dragEventType, const DragRet& dragRet = DragRet::DRAG_DEFAULT);
517     void TransDragWindowToDragFwk(int32_t windowContainerId);
518     void ResetDragDrop(int32_t windowId, const Point& point);
519     bool isDistanceLimited(const Point& point);
520     bool isTimeLimited(const PointerEvent& pointerEvent, const Point& point);
521     bool ReachMoveLimit(const PointerEvent& pointerEvent, const Point& point);
522     bool IsUIExtensionShowPlaceholder(const RefPtr<NG::UINode>& node);
523     bool IsUIExtensionComponent(const RefPtr<NG::UINode>& node);
524     int32_t GetWindowId();
525 
526     std::map<int32_t, WeakPtr<FrameNode>> dragFrameNodes_;
527     std::map<int32_t, WeakPtr<FrameNode>> gridDragFrameNodes_;
528     std::map<int32_t, WeakPtr<FrameNode>> listDragFrameNodes_;
529     std::map<int32_t, WeakPtr<FrameNode>> textFieldDragFrameNodes_;
530     RefPtr<DragWindow> dragWindow_;
531     RefPtr<FrameNode> draggedFrameNode_;
532     RefPtr<FrameNode> preTargetFrameNode_;
533     RefPtr<FrameNode> draggedGridFrameNode_;
534     RefPtr<FrameNode> preGridTargetFrameNode_;
535     RefPtr<FrameNode> dragWindowRootNode_;
536     RefPtr<Clipboard> clipboard_;
537     Point preMovePoint_ = Point(0, 0);
538     uint64_t preTimeStamp_ = 0L;
539     WeakPtr<FrameNode> prepareDragFrameNode_;
540     std::function<void(const std::string&)> addDataCallback_ = nullptr;
541     std::function<void(const std::string&)> getDataCallback_ = nullptr;
542     std::function<void(const std::string&)> deleteDataCallback_ = nullptr;
543     std::string extraInfo_;
544     std::unique_ptr<JsonValue> newData_ = nullptr;
545     bool isDragCancel_ = false;
546     std::unordered_map<int32_t, WeakPtr<FrameNode>> nodesForDragNotify_;
547     std::unordered_set<int32_t> parentHitNodes_;
548     DragCursorStyleCore dragCursorStyleCore_ = DragCursorStyleCore::DEFAULT;
549     std::map<std::string, int64_t> summaryMap_;
550     uint32_t recordSize_ = 0;
551     int64_t currentId_ = -1;
552     int32_t currentPointerId_ = -1;
553     int32_t currentPullId_ = -1;
554     bool draggingPressedState_ = false;
555 
556     std::function<void(void)> notifyInDraggedCallback_ = nullptr;
557     bool isDragged_ = false;
558     bool isMouseDragged_ = false;
559     bool isWindowConsumed_ = false;
560     bool isDragWindowShow_ = false;
561     bool hasNotifiedTransformation_ = false;
562     bool isPullMoveReceivedForCurrentDrag_ = false;
563     bool isDragWindowSubWindow_ = false;
564     bool isDragNodeNeedClean_ = false;
565     VelocityTracker velocityTracker_;
566     PreDragStatus preDragStatus_ = PreDragStatus::ACTION_DETECTING_STATUS;
567     Rect previewRect_ { -1, -1, -1, -1 };
568     DragDropMgrState dragDropState_ = DragDropMgrState::IDLE;
569     DragPreviewInfo info_;
570     PointerEvent dragDropPointerEvent_;
571     bool isDragFwkShow_ = true;
572     OffsetF pixelMapOffset_;
573     OffsetF curPointerOffset_;
574     std::vector<RefPtr<PixelMap>> gatherPixelMaps_;
575     bool hasGatherNode_ = false;
576     bool isShowBadgeAnimation_ = true;
577     bool eventStrictReportingEnabled_ = false;
578     int32_t badgeNumber_ = -1;
579     int32_t currentAnimationCnt_ = 0;
580     int32_t allAnimationCnt_ = 0;
581     bool isDragWithContextMenu_ = false;
582     Point dragDampStartPoint_ { 1, 1 };
583     OffsetF dragMovePosition_ = OffsetF(0.0f, 0.0f);
584     OffsetF lastDragMovePosition_ = OffsetF(0.0f, 0.0f);
585     OffsetF dragTotalMovePosition_ = OffsetF(0.0f, 0.0f);
586     RefPtr<GridColumnInfo> columnInfo_;
587     uint32_t dampingOverflowCount_ = 0;
588     WeakPtr<FrameNode> menuWrapperNode_;
589     std::shared_ptr<OHOS::Ace::NG::ArkUIInteralDragAction> dragAction_;
590 
591     ACE_DISALLOW_COPY_AND_MOVE(DragDropManager);
592 };
593 } // namespace OHOS::Ace::NG
594 
595 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_MANAGER_DRAG_DROP_DRAG_DROP_MANAGER_H
596