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