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