1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#ifndef OHOS_ROSEN_WM_COMMON_H
17e0dac50fSopenharmony_ci#define OHOS_ROSEN_WM_COMMON_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <parcel.h>
20e0dac50fSopenharmony_ci#include <map>
21e0dac50fSopenharmony_ci#include <float.h>
22e0dac50fSopenharmony_ci#include <sstream>
23e0dac50fSopenharmony_ci#include <string>
24e0dac50fSopenharmony_ci#include <vector>
25e0dac50fSopenharmony_ci
26e0dac50fSopenharmony_cinamespace OHOS {
27e0dac50fSopenharmony_cinamespace Rosen {
28e0dac50fSopenharmony_ciusing DisplayId = uint64_t;
29e0dac50fSopenharmony_ci/**
30e0dac50fSopenharmony_ci * @brief Enumerates type of window.
31e0dac50fSopenharmony_ci */
32e0dac50fSopenharmony_cienum class WindowType : uint32_t {
33e0dac50fSopenharmony_ci    APP_WINDOW_BASE = 1,
34e0dac50fSopenharmony_ci    APP_MAIN_WINDOW_BASE = APP_WINDOW_BASE,
35e0dac50fSopenharmony_ci    WINDOW_TYPE_APP_MAIN_WINDOW = APP_MAIN_WINDOW_BASE,
36e0dac50fSopenharmony_ci    APP_MAIN_WINDOW_END,
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ci    APP_SUB_WINDOW_BASE = 1000,
39e0dac50fSopenharmony_ci    WINDOW_TYPE_MEDIA = APP_SUB_WINDOW_BASE,
40e0dac50fSopenharmony_ci    WINDOW_TYPE_APP_SUB_WINDOW,
41e0dac50fSopenharmony_ci    WINDOW_TYPE_APP_COMPONENT,
42e0dac50fSopenharmony_ci    APP_SUB_WINDOW_END,
43e0dac50fSopenharmony_ci    APP_WINDOW_END = APP_SUB_WINDOW_END,
44e0dac50fSopenharmony_ci
45e0dac50fSopenharmony_ci    SYSTEM_WINDOW_BASE = 2000,
46e0dac50fSopenharmony_ci    BELOW_APP_SYSTEM_WINDOW_BASE = SYSTEM_WINDOW_BASE,
47e0dac50fSopenharmony_ci    WINDOW_TYPE_WALLPAPER = SYSTEM_WINDOW_BASE,
48e0dac50fSopenharmony_ci    WINDOW_TYPE_DESKTOP,
49e0dac50fSopenharmony_ci    BELOW_APP_SYSTEM_WINDOW_END,
50e0dac50fSopenharmony_ci
51e0dac50fSopenharmony_ci    ABOVE_APP_SYSTEM_WINDOW_BASE = 2100,
52e0dac50fSopenharmony_ci    WINDOW_TYPE_APP_LAUNCHING = ABOVE_APP_SYSTEM_WINDOW_BASE,
53e0dac50fSopenharmony_ci    WINDOW_TYPE_DOCK_SLICE,
54e0dac50fSopenharmony_ci    WINDOW_TYPE_INCOMING_CALL,
55e0dac50fSopenharmony_ci    WINDOW_TYPE_SEARCHING_BAR,
56e0dac50fSopenharmony_ci    WINDOW_TYPE_SYSTEM_ALARM_WINDOW,
57e0dac50fSopenharmony_ci    WINDOW_TYPE_INPUT_METHOD_FLOAT,
58e0dac50fSopenharmony_ci    WINDOW_TYPE_FLOAT,
59e0dac50fSopenharmony_ci    WINDOW_TYPE_TOAST,
60e0dac50fSopenharmony_ci    WINDOW_TYPE_STATUS_BAR,
61e0dac50fSopenharmony_ci    WINDOW_TYPE_PANEL,
62e0dac50fSopenharmony_ci    WINDOW_TYPE_KEYGUARD,
63e0dac50fSopenharmony_ci    WINDOW_TYPE_VOLUME_OVERLAY,
64e0dac50fSopenharmony_ci    WINDOW_TYPE_NAVIGATION_BAR,
65e0dac50fSopenharmony_ci    WINDOW_TYPE_DRAGGING_EFFECT,
66e0dac50fSopenharmony_ci    WINDOW_TYPE_POINTER,
67e0dac50fSopenharmony_ci    WINDOW_TYPE_LAUNCHER_RECENT,
68e0dac50fSopenharmony_ci    WINDOW_TYPE_LAUNCHER_DOCK,
69e0dac50fSopenharmony_ci    WINDOW_TYPE_BOOT_ANIMATION,
70e0dac50fSopenharmony_ci    WINDOW_TYPE_FREEZE_DISPLAY,
71e0dac50fSopenharmony_ci    WINDOW_TYPE_VOICE_INTERACTION,
72e0dac50fSopenharmony_ci    WINDOW_TYPE_FLOAT_CAMERA,
73e0dac50fSopenharmony_ci    WINDOW_TYPE_PLACEHOLDER,
74e0dac50fSopenharmony_ci    WINDOW_TYPE_DIALOG,
75e0dac50fSopenharmony_ci    WINDOW_TYPE_SCREENSHOT,
76e0dac50fSopenharmony_ci    WINDOW_TYPE_INPUT_METHOD_STATUS_BAR,
77e0dac50fSopenharmony_ci    WINDOW_TYPE_GLOBAL_SEARCH,
78e0dac50fSopenharmony_ci    WINDOW_TYPE_NEGATIVE_SCREEN,
79e0dac50fSopenharmony_ci    WINDOW_TYPE_SYSTEM_TOAST,
80e0dac50fSopenharmony_ci    WINDOW_TYPE_SYSTEM_FLOAT,
81e0dac50fSopenharmony_ci    WINDOW_TYPE_PIP,
82e0dac50fSopenharmony_ci    WINDOW_TYPE_THEME_EDITOR,
83e0dac50fSopenharmony_ci    WINDOW_TYPE_NAVIGATION_INDICATOR,
84e0dac50fSopenharmony_ci    WINDOW_TYPE_HANDWRITE,
85e0dac50fSopenharmony_ci    WINDOW_TYPE_SCENE_BOARD,
86e0dac50fSopenharmony_ci    WINDOW_TYPE_KEYBOARD_PANEL,
87e0dac50fSopenharmony_ci    WINDOW_TYPE_SCB_DEFAULT,
88e0dac50fSopenharmony_ci    WINDOW_TYPE_TRANSPARENT_VIEW,
89e0dac50fSopenharmony_ci    ABOVE_APP_SYSTEM_WINDOW_END,
90e0dac50fSopenharmony_ci
91e0dac50fSopenharmony_ci    SYSTEM_SUB_WINDOW_BASE = 2500,
92e0dac50fSopenharmony_ci    WINDOW_TYPE_SYSTEM_SUB_WINDOW = SYSTEM_SUB_WINDOW_BASE,
93e0dac50fSopenharmony_ci    SYSTEM_SUB_WINDOW_END,
94e0dac50fSopenharmony_ci
95e0dac50fSopenharmony_ci    SYSTEM_WINDOW_END = SYSTEM_SUB_WINDOW_END,
96e0dac50fSopenharmony_ci
97e0dac50fSopenharmony_ci    WINDOW_TYPE_UI_EXTENSION = 3000
98e0dac50fSopenharmony_ci};
99e0dac50fSopenharmony_ci
100e0dac50fSopenharmony_ci/**
101e0dac50fSopenharmony_ci * @struct HookInfo.
102e0dac50fSopenharmony_ci *
103e0dac50fSopenharmony_ci * @brief hook diaplayinfo deepending on the window size.
104e0dac50fSopenharmony_ci */
105e0dac50fSopenharmony_cistruct HookInfo {
106e0dac50fSopenharmony_ci    uint32_t width_;
107e0dac50fSopenharmony_ci    uint32_t height_;
108e0dac50fSopenharmony_ci    float_t density_;
109e0dac50fSopenharmony_ci    uint32_t rotation_;
110e0dac50fSopenharmony_ci    bool enableHookRotation_;
111e0dac50fSopenharmony_ci};
112e0dac50fSopenharmony_ci
113e0dac50fSopenharmony_ci/**
114e0dac50fSopenharmony_ci * @brief Enumerates mode of window.
115e0dac50fSopenharmony_ci */
116e0dac50fSopenharmony_cienum class WindowMode : uint32_t {
117e0dac50fSopenharmony_ci    WINDOW_MODE_UNDEFINED = 0,
118e0dac50fSopenharmony_ci    WINDOW_MODE_FULLSCREEN = 1,
119e0dac50fSopenharmony_ci    WINDOW_MODE_SPLIT_PRIMARY = 100,
120e0dac50fSopenharmony_ci    WINDOW_MODE_SPLIT_SECONDARY,
121e0dac50fSopenharmony_ci    WINDOW_MODE_FLOATING,
122e0dac50fSopenharmony_ci    WINDOW_MODE_PIP
123e0dac50fSopenharmony_ci};
124e0dac50fSopenharmony_ci
125e0dac50fSopenharmony_ci/**
126e0dac50fSopenharmony_ci * @brief Enumerates modeType of window.
127e0dac50fSopenharmony_ci */
128e0dac50fSopenharmony_cienum class WindowModeType : uint8_t {
129e0dac50fSopenharmony_ci    WINDOW_MODE_SPLIT_FLOATING = 0,
130e0dac50fSopenharmony_ci    WINDOW_MODE_SPLIT = 1,
131e0dac50fSopenharmony_ci    WINDOW_MODE_FLOATING = 2,
132e0dac50fSopenharmony_ci    WINDOW_MODE_FULLSCREEN = 3,
133e0dac50fSopenharmony_ci    WINDOW_MODE_FULLSCREEN_FLOATING = 4,
134e0dac50fSopenharmony_ci    WINDOW_MODE_OTHER = 5
135e0dac50fSopenharmony_ci};
136e0dac50fSopenharmony_ci
137e0dac50fSopenharmony_ci/**
138e0dac50fSopenharmony_ci * @brief Enumerates modal of sub session.
139e0dac50fSopenharmony_ci */
140e0dac50fSopenharmony_cienum class SubWindowModalType : uint32_t {
141e0dac50fSopenharmony_ci    TYPE_UNDEFINED = 0,
142e0dac50fSopenharmony_ci    TYPE_NORMAL,
143e0dac50fSopenharmony_ci    TYPE_DIALOG,
144e0dac50fSopenharmony_ci    TYPE_WINDOW_MODALITY,
145e0dac50fSopenharmony_ci    TYPE_TOAST,
146e0dac50fSopenharmony_ci    TYPE_APPLICATION_MODALITY,
147e0dac50fSopenharmony_ci};
148e0dac50fSopenharmony_ci
149e0dac50fSopenharmony_ci/**
150e0dac50fSopenharmony_ci * @brief Enumerates mode supported of window.
151e0dac50fSopenharmony_ci */
152e0dac50fSopenharmony_cienum WindowModeSupport : uint32_t {
153e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_FULLSCREEN = 1 << 0,
154e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_FLOATING = 1 << 1,
155e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_SPLIT_PRIMARY = 1 << 2,
156e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_SPLIT_SECONDARY = 1 << 3,
157e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_PIP = 1 << 4,
158e0dac50fSopenharmony_ci    WINDOW_MODE_SUPPORT_ALL = WINDOW_MODE_SUPPORT_FULLSCREEN |
159e0dac50fSopenharmony_ci                              WINDOW_MODE_SUPPORT_SPLIT_PRIMARY |
160e0dac50fSopenharmony_ci                              WINDOW_MODE_SUPPORT_SPLIT_SECONDARY |
161e0dac50fSopenharmony_ci                              WINDOW_MODE_SUPPORT_FLOATING |
162e0dac50fSopenharmony_ci                              WINDOW_MODE_SUPPORT_PIP
163e0dac50fSopenharmony_ci};
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ci/**
166e0dac50fSopenharmony_ci * @brief Enumerates blur style of window.
167e0dac50fSopenharmony_ci */
168e0dac50fSopenharmony_cienum class WindowBlurStyle : uint32_t {
169e0dac50fSopenharmony_ci    WINDOW_BLUR_OFF = 0,
170e0dac50fSopenharmony_ci    WINDOW_BLUR_THIN,
171e0dac50fSopenharmony_ci    WINDOW_BLUR_REGULAR,
172e0dac50fSopenharmony_ci    WINDOW_BLUR_THICK
173e0dac50fSopenharmony_ci};
174e0dac50fSopenharmony_ci
175e0dac50fSopenharmony_ci/**
176e0dac50fSopenharmony_ci * @brief Enumerates state of window.
177e0dac50fSopenharmony_ci */
178e0dac50fSopenharmony_cienum class WindowState : uint32_t {
179e0dac50fSopenharmony_ci    STATE_INITIAL,
180e0dac50fSopenharmony_ci    STATE_CREATED,
181e0dac50fSopenharmony_ci    STATE_SHOWN,
182e0dac50fSopenharmony_ci    STATE_HIDDEN,
183e0dac50fSopenharmony_ci    STATE_FROZEN,
184e0dac50fSopenharmony_ci    STATE_UNFROZEN,
185e0dac50fSopenharmony_ci    STATE_DESTROYED,
186e0dac50fSopenharmony_ci    STATE_BOTTOM = STATE_DESTROYED, // Add state type after STATE_DESTROYED is not allowed
187e0dac50fSopenharmony_ci};
188e0dac50fSopenharmony_ci
189e0dac50fSopenharmony_ci/**
190e0dac50fSopenharmony_ci * @brief Enumerates error code of window.
191e0dac50fSopenharmony_ci */
192e0dac50fSopenharmony_cienum class WMError : int32_t {
193e0dac50fSopenharmony_ci    WM_OK = 0,
194e0dac50fSopenharmony_ci    WM_DO_NOTHING,
195e0dac50fSopenharmony_ci    WM_ERROR_NO_MEM,
196e0dac50fSopenharmony_ci    WM_ERROR_DESTROYED_OBJECT,
197e0dac50fSopenharmony_ci    WM_ERROR_INVALID_WINDOW,
198e0dac50fSopenharmony_ci    WM_ERROR_INVALID_WINDOW_MODE_OR_SIZE,
199e0dac50fSopenharmony_ci    WM_ERROR_INVALID_OPERATION,
200e0dac50fSopenharmony_ci    WM_ERROR_INVALID_PERMISSION,
201e0dac50fSopenharmony_ci    WM_ERROR_NOT_SYSTEM_APP,
202e0dac50fSopenharmony_ci    WM_ERROR_NO_REMOTE_ANIMATION,
203e0dac50fSopenharmony_ci    WM_ERROR_INVALID_DISPLAY,
204e0dac50fSopenharmony_ci    WM_ERROR_INVALID_PARENT,
205e0dac50fSopenharmony_ci    WM_ERROR_OPER_FULLSCREEN_FAILED,
206e0dac50fSopenharmony_ci    WM_ERROR_REPEAT_OPERATION,
207e0dac50fSopenharmony_ci    WM_ERROR_INVALID_SESSION,
208e0dac50fSopenharmony_ci    WM_ERROR_INVALID_CALLING,
209e0dac50fSopenharmony_ci    WM_ERROR_SYSTEM_ABNORMALLY,
210e0dac50fSopenharmony_ci
211e0dac50fSopenharmony_ci    WM_ERROR_DEVICE_NOT_SUPPORT = 801, // the value do not change.It is defined on all system
212e0dac50fSopenharmony_ci
213e0dac50fSopenharmony_ci    WM_ERROR_NEED_REPORT_BASE = 1000, // error code > 1000 means need report
214e0dac50fSopenharmony_ci    WM_ERROR_NULLPTR,
215e0dac50fSopenharmony_ci    WM_ERROR_INVALID_TYPE,
216e0dac50fSopenharmony_ci    WM_ERROR_INVALID_PARAM,
217e0dac50fSopenharmony_ci    WM_ERROR_SAMGR,
218e0dac50fSopenharmony_ci    WM_ERROR_IPC_FAILED,
219e0dac50fSopenharmony_ci    WM_ERROR_NEED_REPORT_END,
220e0dac50fSopenharmony_ci    WM_ERROR_START_ABILITY_FAILED,
221e0dac50fSopenharmony_ci    WM_ERROR_PIP_DESTROY_FAILED,
222e0dac50fSopenharmony_ci    WM_ERROR_PIP_STATE_ABNORMALLY,
223e0dac50fSopenharmony_ci    WM_ERROR_PIP_CREATE_FAILED,
224e0dac50fSopenharmony_ci    WM_ERROR_PIP_INTERNAL_ERROR,
225e0dac50fSopenharmony_ci    WM_ERROR_PIP_REPEAT_OPERATION,
226e0dac50fSopenharmony_ci};
227e0dac50fSopenharmony_ci
228e0dac50fSopenharmony_ci/**
229e0dac50fSopenharmony_ci * @brief Enumerates error code of window only used for js api.
230e0dac50fSopenharmony_ci */
231e0dac50fSopenharmony_cienum class WmErrorCode : int32_t {
232e0dac50fSopenharmony_ci    WM_OK = 0,
233e0dac50fSopenharmony_ci    WM_ERROR_NO_PERMISSION = 201,
234e0dac50fSopenharmony_ci    WM_ERROR_NOT_SYSTEM_APP = 202,
235e0dac50fSopenharmony_ci    WM_ERROR_INVALID_PARAM = 401,
236e0dac50fSopenharmony_ci    WM_ERROR_DEVICE_NOT_SUPPORT = 801,
237e0dac50fSopenharmony_ci    WM_ERROR_REPEAT_OPERATION = 1300001,
238e0dac50fSopenharmony_ci    WM_ERROR_STATE_ABNORMALLY = 1300002,
239e0dac50fSopenharmony_ci    WM_ERROR_SYSTEM_ABNORMALLY = 1300003,
240e0dac50fSopenharmony_ci    WM_ERROR_INVALID_CALLING = 1300004,
241e0dac50fSopenharmony_ci    WM_ERROR_STAGE_ABNORMALLY = 1300005,
242e0dac50fSopenharmony_ci    WM_ERROR_CONTEXT_ABNORMALLY = 1300006,
243e0dac50fSopenharmony_ci    WM_ERROR_START_ABILITY_FAILED = 1300007,
244e0dac50fSopenharmony_ci    WM_ERROR_INVALID_DISPLAY = 1300008,
245e0dac50fSopenharmony_ci    WM_ERROR_INVALID_PARENT = 1300009,
246e0dac50fSopenharmony_ci    WM_ERROR_OPER_FULLSCREEN_FAILED = 1300010,
247e0dac50fSopenharmony_ci    WM_ERROR_PIP_DESTROY_FAILED = 1300011,
248e0dac50fSopenharmony_ci    WM_ERROR_PIP_STATE_ABNORMALLY = 1300012,
249e0dac50fSopenharmony_ci    WM_ERROR_PIP_CREATE_FAILED = 1300013,
250e0dac50fSopenharmony_ci    WM_ERROR_PIP_INTERNAL_ERROR = 1300014,
251e0dac50fSopenharmony_ci    WM_ERROR_PIP_REPEAT_OPERATION = 1300015,
252e0dac50fSopenharmony_ci};
253e0dac50fSopenharmony_ci
254e0dac50fSopenharmony_ci/**
255e0dac50fSopenharmony_ci * @brief Enumerates status of window.
256e0dac50fSopenharmony_ci */
257e0dac50fSopenharmony_cienum class WindowStatus : uint32_t {
258e0dac50fSopenharmony_ci    WINDOW_STATUS_UNDEFINED = 0,
259e0dac50fSopenharmony_ci    WINDOW_STATUS_FULLSCREEN = 1,
260e0dac50fSopenharmony_ci    WINDOW_STATUS_MAXIMIZE,
261e0dac50fSopenharmony_ci    WINDOW_STATUS_MINIMIZE,
262e0dac50fSopenharmony_ci    WINDOW_STATUS_FLOATING,
263e0dac50fSopenharmony_ci    WINDOW_STATUS_SPLITSCREEN
264e0dac50fSopenharmony_ci};
265e0dac50fSopenharmony_ci
266e0dac50fSopenharmony_ci/**
267e0dac50fSopenharmony_ci * @brief Enumerates setting flag of systemStatusBar
268e0dac50fSopenharmony_ci */
269e0dac50fSopenharmony_cienum class SystemBarSettingFlag : uint32_t {
270e0dac50fSopenharmony_ci    DEFAULT_SETTING = 0,
271e0dac50fSopenharmony_ci    COLOR_SETTING = 1,
272e0dac50fSopenharmony_ci    ENABLE_SETTING = 1 << 1,
273e0dac50fSopenharmony_ci    ALL_SETTING = COLOR_SETTING | ENABLE_SETTING,
274e0dac50fSopenharmony_ci    FOLLOW_SETTING = 1 << 2
275e0dac50fSopenharmony_ci};
276e0dac50fSopenharmony_ci
277e0dac50fSopenharmony_ciinline SystemBarSettingFlag operator|(SystemBarSettingFlag lhs, SystemBarSettingFlag rhs)
278e0dac50fSopenharmony_ci{
279e0dac50fSopenharmony_ci    using T = std::underlying_type_t<SystemBarSettingFlag>;
280e0dac50fSopenharmony_ci    return static_cast<SystemBarSettingFlag>(static_cast<T>(lhs) | static_cast<T>(rhs));
281e0dac50fSopenharmony_ci}
282e0dac50fSopenharmony_ci
283e0dac50fSopenharmony_ci/**
284e0dac50fSopenharmony_ci * @brief Enumerates flag of multiWindowUIType.
285e0dac50fSopenharmony_ci */
286e0dac50fSopenharmony_cienum class WindowUIType : uint8_t {
287e0dac50fSopenharmony_ci    PHONE_WINDOW = 0,
288e0dac50fSopenharmony_ci    PC_WINDOW,
289e0dac50fSopenharmony_ci    PAD_WINDOW,
290e0dac50fSopenharmony_ci    INVALID_WINDOW
291e0dac50fSopenharmony_ci};
292e0dac50fSopenharmony_ci
293e0dac50fSopenharmony_ci/**
294e0dac50fSopenharmony_ci * @brief Used to map from WMError to WmErrorCode.
295e0dac50fSopenharmony_ci */
296e0dac50fSopenharmony_ciextern const std::map<WMError, WmErrorCode> WM_JS_TO_ERROR_CODE_MAP;
297e0dac50fSopenharmony_ci
298e0dac50fSopenharmony_ci/**
299e0dac50fSopenharmony_ci * @brief Enumerates flag of window.
300e0dac50fSopenharmony_ci */
301e0dac50fSopenharmony_cienum class WindowFlag : uint32_t {
302e0dac50fSopenharmony_ci    WINDOW_FLAG_NEED_AVOID = 1,
303e0dac50fSopenharmony_ci    WINDOW_FLAG_PARENT_LIMIT = 1 << 1,
304e0dac50fSopenharmony_ci    WINDOW_FLAG_SHOW_WHEN_LOCKED = 1 << 2,
305e0dac50fSopenharmony_ci    WINDOW_FLAG_FORBID_SPLIT_MOVE = 1 << 3,
306e0dac50fSopenharmony_ci    WINDOW_FLAG_WATER_MARK = 1 << 4,
307e0dac50fSopenharmony_ci    WINDOW_FLAG_IS_MODAL = 1 << 5,
308e0dac50fSopenharmony_ci    WINDOW_FLAG_IS_APPLICATION_MODAL = 1 << 6,
309e0dac50fSopenharmony_ci    WINDOW_FLAG_HANDWRITING = 1 << 7,
310e0dac50fSopenharmony_ci    WINDOW_FLAG_IS_TOAST = 1 << 8,
311e0dac50fSopenharmony_ci    WINDOW_FLAG_END = 1 << 9,
312e0dac50fSopenharmony_ci};
313e0dac50fSopenharmony_ci
314e0dac50fSopenharmony_ci/**
315e0dac50fSopenharmony_ci * @brief Flag of uiextension window.
316e0dac50fSopenharmony_ci */
317e0dac50fSopenharmony_ciunion ExtensionWindowFlags {
318e0dac50fSopenharmony_ci    uint32_t bitData;
319e0dac50fSopenharmony_ci    struct {
320e0dac50fSopenharmony_ci        // Each flag should be false default, true when active
321e0dac50fSopenharmony_ci        bool hideNonSecureWindowsFlag : 1;
322e0dac50fSopenharmony_ci        bool waterMarkFlag : 1;
323e0dac50fSopenharmony_ci        bool privacyModeFlag : 1;
324e0dac50fSopenharmony_ci    };
325e0dac50fSopenharmony_ci    ExtensionWindowFlags() : bitData(0) {}
326e0dac50fSopenharmony_ci    ExtensionWindowFlags(uint32_t bits) : bitData(bits) {}
327e0dac50fSopenharmony_ci    ~ExtensionWindowFlags() {}
328e0dac50fSopenharmony_ci    void SetAllActive()
329e0dac50fSopenharmony_ci    {
330e0dac50fSopenharmony_ci        hideNonSecureWindowsFlag = true;
331e0dac50fSopenharmony_ci        waterMarkFlag = true;
332e0dac50fSopenharmony_ci        privacyModeFlag = true;
333e0dac50fSopenharmony_ci    }
334e0dac50fSopenharmony_ci};
335e0dac50fSopenharmony_ci
336e0dac50fSopenharmony_ci/**
337e0dac50fSopenharmony_ci * @brief Enumerates window size change reason.
338e0dac50fSopenharmony_ci */
339e0dac50fSopenharmony_cienum class WindowSizeChangeReason : uint32_t {
340e0dac50fSopenharmony_ci    UNDEFINED = 0,
341e0dac50fSopenharmony_ci    MAXIMIZE,
342e0dac50fSopenharmony_ci    RECOVER,
343e0dac50fSopenharmony_ci    ROTATION,
344e0dac50fSopenharmony_ci    DRAG,
345e0dac50fSopenharmony_ci    DRAG_START,
346e0dac50fSopenharmony_ci    DRAG_END,
347e0dac50fSopenharmony_ci    RESIZE,
348e0dac50fSopenharmony_ci    MOVE,
349e0dac50fSopenharmony_ci    HIDE,
350e0dac50fSopenharmony_ci    TRANSFORM,
351e0dac50fSopenharmony_ci    CUSTOM_ANIMATION_SHOW,
352e0dac50fSopenharmony_ci    FULL_TO_SPLIT,
353e0dac50fSopenharmony_ci    SPLIT_TO_FULL,
354e0dac50fSopenharmony_ci    FULL_TO_FLOATING,
355e0dac50fSopenharmony_ci    FLOATING_TO_FULL,
356e0dac50fSopenharmony_ci    PIP_START,
357e0dac50fSopenharmony_ci    PIP_SHOW,
358e0dac50fSopenharmony_ci    PIP_AUTO_START,
359e0dac50fSopenharmony_ci    PIP_RATIO_CHANGE,
360e0dac50fSopenharmony_ci    PIP_RESTORE,
361e0dac50fSopenharmony_ci    UPDATE_DPI_SYNC,
362e0dac50fSopenharmony_ci    END,
363e0dac50fSopenharmony_ci};
364e0dac50fSopenharmony_ci
365e0dac50fSopenharmony_ci/**
366e0dac50fSopenharmony_ci * @brief Enumerates layout mode of window.
367e0dac50fSopenharmony_ci */
368e0dac50fSopenharmony_cienum class WindowLayoutMode : uint32_t {
369e0dac50fSopenharmony_ci    BASE = 0,
370e0dac50fSopenharmony_ci    CASCADE = BASE,
371e0dac50fSopenharmony_ci    TILE = 1,
372e0dac50fSopenharmony_ci    END,
373e0dac50fSopenharmony_ci};
374e0dac50fSopenharmony_ci
375e0dac50fSopenharmony_ci/**
376e0dac50fSopenharmony_ci * @brief Enumerates drag event.
377e0dac50fSopenharmony_ci */
378e0dac50fSopenharmony_cienum class DragEvent : uint32_t {
379e0dac50fSopenharmony_ci    DRAG_EVENT_IN  = 1,
380e0dac50fSopenharmony_ci    DRAG_EVENT_OUT,
381e0dac50fSopenharmony_ci    DRAG_EVENT_MOVE,
382e0dac50fSopenharmony_ci    DRAG_EVENT_END,
383e0dac50fSopenharmony_ci};
384e0dac50fSopenharmony_ci
385e0dac50fSopenharmony_ci/**
386e0dac50fSopenharmony_ci * @brief Enumerates window tag.
387e0dac50fSopenharmony_ci */
388e0dac50fSopenharmony_cienum class WindowTag : uint32_t {
389e0dac50fSopenharmony_ci    MAIN_WINDOW = 0,
390e0dac50fSopenharmony_ci    SUB_WINDOW = 1,
391e0dac50fSopenharmony_ci    SYSTEM_WINDOW = 2,
392e0dac50fSopenharmony_ci};
393e0dac50fSopenharmony_ci
394e0dac50fSopenharmony_ci/**
395e0dac50fSopenharmony_ci * @brief Enumerates window session type.
396e0dac50fSopenharmony_ci */
397e0dac50fSopenharmony_cienum class WindowSessionType : uint32_t {
398e0dac50fSopenharmony_ci    SCENE_SESSION = 0,
399e0dac50fSopenharmony_ci    EXTENSION_SESSION = 1,
400e0dac50fSopenharmony_ci};
401e0dac50fSopenharmony_ci
402e0dac50fSopenharmony_ci/**
403e0dac50fSopenharmony_ci * @brief Enumerates window gravity.
404e0dac50fSopenharmony_ci */
405e0dac50fSopenharmony_cienum class WindowGravity : uint32_t {
406e0dac50fSopenharmony_ci    WINDOW_GRAVITY_FLOAT = 0,
407e0dac50fSopenharmony_ci    WINDOW_GRAVITY_BOTTOM,
408e0dac50fSopenharmony_ci    WINDOW_GRAVITY_DEFAULT,
409e0dac50fSopenharmony_ci};
410e0dac50fSopenharmony_ci
411e0dac50fSopenharmony_ci/**
412e0dac50fSopenharmony_ci * @brief Enumerates window setuicontent type.
413e0dac50fSopenharmony_ci */
414e0dac50fSopenharmony_cienum class WindowSetUIContentType : uint32_t {
415e0dac50fSopenharmony_ci    DEFAULT,
416e0dac50fSopenharmony_ci    RESTORE,
417e0dac50fSopenharmony_ci    BY_NAME,
418e0dac50fSopenharmony_ci    BY_ABC,
419e0dac50fSopenharmony_ci};
420e0dac50fSopenharmony_ci
421e0dac50fSopenharmony_ci/**
422e0dac50fSopenharmony_ci * @brief Enumerates restore type.
423e0dac50fSopenharmony_ci */
424e0dac50fSopenharmony_cienum class BackupAndRestoreType : int32_t {
425e0dac50fSopenharmony_ci    NONE = 0,                       // no backup and restore
426e0dac50fSopenharmony_ci    CONTINUATION = 1,               // distribute
427e0dac50fSopenharmony_ci    APP_RECOVERY = 2,               // app recovery
428e0dac50fSopenharmony_ci    RESOURCESCHEDULE_RECOVERY = 3,  // app is killed due to resource schedule
429e0dac50fSopenharmony_ci};
430e0dac50fSopenharmony_ci
431e0dac50fSopenharmony_ci/**
432e0dac50fSopenharmony_ci * @brief Enumerates window Style type.
433e0dac50fSopenharmony_ci */
434e0dac50fSopenharmony_cienum class WindowStyleType : uint8_t {
435e0dac50fSopenharmony_ci    WINDOW_STYLE_DEFAULT = 0,
436e0dac50fSopenharmony_ci    WINDOW_STYLE_FREE_MULTI_WINDOW = 1,
437e0dac50fSopenharmony_ci};
438e0dac50fSopenharmony_ci
439e0dac50fSopenharmony_ci/**
440e0dac50fSopenharmony_ci * @brief Disable Gesture Back Type
441e0dac50fSopenharmony_ci */
442e0dac50fSopenharmony_cienum class GestureBackType : uint8_t {
443e0dac50fSopenharmony_ci    GESTURE_SIDE = 0,
444e0dac50fSopenharmony_ci    GESTURE_SWIPE_UP = 1,
445e0dac50fSopenharmony_ci    GESTURE_ALL = 2,
446e0dac50fSopenharmony_ci};
447e0dac50fSopenharmony_ci
448e0dac50fSopenharmony_ci/**
449e0dac50fSopenharmony_ci * @struct PointInfo.
450e0dac50fSopenharmony_ci *
451e0dac50fSopenharmony_ci * @brief point Info.
452e0dac50fSopenharmony_ci */
453e0dac50fSopenharmony_cistruct PointInfo {
454e0dac50fSopenharmony_ci    int32_t x;
455e0dac50fSopenharmony_ci    int32_t y;
456e0dac50fSopenharmony_ci};
457e0dac50fSopenharmony_ci
458e0dac50fSopenharmony_ci/**
459e0dac50fSopenharmony_ci * @struct MainWindowInfo.
460e0dac50fSopenharmony_ci *
461e0dac50fSopenharmony_ci * @brief topN main window info.
462e0dac50fSopenharmony_ci */
463e0dac50fSopenharmony_cistruct MainWindowInfo : public Parcelable {
464e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override
465e0dac50fSopenharmony_ci    {
466e0dac50fSopenharmony_ci        if (!parcel.WriteInt32(pid_)) {
467e0dac50fSopenharmony_ci            return false;
468e0dac50fSopenharmony_ci        }
469e0dac50fSopenharmony_ci
470e0dac50fSopenharmony_ci        if (!parcel.WriteString(bundleName_)) {
471e0dac50fSopenharmony_ci            return false;
472e0dac50fSopenharmony_ci        }
473e0dac50fSopenharmony_ci
474e0dac50fSopenharmony_ci        if (!parcel.WriteInt32(persistentId_)) {
475e0dac50fSopenharmony_ci            return false;
476e0dac50fSopenharmony_ci        }
477e0dac50fSopenharmony_ci
478e0dac50fSopenharmony_ci        if (!parcel.WriteInt32(bundleType_)) {
479e0dac50fSopenharmony_ci            return false;
480e0dac50fSopenharmony_ci        }
481e0dac50fSopenharmony_ci        return true;
482e0dac50fSopenharmony_ci    }
483e0dac50fSopenharmony_ci
484e0dac50fSopenharmony_ci    static MainWindowInfo* Unmarshalling(Parcel& parcel)
485e0dac50fSopenharmony_ci    {
486e0dac50fSopenharmony_ci        MainWindowInfo* mainWindowInfo = new MainWindowInfo;
487e0dac50fSopenharmony_ci        mainWindowInfo->pid_ = parcel.ReadInt32();
488e0dac50fSopenharmony_ci        mainWindowInfo->bundleName_ = parcel.ReadString();
489e0dac50fSopenharmony_ci        mainWindowInfo->persistentId_ = parcel.ReadInt32();
490e0dac50fSopenharmony_ci        mainWindowInfo->bundleType_ = parcel.ReadInt32();
491e0dac50fSopenharmony_ci        return mainWindowInfo;
492e0dac50fSopenharmony_ci    }
493e0dac50fSopenharmony_ci
494e0dac50fSopenharmony_ci    int32_t pid_ = 0;
495e0dac50fSopenharmony_ci    std::string bundleName_ = "";
496e0dac50fSopenharmony_ci    int32_t persistentId_ = 0;
497e0dac50fSopenharmony_ci    int32_t bundleType_ = 0;
498e0dac50fSopenharmony_ci};
499e0dac50fSopenharmony_ci
500e0dac50fSopenharmony_ci/**
501e0dac50fSopenharmony_ci * @struct MainWindowState.
502e0dac50fSopenharmony_ci *
503e0dac50fSopenharmony_ci * @brief main window state info.
504e0dac50fSopenharmony_ci */
505e0dac50fSopenharmony_cistruct MainWindowState : public Parcelable {
506e0dac50fSopenharmony_ci    bool Marshalling(Parcel& parcel) const override
507e0dac50fSopenharmony_ci    {
508e0dac50fSopenharmony_ci        if (!parcel.WriteInt32(state_)) {
509e0dac50fSopenharmony_ci            return false;
510e0dac50fSopenharmony_ci        }
511e0dac50fSopenharmony_ci        if (!parcel.WriteBool(isVisible_)) {
512e0dac50fSopenharmony_ci            return false;
513e0dac50fSopenharmony_ci        }
514e0dac50fSopenharmony_ci        if (!parcel.WriteBool(isForegroundInteractive_)) {
515e0dac50fSopenharmony_ci            return false;
516e0dac50fSopenharmony_ci        }
517e0dac50fSopenharmony_ci        if (!parcel.WriteBool(isPcOrPadEnableActivation_)) {
518e0dac50fSopenharmony_ci            return false;
519e0dac50fSopenharmony_ci        }
520e0dac50fSopenharmony_ci        return true;
521e0dac50fSopenharmony_ci    }
522e0dac50fSopenharmony_ci
523e0dac50fSopenharmony_ci    static MainWindowState* Unmarshalling(Parcel& parcel)
524e0dac50fSopenharmony_ci    {
525e0dac50fSopenharmony_ci        MainWindowState* mainWindowState = new MainWindowState();
526e0dac50fSopenharmony_ci        if (!mainWindowState) {
527e0dac50fSopenharmony_ci            return nullptr;
528e0dac50fSopenharmony_ci        }
529e0dac50fSopenharmony_ci        if (!parcel.ReadInt32(mainWindowState->state_) ||
530e0dac50fSopenharmony_ci            !parcel.ReadBool(mainWindowState->isVisible_) ||
531e0dac50fSopenharmony_ci            !parcel.ReadBool(mainWindowState->isForegroundInteractive_) ||
532e0dac50fSopenharmony_ci            !parcel.ReadBool(mainWindowState->isPcOrPadEnableActivation_)) {
533e0dac50fSopenharmony_ci            delete mainWindowState;
534e0dac50fSopenharmony_ci            return nullptr;
535e0dac50fSopenharmony_ci        }
536e0dac50fSopenharmony_ci        return mainWindowState;
537e0dac50fSopenharmony_ci    }
538e0dac50fSopenharmony_ci
539e0dac50fSopenharmony_ci    int32_t state_ = 0;
540e0dac50fSopenharmony_ci    bool isVisible_ = false;
541e0dac50fSopenharmony_ci    bool isForegroundInteractive_ = false;
542e0dac50fSopenharmony_ci    bool isPcOrPadEnableActivation_ = false;
543e0dac50fSopenharmony_ci};
544e0dac50fSopenharmony_ci
545e0dac50fSopenharmony_cinamespace {
546e0dac50fSopenharmony_ci    constexpr uint32_t SYSTEM_COLOR_WHITE = 0xE5FFFFFF;
547e0dac50fSopenharmony_ci    constexpr uint32_t SYSTEM_COLOR_BLACK = 0x66000000;
548e0dac50fSopenharmony_ci    constexpr uint32_t INVALID_WINDOW_ID = 0;
549e0dac50fSopenharmony_ci    constexpr float UNDEFINED_BRIGHTNESS = -1.0f;
550e0dac50fSopenharmony_ci    constexpr float MINIMUM_BRIGHTNESS = 0.0f;
551e0dac50fSopenharmony_ci    constexpr float MAXIMUM_BRIGHTNESS = 1.0f;
552e0dac50fSopenharmony_ci    constexpr int32_t INVALID_PID = -1;
553e0dac50fSopenharmony_ci    constexpr int32_t INVALID_UID = -1;
554e0dac50fSopenharmony_ci    constexpr int32_t INVALID_USER_ID = -1;
555e0dac50fSopenharmony_ci    constexpr int32_t SYSTEM_USERID = 0;
556e0dac50fSopenharmony_ci    constexpr int32_t BASE_USER_RANGE = 200000;
557e0dac50fSopenharmony_ci    constexpr int32_t DEFAULT_SCREEN_ID = 0;
558e0dac50fSopenharmony_ci    constexpr int32_t FULL_CIRCLE_DEGREE = 360;
559e0dac50fSopenharmony_ci    constexpr int32_t ONE_FOURTH_FULL_CIRCLE_DEGREE = 90;
560e0dac50fSopenharmony_ci}
561e0dac50fSopenharmony_ci
562e0dac50fSopenharmony_ciinline int32_t GetUserIdByUid(int32_t uid)
563e0dac50fSopenharmony_ci{
564e0dac50fSopenharmony_ci    return uid / BASE_USER_RANGE;
565e0dac50fSopenharmony_ci}
566e0dac50fSopenharmony_ci
567e0dac50fSopenharmony_ci/**
568e0dac50fSopenharmony_ci * @class Transform
569e0dac50fSopenharmony_ci *
570e0dac50fSopenharmony_ci * @brief parameter of transform and rotate.
571e0dac50fSopenharmony_ci */
572e0dac50fSopenharmony_ciclass Transform {
573e0dac50fSopenharmony_cipublic:
574e0dac50fSopenharmony_ci    Transform()
575e0dac50fSopenharmony_ci        : pivotX_(0.5f), pivotY_(0.5f), scaleX_(1.f), scaleY_(1.f), scaleZ_(1.f), rotationX_(0.f),
576e0dac50fSopenharmony_ci          rotationY_(0.f), rotationZ_(0.f), translateX_(0.f), translateY_(0.f), translateZ_(0.f)
577e0dac50fSopenharmony_ci    {}
578e0dac50fSopenharmony_ci    ~Transform() {}
579e0dac50fSopenharmony_ci
580e0dac50fSopenharmony_ci    bool operator==(const Transform& right) const
581e0dac50fSopenharmony_ci    {
582e0dac50fSopenharmony_ci        return NearZero(pivotX_ - right.pivotX_) &&
583e0dac50fSopenharmony_ci            NearZero(pivotY_ - right.pivotY_) &&
584e0dac50fSopenharmony_ci            NearZero(scaleX_ - right.scaleX_) &&
585e0dac50fSopenharmony_ci            NearZero(scaleY_ - right.scaleY_) &&
586e0dac50fSopenharmony_ci            NearZero(scaleZ_ - right.scaleZ_) &&
587e0dac50fSopenharmony_ci            NearZero(rotationX_ - right.rotationX_) &&
588e0dac50fSopenharmony_ci            NearZero(rotationY_ - right.rotationY_) &&
589e0dac50fSopenharmony_ci            NearZero(rotationZ_ - right.rotationZ_) &&
590e0dac50fSopenharmony_ci            NearZero(translateX_ - right.translateX_) &&
591e0dac50fSopenharmony_ci            NearZero(translateY_ - right.translateY_) &&
592e0dac50fSopenharmony_ci            NearZero(translateZ_ - right.translateZ_);
593e0dac50fSopenharmony_ci    }
594e0dac50fSopenharmony_ci
595e0dac50fSopenharmony_ci    bool operator!=(const Transform& right) const
596e0dac50fSopenharmony_ci    {
597e0dac50fSopenharmony_ci        return !(*this == right);
598e0dac50fSopenharmony_ci    }
599e0dac50fSopenharmony_ci
600e0dac50fSopenharmony_ci    float pivotX_;
601e0dac50fSopenharmony_ci    float pivotY_;
602e0dac50fSopenharmony_ci    float scaleX_;
603e0dac50fSopenharmony_ci    float scaleY_;
604e0dac50fSopenharmony_ci    float scaleZ_;
605e0dac50fSopenharmony_ci    float rotationX_;
606e0dac50fSopenharmony_ci    float rotationY_;
607e0dac50fSopenharmony_ci    float rotationZ_;
608e0dac50fSopenharmony_ci    float translateX_;
609e0dac50fSopenharmony_ci    float translateY_;
610e0dac50fSopenharmony_ci    float translateZ_;
611e0dac50fSopenharmony_ci
612e0dac50fSopenharmony_ci    static const Transform& Identity()
613e0dac50fSopenharmony_ci    {
614e0dac50fSopenharmony_ci        static Transform I;
615e0dac50fSopenharmony_ci        return I;
616e0dac50fSopenharmony_ci    }
617e0dac50fSopenharmony_ci
618e0dac50fSopenharmony_ci    bool Marshalling(Parcel& parcel) const
619e0dac50fSopenharmony_ci    {
620e0dac50fSopenharmony_ci        return parcel.WriteFloat(pivotX_) && parcel.WriteFloat(pivotY_) &&
621e0dac50fSopenharmony_ci               parcel.WriteFloat(scaleX_) && parcel.WriteFloat(scaleY_) && parcel.WriteFloat(scaleZ_) &&
622e0dac50fSopenharmony_ci               parcel.WriteFloat(rotationX_) && parcel.WriteFloat(rotationY_) && parcel.WriteFloat(rotationZ_) &&
623e0dac50fSopenharmony_ci               parcel.WriteFloat(translateX_) && parcel.WriteFloat(translateY_) && parcel.WriteFloat(translateZ_);
624e0dac50fSopenharmony_ci    }
625e0dac50fSopenharmony_ci
626e0dac50fSopenharmony_ci    void Unmarshalling(Parcel& parcel)
627e0dac50fSopenharmony_ci    {
628e0dac50fSopenharmony_ci        pivotX_ = parcel.ReadFloat();
629e0dac50fSopenharmony_ci        pivotY_ = parcel.ReadFloat();
630e0dac50fSopenharmony_ci        scaleX_ = parcel.ReadFloat();
631e0dac50fSopenharmony_ci        scaleY_ = parcel.ReadFloat();
632e0dac50fSopenharmony_ci        scaleZ_ = parcel.ReadFloat();
633e0dac50fSopenharmony_ci        rotationX_ = parcel.ReadFloat();
634e0dac50fSopenharmony_ci        rotationY_ = parcel.ReadFloat();
635e0dac50fSopenharmony_ci        rotationZ_ = parcel.ReadFloat();
636e0dac50fSopenharmony_ci        translateX_ = parcel.ReadFloat();
637e0dac50fSopenharmony_ci        translateY_ = parcel.ReadFloat();
638e0dac50fSopenharmony_ci        translateZ_ = parcel.ReadFloat();
639e0dac50fSopenharmony_ci    }
640e0dac50fSopenharmony_ciprivate:
641e0dac50fSopenharmony_ci    static inline bool NearZero(float val)
642e0dac50fSopenharmony_ci    {
643e0dac50fSopenharmony_ci        return val < 0.001f && val > -0.001f;
644e0dac50fSopenharmony_ci    }
645e0dac50fSopenharmony_ci};
646e0dac50fSopenharmony_ci
647e0dac50fSopenharmony_ci/**
648e0dac50fSopenharmony_ci * @struct SystemBarProperty
649e0dac50fSopenharmony_ci *
650e0dac50fSopenharmony_ci * @brief Property of system bar
651e0dac50fSopenharmony_ci */
652e0dac50fSopenharmony_cistruct SystemBarProperty {
653e0dac50fSopenharmony_ci    bool enable_;
654e0dac50fSopenharmony_ci    uint32_t backgroundColor_;
655e0dac50fSopenharmony_ci    uint32_t contentColor_;
656e0dac50fSopenharmony_ci    bool enableAnimation_;
657e0dac50fSopenharmony_ci    SystemBarSettingFlag settingFlag_;
658e0dac50fSopenharmony_ci    SystemBarProperty() : enable_(true), backgroundColor_(SYSTEM_COLOR_BLACK), contentColor_(SYSTEM_COLOR_WHITE),
659e0dac50fSopenharmony_ci                          enableAnimation_(false), settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {}
660e0dac50fSopenharmony_ci    SystemBarProperty(bool enable, uint32_t background, uint32_t content)
661e0dac50fSopenharmony_ci        : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(false),
662e0dac50fSopenharmony_ci          settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {}
663e0dac50fSopenharmony_ci    SystemBarProperty(bool enable, uint32_t background, uint32_t content, bool enableAnimation)
664e0dac50fSopenharmony_ci        : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(enableAnimation),
665e0dac50fSopenharmony_ci          settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {}
666e0dac50fSopenharmony_ci    SystemBarProperty(bool enable, uint32_t background, uint32_t content,
667e0dac50fSopenharmony_ci                      bool enableAnimation, SystemBarSettingFlag settingFlag)
668e0dac50fSopenharmony_ci        : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(enableAnimation),
669e0dac50fSopenharmony_ci          settingFlag_(settingFlag) {}
670e0dac50fSopenharmony_ci    bool operator == (const SystemBarProperty& a) const
671e0dac50fSopenharmony_ci    {
672e0dac50fSopenharmony_ci        return (enable_ == a.enable_ && backgroundColor_ == a.backgroundColor_ && contentColor_ == a.contentColor_ &&
673e0dac50fSopenharmony_ci            enableAnimation_ == a.enableAnimation_);
674e0dac50fSopenharmony_ci    }
675e0dac50fSopenharmony_ci};
676e0dac50fSopenharmony_ci
677e0dac50fSopenharmony_ci/**
678e0dac50fSopenharmony_ci * @struct SystemBarPropertyFlag
679e0dac50fSopenharmony_ci *
680e0dac50fSopenharmony_ci * @brief Flag of system bar
681e0dac50fSopenharmony_ci */
682e0dac50fSopenharmony_cistruct SystemBarPropertyFlag {
683e0dac50fSopenharmony_ci    bool enableFlag = false;
684e0dac50fSopenharmony_ci    bool backgroundColorFlag = false;
685e0dac50fSopenharmony_ci    bool contentColorFlag = false;
686e0dac50fSopenharmony_ci    bool enableAnimationFlag = false;
687e0dac50fSopenharmony_ci};
688e0dac50fSopenharmony_ci
689e0dac50fSopenharmony_ci/**
690e0dac50fSopenharmony_ci * @struct Rect
691e0dac50fSopenharmony_ci *
692e0dac50fSopenharmony_ci * @brief Window Rect
693e0dac50fSopenharmony_ci */
694e0dac50fSopenharmony_cistruct Rect {
695e0dac50fSopenharmony_ci    int32_t posX_;
696e0dac50fSopenharmony_ci    int32_t posY_;
697e0dac50fSopenharmony_ci    uint32_t width_;
698e0dac50fSopenharmony_ci    uint32_t height_;
699e0dac50fSopenharmony_ci
700e0dac50fSopenharmony_ci    bool operator==(const Rect& a) const
701e0dac50fSopenharmony_ci    {
702e0dac50fSopenharmony_ci        return (posX_ == a.posX_ && posY_ == a.posY_ && width_ == a.width_ && height_ == a.height_);
703e0dac50fSopenharmony_ci    }
704e0dac50fSopenharmony_ci
705e0dac50fSopenharmony_ci    bool operator!=(const Rect& a) const
706e0dac50fSopenharmony_ci    {
707e0dac50fSopenharmony_ci        return !this->operator==(a);
708e0dac50fSopenharmony_ci    }
709e0dac50fSopenharmony_ci
710e0dac50fSopenharmony_ci    bool IsUninitializedRect() const
711e0dac50fSopenharmony_ci    {
712e0dac50fSopenharmony_ci        return (posX_ == 0 && posY_ == 0 && width_ == 0 && height_ == 0);
713e0dac50fSopenharmony_ci    }
714e0dac50fSopenharmony_ci
715e0dac50fSopenharmony_ci    bool IsInsideOf(const Rect& a) const
716e0dac50fSopenharmony_ci    {
717e0dac50fSopenharmony_ci        return (posX_ >= a.posX_ && posY_ >= a.posY_ &&
718e0dac50fSopenharmony_ci            posX_ + width_ <= a.posX_ + a.width_ && posY_ + height_ <= a.posY_ + a.height_);
719e0dac50fSopenharmony_ci    }
720e0dac50fSopenharmony_ci
721e0dac50fSopenharmony_ci    inline std::string ToString() const
722e0dac50fSopenharmony_ci    {
723e0dac50fSopenharmony_ci        std::stringstream ss;
724e0dac50fSopenharmony_ci        ss << "[" << posX_ << " " << posY_ << " " << width_ << " " << height_ << "]";
725e0dac50fSopenharmony_ci        return ss.str();
726e0dac50fSopenharmony_ci    }
727e0dac50fSopenharmony_ci};
728e0dac50fSopenharmony_ci
729e0dac50fSopenharmony_ci/**
730e0dac50fSopenharmony_ci * @brief UIExtension usage
731e0dac50fSopenharmony_ci */
732e0dac50fSopenharmony_cienum class UIExtensionUsage : uint32_t {
733e0dac50fSopenharmony_ci    MODAL = 0,
734e0dac50fSopenharmony_ci    EMBEDDED,
735e0dac50fSopenharmony_ci    CONSTRAINED_EMBEDDED,
736e0dac50fSopenharmony_ci    UIEXTENSION_USAGE_END
737e0dac50fSopenharmony_ci};
738e0dac50fSopenharmony_ci
739e0dac50fSopenharmony_ci/**
740e0dac50fSopenharmony_ci * @brief UIExtension info for event
741e0dac50fSopenharmony_ci */
742e0dac50fSopenharmony_cistruct ExtensionWindowEventInfo {
743e0dac50fSopenharmony_ci    int32_t persistentId  = 0;
744e0dac50fSopenharmony_ci    int32_t pid = -1;
745e0dac50fSopenharmony_ci    Rect windowRect {0, 0, 0, 0};
746e0dac50fSopenharmony_ci};
747e0dac50fSopenharmony_ci
748e0dac50fSopenharmony_ci/**
749e0dac50fSopenharmony_ci * @brief UIExtension info from ability
750e0dac50fSopenharmony_ci */
751e0dac50fSopenharmony_cistruct ExtensionWindowAbilityInfo {
752e0dac50fSopenharmony_ci    int32_t persistentId  { 0 };
753e0dac50fSopenharmony_ci    int32_t parentId { 0 };
754e0dac50fSopenharmony_ci    UIExtensionUsage usage { UIExtensionUsage::UIEXTENSION_USAGE_END };
755e0dac50fSopenharmony_ci};
756e0dac50fSopenharmony_ci
757e0dac50fSopenharmony_ci/**
758e0dac50fSopenharmony_ci * @struct KeyboardPanelInfo
759e0dac50fSopenharmony_ci *
760e0dac50fSopenharmony_ci * @brief Info of keyboard panel
761e0dac50fSopenharmony_ci */
762e0dac50fSopenharmony_cistruct KeyboardPanelInfo : public Parcelable {
763e0dac50fSopenharmony_ci    Rect rect_ = {0, 0, 0, 0};
764e0dac50fSopenharmony_ci    WindowGravity gravity_ = WindowGravity::WINDOW_GRAVITY_BOTTOM;
765e0dac50fSopenharmony_ci    bool isShowing_ = false;
766e0dac50fSopenharmony_ci
767e0dac50fSopenharmony_ci    bool Marshalling(Parcel& parcel) const
768e0dac50fSopenharmony_ci    {
769e0dac50fSopenharmony_ci        return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) &&
770e0dac50fSopenharmony_ci               parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_) &&
771e0dac50fSopenharmony_ci               parcel.WriteUint32(static_cast<uint32_t>(gravity_)) &&
772e0dac50fSopenharmony_ci               parcel.WriteBool(isShowing_);
773e0dac50fSopenharmony_ci    }
774e0dac50fSopenharmony_ci
775e0dac50fSopenharmony_ci    static KeyboardPanelInfo* Unmarshalling(Parcel& parcel)
776e0dac50fSopenharmony_ci    {
777e0dac50fSopenharmony_ci        KeyboardPanelInfo* keyboardPanelInfo = new(std::nothrow)KeyboardPanelInfo;
778e0dac50fSopenharmony_ci        if (keyboardPanelInfo == nullptr) {
779e0dac50fSopenharmony_ci            return nullptr;
780e0dac50fSopenharmony_ci        }
781e0dac50fSopenharmony_ci        bool res = parcel.ReadInt32(keyboardPanelInfo->rect_.posX_) &&
782e0dac50fSopenharmony_ci            parcel.ReadInt32(keyboardPanelInfo->rect_.posY_) && parcel.ReadUint32(keyboardPanelInfo->rect_.width_) &&
783e0dac50fSopenharmony_ci            parcel.ReadUint32(keyboardPanelInfo->rect_.height_);
784e0dac50fSopenharmony_ci        if (!res) {
785e0dac50fSopenharmony_ci            delete keyboardPanelInfo;
786e0dac50fSopenharmony_ci            return nullptr;
787e0dac50fSopenharmony_ci        }
788e0dac50fSopenharmony_ci        keyboardPanelInfo->gravity_ = static_cast<WindowGravity>(parcel.ReadUint32());
789e0dac50fSopenharmony_ci        keyboardPanelInfo->isShowing_ = parcel.ReadBool();
790e0dac50fSopenharmony_ci
791e0dac50fSopenharmony_ci        return keyboardPanelInfo;
792e0dac50fSopenharmony_ci    }
793e0dac50fSopenharmony_ci};
794e0dac50fSopenharmony_ci
795e0dac50fSopenharmony_ci/**
796e0dac50fSopenharmony_ci * @brief Enumerates avoid area type.
797e0dac50fSopenharmony_ci */
798e0dac50fSopenharmony_cienum class AvoidAreaType : uint32_t {
799e0dac50fSopenharmony_ci    TYPE_SYSTEM,           // area of SystemUI
800e0dac50fSopenharmony_ci    TYPE_CUTOUT,           // cutout of screen
801e0dac50fSopenharmony_ci    TYPE_SYSTEM_GESTURE,   // area for system gesture
802e0dac50fSopenharmony_ci    TYPE_KEYBOARD,         // area for soft input keyboard
803e0dac50fSopenharmony_ci    TYPE_NAVIGATION_INDICATOR, // area for navigation indicator
804e0dac50fSopenharmony_ci};
805e0dac50fSopenharmony_ci
806e0dac50fSopenharmony_ci/**
807e0dac50fSopenharmony_ci * @brief Enumerates occupied area type.
808e0dac50fSopenharmony_ci */
809e0dac50fSopenharmony_cienum class OccupiedAreaType : uint32_t {
810e0dac50fSopenharmony_ci    TYPE_INPUT, // area of input window
811e0dac50fSopenharmony_ci};
812e0dac50fSopenharmony_ci
813e0dac50fSopenharmony_ci/**
814e0dac50fSopenharmony_ci * @brief Enumerates color space.
815e0dac50fSopenharmony_ci */
816e0dac50fSopenharmony_cienum class ColorSpace : uint32_t {
817e0dac50fSopenharmony_ci    COLOR_SPACE_DEFAULT = 0, // Default color space.
818e0dac50fSopenharmony_ci    COLOR_SPACE_WIDE_GAMUT,  // Wide gamut color space. The specific wide color gamut depends on the screen.
819e0dac50fSopenharmony_ci};
820e0dac50fSopenharmony_ci
821e0dac50fSopenharmony_ci/**
822e0dac50fSopenharmony_ci * @brief Enumerates window animation.
823e0dac50fSopenharmony_ci */
824e0dac50fSopenharmony_cienum class WindowAnimation : uint32_t {
825e0dac50fSopenharmony_ci    NONE,
826e0dac50fSopenharmony_ci    DEFAULT,
827e0dac50fSopenharmony_ci    INPUTE,
828e0dac50fSopenharmony_ci    CUSTOM,
829e0dac50fSopenharmony_ci};
830e0dac50fSopenharmony_ci
831e0dac50fSopenharmony_ci/**
832e0dac50fSopenharmony_ci * @brief Enumerates window maximize mode.
833e0dac50fSopenharmony_ci */
834e0dac50fSopenharmony_cienum class MaximizeMode : uint32_t {
835e0dac50fSopenharmony_ci    MODE_AVOID_SYSTEM_BAR,
836e0dac50fSopenharmony_ci    MODE_FULL_FILL,
837e0dac50fSopenharmony_ci    MODE_RECOVER,
838e0dac50fSopenharmony_ci    MODE_END,
839e0dac50fSopenharmony_ci};
840e0dac50fSopenharmony_ci
841e0dac50fSopenharmony_ci/**
842e0dac50fSopenharmony_ci * @class AvoidArea
843e0dac50fSopenharmony_ci *
844e0dac50fSopenharmony_ci * @brief Area needed to avoid.
845e0dac50fSopenharmony_ci */
846e0dac50fSopenharmony_ciclass AvoidArea : public Parcelable {
847e0dac50fSopenharmony_cipublic:
848e0dac50fSopenharmony_ci    Rect topRect_ { 0, 0, 0, 0 };
849e0dac50fSopenharmony_ci    Rect leftRect_ { 0, 0, 0, 0 };
850e0dac50fSopenharmony_ci    Rect rightRect_ { 0, 0, 0, 0 };
851e0dac50fSopenharmony_ci    Rect bottomRect_ { 0, 0, 0, 0 };
852e0dac50fSopenharmony_ci
853e0dac50fSopenharmony_ci    bool operator==(const AvoidArea& a) const
854e0dac50fSopenharmony_ci    {
855e0dac50fSopenharmony_ci        return (leftRect_ == a.leftRect_ && topRect_ == a.topRect_ &&
856e0dac50fSopenharmony_ci            rightRect_ == a.rightRect_ && bottomRect_ == a.bottomRect_);
857e0dac50fSopenharmony_ci    }
858e0dac50fSopenharmony_ci
859e0dac50fSopenharmony_ci    bool operator!=(const AvoidArea& a) const
860e0dac50fSopenharmony_ci    {
861e0dac50fSopenharmony_ci        return !this->operator==(a);
862e0dac50fSopenharmony_ci    }
863e0dac50fSopenharmony_ci
864e0dac50fSopenharmony_ci    bool isEmptyAvoidArea() const
865e0dac50fSopenharmony_ci    {
866e0dac50fSopenharmony_ci        return topRect_.IsUninitializedRect() && leftRect_.IsUninitializedRect() &&
867e0dac50fSopenharmony_ci            rightRect_.IsUninitializedRect() && bottomRect_.IsUninitializedRect();
868e0dac50fSopenharmony_ci    }
869e0dac50fSopenharmony_ci
870e0dac50fSopenharmony_ci    static inline bool WriteParcel(Parcel& parcel, const Rect& rect)
871e0dac50fSopenharmony_ci    {
872e0dac50fSopenharmony_ci        return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) &&
873e0dac50fSopenharmony_ci            parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_);
874e0dac50fSopenharmony_ci    }
875e0dac50fSopenharmony_ci
876e0dac50fSopenharmony_ci    static inline bool ReadParcel(Parcel& parcel, Rect& rect)
877e0dac50fSopenharmony_ci    {
878e0dac50fSopenharmony_ci        return parcel.ReadInt32(rect.posX_) && parcel.ReadInt32(rect.posY_) &&
879e0dac50fSopenharmony_ci            parcel.ReadUint32(rect.width_) && parcel.ReadUint32(rect.height_);
880e0dac50fSopenharmony_ci    }
881e0dac50fSopenharmony_ci
882e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override
883e0dac50fSopenharmony_ci    {
884e0dac50fSopenharmony_ci        return (WriteParcel(parcel, leftRect_) && WriteParcel(parcel, topRect_) &&
885e0dac50fSopenharmony_ci            WriteParcel(parcel, rightRect_) && WriteParcel(parcel, bottomRect_));
886e0dac50fSopenharmony_ci    }
887e0dac50fSopenharmony_ci
888e0dac50fSopenharmony_ci    static AvoidArea* Unmarshalling(Parcel& parcel)
889e0dac50fSopenharmony_ci    {
890e0dac50fSopenharmony_ci        AvoidArea *avoidArea = new(std::nothrow) AvoidArea();
891e0dac50fSopenharmony_ci        if (avoidArea == nullptr) {
892e0dac50fSopenharmony_ci            return nullptr;
893e0dac50fSopenharmony_ci        }
894e0dac50fSopenharmony_ci        if (ReadParcel(parcel, avoidArea->leftRect_) && ReadParcel(parcel, avoidArea->topRect_) &&
895e0dac50fSopenharmony_ci            ReadParcel(parcel, avoidArea->rightRect_) && ReadParcel(parcel, avoidArea->bottomRect_)) {
896e0dac50fSopenharmony_ci            return avoidArea;
897e0dac50fSopenharmony_ci        }
898e0dac50fSopenharmony_ci        delete avoidArea;
899e0dac50fSopenharmony_ci        return nullptr;
900e0dac50fSopenharmony_ci    }
901e0dac50fSopenharmony_ci
902e0dac50fSopenharmony_ci    std::string ToString() const
903e0dac50fSopenharmony_ci    {
904e0dac50fSopenharmony_ci        std::stringstream ss;
905e0dac50fSopenharmony_ci        if (isEmptyAvoidArea()) {
906e0dac50fSopenharmony_ci            ss << "empty";
907e0dac50fSopenharmony_ci            return ss.str();
908e0dac50fSopenharmony_ci        }
909e0dac50fSopenharmony_ci        if (!topRect_.IsUninitializedRect()) {
910e0dac50fSopenharmony_ci            ss << "top " << topRect_.ToString() << " ";
911e0dac50fSopenharmony_ci        }
912e0dac50fSopenharmony_ci        if (!bottomRect_.IsUninitializedRect()) {
913e0dac50fSopenharmony_ci            ss << "bottom " << bottomRect_.ToString() << " ";
914e0dac50fSopenharmony_ci        }
915e0dac50fSopenharmony_ci        if (!leftRect_.IsUninitializedRect()) {
916e0dac50fSopenharmony_ci            ss << "left " << leftRect_.ToString() << " ";
917e0dac50fSopenharmony_ci        }
918e0dac50fSopenharmony_ci        if (!rightRect_.IsUninitializedRect()) {
919e0dac50fSopenharmony_ci            ss << "right " << rightRect_.ToString() << " ";
920e0dac50fSopenharmony_ci        }
921e0dac50fSopenharmony_ci        return ss.str();
922e0dac50fSopenharmony_ci    }
923e0dac50fSopenharmony_ci};
924e0dac50fSopenharmony_ci
925e0dac50fSopenharmony_ci/**
926e0dac50fSopenharmony_ci * @brief Enumerates window update type.
927e0dac50fSopenharmony_ci */
928e0dac50fSopenharmony_cienum class WindowUpdateType : int32_t {
929e0dac50fSopenharmony_ci    WINDOW_UPDATE_ADDED = 1,
930e0dac50fSopenharmony_ci    WINDOW_UPDATE_REMOVED,
931e0dac50fSopenharmony_ci    WINDOW_UPDATE_FOCUSED,
932e0dac50fSopenharmony_ci    WINDOW_UPDATE_BOUNDS,
933e0dac50fSopenharmony_ci    WINDOW_UPDATE_ACTIVE,
934e0dac50fSopenharmony_ci    WINDOW_UPDATE_PROPERTY,
935e0dac50fSopenharmony_ci    WINDOW_UPDATE_ALL,
936e0dac50fSopenharmony_ci};
937e0dac50fSopenharmony_ci
938e0dac50fSopenharmony_ci/**
939e0dac50fSopenharmony_ci * @brief Enumerates picture in picture window state.
940e0dac50fSopenharmony_ci */
941e0dac50fSopenharmony_cienum class PiPWindowState : uint32_t {
942e0dac50fSopenharmony_ci    STATE_UNDEFINED = 0,
943e0dac50fSopenharmony_ci    STATE_STARTING = 1,
944e0dac50fSopenharmony_ci    STATE_STARTED = 2,
945e0dac50fSopenharmony_ci    STATE_STOPPING = 3,
946e0dac50fSopenharmony_ci    STATE_STOPPED = 4,
947e0dac50fSopenharmony_ci    STATE_RESTORING = 5,
948e0dac50fSopenharmony_ci};
949e0dac50fSopenharmony_ci
950e0dac50fSopenharmony_ci/**
951e0dac50fSopenharmony_ci * @brief Enumerates picture in picture template type.
952e0dac50fSopenharmony_ci */
953e0dac50fSopenharmony_cienum class PiPTemplateType : uint32_t {
954e0dac50fSopenharmony_ci    VIDEO_PLAY = 0,
955e0dac50fSopenharmony_ci    VIDEO_CALL = 1,
956e0dac50fSopenharmony_ci    VIDEO_MEETING = 2,
957e0dac50fSopenharmony_ci    VIDEO_LIVE = 3,
958e0dac50fSopenharmony_ci    END,
959e0dac50fSopenharmony_ci};
960e0dac50fSopenharmony_ci
961e0dac50fSopenharmony_ci/**
962e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control group.
963e0dac50fSopenharmony_ci */
964e0dac50fSopenharmony_cienum class PiPControlGroup : uint32_t {
965e0dac50fSopenharmony_ci    VIDEO_PLAY_START = 100,
966e0dac50fSopenharmony_ci    VIDEO_PREVIOUS_NEXT = 101,
967e0dac50fSopenharmony_ci    FAST_FORWARD_BACKWARD = 102,
968e0dac50fSopenharmony_ci    VIDEO_PLAY_END,
969e0dac50fSopenharmony_ci
970e0dac50fSopenharmony_ci    VIDEO_CALL_START = 200,
971e0dac50fSopenharmony_ci    VIDEO_CALL_MICROPHONE_SWITCH = 201,
972e0dac50fSopenharmony_ci    VIDEO_CALL_HANG_UP_BUTTON = 202,
973e0dac50fSopenharmony_ci    VIDEO_CALL_CAMERA_SWITCH = 203,
974e0dac50fSopenharmony_ci    VIDEO_CALL_MUTE_SWITCH = 204,
975e0dac50fSopenharmony_ci    VIDEO_CALL_END,
976e0dac50fSopenharmony_ci
977e0dac50fSopenharmony_ci    VIDEO_MEETING_START = 300,
978e0dac50fSopenharmony_ci    VIDEO_MEETING_HANG_UP_BUTTON = 301,
979e0dac50fSopenharmony_ci    VIDEO_MEETING_CAMERA_SWITCH = 302,
980e0dac50fSopenharmony_ci    VIDEO_MEETING_MUTE_SWITCH = 303,
981e0dac50fSopenharmony_ci    VIDEO_MEETING_MICROPHONE_SWITCH = 304,
982e0dac50fSopenharmony_ci    VIDEO_MEETING_END,
983e0dac50fSopenharmony_ci
984e0dac50fSopenharmony_ci    VIDEO_LIVE_START = 400,
985e0dac50fSopenharmony_ci    VIDEO_PLAY_PAUSE = 401,
986e0dac50fSopenharmony_ci    VIDEO_LIVE_MUTE_SWITCH = 402,
987e0dac50fSopenharmony_ci    VIDEO_LIVE_END,
988e0dac50fSopenharmony_ci    END,
989e0dac50fSopenharmony_ci};
990e0dac50fSopenharmony_ci
991e0dac50fSopenharmony_ci/**
992e0dac50fSopenharmony_ci * @brief Enumerates picture in picture state.
993e0dac50fSopenharmony_ci */
994e0dac50fSopenharmony_cienum class PiPState : int32_t {
995e0dac50fSopenharmony_ci    ABOUT_TO_START = 1,
996e0dac50fSopenharmony_ci    STARTED = 2,
997e0dac50fSopenharmony_ci    ABOUT_TO_STOP = 3,
998e0dac50fSopenharmony_ci    STOPPED = 4,
999e0dac50fSopenharmony_ci    ABOUT_TO_RESTORE = 5,
1000e0dac50fSopenharmony_ci    ERROR = 6,
1001e0dac50fSopenharmony_ci};
1002e0dac50fSopenharmony_ci
1003e0dac50fSopenharmony_ci/**
1004e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control status.
1005e0dac50fSopenharmony_ci */
1006e0dac50fSopenharmony_cienum class PiPControlStatus : int32_t {
1007e0dac50fSopenharmony_ci    PLAY = 1,
1008e0dac50fSopenharmony_ci    PAUSE = 0,
1009e0dac50fSopenharmony_ci    OPEN = 1,
1010e0dac50fSopenharmony_ci    CLOSE = 0,
1011e0dac50fSopenharmony_ci    ENABLED = -2,
1012e0dac50fSopenharmony_ci    DISABLED = -3,
1013e0dac50fSopenharmony_ci};
1014e0dac50fSopenharmony_ci
1015e0dac50fSopenharmony_ci/**
1016e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control type.
1017e0dac50fSopenharmony_ci */
1018e0dac50fSopenharmony_cienum class PiPControlType : uint32_t {
1019e0dac50fSopenharmony_ci    VIDEO_PLAY_PAUSE = 0,
1020e0dac50fSopenharmony_ci    VIDEO_PREVIOUS = 1,
1021e0dac50fSopenharmony_ci    VIDEO_NEXT = 2,
1022e0dac50fSopenharmony_ci    FAST_FORWARD = 3,
1023e0dac50fSopenharmony_ci    FAST_BACKWARD = 4,
1024e0dac50fSopenharmony_ci    HANG_UP_BUTTON = 5,
1025e0dac50fSopenharmony_ci    MICROPHONE_SWITCH = 6,
1026e0dac50fSopenharmony_ci    CAMERA_SWITCH = 7,
1027e0dac50fSopenharmony_ci    MUTE_SWITCH = 8,
1028e0dac50fSopenharmony_ci    END,
1029e0dac50fSopenharmony_ci};
1030e0dac50fSopenharmony_ci
1031e0dac50fSopenharmony_cistruct PiPControlStatusInfo {
1032e0dac50fSopenharmony_ci    PiPControlType controlType;
1033e0dac50fSopenharmony_ci    PiPControlStatus status;
1034e0dac50fSopenharmony_ci};
1035e0dac50fSopenharmony_ci
1036e0dac50fSopenharmony_cistruct PiPControlEnableInfo {
1037e0dac50fSopenharmony_ci    PiPControlType controlType;
1038e0dac50fSopenharmony_ci    PiPControlStatus enabled;
1039e0dac50fSopenharmony_ci};
1040e0dac50fSopenharmony_ci
1041e0dac50fSopenharmony_cistruct PiPTemplateInfo {
1042e0dac50fSopenharmony_ci    uint32_t pipTemplateType;
1043e0dac50fSopenharmony_ci    uint32_t priority;
1044e0dac50fSopenharmony_ci    std::vector<uint32_t> controlGroup;
1045e0dac50fSopenharmony_ci    std::vector<PiPControlStatusInfo> pipControlStatusInfoList;
1046e0dac50fSopenharmony_ci    std::vector<PiPControlEnableInfo> pipControlEnableInfoList;
1047e0dac50fSopenharmony_ci};
1048e0dac50fSopenharmony_ci
1049e0dac50fSopenharmony_ciusing OnCallback = std::function<void(int64_t, int64_t)>;
1050e0dac50fSopenharmony_ci
1051e0dac50fSopenharmony_ci/**
1052e0dac50fSopenharmony_ci * @struct VsyncCallback
1053e0dac50fSopenharmony_ci *
1054e0dac50fSopenharmony_ci * @brief Vsync callback
1055e0dac50fSopenharmony_ci */
1056e0dac50fSopenharmony_cistruct VsyncCallback {
1057e0dac50fSopenharmony_ci    OnCallback onCallback;
1058e0dac50fSopenharmony_ci};
1059e0dac50fSopenharmony_ci
1060e0dac50fSopenharmony_cistruct WindowLimits {
1061e0dac50fSopenharmony_ci    uint32_t maxWidth_ = INT32_MAX;
1062e0dac50fSopenharmony_ci    uint32_t maxHeight_ = INT32_MAX;
1063e0dac50fSopenharmony_ci    uint32_t minWidth_ = 1;
1064e0dac50fSopenharmony_ci    uint32_t minHeight_ = 1;
1065e0dac50fSopenharmony_ci    float maxRatio_ = FLT_MAX;
1066e0dac50fSopenharmony_ci    float minRatio_ = 0.0f;
1067e0dac50fSopenharmony_ci    float vpRatio_ = 1.0f;
1068e0dac50fSopenharmony_ci
1069e0dac50fSopenharmony_ci    WindowLimits() {}
1070e0dac50fSopenharmony_ci    WindowLimits(uint32_t maxWidth, uint32_t maxHeight, uint32_t minWidth, uint32_t minHeight, float maxRatio,
1071e0dac50fSopenharmony_ci        float minRatio) : maxWidth_(maxWidth), maxHeight_(maxHeight), minWidth_(minWidth), minHeight_(minHeight),
1072e0dac50fSopenharmony_ci        maxRatio_(maxRatio), minRatio_(minRatio) {}
1073e0dac50fSopenharmony_ci    WindowLimits(uint32_t maxWidth, uint32_t maxHeight, uint32_t minWidth, uint32_t minHeight, float maxRatio,
1074e0dac50fSopenharmony_ci        float minRatio, float vpRatio) : maxWidth_(maxWidth), maxHeight_(maxHeight), minWidth_(minWidth),
1075e0dac50fSopenharmony_ci        minHeight_(minHeight), maxRatio_(maxRatio), minRatio_(minRatio), vpRatio_(vpRatio) {}
1076e0dac50fSopenharmony_ci
1077e0dac50fSopenharmony_ci    bool IsEmpty() const
1078e0dac50fSopenharmony_ci    {
1079e0dac50fSopenharmony_ci        return (maxWidth_ == 0 || minWidth_ == 0 || maxHeight_ == 0 || minHeight_ == 0);
1080e0dac50fSopenharmony_ci    }
1081e0dac50fSopenharmony_ci};
1082e0dac50fSopenharmony_ci
1083e0dac50fSopenharmony_ci/**
1084e0dac50fSopenharmony_ci * @struct TitleButtonRect
1085e0dac50fSopenharmony_ci *
1086e0dac50fSopenharmony_ci * @brief An area of title buttons relative to the upper right corner of the window.
1087e0dac50fSopenharmony_ci */
1088e0dac50fSopenharmony_cistruct TitleButtonRect {
1089e0dac50fSopenharmony_ci    int32_t posX_;
1090e0dac50fSopenharmony_ci    int32_t posY_;
1091e0dac50fSopenharmony_ci    uint32_t width_;
1092e0dac50fSopenharmony_ci    uint32_t height_;
1093e0dac50fSopenharmony_ci
1094e0dac50fSopenharmony_ci    bool operator==(const TitleButtonRect& a) const
1095e0dac50fSopenharmony_ci    {
1096e0dac50fSopenharmony_ci        return (posX_ == a.posX_ && posY_ == a.posY_ && width_ == a.width_ && height_ == a.height_);
1097e0dac50fSopenharmony_ci    }
1098e0dac50fSopenharmony_ci
1099e0dac50fSopenharmony_ci    bool operator!=(const TitleButtonRect& a) const
1100e0dac50fSopenharmony_ci    {
1101e0dac50fSopenharmony_ci        return !this->operator==(a);
1102e0dac50fSopenharmony_ci    }
1103e0dac50fSopenharmony_ci
1104e0dac50fSopenharmony_ci    bool IsUninitializedRect() const
1105e0dac50fSopenharmony_ci    {
1106e0dac50fSopenharmony_ci        return (posX_ == 0 && posY_ == 0 && width_ == 0 && height_ == 0);
1107e0dac50fSopenharmony_ci    }
1108e0dac50fSopenharmony_ci
1109e0dac50fSopenharmony_ci    bool IsInsideOf(const TitleButtonRect& a) const
1110e0dac50fSopenharmony_ci    {
1111e0dac50fSopenharmony_ci        return (posX_ >= a.posX_ && posY_ >= a.posY_ &&
1112e0dac50fSopenharmony_ci            posX_ + width_ <= a.posX_ + a.width_ && posY_ + height_ <= a.posY_ + a.height_);
1113e0dac50fSopenharmony_ci    }
1114e0dac50fSopenharmony_ci};
1115e0dac50fSopenharmony_ci
1116e0dac50fSopenharmony_ci/*
1117e0dac50fSopenharmony_ci * Config of keyboard animation
1118e0dac50fSopenharmony_ci */
1119e0dac50fSopenharmony_ciclass KeyboardAnimationCurve : public Parcelable {
1120e0dac50fSopenharmony_cipublic:
1121e0dac50fSopenharmony_ci    KeyboardAnimationCurve() = default;
1122e0dac50fSopenharmony_ci    KeyboardAnimationCurve(const std::string& curveType, const std::vector<float>& curveParams, uint32_t duration)
1123e0dac50fSopenharmony_ci        : curveType_(curveType), duration_(duration)
1124e0dac50fSopenharmony_ci    {
1125e0dac50fSopenharmony_ci        curveParams_.assign(curveParams.begin(), curveParams.end());
1126e0dac50fSopenharmony_ci    }
1127e0dac50fSopenharmony_ci
1128e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override
1129e0dac50fSopenharmony_ci    {
1130e0dac50fSopenharmony_ci        if (!parcel.WriteString(curveType_)) {
1131e0dac50fSopenharmony_ci            return false;
1132e0dac50fSopenharmony_ci        }
1133e0dac50fSopenharmony_ci
1134e0dac50fSopenharmony_ci        auto paramSize = curveParams_.size();
1135e0dac50fSopenharmony_ci        if (paramSize == 4) { // 4: param size
1136e0dac50fSopenharmony_ci            if (!parcel.WriteUint32(static_cast<uint32_t>(paramSize))) {
1137e0dac50fSopenharmony_ci                return false;
1138e0dac50fSopenharmony_ci            }
1139e0dac50fSopenharmony_ci            for (auto& param : curveParams_) {
1140e0dac50fSopenharmony_ci                if (!parcel.WriteFloat(param)) {
1141e0dac50fSopenharmony_ci                    return false;
1142e0dac50fSopenharmony_ci                }
1143e0dac50fSopenharmony_ci            }
1144e0dac50fSopenharmony_ci        } else {
1145e0dac50fSopenharmony_ci            if (!parcel.WriteUint32(0)) {
1146e0dac50fSopenharmony_ci                return false;
1147e0dac50fSopenharmony_ci            }
1148e0dac50fSopenharmony_ci        }
1149e0dac50fSopenharmony_ci
1150e0dac50fSopenharmony_ci        if (!parcel.WriteUint32(duration_)) {
1151e0dac50fSopenharmony_ci            return false;
1152e0dac50fSopenharmony_ci        }
1153e0dac50fSopenharmony_ci        return true;
1154e0dac50fSopenharmony_ci    }
1155e0dac50fSopenharmony_ci
1156e0dac50fSopenharmony_ci    static KeyboardAnimationCurve* Unmarshalling(Parcel& parcel)
1157e0dac50fSopenharmony_ci    {
1158e0dac50fSopenharmony_ci        KeyboardAnimationCurve* config = new KeyboardAnimationCurve;
1159e0dac50fSopenharmony_ci        uint32_t paramSize = 0;
1160e0dac50fSopenharmony_ci        if (!parcel.ReadString(config->curveType_) || !parcel.ReadUint32(paramSize)) {
1161e0dac50fSopenharmony_ci            delete config;
1162e0dac50fSopenharmony_ci            return nullptr;
1163e0dac50fSopenharmony_ci        }
1164e0dac50fSopenharmony_ci
1165e0dac50fSopenharmony_ci        if (paramSize == 4) { // 4: paramSize
1166e0dac50fSopenharmony_ci            for (uint32_t i = 0; i < paramSize; i++) {
1167e0dac50fSopenharmony_ci                float param = 0.0f;
1168e0dac50fSopenharmony_ci                if (!parcel.ReadFloat(param)) {
1169e0dac50fSopenharmony_ci                    delete config;
1170e0dac50fSopenharmony_ci                    return nullptr;
1171e0dac50fSopenharmony_ci                } else {
1172e0dac50fSopenharmony_ci                    config->curveParams_.push_back(param);
1173e0dac50fSopenharmony_ci                }
1174e0dac50fSopenharmony_ci            }
1175e0dac50fSopenharmony_ci        }
1176e0dac50fSopenharmony_ci
1177e0dac50fSopenharmony_ci        if (!parcel.ReadUint32(config->duration_)) {
1178e0dac50fSopenharmony_ci            delete config;
1179e0dac50fSopenharmony_ci            return nullptr;
1180e0dac50fSopenharmony_ci        }
1181e0dac50fSopenharmony_ci        return config;
1182e0dac50fSopenharmony_ci    }
1183e0dac50fSopenharmony_ci
1184e0dac50fSopenharmony_ci    std::string curveType_ = "";
1185e0dac50fSopenharmony_ci    std::vector<float> curveParams_ = {};
1186e0dac50fSopenharmony_ci    uint32_t duration_ = 0;
1187e0dac50fSopenharmony_ci};
1188e0dac50fSopenharmony_ci
1189e0dac50fSopenharmony_cistruct KeyboardAnimationConfig {
1190e0dac50fSopenharmony_ci    KeyboardAnimationCurve curveIn;
1191e0dac50fSopenharmony_ci    KeyboardAnimationCurve curveOut;
1192e0dac50fSopenharmony_ci};
1193e0dac50fSopenharmony_ci
1194e0dac50fSopenharmony_cienum class CaseType {
1195e0dac50fSopenharmony_ci    CASE_WINDOW_MANAGER = 0,
1196e0dac50fSopenharmony_ci    CASE_WINDOW,
1197e0dac50fSopenharmony_ci    CASE_STAGE
1198e0dac50fSopenharmony_ci};
1199e0dac50fSopenharmony_ci
1200e0dac50fSopenharmony_cienum class MaximizePresentation {
1201e0dac50fSopenharmony_ci    FOLLOW_APP_IMMERSIVE_SETTING = 0,  // follow app set imersiveStateEnable
1202e0dac50fSopenharmony_ci    EXIT_IMMERSIVE = 1,       // imersiveStateEnable will be set as false
1203e0dac50fSopenharmony_ci    ENTER_IMMERSIVE = 2,       // imersiveStateEnable will be set as true
1204e0dac50fSopenharmony_ci    // imersiveStateEnable will be set as true, titleHoverShowEnabled and dockHoverShowEnabled will be set as false
1205e0dac50fSopenharmony_ci    ENTER_IMMERSIVE_DISABLE_TITLE_AND_DOCK_HOVER = 3,
1206e0dac50fSopenharmony_ci};
1207e0dac50fSopenharmony_ci
1208e0dac50fSopenharmony_cienum ForceHideState : uint32_t {
1209e0dac50fSopenharmony_ci    NOT_HIDDEN = 0,
1210e0dac50fSopenharmony_ci    HIDDEN_WHEN_FOCUSED,
1211e0dac50fSopenharmony_ci    HIDDEN_WHEN_UNFOCUSED
1212e0dac50fSopenharmony_ci};
1213e0dac50fSopenharmony_ci
1214e0dac50fSopenharmony_cienum class ExtensionWindowAttribute : int32_t {
1215e0dac50fSopenharmony_ci    SYSTEM_WINDOW = 0,
1216e0dac50fSopenharmony_ci    SUB_WINDOW = 1,
1217e0dac50fSopenharmony_ci    UNKNOWN = 2
1218e0dac50fSopenharmony_ci};
1219e0dac50fSopenharmony_ci
1220e0dac50fSopenharmony_cistruct SystemWindowOptions {
1221e0dac50fSopenharmony_ci    int32_t windowType = -1;
1222e0dac50fSopenharmony_ci};
1223e0dac50fSopenharmony_ci
1224e0dac50fSopenharmony_cienum class ModalityType : uint8_t {
1225e0dac50fSopenharmony_ci    WINDOW_MODALITY,
1226e0dac50fSopenharmony_ci    APPLICATION_MODALITY,
1227e0dac50fSopenharmony_ci};
1228e0dac50fSopenharmony_ci
1229e0dac50fSopenharmony_cistruct SubWindowOptions {
1230e0dac50fSopenharmony_ci    std::string title;
1231e0dac50fSopenharmony_ci    bool decorEnabled = false;
1232e0dac50fSopenharmony_ci    bool isModal = false;
1233e0dac50fSopenharmony_ci    bool isTopmost = false;
1234e0dac50fSopenharmony_ci    ModalityType modalityType = ModalityType::WINDOW_MODALITY;
1235e0dac50fSopenharmony_ci};
1236e0dac50fSopenharmony_ci
1237e0dac50fSopenharmony_cistruct ExtensionWindowConfig {
1238e0dac50fSopenharmony_ci    std::string windowName;
1239e0dac50fSopenharmony_ci    ExtensionWindowAttribute windowAttribute = ExtensionWindowAttribute::UNKNOWN;
1240e0dac50fSopenharmony_ci    Rect windowRect;
1241e0dac50fSopenharmony_ci    SubWindowOptions subWindowOptions;
1242e0dac50fSopenharmony_ci    SystemWindowOptions systemWindowOptions;
1243e0dac50fSopenharmony_ci};
1244e0dac50fSopenharmony_ci
1245e0dac50fSopenharmony_ci/**
1246e0dac50fSopenharmony_ci * @class KeyboardLayoutParams
1247e0dac50fSopenharmony_ci *
1248e0dac50fSopenharmony_ci * @brief Keyboard need adjust layout
1249e0dac50fSopenharmony_ci */
1250e0dac50fSopenharmony_ciclass KeyboardLayoutParams : public Parcelable {
1251e0dac50fSopenharmony_cipublic:
1252e0dac50fSopenharmony_ci    WindowGravity gravity_ = WindowGravity::WINDOW_GRAVITY_BOTTOM;
1253e0dac50fSopenharmony_ci    Rect LandscapeKeyboardRect_ { 0, 0, 0, 0 };
1254e0dac50fSopenharmony_ci    Rect PortraitKeyboardRect_ { 0, 0, 0, 0 };
1255e0dac50fSopenharmony_ci    Rect LandscapePanelRect_ { 0, 0, 0, 0 };
1256e0dac50fSopenharmony_ci    Rect PortraitPanelRect_ { 0, 0, 0, 0 };
1257e0dac50fSopenharmony_ci
1258e0dac50fSopenharmony_ci    bool operator==(const KeyboardLayoutParams& params) const
1259e0dac50fSopenharmony_ci    {
1260e0dac50fSopenharmony_ci        return (gravity_ == params.gravity_ && LandscapeKeyboardRect_ == params.LandscapeKeyboardRect_ &&
1261e0dac50fSopenharmony_ci            PortraitKeyboardRect_ == params.PortraitKeyboardRect_ &&
1262e0dac50fSopenharmony_ci            LandscapePanelRect_ == params.LandscapePanelRect_ &&
1263e0dac50fSopenharmony_ci            PortraitPanelRect_ == params.PortraitPanelRect_);
1264e0dac50fSopenharmony_ci    }
1265e0dac50fSopenharmony_ci
1266e0dac50fSopenharmony_ci    bool operator!=(const KeyboardLayoutParams& params) const
1267e0dac50fSopenharmony_ci    {
1268e0dac50fSopenharmony_ci        return !this->operator==(params);
1269e0dac50fSopenharmony_ci    }
1270e0dac50fSopenharmony_ci
1271e0dac50fSopenharmony_ci    bool isEmpty() const
1272e0dac50fSopenharmony_ci    {
1273e0dac50fSopenharmony_ci        return LandscapeKeyboardRect_.IsUninitializedRect() && PortraitKeyboardRect_.IsUninitializedRect() &&
1274e0dac50fSopenharmony_ci            LandscapePanelRect_.IsUninitializedRect() && PortraitPanelRect_.IsUninitializedRect();
1275e0dac50fSopenharmony_ci    }
1276e0dac50fSopenharmony_ci
1277e0dac50fSopenharmony_ci    static inline bool WriteParcel(Parcel& parcel, const Rect& rect)
1278e0dac50fSopenharmony_ci    {
1279e0dac50fSopenharmony_ci        return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) &&
1280e0dac50fSopenharmony_ci            parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_);
1281e0dac50fSopenharmony_ci    }
1282e0dac50fSopenharmony_ci
1283e0dac50fSopenharmony_ci    static inline bool ReadParcel(Parcel& parcel, Rect& rect)
1284e0dac50fSopenharmony_ci    {
1285e0dac50fSopenharmony_ci        return parcel.ReadInt32(rect.posX_) && parcel.ReadInt32(rect.posY_) &&
1286e0dac50fSopenharmony_ci            parcel.ReadUint32(rect.width_) && parcel.ReadUint32(rect.height_);
1287e0dac50fSopenharmony_ci    }
1288e0dac50fSopenharmony_ci
1289e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override
1290e0dac50fSopenharmony_ci    {
1291e0dac50fSopenharmony_ci        return (parcel.WriteUint32(static_cast<uint32_t>(gravity_)) &&
1292e0dac50fSopenharmony_ci            WriteParcel(parcel, LandscapeKeyboardRect_) &&
1293e0dac50fSopenharmony_ci            WriteParcel(parcel, PortraitKeyboardRect_) &&
1294e0dac50fSopenharmony_ci            WriteParcel(parcel, LandscapePanelRect_) &&
1295e0dac50fSopenharmony_ci            WriteParcel(parcel, PortraitPanelRect_));
1296e0dac50fSopenharmony_ci    }
1297e0dac50fSopenharmony_ci
1298e0dac50fSopenharmony_ci    static KeyboardLayoutParams* Unmarshalling(Parcel& parcel)
1299e0dac50fSopenharmony_ci    {
1300e0dac50fSopenharmony_ci        KeyboardLayoutParams *params = new(std::nothrow) KeyboardLayoutParams();
1301e0dac50fSopenharmony_ci        if (params == nullptr) {
1302e0dac50fSopenharmony_ci            return nullptr;
1303e0dac50fSopenharmony_ci        }
1304e0dac50fSopenharmony_ci        params->gravity_ = static_cast<WindowGravity>(parcel.ReadUint32());
1305e0dac50fSopenharmony_ci        if (ReadParcel(parcel, params->LandscapeKeyboardRect_) &&
1306e0dac50fSopenharmony_ci            ReadParcel(parcel, params->PortraitKeyboardRect_) &&
1307e0dac50fSopenharmony_ci            ReadParcel(parcel, params->LandscapePanelRect_) &&
1308e0dac50fSopenharmony_ci            ReadParcel(parcel, params->PortraitPanelRect_)) {
1309e0dac50fSopenharmony_ci            return params;
1310e0dac50fSopenharmony_ci        }
1311e0dac50fSopenharmony_ci        delete params;
1312e0dac50fSopenharmony_ci        return nullptr;
1313e0dac50fSopenharmony_ci    }
1314e0dac50fSopenharmony_ci};
1315e0dac50fSopenharmony_ci}
1316e0dac50fSopenharmony_ci}
1317e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_WM_COMMON_H
1318