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