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