• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_BASE_SUBWINDOW_SUBWINDOW_H
17 #define FOUNDATION_ACE_FRAMEWORKS_BASE_SUBWINDOW_SUBWINDOW_H
18 
19 #include <set>
20 
21 #include "base/geometry/ng/rect_t.h"
22 #include "base/memory/ace_type.h"
23 #include "base/memory/referenced.h"
24 #include "core/components/dialog/dialog_properties.h"
25 #include "core/components_ng/base/frame_node.h"
26 #include "core/components_ng/pattern/overlay/overlay_manager.h"
27 #include "core/components_ng/property/menu_property.h"
28 #include "core/pipeline/base/component.h"
29 
30 namespace OHOS::Ace {
31 enum class ToastWindowType {
32     TOAST_IN_TYPE_APP_SUB_WINDOW = 0,
33     TOAST_IN_TYPE_SYSTEM_SUB_WINDOW,
34     TOAST_IN_TYPE_TOAST,
35     TOAST_IN_TYPE_SYSTEM_FLOAT,
36     TOAST_WINDOW_COUNT
37 };
38 enum class MenuWindowState : int32_t {
39     DEFAULT = 0,
40     ATTACHING = 1,
41     ATTACHED = 2,
42     DETACHING = 3,
43     DETACHED = 4
44 };
45 
46 enum class SubwindowType {
47     TYPE_SYSTEM_TOP_MOST_TOAST = 0,
48     TYPE_TOP_MOST_TOAST,
49     TYPE_MENU,
50     TYPE_POPUP,
51     TYPE_DIALOG,
52     TYPE_SELECT_MENU,
53     TYPE_SHEET,
54     TYPE_TIPS,
55     SUB_WINDOW_TYPE_COUNT,
56 };
57 
58 class ACE_EXPORT Subwindow : public AceType {
59     DECLARE_ACE_TYPE(Subwindow, AceType);
60 
61 public:
62     static RefPtr<Subwindow> CreateSubwindow(int32_t instanceId);
63 
64     virtual void InitContainer() = 0;
65     virtual void ResizeWindow() = 0;
66     virtual void ResizeWindowForMenu() = 0;
67     virtual bool SetFollowParentWindowLayoutEnabled(bool enable) = 0;
68     virtual NG::RectF GetRect() = 0;
69     virtual void SetRect(const NG::RectF& rect) = 0;
70     virtual void ShowMenu(const RefPtr<Component>& newComponent) = 0;
71     virtual void ShowMenuNG(const RefPtr<NG::FrameNode> menuNode, const NG::MenuParam& menuParam,
72         const RefPtr<NG::FrameNode>& targetNode, const NG::OffsetF& offset) = 0;
73     virtual void ShowMenuNG(std::function<void()>&& buildFunc, std::function<void()>&& previewBuildFunc,
74         const NG::MenuParam& menuParam, const RefPtr<NG::FrameNode>& targetNode, const NG::OffsetF& offset) = 0;
75     virtual bool ShowPreviewNG(bool isStartDraggingFromSubWindow) = 0;
76     virtual void SetWindowTouchable(bool touchable) = 0;
77     virtual void HidePreviewNG() = 0;
78     virtual void HideMenuNG(const RefPtr<NG::FrameNode>& menu, int32_t targetId) = 0;
79     virtual void HideMenuNG(bool showPreviewAnimation = true, bool startDrag = false) = 0;
80     virtual void UpdateHideMenuOffsetNG(const NG::OffsetF& offset = NG::OffsetF(0.0f, 0.0f),
81         float meunuScale = 1.0f, bool isRedragStart = false, int32_t menuWrapperId = -1) = 0;
82     virtual void UpdatePreviewPosition() = 0;
83     virtual bool GetMenuPreviewCenter(NG::OffsetF& offset) = 0;
84     virtual void ContextMenuSwitchDragPreviewAnimationtNG(const RefPtr<NG::FrameNode>& dragPreviewNode,
85         const NG::OffsetF& offset = NG::OffsetF(0.0f, 0.0f)) = 0;
86     virtual void ShowPopup(const RefPtr<Component>& newComponent, bool disableTouchEvent = true) = 0;
87     virtual void ShowPopupNG(int32_t targetId, const NG::PopupInfo& popupInfo,
88         const std::function<void(int32_t)>&& onWillDismiss = nullptr, bool interactiveDismiss = true) = 0;
89     virtual void HidePopupNG(int32_t targetId) = 0;
ShowTipsNG(int32_t targetId,const NG::PopupInfo & popupInfo,int32_t appearingTime,int32_t appearingTimeWithContinuousOperation,bool isSubwindow)90     virtual void ShowTipsNG(int32_t targetId, const NG::PopupInfo& popupInfo, int32_t appearingTime,
91         int32_t appearingTimeWithContinuousOperation, bool isSubwindow) {};
HideTipsNG(int32_t targetId,int32_t disappearingTime)92     virtual void HideTipsNG(int32_t targetId, int32_t disappearingTime) {};
93     virtual void GetPopupInfoNG(int32_t targetId, NG::PopupInfo& popupInfo) = 0;
94     virtual bool CancelPopup(const std::string& id) = 0;
95     virtual void CloseMenu() = 0;
ClearMenu()96     virtual void ClearMenu() {};
97     virtual void ClearMenuNG(int32_t targetId = -1, bool inWindow = true, bool showAnimation = false) = 0;
98     virtual void ClearPopupNG() = 0;
ClearPopupNG(bool isForceClear)99     virtual void ClearPopupNG(bool isForceClear) {}
100     virtual RefPtr<NG::FrameNode> ShowDialogNG(
101         const DialogProperties& dialogProps, std::function<void()>&& buildFunc) = 0;
102     virtual RefPtr<NG::FrameNode> ShowDialogNGWithNode(
103         const DialogProperties& dialogProps, const RefPtr<NG::UINode>& customNode) = 0;
104     virtual void CloseDialogNG(const RefPtr<NG::FrameNode>& dialogNode) = 0;
105     virtual void OpenCustomDialogNG(const DialogProperties& dialogProps, std::function<void(int32_t)>&& callback) = 0;
106     virtual void CloseCustomDialogNG(int32_t dialogId) = 0;
107     virtual void CloseCustomDialogNG(const WeakPtr<NG::UINode>& node, std::function<void(int32_t)>&& callback) = 0;
108     virtual void UpdateCustomDialogNG(const WeakPtr<NG::UINode>& node, const DialogProperties& dialogProps,
109         std::function<void(int32_t)>&& callback) = 0;
110     virtual void HideSubWindowNG() = 0;
111     virtual int32_t GetChildContainerId() const = 0;
112     virtual bool GetShown() = 0;
113     virtual void MarkDirtyDialogSafeArea() = 0;
114     virtual bool ShowSelectOverlay(const RefPtr<NG::FrameNode>& overlayNode) = 0;
115 
116     // Add interface for hot regions
SetHotAreas(const std::vector<Rect> & rects,int32_t nodeId)117     virtual void SetHotAreas(const std::vector<Rect>& rects, int32_t nodeId) {};
DeleteHotAreas(int32_t nodeId)118     virtual void DeleteHotAreas(int32_t nodeId) {};
119 
120     // Add interface to provide the size and offset of the parent window
121     virtual Rect GetParentWindowRect() const = 0;
122     virtual Rect GetUIExtensionHostWindowRect() const = 0;
123     virtual Rect GetFoldExpandAvailableRect() const = 0;
GetWindowRect()124     virtual NG::RectF GetWindowRect() const
125     {
126         return NG::RectF();
127     }
NeedAvoidKeyboard()128     virtual bool NeedAvoidKeyboard()
129     {
130         return false;
131     }
132     virtual bool CheckHostWindowStatus() const = 0;
133     virtual bool IsFreeMultiWindow() const = 0;
134     virtual void OnFreeMultiWindowSwitch(bool enable) = 0;
135     virtual int32_t RegisterFreeMultiWindowSwitchCallback(std::function<void(bool)>&& callback) = 0;
136     virtual void UnRegisterFreeMultiWindowSwitchCallback(int32_t callbackId) = 0;
137 
GetSubwindowId()138     int32_t GetSubwindowId() const
139     {
140         return subwindowId_;
141     }
142 
SetSubwindowId(int32_t id)143     void SetSubwindowId(int32_t id)
144     {
145         subwindowId_ = id;
146     }
147 
GetUIExtensionHostWindowId()148     int32_t GetUIExtensionHostWindowId() const
149     {
150         return uiExtensionHostWindowId_;
151     }
152 
SetUIExtensionHostWindowId(int32_t id)153     void SetUIExtensionHostWindowId(int32_t id)
154     {
155         uiExtensionHostWindowId_ = id;
156     }
157 
SetAboveApps(bool isAboveApps)158     void SetAboveApps(bool isAboveApps)
159     {
160         isAboveApps_ = isAboveApps;
161     }
162 
GetAboveApps()163     bool GetAboveApps() const
164     {
165         return isAboveApps_;
166     }
167 
SetToastWindowType(const ToastWindowType & type)168     void SetToastWindowType(const ToastWindowType& type)
169     {
170         toastWindowType_ = type;
171         SetAboveApps(true);
172     }
173 
SetMainWindowId(uint32_t mainWindowId)174     void SetMainWindowId(uint32_t mainWindowId)
175     {
176         mainWindowId_ = mainWindowId;
177     }
178 
GetMainWindowId()179     uint32_t GetMainWindowId() const
180     {
181         return mainWindowId_;
182     }
183 
GetToastWindowType()184     ToastWindowType GetToastWindowType() const
185     {
186         return toastWindowType_;
187     }
188 
SetIsSystemTopMost(bool isSystemTopMost)189     void SetIsSystemTopMost(bool isSystemTopMost)
190     {
191         isSystemTopMost_ = isSystemTopMost;
192     }
193 
IsSystemTopMost()194     bool IsSystemTopMost() const
195     {
196         return isSystemTopMost_;
197     }
198 
SetIsRosenWindowCreate(bool isRosenWindowCreate)199     void SetIsRosenWindowCreate(bool isRosenWindowCreate)
200     {
201         isRosenWindowCreate_ = isRosenWindowCreate;
202     }
203 
GetIsRosenWindowCreate()204     bool GetIsRosenWindowCreate() const
205     {
206         return isRosenWindowCreate_;
207     }
208 
SetIsSelectOverlaySubWindow(bool isSelectOverlaySubWindow)209     void SetIsSelectOverlaySubWindow(bool isSelectOverlaySubWindow)
210     {
211         isSelectOverlaySubWindow_ = isSelectOverlaySubWindow;
212     }
213 
GetIsSelectOverlaySubWindow()214     bool GetIsSelectOverlaySubWindow() const
215     {
216         return isSelectOverlaySubWindow_;
217     }
218 
219     virtual void ClearToast() = 0;
220     virtual void ShowToast(const NG::ToastInfo& toastInfo, std::function<void(int32_t)>&& callback) = 0;
221     virtual void CloseToast(const int32_t toastId, std::function<void(int32_t)>&& callback) = 0;
222     virtual void ShowDialog(const std::string& title, const std::string& message,
223         const std::vector<ButtonInfo>& buttons, bool autoCancel, std::function<void(int32_t, int32_t)>&& callback,
224         const std::set<std::string>& callbacks) = 0;
225     virtual void ShowDialog(const PromptDialogAttr& dialogAttr, const std::vector<ButtonInfo>& buttons,
226         std::function<void(int32_t, int32_t)>&& callback, const std::set<std::string>& callbacks) = 0;
227     virtual void ShowActionMenu(const std::string& title, const std::vector<ButtonInfo>& button,
228         std::function<void(int32_t, int32_t)>&& callback) = 0;
229     virtual void CloseDialog(int32_t instanceId) = 0;
230     virtual void OpenCustomDialog(const PromptDialogAttr& dialogAttr, std::function<void(int32_t)>&& callback) = 0;
231     virtual void CloseCustomDialog(const int32_t dialogId) = 0;
232     virtual void CloseCustomDialog(const WeakPtr<NG::UINode>& node, std::function<void(int32_t)> &&callback) = 0;
233     virtual const RefPtr<NG::OverlayManager> GetOverlayManager() = 0;
234     virtual bool IsFocused() = 0;
235     virtual void RequestFocus() = 0;
236     virtual void ResizeWindowForFoldStatus() = 0;
237     virtual void ResizeWindowForFoldStatus(int32_t parentContainerId) = 0;
238     virtual bool Close() = 0;
239     virtual bool IsToastSubWindow() = 0;
240     virtual void DestroyWindow() = 0;
241     virtual void ResizeDialogSubwindow() = 0;
242     virtual uint64_t GetDisplayId() = 0;
243     virtual bool IsSameDisplayWithParentWindow(bool useInitializedId = false) = 0;
GetAttachState()244     virtual OHOS::Ace::MenuWindowState GetAttachState() {return MenuWindowState::DEFAULT;};
GetDetachState()245     virtual OHOS::Ace::MenuWindowState GetDetachState() {return MenuWindowState::DEFAULT;};
246 
247     virtual void ShowBindSheetNG(bool isShow, std::function<void(const std::string&)>&& callback,
248         std::function<RefPtr<NG::UINode>()>&& buildNodeFunc, std::function<RefPtr<NG::UINode>()>&& buildtitleNodeFunc,
249         NG::SheetStyle& sheetStyle, std::function<void()>&& onAppear, std::function<void()>&& onDisappear,
250         std::function<void()>&& shouldDismiss, std::function<void(const int32_t)>&& onWillDismiss,
251         std::function<void()>&& onWillAppear, std::function<void()>&& onWillDisappear,
252         std::function<void(const float)>&& onHeightDidChange,
253         std::function<void(const float)>&& onDetentsDidChange,
254         std::function<void(const float)>&& onWidthDidChange,
255         std::function<void(const float)>&& onTypeDidChange,
256         std::function<void()>&& sheetSpringBack, const RefPtr<NG::FrameNode>& targetNode) = 0;
257     virtual void SwitchFollowParentWindowLayout(bool freeMultiWindowEnable) = 0;
258     virtual bool NeedFollowParentWindowLayout() = 0;
259     virtual void AddFollowParentWindowLayoutNode(int32_t nodeId) = 0;
260     virtual void RemoveFollowParentWindowLayoutNode(int32_t nodeId) = 0;
261     virtual void SetNodeId(int32_t nodeId) = 0;
262     virtual int32_t GetNodeId() const = 0;
263     virtual void SetWindowAnchorInfo(const NG::OffsetF& offset, SubwindowType type, int32_t nodeId) = 0;
264 
265 #if defined(ACE_STATIC)
266     virtual void ShowToastStatic(const NG::ToastInfo& toastInfo, std::function<void(int32_t)>&& callback) = 0;
267     virtual void CloseToastStatic(const int32_t toastId, std::function<void(int32_t)>&& callback) = 0;
268     virtual void ShowDialogStatic(DialogProperties& dialogProps, std::function<void(int32_t, int32_t)>&& callback) = 0;
269     virtual void ShowActionMenuStatic(DialogProperties& dialogProps,
270         std::function<void(int32_t, int32_t)>&& callback) = 0;
271     virtual void OpenCustomDialogStatic(DialogProperties &dialogProps,
272         std::function<void(int32_t)> &&callback) = 0;
273 #endif
274 private:
275     int32_t subwindowId_ = 0;
276     int32_t uiExtensionHostWindowId_ = 0;
277     bool isAboveApps_ = false;
278     bool isSystemTopMost_ = false;
279     bool isRosenWindowCreate_ = false;
280     bool isSelectOverlaySubWindow_ = false;
281     ToastWindowType toastWindowType_ = ToastWindowType::TOAST_IN_TYPE_TOAST;
282     // toast main window ID
283     uint32_t mainWindowId_ = 0;
284 };
285 
286 } // namespace OHOS::Ace
287 
288 #endif // FOUNDATION_ACE_FRAMEWORKS_BASE_SUBWINDOW_SUBWINDOW_H
289