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_PIPELINE_CONTAINER_WINDOW_MANAGER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_PIPELINE_CONTAINER_WINDOW_MANAGER_H
18 
19 #include <functional>
20 
21 #include "base/memory/ace_type.h"
22 #include "base/system_bar/system_bar_style.h"
23 #include "core/components/common/layout/constants.h"
24 
25 namespace OHOS::Ace {
26 
27 using WindowCallback = std::function<void(void)>;
28 using WindowModeCallback = std::function<WindowMode(void)>;
29 using WindowTypeCallback = std::function<WindowType(void)>;
30 using WindowSetMaximizeModeCallback = std::function<void(MaximizeMode)>;
31 using WindowGetMaximizeModeCallback = std::function<MaximizeMode(void)>;
32 using GetSystemBarStyleCallback = std::function<RefPtr<SystemBarStyle>(void)>;
33 using SetSystemBarStyleCallback = std::function<void(const RefPtr<SystemBarStyle>&)>;
34 using GetFreeMultiWindowModeEnabledStateCallback = std::function<bool(void)>;
35 using WindowIsStartMovingCallback = std::function<bool(void)>;
36 
37 class WindowManager : public virtual AceType {
38     DECLARE_ACE_TYPE(WindowManager, AceType);
39 
40 public:
41     WindowManager() = default;
42     ~WindowManager() override = default;
43 
SetAppIconId(int32_t id)44     void SetAppIconId(int32_t id)
45     {
46         appIconId_ = id;
47     }
48 
GetAppIconId()49     int32_t GetAppIconId() const
50     {
51         return appIconId_;
52     }
53 
SetAppLabelId(int32_t id)54     void SetAppLabelId(int32_t id)
55     {
56         appLabelId_ = id;
57     }
58 
GetAppLabelId()59     int32_t GetAppLabelId() const
60     {
61         return appLabelId_;
62     }
63 
SetWindowMinimizeCallBack(WindowCallback && callback)64     void SetWindowMinimizeCallBack(WindowCallback&& callback)
65     {
66         windowMinimizeCallback_ = std::move(callback);
67     }
68 
SetWindowMaximizeCallBack(WindowCallback && callback)69     void SetWindowMaximizeCallBack(WindowCallback&& callback)
70     {
71         windowMaximizeCallback_ = std::move(callback);
72     }
73 
SetWindowMaximizeFloatingCallBack(WindowCallback && callback)74     void SetWindowMaximizeFloatingCallBack(WindowCallback&& callback)
75     {
76         windowMaximizeFloatingCallback_ = std::move(callback);
77     }
78 
SetWindowRecoverCallBack(WindowCallback && callback)79     void SetWindowRecoverCallBack(WindowCallback&& callback)
80     {
81         windowRecoverCallback_ = std::move(callback);
82     }
83 
SetWindowCloseCallBack(WindowCallback && callback)84     void SetWindowCloseCallBack(WindowCallback&& callback)
85     {
86         windowCloseCallback_ = std::move(callback);
87     }
88 
SetWindowSplitPrimaryCallBack(WindowCallback && callback)89     void SetWindowSplitPrimaryCallBack(WindowCallback&& callback)
90     {
91         windowSplitPrimaryCallback_ = std::move(callback);
92     }
93 
SetWindowSplitSecondaryCallBack(WindowCallback && callback)94     void SetWindowSplitSecondaryCallBack(WindowCallback&& callback)
95     {
96         windowSplitSecondaryCallback_ = std::move(callback);
97     }
98 
SetWindowGetModeCallBack(WindowModeCallback && callback)99     void SetWindowGetModeCallBack(WindowModeCallback&& callback)
100     {
101         windowGetModeCallback_ = std::move(callback);
102     }
103 
SetWindowGetTypeCallBack(WindowTypeCallback && callback)104     void SetWindowGetTypeCallBack(WindowTypeCallback&& callback)
105     {
106         windowGetTypeCallback_ = std::move(callback);
107     }
108 
SetWindowStartMoveCallBack(WindowCallback && callback)109     void SetWindowStartMoveCallBack(WindowCallback&& callback)
110     {
111         windowStartMoveCallback_ = std::move(callback);
112     }
113 
SetWindowIsStartMovingCallBack(WindowIsStartMovingCallback && callback)114     void SetWindowIsStartMovingCallBack(WindowIsStartMovingCallback&& callback)
115     {
116         WindowIsStartMovingCallback_ = std::move(callback);
117     }
118 
SetWindowSetMaximizeModeCallBack(WindowSetMaximizeModeCallback && callback)119     void SetWindowSetMaximizeModeCallBack(WindowSetMaximizeModeCallback&& callback)
120     {
121         windowSetMaximizeModeCallback_ = std::move(callback);
122     }
123 
SetWindowGetMaximizeModeCallBack(WindowGetMaximizeModeCallback && callback)124     void SetWindowGetMaximizeModeCallBack(WindowGetMaximizeModeCallback&& callback)
125     {
126         windowGetMaximizeModeCallback_ = std::move(callback);
127     }
128 
SetGetSystemBarStyleCallBack(GetSystemBarStyleCallback && callback)129     void SetGetSystemBarStyleCallBack(GetSystemBarStyleCallback&& callback)
130     {
131         getSystemBarStyleCallback_ = std::move(callback);
132     }
133 
SetSetSystemBarStyleCallBack(SetSystemBarStyleCallback && callback)134     void SetSetSystemBarStyleCallBack(SetSystemBarStyleCallback&& callback)
135     {
136         setSystemBarStyleCallback_ = std::move(callback);
137     }
138 
SetGetFreeMultiWindowModeEnabledStateCallback(GetFreeMultiWindowModeEnabledStateCallback && callback)139     void SetGetFreeMultiWindowModeEnabledStateCallback(GetFreeMultiWindowModeEnabledStateCallback&& callback)
140     {
141         getFreeMultiWindowModeEnabledStateCallback_ = std::move(callback);
142     }
143 
SetPerformBackCallback(WindowCallback && callback)144     void SetPerformBackCallback(WindowCallback&& callback)
145     {
146         windowPerformBackCallback_ = callback;
147     }
148 
WindowMinimize()149     void WindowMinimize() const
150     {
151         if (windowMinimizeCallback_) {
152             windowMinimizeCallback_();
153         }
154     }
155 
156     void WindowMaximize(bool supportFloatingMaximize = false)
157     {
158         if (supportFloatingMaximize && windowMaximizeFloatingCallback_) {
159             windowMaximizeFloatingCallback_();
160             maximizeMode_ = GetWindowMaximizeMode();
161         }
162         if (!supportFloatingMaximize && windowMaximizeCallback_) {
163             windowMaximizeCallback_();
164         }
165     }
166 
WindowRecover()167     void WindowRecover()
168     {
169         if (windowRecoverCallback_) {
170             windowRecoverCallback_();
171             maximizeMode_ = MaximizeMode::MODE_RECOVER;
172         }
173     }
174 
175     void FireWindowSplitCallBack(bool isPrimary = true) const
176     {
177         if (isPrimary && windowSplitPrimaryCallback_) {
178             windowSplitPrimaryCallback_();
179         }
180         if (!isPrimary && windowSplitSecondaryCallback_) {
181             windowSplitSecondaryCallback_();
182         }
183     }
184 
WindowClose()185     void WindowClose() const
186     {
187         if (windowCloseCallback_) {
188             windowCloseCallback_();
189         }
190     }
191 
WindowStartMove()192     void WindowStartMove() const
193     {
194         if (windowStartMoveCallback_) {
195             windowStartMoveCallback_();
196         }
197     }
198 
WindowIsStartMoving()199     bool WindowIsStartMoving() const
200     {
201         if (WindowIsStartMovingCallback_) {
202             return WindowIsStartMovingCallback_();
203         }
204         return false;
205     }
206 
WindowPerformBack()207     void WindowPerformBack()
208     {
209         if (windowPerformBackCallback_) {
210             windowPerformBackCallback_();
211         }
212     }
213 
GetWindowMode()214     WindowMode GetWindowMode() const
215     {
216         if (windowGetModeCallback_) {
217             return windowGetModeCallback_();
218         }
219         return WindowMode::WINDOW_MODE_UNDEFINED;
220     }
221 
GetWindowType()222     WindowType GetWindowType() const
223     {
224         if (windowGetTypeCallback_) {
225             return windowGetTypeCallback_();
226         }
227         return WindowType::WINDOW_TYPE_UNDEFINED;
228     }
229 
SetWindowMaximizeMode(MaximizeMode mode)230     void SetWindowMaximizeMode(MaximizeMode mode)
231     {
232         if (windowSetMaximizeModeCallback_) {
233             windowSetMaximizeModeCallback_(mode);
234         }
235     }
236 
GetWindowMaximizeMode()237     MaximizeMode GetWindowMaximizeMode() const
238     {
239         if (windowGetMaximizeModeCallback_) {
240             return windowGetMaximizeModeCallback_();
241         }
242         return MaximizeMode::MODE_RECOVER;
243     }
244 
GetCurrentWindowMaximizeMode()245     MaximizeMode GetCurrentWindowMaximizeMode() const
246     {
247         return maximizeMode_;
248     }
249 
SetCurrentWindowMaximizeMode(MaximizeMode mode)250     void SetCurrentWindowMaximizeMode(MaximizeMode mode)
251     {
252         maximizeMode_ = mode;
253     }
254 
GetSystemBarStyle()255     RefPtr<SystemBarStyle> GetSystemBarStyle()
256     {
257         if (getSystemBarStyleCallback_) {
258             return getSystemBarStyleCallback_();
259         }
260         return nullptr;
261     }
262 
SetSystemBarStyle(const RefPtr<SystemBarStyle> & style)263     void SetSystemBarStyle(const RefPtr<SystemBarStyle>& style)
264     {
265         if (setSystemBarStyleCallback_) {
266             setSystemBarStyleCallback_(style);
267         }
268     }
269 
GetFreeMultiWindowModeEnabledState()270     bool GetFreeMultiWindowModeEnabledState() const
271     {
272         if (getFreeMultiWindowModeEnabledStateCallback_) {
273             return getFreeMultiWindowModeEnabledStateCallback_();
274         }
275         return false;
276     }
277 
278 private:
279     int32_t appLabelId_ = 0;
280     int32_t appIconId_ = 0;
281     MaximizeMode maximizeMode_ = MaximizeMode::MODE_RECOVER;
282     WindowCallback windowMinimizeCallback_;
283     WindowCallback windowRecoverCallback_;
284     WindowCallback windowCloseCallback_;
285     WindowCallback windowSplitPrimaryCallback_;
286     WindowCallback windowSplitSecondaryCallback_;
287     WindowCallback windowStartMoveCallback_;
288     WindowIsStartMovingCallback WindowIsStartMovingCallback_;
289     WindowCallback windowPerformBackCallback_;
290     WindowCallback windowMaximizeCallback_;
291     WindowCallback windowMaximizeFloatingCallback_;
292     WindowSetMaximizeModeCallback windowSetMaximizeModeCallback_;
293     WindowGetMaximizeModeCallback windowGetMaximizeModeCallback_;
294     WindowModeCallback windowGetModeCallback_;
295     WindowTypeCallback windowGetTypeCallback_;
296     GetSystemBarStyleCallback getSystemBarStyleCallback_;
297     SetSystemBarStyleCallback setSystemBarStyleCallback_;
298     GetFreeMultiWindowModeEnabledStateCallback getFreeMultiWindowModeEnabledStateCallback_;
299 };
300 
301 } // namespace OHOS::Ace
302 
303 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PIPELINE_CONTAINER_WINDOW_MANAGER_H
304