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