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