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