1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 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_WINDOW_MANAGER_H
17e0dac50fSopenharmony_ci#define OHOS_ROSEN_WINDOW_MANAGER_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <memory>
20e0dac50fSopenharmony_ci#include <mutex>
21e0dac50fSopenharmony_ci#include <refbase.h>
22e0dac50fSopenharmony_ci#include <vector>
23e0dac50fSopenharmony_ci#include <iremote_object.h>
24e0dac50fSopenharmony_ci#include "wm_single_instance.h"
25e0dac50fSopenharmony_ci#include "wm_common.h"
26e0dac50fSopenharmony_ci#include "dm_common.h"
27e0dac50fSopenharmony_ci#include "focus_change_info.h"
28e0dac50fSopenharmony_ci#include "window_visibility_info.h"
29e0dac50fSopenharmony_ci#include "window_drawing_content_info.h"
30e0dac50fSopenharmony_ci#include "window.h"
31e0dac50fSopenharmony_ci#include "window_pid_visibility_info.h"
32e0dac50fSopenharmony_ci
33e0dac50fSopenharmony_cinamespace OHOS {
34e0dac50fSopenharmony_cinamespace Rosen {
35e0dac50fSopenharmony_cistruct SystemBarRegionTint {
36e0dac50fSopenharmony_ci    WindowType type_;
37e0dac50fSopenharmony_ci    SystemBarProperty prop_;
38e0dac50fSopenharmony_ci    Rect region_;
39e0dac50fSopenharmony_ci    SystemBarRegionTint()
40e0dac50fSopenharmony_ci        : type_(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW), prop_(), region_{ 0, 0, 0, 0 } {}
41e0dac50fSopenharmony_ci    SystemBarRegionTint(WindowType type, SystemBarProperty prop, Rect region)
42e0dac50fSopenharmony_ci        : type_(type), prop_(prop), region_(region) {}
43e0dac50fSopenharmony_ci};
44e0dac50fSopenharmony_ciusing SystemBarRegionTints = std::vector<SystemBarRegionTint>;
45e0dac50fSopenharmony_ci
46e0dac50fSopenharmony_cistruct VisibleWindowNumInfo {
47e0dac50fSopenharmony_ci    uint32_t displayId;
48e0dac50fSopenharmony_ci    uint32_t visibleWindowNum;
49e0dac50fSopenharmony_ci};
50e0dac50fSopenharmony_ci
51e0dac50fSopenharmony_cistruct WindowSnapshotDataPack {
52e0dac50fSopenharmony_ci    std::shared_ptr<Media::PixelMap> pixelMap = nullptr;
53e0dac50fSopenharmony_ci    WMError result = WMError::WM_OK;
54e0dac50fSopenharmony_ci};
55e0dac50fSopenharmony_ci
56e0dac50fSopenharmony_ci/**
57e0dac50fSopenharmony_ci * @class IWMSConnectionChangedListener
58e0dac50fSopenharmony_ci *
59e0dac50fSopenharmony_ci * @brief Listener to observe WMS connection status.
60e0dac50fSopenharmony_ci */
61e0dac50fSopenharmony_ciclass IWMSConnectionChangedListener : virtual public RefBase {
62e0dac50fSopenharmony_cipublic:
63e0dac50fSopenharmony_ci    /**
64e0dac50fSopenharmony_ci     * @brief Notify caller when WMS connected
65e0dac50fSopenharmony_ci     *
66e0dac50fSopenharmony_ci     * @param userId ID of the user who has connected to the WMS.
67e0dac50fSopenharmony_ci     *
68e0dac50fSopenharmony_ci     * @param screenId ID of the screen that is connected to the WMS, screenId is currently always 0.
69e0dac50fSopenharmony_ci     */
70e0dac50fSopenharmony_ci    virtual void OnConnected(int32_t userId, int32_t screenId) = 0;
71e0dac50fSopenharmony_ci    /**
72e0dac50fSopenharmony_ci     * @brief Notify caller when WMS disconnected
73e0dac50fSopenharmony_ci     *
74e0dac50fSopenharmony_ci     * @param userId ID of the user who has disconnected to the WMS.
75e0dac50fSopenharmony_ci     *
76e0dac50fSopenharmony_ci     * @param screenId ID of the screen that is disconnected to the WMS, screenId is currently always 0.
77e0dac50fSopenharmony_ci     */
78e0dac50fSopenharmony_ci    virtual void OnDisconnected(int32_t userId, int32_t screenId) = 0;
79e0dac50fSopenharmony_ci};
80e0dac50fSopenharmony_ci
81e0dac50fSopenharmony_ci/**
82e0dac50fSopenharmony_ci * @class IFocusChangedListener
83e0dac50fSopenharmony_ci *
84e0dac50fSopenharmony_ci * @brief Listener to observe focus changed.
85e0dac50fSopenharmony_ci */
86e0dac50fSopenharmony_ciclass IFocusChangedListener : virtual public RefBase {
87e0dac50fSopenharmony_cipublic:
88e0dac50fSopenharmony_ci    /**
89e0dac50fSopenharmony_ci     * @brief Notify caller when window get focus
90e0dac50fSopenharmony_ci     *
91e0dac50fSopenharmony_ci     * @param focusChangeInfo Window info while its focus status changed.
92e0dac50fSopenharmony_ci     */
93e0dac50fSopenharmony_ci    virtual void OnFocused(const sptr<FocusChangeInfo>& focusChangeInfo) = 0;
94e0dac50fSopenharmony_ci    /**
95e0dac50fSopenharmony_ci     * @brief Notify caller when window lose focus
96e0dac50fSopenharmony_ci     *
97e0dac50fSopenharmony_ci     * @param focusChangeInfo Window info while its focus status changed.
98e0dac50fSopenharmony_ci     */
99e0dac50fSopenharmony_ci    virtual void OnUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo) = 0;
100e0dac50fSopenharmony_ci};
101e0dac50fSopenharmony_ci
102e0dac50fSopenharmony_ci/**
103e0dac50fSopenharmony_ci * @class IWindowModeChangedListener
104e0dac50fSopenharmony_ci *
105e0dac50fSopenharmony_ci * @brief Listener to observe window mode change.
106e0dac50fSopenharmony_ci */
107e0dac50fSopenharmony_ciclass IWindowModeChangedListener : virtual public RefBase {
108e0dac50fSopenharmony_cipublic:
109e0dac50fSopenharmony_ci    /**
110e0dac50fSopenharmony_ci     * @brief Notify caller when window mode update.
111e0dac50fSopenharmony_ci     *
112e0dac50fSopenharmony_ci     * @param mode Window mode.
113e0dac50fSopenharmony_ci     */
114e0dac50fSopenharmony_ci    virtual void OnWindowModeUpdate(WindowModeType mode) = 0;
115e0dac50fSopenharmony_ci};
116e0dac50fSopenharmony_ci
117e0dac50fSopenharmony_ci
118e0dac50fSopenharmony_ci/**
119e0dac50fSopenharmony_ci * @class ISystemBarChangedListener
120e0dac50fSopenharmony_ci *
121e0dac50fSopenharmony_ci * @brief Listener to observe systembar changed.
122e0dac50fSopenharmony_ci */
123e0dac50fSopenharmony_ciclass ISystemBarChangedListener : virtual public RefBase {
124e0dac50fSopenharmony_cipublic:
125e0dac50fSopenharmony_ci    /**
126e0dac50fSopenharmony_ci     * @brief Notify caller when system bar property changed
127e0dac50fSopenharmony_ci     *
128e0dac50fSopenharmony_ci     * @param displayId ID of display.
129e0dac50fSopenharmony_ci     * @param tints Tint of system bar region.
130e0dac50fSopenharmony_ci     */
131e0dac50fSopenharmony_ci    virtual void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) = 0;
132e0dac50fSopenharmony_ci};
133e0dac50fSopenharmony_ci
134e0dac50fSopenharmony_ci/**
135e0dac50fSopenharmony_ci * @class IGestureNavigationEnabledChangedListener
136e0dac50fSopenharmony_ci *
137e0dac50fSopenharmony_ci * @brief Listener to observe GestureNavigationEnabled changed.
138e0dac50fSopenharmony_ci */
139e0dac50fSopenharmony_ciclass IGestureNavigationEnabledChangedListener : virtual public RefBase {
140e0dac50fSopenharmony_cipublic:
141e0dac50fSopenharmony_ci    /**
142e0dac50fSopenharmony_ci     * @brief Notify caller when GestureNavigationEnabled changed.
143e0dac50fSopenharmony_ci     *
144e0dac50fSopenharmony_ci     * @param enable True means set Gesture on, false means set Gesture off.
145e0dac50fSopenharmony_ci     */
146e0dac50fSopenharmony_ci    virtual void OnGestureNavigationEnabledUpdate(bool enable) = 0;
147e0dac50fSopenharmony_ci};
148e0dac50fSopenharmony_ci
149e0dac50fSopenharmony_ci/**
150e0dac50fSopenharmony_ci * @class IVisibilityChangedListener
151e0dac50fSopenharmony_ci *
152e0dac50fSopenharmony_ci * @brief Listener to observe visibility changed.
153e0dac50fSopenharmony_ci */
154e0dac50fSopenharmony_ciclass IVisibilityChangedListener : virtual public RefBase {
155e0dac50fSopenharmony_cipublic:
156e0dac50fSopenharmony_ci    /**
157e0dac50fSopenharmony_ci     * @brief Notify caller when window visibility changed.
158e0dac50fSopenharmony_ci     *
159e0dac50fSopenharmony_ci     * @param windowVisibilityInfo Window visibility info.
160e0dac50fSopenharmony_ci     */
161e0dac50fSopenharmony_ci    virtual void OnWindowVisibilityChanged(const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfo) = 0;
162e0dac50fSopenharmony_ci};
163e0dac50fSopenharmony_ci
164e0dac50fSopenharmony_ci/**
165e0dac50fSopenharmony_ci * @class IDrawingContentChangedListener
166e0dac50fSopenharmony_ci *
167e0dac50fSopenharmony_ci * @brief Listener to observe drawing content changed.
168e0dac50fSopenharmony_ci */
169e0dac50fSopenharmony_ciclass IDrawingContentChangedListener : virtual public RefBase {
170e0dac50fSopenharmony_cipublic:
171e0dac50fSopenharmony_ci    /**
172e0dac50fSopenharmony_ci     * @brief Notify caller when window DrawingContent changed.
173e0dac50fSopenharmony_ci     *
174e0dac50fSopenharmony_ci     * @param windowDrawingInfo Window DrawingContent info.
175e0dac50fSopenharmony_ci     */
176e0dac50fSopenharmony_ci    virtual void OnWindowDrawingContentChanged(const std::vector<sptr<WindowDrawingContentInfo>>&
177e0dac50fSopenharmony_ci        windowDrawingInfo) = 0;
178e0dac50fSopenharmony_ci};
179e0dac50fSopenharmony_ci
180e0dac50fSopenharmony_ci/**
181e0dac50fSopenharmony_ci * @class IWindowStyleChangedListener
182e0dac50fSopenharmony_ci *
183e0dac50fSopenharmony_ci * @brief Listener to observe windowStyle changed.
184e0dac50fSopenharmony_ci */
185e0dac50fSopenharmony_ciclass IWindowStyleChangedListener : virtual public RefBase {
186e0dac50fSopenharmony_cipublic:
187e0dac50fSopenharmony_ci    /**
188e0dac50fSopenharmony_ci     * @brief Notify caller when window style changed.
189e0dac50fSopenharmony_ci     *
190e0dac50fSopenharmony_ci     * @param styleType
191e0dac50fSopenharmony_ci     */
192e0dac50fSopenharmony_ci    virtual void OnWindowStyleUpdate(WindowStyleType styleType) = 0;
193e0dac50fSopenharmony_ci};
194e0dac50fSopenharmony_ci
195e0dac50fSopenharmony_ci/**
196e0dac50fSopenharmony_ci * @class IWindowPidVisibilityChangedListener
197e0dac50fSopenharmony_ci *
198e0dac50fSopenharmony_ci * @brief Listener to observe window visibility that in same pid.
199e0dac50fSopenharmony_ci */
200e0dac50fSopenharmony_ciclass IWindowPidVisibilityChangedListener : virtual public RefBase {
201e0dac50fSopenharmony_cipublic:
202e0dac50fSopenharmony_ci    /**
203e0dac50fSopenharmony_ci     * @brief Notify caller when window style changed.
204e0dac50fSopenharmony_ci     *
205e0dac50fSopenharmony_ci     * @param info
206e0dac50fSopenharmony_ci     */
207e0dac50fSopenharmony_ci    virtual void NotifyWindowPidVisibilityChanged(const sptr<WindowPidVisibilityInfo>& info) = 0;
208e0dac50fSopenharmony_ci};
209e0dac50fSopenharmony_ci
210e0dac50fSopenharmony_ci/**
211e0dac50fSopenharmony_ci * @class AccessibilityWindowInfo
212e0dac50fSopenharmony_ci *
213e0dac50fSopenharmony_ci * @brief Window info used for Accessibility.
214e0dac50fSopenharmony_ci */
215e0dac50fSopenharmony_ciclass AccessibilityWindowInfo : public Parcelable {
216e0dac50fSopenharmony_cipublic:
217e0dac50fSopenharmony_ci    /**
218e0dac50fSopenharmony_ci     * @brief Default construct of AccessibilityWindowInfo.
219e0dac50fSopenharmony_ci     */
220e0dac50fSopenharmony_ci    AccessibilityWindowInfo() = default;
221e0dac50fSopenharmony_ci    /**
222e0dac50fSopenharmony_ci     * @brief Default deconstruct of AccessibilityWindowInfo.
223e0dac50fSopenharmony_ci     */
224e0dac50fSopenharmony_ci    ~AccessibilityWindowInfo() = default;
225e0dac50fSopenharmony_ci
226e0dac50fSopenharmony_ci    /**
227e0dac50fSopenharmony_ci     * @brief Marshalling AccessibilityWindowInfo.
228e0dac50fSopenharmony_ci     *
229e0dac50fSopenharmony_ci     * @param parcel Package of AccessibilityWindowInfo.
230e0dac50fSopenharmony_ci     * @return True means marshall success, false means marshall failed.
231e0dac50fSopenharmony_ci     */
232e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override;
233e0dac50fSopenharmony_ci    /**
234e0dac50fSopenharmony_ci     * @brief Unmarshalling AccessibilityWindowInfo.
235e0dac50fSopenharmony_ci     *
236e0dac50fSopenharmony_ci     * @param parcel Package of AccessibilityWindowInfo.
237e0dac50fSopenharmony_ci     * @return AccessibilityWindowInfo object.
238e0dac50fSopenharmony_ci     */
239e0dac50fSopenharmony_ci    static AccessibilityWindowInfo* Unmarshalling(Parcel& parcel);
240e0dac50fSopenharmony_ci
241e0dac50fSopenharmony_ci    int32_t wid_;
242e0dac50fSopenharmony_ci    int32_t innerWid_;
243e0dac50fSopenharmony_ci    int32_t uiNodeId_;
244e0dac50fSopenharmony_ci    Rect windowRect_;
245e0dac50fSopenharmony_ci    bool focused_ { false };
246e0dac50fSopenharmony_ci    bool isDecorEnable_ { false };
247e0dac50fSopenharmony_ci    DisplayId displayId_;
248e0dac50fSopenharmony_ci    uint32_t layer_;
249e0dac50fSopenharmony_ci    WindowMode mode_;
250e0dac50fSopenharmony_ci    WindowType type_;
251e0dac50fSopenharmony_ci    float scaleVal_;
252e0dac50fSopenharmony_ci    float scaleX_;
253e0dac50fSopenharmony_ci    float scaleY_;
254e0dac50fSopenharmony_ci    std::string bundleName_;
255e0dac50fSopenharmony_ci    std::vector<Rect> touchHotAreas_;
256e0dac50fSopenharmony_ci};
257e0dac50fSopenharmony_ci
258e0dac50fSopenharmony_ci/**
259e0dac50fSopenharmony_ci * @class UnreliableWindowInfo
260e0dac50fSopenharmony_ci *
261e0dac50fSopenharmony_ci * @brief Unreliable Window Info.
262e0dac50fSopenharmony_ci */
263e0dac50fSopenharmony_ciclass UnreliableWindowInfo : public Parcelable {
264e0dac50fSopenharmony_cipublic:
265e0dac50fSopenharmony_ci    /**
266e0dac50fSopenharmony_ci     * @brief Default construct of UnreliableWindowInfo.
267e0dac50fSopenharmony_ci     */
268e0dac50fSopenharmony_ci    UnreliableWindowInfo() = default;
269e0dac50fSopenharmony_ci    /**
270e0dac50fSopenharmony_ci     * @brief Default deconstruct of UnreliableWindowInfo.
271e0dac50fSopenharmony_ci     */
272e0dac50fSopenharmony_ci    ~UnreliableWindowInfo() = default;
273e0dac50fSopenharmony_ci
274e0dac50fSopenharmony_ci    /**
275e0dac50fSopenharmony_ci     * @brief Marshalling UnreliableWindowInfo.
276e0dac50fSopenharmony_ci     *
277e0dac50fSopenharmony_ci     * @param parcel Package of UnreliableWindowInfo.
278e0dac50fSopenharmony_ci     * @return True means marshall success, false means marshall failed.
279e0dac50fSopenharmony_ci     */
280e0dac50fSopenharmony_ci    virtual bool Marshalling(Parcel& parcel) const override;
281e0dac50fSopenharmony_ci    /**
282e0dac50fSopenharmony_ci     * @brief Unmarshalling UnreliableWindowInfo.
283e0dac50fSopenharmony_ci     *
284e0dac50fSopenharmony_ci     * @param parcel Package of UnreliableWindowInfo.
285e0dac50fSopenharmony_ci     * @return UnreliableWindowInfo object.
286e0dac50fSopenharmony_ci     */
287e0dac50fSopenharmony_ci    static UnreliableWindowInfo* Unmarshalling(Parcel& parcel);
288e0dac50fSopenharmony_ci
289e0dac50fSopenharmony_ci    int32_t windowId_ { 0 };
290e0dac50fSopenharmony_ci    Rect windowRect_;
291e0dac50fSopenharmony_ci    uint32_t zOrder_ { 0 };
292e0dac50fSopenharmony_ci    float floatingScale_ { 1.0f };
293e0dac50fSopenharmony_ci    float scaleX_ { 1.0f };
294e0dac50fSopenharmony_ci    float scaleY_ { 1.0f };
295e0dac50fSopenharmony_ci};
296e0dac50fSopenharmony_ci
297e0dac50fSopenharmony_ci/**
298e0dac50fSopenharmony_ci * @class IWindowUpdateListener
299e0dac50fSopenharmony_ci *
300e0dac50fSopenharmony_ci * @brief Listener to observe window update.
301e0dac50fSopenharmony_ci */
302e0dac50fSopenharmony_ciclass IWindowUpdateListener : virtual public RefBase {
303e0dac50fSopenharmony_cipublic:
304e0dac50fSopenharmony_ci    /**
305e0dac50fSopenharmony_ci     * @brief Notify caller when AccessibilityWindowInfo update.
306e0dac50fSopenharmony_ci     *
307e0dac50fSopenharmony_ci     * @param infos Window info used for Accessibility.
308e0dac50fSopenharmony_ci     * @param type Type for window update.
309e0dac50fSopenharmony_ci     */
310e0dac50fSopenharmony_ci    virtual void OnWindowUpdate(const std::vector<sptr<AccessibilityWindowInfo>>& infos, WindowUpdateType type) = 0;
311e0dac50fSopenharmony_ci};
312e0dac50fSopenharmony_ci
313e0dac50fSopenharmony_ci/**
314e0dac50fSopenharmony_ci * @class IWaterMarkFlagChangedListener
315e0dac50fSopenharmony_ci *
316e0dac50fSopenharmony_ci * @brief Listener to observe water mark flag changed.
317e0dac50fSopenharmony_ci */
318e0dac50fSopenharmony_ciclass IWaterMarkFlagChangedListener : virtual public RefBase {
319e0dac50fSopenharmony_cipublic:
320e0dac50fSopenharmony_ci    /**
321e0dac50fSopenharmony_ci     * @brief Notify caller when water mark flag changed.
322e0dac50fSopenharmony_ci     *
323e0dac50fSopenharmony_ci     * @param showWaterMark True means show water mark, false means the opposite.
324e0dac50fSopenharmony_ci     */
325e0dac50fSopenharmony_ci    virtual void OnWaterMarkFlagUpdate(bool showWaterMark) = 0;
326e0dac50fSopenharmony_ci};
327e0dac50fSopenharmony_ci
328e0dac50fSopenharmony_ci/**
329e0dac50fSopenharmony_ci * @class IVisibleWindowNumChangedListener
330e0dac50fSopenharmony_ci *
331e0dac50fSopenharmony_ci * @brief Listener to observe visible main window num changed.
332e0dac50fSopenharmony_ci */
333e0dac50fSopenharmony_ciclass IVisibleWindowNumChangedListener : virtual public RefBase {
334e0dac50fSopenharmony_cipublic:
335e0dac50fSopenharmony_ci    /**
336e0dac50fSopenharmony_ci     * @brief Notify caller when visible window num changed
337e0dac50fSopenharmony_ci     *
338e0dac50fSopenharmony_ci     * @param visibleWindowNum visible window num .
339e0dac50fSopenharmony_ci     */
340e0dac50fSopenharmony_ci    virtual void OnVisibleWindowNumChange(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo) = 0;
341e0dac50fSopenharmony_ci};
342e0dac50fSopenharmony_ci
343e0dac50fSopenharmony_ci/**
344e0dac50fSopenharmony_ci * @class ICameraFloatWindowChangedListener
345e0dac50fSopenharmony_ci *
346e0dac50fSopenharmony_ci * @brief Listener to observe camera window changed.
347e0dac50fSopenharmony_ci */
348e0dac50fSopenharmony_ciclass ICameraFloatWindowChangedListener : virtual public RefBase {
349e0dac50fSopenharmony_cipublic:
350e0dac50fSopenharmony_ci    /**
351e0dac50fSopenharmony_ci     * @brief Notify caller when camera window changed.
352e0dac50fSopenharmony_ci     *
353e0dac50fSopenharmony_ci     * @param accessTokenId Token id of camera window.
354e0dac50fSopenharmony_ci     * @param isShowing True means camera is shown, false means the opposite.
355e0dac50fSopenharmony_ci     */
356e0dac50fSopenharmony_ci    virtual void OnCameraFloatWindowChange(uint32_t accessTokenId, bool isShowing) = 0;
357e0dac50fSopenharmony_ci};
358e0dac50fSopenharmony_ci
359e0dac50fSopenharmony_ci/**
360e0dac50fSopenharmony_ci * @class ICameraWindowChangedListener
361e0dac50fSopenharmony_ci *
362e0dac50fSopenharmony_ci * @brief Listener to observe camera window changed.
363e0dac50fSopenharmony_ci */
364e0dac50fSopenharmony_ciclass ICameraWindowChangedListener : virtual public RefBase {
365e0dac50fSopenharmony_cipublic:
366e0dac50fSopenharmony_ci    /**
367e0dac50fSopenharmony_ci     * @brief Notify caller when camera window changed.
368e0dac50fSopenharmony_ci     *
369e0dac50fSopenharmony_ci     * @param accessTokenId Token id of camera window.
370e0dac50fSopenharmony_ci     * @param isShowing True means camera is shown, false means the opposite.
371e0dac50fSopenharmony_ci     */
372e0dac50fSopenharmony_ci    virtual void OnCameraWindowChange(uint32_t accessTokenId, bool isShowing) = 0;
373e0dac50fSopenharmony_ci};
374e0dac50fSopenharmony_ci
375e0dac50fSopenharmony_ci/**
376e0dac50fSopenharmony_ci * @class IDisplayInfoChangedListener
377e0dac50fSopenharmony_ci *
378e0dac50fSopenharmony_ci * @brief Listener to observe display information changed.
379e0dac50fSopenharmony_ci */
380e0dac50fSopenharmony_ciclass IDisplayInfoChangedListener : virtual public RefBase {
381e0dac50fSopenharmony_cipublic:
382e0dac50fSopenharmony_ci    /**
383e0dac50fSopenharmony_ci     * @brief Notify caller when display information changed.
384e0dac50fSopenharmony_ci     *
385e0dac50fSopenharmony_ci     * @param token token of ability.
386e0dac50fSopenharmony_ci     * @param displayId ID of the display where the main window of the ability is located.
387e0dac50fSopenharmony_ci     * @param density density of the display where the main window of the ability is located.
388e0dac50fSopenharmony_ci     * @param orientation orientation of the display where the main window of the ability is located.
389e0dac50fSopenharmony_ci     */
390e0dac50fSopenharmony_ci    virtual void OnDisplayInfoChange(const sptr<IRemoteObject>& token,
391e0dac50fSopenharmony_ci        DisplayId displayId, float density, DisplayOrientation orientation) = 0;
392e0dac50fSopenharmony_ci};
393e0dac50fSopenharmony_ci
394e0dac50fSopenharmony_ci/**
395e0dac50fSopenharmony_ci * @class IPiPStateChangedListener
396e0dac50fSopenharmony_ci *
397e0dac50fSopenharmony_ci * @brief Listener to observe PiP State changed.
398e0dac50fSopenharmony_ci */
399e0dac50fSopenharmony_ciclass IPiPStateChangedListener : virtual public RefBase {
400e0dac50fSopenharmony_cipublic:
401e0dac50fSopenharmony_ci    /**
402e0dac50fSopenharmony_ci     * @brief Notify caller when PiP State changed.
403e0dac50fSopenharmony_ci     *
404e0dac50fSopenharmony_ci     * @param bundleName the name of the bundle in PiP state changed.
405e0dac50fSopenharmony_ci     * @param isForeground the state of the bundle in PiP State.
406e0dac50fSopenharmony_ci     */
407e0dac50fSopenharmony_ci    virtual void OnPiPStateChanged(const std::string& bundleName, bool isForeground) = 0;
408e0dac50fSopenharmony_ci};
409e0dac50fSopenharmony_ci
410e0dac50fSopenharmony_ci/**
411e0dac50fSopenharmony_ci * @class WindowManager
412e0dac50fSopenharmony_ci *
413e0dac50fSopenharmony_ci * @brief WindowManager used to manage window.
414e0dac50fSopenharmony_ci */
415e0dac50fSopenharmony_ciclass WindowManager {
416e0dac50fSopenharmony_ciWM_DECLARE_SINGLE_INSTANCE_BASE(WindowManager);
417e0dac50fSopenharmony_cifriend class WindowManagerAgent;
418e0dac50fSopenharmony_cifriend class WMSDeathRecipient;
419e0dac50fSopenharmony_cifriend class SSMDeathRecipient;
420e0dac50fSopenharmony_cipublic:
421e0dac50fSopenharmony_ci    /**
422e0dac50fSopenharmony_ci     * @brief Register WMS connection status changed listener.
423e0dac50fSopenharmony_ci     * @attention Callable only by u0 system user. A process only supports successful registration once.
424e0dac50fSopenharmony_ci     * When the foundation service restarts, you need to re-register the listener.
425e0dac50fSopenharmony_ci     * If you want to re-register, please call UnregisterWMSConnectionChangedListener first.
426e0dac50fSopenharmony_ci     *
427e0dac50fSopenharmony_ci     * @param listener IWMSConnectionChangedListener.
428e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
429e0dac50fSopenharmony_ci     */
430e0dac50fSopenharmony_ci    WMError RegisterWMSConnectionChangedListener(const sptr<IWMSConnectionChangedListener>& listener);
431e0dac50fSopenharmony_ci    /**
432e0dac50fSopenharmony_ci     * @brief Unregister WMS connection status changed listener.
433e0dac50fSopenharmony_ci     * @attention Callable only by u0 system user.
434e0dac50fSopenharmony_ci     *
435e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
436e0dac50fSopenharmony_ci     */
437e0dac50fSopenharmony_ci    WMError UnregisterWMSConnectionChangedListener();
438e0dac50fSopenharmony_ci    /**
439e0dac50fSopenharmony_ci     * @brief Register focus changed listener.
440e0dac50fSopenharmony_ci     *
441e0dac50fSopenharmony_ci     * @param listener IFocusChangedListener.
442e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
443e0dac50fSopenharmony_ci     */
444e0dac50fSopenharmony_ci    WMError RegisterFocusChangedListener(const sptr<IFocusChangedListener>& listener);
445e0dac50fSopenharmony_ci    /**
446e0dac50fSopenharmony_ci     * @brief Unregister focus changed listener.
447e0dac50fSopenharmony_ci     *
448e0dac50fSopenharmony_ci     * @param listener IFocusChangedListener.
449e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
450e0dac50fSopenharmony_ci     */
451e0dac50fSopenharmony_ci    WMError UnregisterFocusChangedListener(const sptr<IFocusChangedListener>& listener);
452e0dac50fSopenharmony_ci    /**
453e0dac50fSopenharmony_ci     * @brief Register window mode listener.
454e0dac50fSopenharmony_ci     *
455e0dac50fSopenharmony_ci     * @param listener IWindowModeChangedListener.
456e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
457e0dac50fSopenharmony_ci     */
458e0dac50fSopenharmony_ci    WMError RegisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener);
459e0dac50fSopenharmony_ci    /**
460e0dac50fSopenharmony_ci     * @brief Unregister window mode listener.
461e0dac50fSopenharmony_ci     *
462e0dac50fSopenharmony_ci     * @param listener IWindowModeChangedListener.
463e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
464e0dac50fSopenharmony_ci     */
465e0dac50fSopenharmony_ci    WMError UnregisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener);
466e0dac50fSopenharmony_ci    /**
467e0dac50fSopenharmony_ci     * @brief Get window mode type.
468e0dac50fSopenharmony_ci     *
469e0dac50fSopenharmony_ci     * @param void
470e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
471e0dac50fSopenharmony_ci     */
472e0dac50fSopenharmony_ci    WMError GetWindowModeType(WindowModeType& windowModeType) const;
473e0dac50fSopenharmony_ci    /**
474e0dac50fSopenharmony_ci     * @brief Register system bar changed listener.
475e0dac50fSopenharmony_ci     *
476e0dac50fSopenharmony_ci     * @param listener ISystemBarChangedListener.
477e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
478e0dac50fSopenharmony_ci     */
479e0dac50fSopenharmony_ci    WMError RegisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener);
480e0dac50fSopenharmony_ci    /**
481e0dac50fSopenharmony_ci     * @brief Unregister system bar changed listener.
482e0dac50fSopenharmony_ci     *
483e0dac50fSopenharmony_ci     * @param listener ISystemBarChangedListener.
484e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
485e0dac50fSopenharmony_ci     */
486e0dac50fSopenharmony_ci    WMError UnregisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener);
487e0dac50fSopenharmony_ci    /**
488e0dac50fSopenharmony_ci     * @brief Register window updated listener.
489e0dac50fSopenharmony_ci     *
490e0dac50fSopenharmony_ci     * @param listener IWindowUpdateListener.
491e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
492e0dac50fSopenharmony_ci     */
493e0dac50fSopenharmony_ci    WMError RegisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener);
494e0dac50fSopenharmony_ci    /**
495e0dac50fSopenharmony_ci     * @brief Unregister window updated listener.
496e0dac50fSopenharmony_ci     *
497e0dac50fSopenharmony_ci     * @param listener IWindowUpdateListener.
498e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
499e0dac50fSopenharmony_ci     */
500e0dac50fSopenharmony_ci    WMError UnregisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener);
501e0dac50fSopenharmony_ci    /**
502e0dac50fSopenharmony_ci     * @brief Register visibility changed listener.
503e0dac50fSopenharmony_ci     *
504e0dac50fSopenharmony_ci     * @param listener IVisibilityChangedListener.
505e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
506e0dac50fSopenharmony_ci     */
507e0dac50fSopenharmony_ci    WMError RegisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener);
508e0dac50fSopenharmony_ci    /**
509e0dac50fSopenharmony_ci     * @brief Unregister visibility changed listener.
510e0dac50fSopenharmony_ci     *
511e0dac50fSopenharmony_ci     * @param listener IVisibilityChangedListener.
512e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
513e0dac50fSopenharmony_ci     */
514e0dac50fSopenharmony_ci    WMError UnregisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener);
515e0dac50fSopenharmony_ci    /**
516e0dac50fSopenharmony_ci * @brief Register drawingcontent changed listener.
517e0dac50fSopenharmony_ci *
518e0dac50fSopenharmony_ci * @param listener IDrawingContentChangedListener.
519e0dac50fSopenharmony_ci * @return WM_OK means register success, others means register failed.
520e0dac50fSopenharmony_ci */
521e0dac50fSopenharmony_ci    WMError RegisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener);
522e0dac50fSopenharmony_ci
523e0dac50fSopenharmony_ci    /**
524e0dac50fSopenharmony_ci     * @brief Unregister drawingcontent changed listener.
525e0dac50fSopenharmony_ci     *
526e0dac50fSopenharmony_ci     * @param listener IDrawingContentChangedListener.
527e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
528e0dac50fSopenharmony_ci     */
529e0dac50fSopenharmony_ci    WMError UnregisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener);
530e0dac50fSopenharmony_ci
531e0dac50fSopenharmony_ci    /**
532e0dac50fSopenharmony_ci     * @brief Register camera float window changed listener.
533e0dac50fSopenharmony_ci     *
534e0dac50fSopenharmony_ci     * @param listener ICameraFloatWindowChangedListener.
535e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
536e0dac50fSopenharmony_ci     */
537e0dac50fSopenharmony_ci    WMError RegisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener>& listener);
538e0dac50fSopenharmony_ci    /**
539e0dac50fSopenharmony_ci     * @brief Unregister camera float window changed listener.
540e0dac50fSopenharmony_ci     *
541e0dac50fSopenharmony_ci     * @param listener ICameraFloatWindowChangedListener.
542e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
543e0dac50fSopenharmony_ci     */
544e0dac50fSopenharmony_ci    WMError UnregisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener>& listener);
545e0dac50fSopenharmony_ci    /**
546e0dac50fSopenharmony_ci     * @brief Register water mark flag changed listener.
547e0dac50fSopenharmony_ci     *
548e0dac50fSopenharmony_ci     * @param listener IWaterMarkFlagChangedListener.
549e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
550e0dac50fSopenharmony_ci     */
551e0dac50fSopenharmony_ci    WMError RegisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener);
552e0dac50fSopenharmony_ci    /**
553e0dac50fSopenharmony_ci     * @brief Unregister water mark flag changed listener.
554e0dac50fSopenharmony_ci     *
555e0dac50fSopenharmony_ci     * @param listener IWaterMarkFlagChangedListener.
556e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
557e0dac50fSopenharmony_ci     */
558e0dac50fSopenharmony_ci    WMError UnregisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener);
559e0dac50fSopenharmony_ci    /**
560e0dac50fSopenharmony_ci     * @brief Register gesture navigation enabled changed listener.
561e0dac50fSopenharmony_ci     *
562e0dac50fSopenharmony_ci     * @param listener IGestureNavigationEnabledChangedListener.
563e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
564e0dac50fSopenharmony_ci     */
565e0dac50fSopenharmony_ci    WMError RegisterGestureNavigationEnabledChangedListener(
566e0dac50fSopenharmony_ci        const sptr<IGestureNavigationEnabledChangedListener>& listener);
567e0dac50fSopenharmony_ci    /**
568e0dac50fSopenharmony_ci     * @brief Unregister gesture navigation enabled changed listener.
569e0dac50fSopenharmony_ci     *
570e0dac50fSopenharmony_ci     * @param listener IGestureNavigationEnabledChangedListener.
571e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
572e0dac50fSopenharmony_ci     */
573e0dac50fSopenharmony_ci    WMError UnregisterGestureNavigationEnabledChangedListener(
574e0dac50fSopenharmony_ci        const sptr<IGestureNavigationEnabledChangedListener>& listener);
575e0dac50fSopenharmony_ci
576e0dac50fSopenharmony_ci    /**
577e0dac50fSopenharmony_ci     * @brief register display information changed listener.
578e0dac50fSopenharmony_ci     *
579e0dac50fSopenharmony_ci     * @param token token of ability.
580e0dac50fSopenharmony_ci     * @param listener IDisplayInfoChangedListener.
581e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
582e0dac50fSopenharmony_ci     */
583e0dac50fSopenharmony_ci    WMError RegisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token,
584e0dac50fSopenharmony_ci        const sptr<IDisplayInfoChangedListener>& listener);
585e0dac50fSopenharmony_ci
586e0dac50fSopenharmony_ci    /**
587e0dac50fSopenharmony_ci     * @brief unregister display info changed listener.Before the ability is destroyed, the
588e0dac50fSopenharmony_ci     * UnregisterDisplayInfoChangedListener interface must be invoked.
589e0dac50fSopenharmony_ci     * Otherwise, the sptr token may be destroyed abnormally.
590e0dac50fSopenharmony_ci     *
591e0dac50fSopenharmony_ci     * @param token token of ability.
592e0dac50fSopenharmony_ci     * @param listener IDisplayInfoChangedListener.
593e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
594e0dac50fSopenharmony_ci     */
595e0dac50fSopenharmony_ci    WMError UnregisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token,
596e0dac50fSopenharmony_ci        const sptr<IDisplayInfoChangedListener>& listener);
597e0dac50fSopenharmony_ci
598e0dac50fSopenharmony_ci    /**
599e0dac50fSopenharmony_ci     * @brief Register window in same pid visibility changed listener.
600e0dac50fSopenharmony_ci     * @caller SA
601e0dac50fSopenharmony_ci     * @permission SA permission
602e0dac50fSopenharmony_ci     *
603e0dac50fSopenharmony_ci     * @param listener IWindowPidVisibilityChangedListener.
604e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
605e0dac50fSopenharmony_ci     */
606e0dac50fSopenharmony_ci    WMError RegisterWindowPidVisibilityChangedListener(const sptr<IWindowPidVisibilityChangedListener>& listener);
607e0dac50fSopenharmony_ci
608e0dac50fSopenharmony_ci    /**
609e0dac50fSopenharmony_ci     * @brief Unregister window in same pid visibility changed listener.
610e0dac50fSopenharmony_ci     *
611e0dac50fSopenharmony_ci     * @param listener IWindowPidVisibilityChangedListener.
612e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
613e0dac50fSopenharmony_ci     */
614e0dac50fSopenharmony_ci    WMError UnregisterWindowPidVisibilityChangedListener(const sptr<IWindowPidVisibilityChangedListener>& listener);
615e0dac50fSopenharmony_ci
616e0dac50fSopenharmony_ci    /**
617e0dac50fSopenharmony_ci     * @brief notify display information change.
618e0dac50fSopenharmony_ci     *
619e0dac50fSopenharmony_ci     * @param token ability token.
620e0dac50fSopenharmony_ci     * @param displayid ID of the display where the main window of the ability is located
621e0dac50fSopenharmony_ci     * @param density density of the display where the main window of the ability is located.
622e0dac50fSopenharmony_ci     * @param orientation orientation of the display where the main window of the ability is located.
623e0dac50fSopenharmony_ci     * @return WM_OK means notify success, others means notify failed.
624e0dac50fSopenharmony_ci    */
625e0dac50fSopenharmony_ci    WMError NotifyDisplayInfoChange(const sptr<IRemoteObject>& token, DisplayId displayId,
626e0dac50fSopenharmony_ci        float density, DisplayOrientation orientation);
627e0dac50fSopenharmony_ci
628e0dac50fSopenharmony_ci    /**
629e0dac50fSopenharmony_ci     * @brief Minimize all app window.
630e0dac50fSopenharmony_ci     *
631e0dac50fSopenharmony_ci     * @param displayId Display id.
632e0dac50fSopenharmony_ci     * @return WM_OK means minimize success, others means minimize failed.
633e0dac50fSopenharmony_ci     */
634e0dac50fSopenharmony_ci    WMError MinimizeAllAppWindows(DisplayId displayId);
635e0dac50fSopenharmony_ci    /**
636e0dac50fSopenharmony_ci     * @brief Toggle all app windows to the foreground.
637e0dac50fSopenharmony_ci     *
638e0dac50fSopenharmony_ci     * @return WM_OK means toggle success, others means toggle failed.
639e0dac50fSopenharmony_ci     */
640e0dac50fSopenharmony_ci    WMError ToggleShownStateForAllAppWindows();
641e0dac50fSopenharmony_ci    /**
642e0dac50fSopenharmony_ci     * @brief Set window layout mode.
643e0dac50fSopenharmony_ci     *
644e0dac50fSopenharmony_ci     * @param mode Window layout mode.
645e0dac50fSopenharmony_ci     * @return WM_OK means set success, others means set failed.
646e0dac50fSopenharmony_ci     */
647e0dac50fSopenharmony_ci    WMError SetWindowLayoutMode(WindowLayoutMode mode);
648e0dac50fSopenharmony_ci    /**
649e0dac50fSopenharmony_ci     * @brief Get accessibility window info.
650e0dac50fSopenharmony_ci     *
651e0dac50fSopenharmony_ci     * @param infos WindowInfos used for Accessibility.
652e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
653e0dac50fSopenharmony_ci     */
654e0dac50fSopenharmony_ci    WMError GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos) const;
655e0dac50fSopenharmony_ci    /**
656e0dac50fSopenharmony_ci     * @brief Get unreliable window info.
657e0dac50fSopenharmony_ci     *
658e0dac50fSopenharmony_ci     * @param infos Unreliable Window Info.
659e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
660e0dac50fSopenharmony_ci     */
661e0dac50fSopenharmony_ci    WMError GetUnreliableWindowInfo(int32_t windowId,
662e0dac50fSopenharmony_ci        std::vector<sptr<UnreliableWindowInfo>>& infos) const;
663e0dac50fSopenharmony_ci    /**
664e0dac50fSopenharmony_ci     * @brief Get visibility window info.
665e0dac50fSopenharmony_ci     *
666e0dac50fSopenharmony_ci     * @param infos Visible window infos
667e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
668e0dac50fSopenharmony_ci     */
669e0dac50fSopenharmony_ci    WMError GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos) const;
670e0dac50fSopenharmony_ci    /**
671e0dac50fSopenharmony_ci     * @brief Set gesture navigation enabled.
672e0dac50fSopenharmony_ci     *
673e0dac50fSopenharmony_ci     * @param enable True means set gesture on, false means set gesture off.
674e0dac50fSopenharmony_ci     * @return WM_OK means set success, others means set failed.
675e0dac50fSopenharmony_ci     */
676e0dac50fSopenharmony_ci    WMError SetGestureNavigationEnabled(bool enable) const;
677e0dac50fSopenharmony_ci
678e0dac50fSopenharmony_ci    /**
679e0dac50fSopenharmony_ci     * @brief Get focus window.
680e0dac50fSopenharmony_ci     *
681e0dac50fSopenharmony_ci     * @param focusInfo Focus window info.
682e0dac50fSopenharmony_ci     * @return FocusChangeInfo object about focus window.
683e0dac50fSopenharmony_ci     */
684e0dac50fSopenharmony_ci    void GetFocusWindowInfo(FocusChangeInfo& focusInfo);
685e0dac50fSopenharmony_ci
686e0dac50fSopenharmony_ci    /**
687e0dac50fSopenharmony_ci     * @brief Dump all session info
688e0dac50fSopenharmony_ci     *
689e0dac50fSopenharmony_ci     * @param infos session infos
690e0dac50fSopenharmony_ci     * @return WM_OK means set success, others means set failed.
691e0dac50fSopenharmony_ci     */
692e0dac50fSopenharmony_ci    WMError DumpSessionAll(std::vector<std::string>& infos);
693e0dac50fSopenharmony_ci
694e0dac50fSopenharmony_ci    /**
695e0dac50fSopenharmony_ci     * @brief Dump session info with id
696e0dac50fSopenharmony_ci     *
697e0dac50fSopenharmony_ci     * @param infos session infos
698e0dac50fSopenharmony_ci     * @return WM_OK means set success, others means set failed.
699e0dac50fSopenharmony_ci     */
700e0dac50fSopenharmony_ci    WMError DumpSessionWithId(int32_t persistentId, std::vector<std::string>& infos);
701e0dac50fSopenharmony_ci
702e0dac50fSopenharmony_ci    /**
703e0dac50fSopenharmony_ci     * @brief Get uiContent remote object
704e0dac50fSopenharmony_ci     *
705e0dac50fSopenharmony_ci     * @param windowId windowId
706e0dac50fSopenharmony_ci     * @param uiContentRemoteObj uiContentRemoteObj
707e0dac50fSopenharmony_ci     * @return WM_OK if successfully retrieved uiContentRemoteObj
708e0dac50fSopenharmony_ci     */
709e0dac50fSopenharmony_ci    WMError GetUIContentRemoteObj(int32_t windowId, sptr<IRemoteObject>& uiContentRemoteObj);
710e0dac50fSopenharmony_ci
711e0dac50fSopenharmony_ci    /**
712e0dac50fSopenharmony_ci     * @brief raise window to top by windowId
713e0dac50fSopenharmony_ci     *
714e0dac50fSopenharmony_ci     * @param persistentId this window to raise
715e0dac50fSopenharmony_ci     * @return WM_OK if raise success
716e0dac50fSopenharmony_ci     */
717e0dac50fSopenharmony_ci    WMError RaiseWindowToTop(int32_t persistentId);
718e0dac50fSopenharmony_ci
719e0dac50fSopenharmony_ci    /**
720e0dac50fSopenharmony_ci     * @brief notify window extension visibility change
721e0dac50fSopenharmony_ci     *
722e0dac50fSopenharmony_ci     * @param pid process id
723e0dac50fSopenharmony_ci     * @param uid user id
724e0dac50fSopenharmony_ci     * @param visible visibility
725e0dac50fSopenharmony_ci     * @return WM_OK means notify success, others means notify failed.
726e0dac50fSopenharmony_ci    */
727e0dac50fSopenharmony_ci    WMError NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible);
728e0dac50fSopenharmony_ci
729e0dac50fSopenharmony_ci    /**
730e0dac50fSopenharmony_ci     * @brief Shift window focus within the same application. Only main window and subwindow.
731e0dac50fSopenharmony_ci     *
732e0dac50fSopenharmony_ci     * @param sourcePersistentId Window id which the focus shift from
733e0dac50fSopenharmony_ci     * @param targetPersistentId Window id which the focus shift to
734e0dac50fSopenharmony_ci     * @return WM_OK means shift window focus success, others means failed.
735e0dac50fSopenharmony_ci    */
736e0dac50fSopenharmony_ci    WMError ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId);
737e0dac50fSopenharmony_ci
738e0dac50fSopenharmony_ci    /**
739e0dac50fSopenharmony_ci     * @brief Get snapshot by window id.
740e0dac50fSopenharmony_ci     *
741e0dac50fSopenharmony_ci     * @param windowId Window id which want to snapshot.
742e0dac50fSopenharmony_ci     * @param pixelMap Snapshot output pixel map.
743e0dac50fSopenharmony_ci     * @return WM_OK means get snapshot success, others means failed.
744e0dac50fSopenharmony_ci    */
745e0dac50fSopenharmony_ci    WMError GetSnapshotByWindowId(int32_t windowId, std::shared_ptr<Media::PixelMap>& pixelMap);
746e0dac50fSopenharmony_ci
747e0dac50fSopenharmony_ci    /**
748e0dac50fSopenharmony_ci     * @brief Register visible main window num changed listener.
749e0dac50fSopenharmony_ci     *
750e0dac50fSopenharmony_ci     * @param listener IVisibleWindowNumChangedListener.
751e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
752e0dac50fSopenharmony_ci     */
753e0dac50fSopenharmony_ci    WMError RegisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener);
754e0dac50fSopenharmony_ci    /**
755e0dac50fSopenharmony_ci     * @brief Unregister visible main window num changed listener.
756e0dac50fSopenharmony_ci     *
757e0dac50fSopenharmony_ci     * @param listener IVisibleWindowNumChangedListener.
758e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
759e0dac50fSopenharmony_ci     */
760e0dac50fSopenharmony_ci    WMError UnregisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener);
761e0dac50fSopenharmony_ci
762e0dac50fSopenharmony_ci    /**
763e0dac50fSopenharmony_ci     * @brief Register WindowStyle changed listener.
764e0dac50fSopenharmony_ci     *
765e0dac50fSopenharmony_ci     * @param listener IWindowStyleChangedListener
766e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means unregister failed.
767e0dac50fSopenharmony_ci     */
768e0dac50fSopenharmony_ci    WMError RegisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener);
769e0dac50fSopenharmony_ci
770e0dac50fSopenharmony_ci    /**
771e0dac50fSopenharmony_ci    * @brief Unregister WindowStyle changed listener.
772e0dac50fSopenharmony_ci    *
773e0dac50fSopenharmony_ci    * @param listener IWindowStyleChangedListener
774e0dac50fSopenharmony_ci    * @return WM_OK means unregister success, others means unregister failed.
775e0dac50fSopenharmony_ci    */
776e0dac50fSopenharmony_ci    WMError UnregisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener);
777e0dac50fSopenharmony_ci
778e0dac50fSopenharmony_ci    /**
779e0dac50fSopenharmony_ci     * @brief Skip Snapshot for app process.
780e0dac50fSopenharmony_ci     *
781e0dac50fSopenharmony_ci     * @param pid process id
782e0dac50fSopenharmony_ci     * @param skip True means skip, false means not skip.
783e0dac50fSopenharmony_ci     * @return WM_OK means snapshot skip success, others means snapshot skip failed.
784e0dac50fSopenharmony_ci     */
785e0dac50fSopenharmony_ci    WMError SkipSnapshotForAppProcess(int32_t pid, bool skip);
786e0dac50fSopenharmony_ci
787e0dac50fSopenharmony_ci    /**
788e0dac50fSopenharmony_ci     * @brief Get window style type.
789e0dac50fSopenharmony_ci     *
790e0dac50fSopenharmony_ci     * @param windowStyleType WindowType
791e0dac50fSopenharmony_ci     * @return @return WM_OK means get window style success, others means failed.
792e0dac50fSopenharmony_ci     */
793e0dac50fSopenharmony_ci    WindowStyleType GetWindowStyleType();
794e0dac50fSopenharmony_ci
795e0dac50fSopenharmony_ci    /**
796e0dac50fSopenharmony_ci     * @brief set process watermark.
797e0dac50fSopenharmony_ci     *
798e0dac50fSopenharmony_ci     * @param pid pid
799e0dac50fSopenharmony_ci     * @param watermarkName watermark picture name
800e0dac50fSopenharmony_ci     * @param isEnabled add or remove
801e0dac50fSopenharmony_ci     * @return @return WM_OK means set process watermark success, others means failed.
802e0dac50fSopenharmony_ci     */
803e0dac50fSopenharmony_ci    WMError SetProcessWatermark(int32_t pid, const std::string& watermarkName, bool isEnabled);
804e0dac50fSopenharmony_ci
805e0dac50fSopenharmony_ci    /**
806e0dac50fSopenharmony_ci     * @brief Get window ids by coordinate.
807e0dac50fSopenharmony_ci     *
808e0dac50fSopenharmony_ci     * @param displayId display id
809e0dac50fSopenharmony_ci     * @param windowNumber indicates the number of query windows
810e0dac50fSopenharmony_ci     * @param x x-coordinate of the window
811e0dac50fSopenharmony_ci     * @param y y-coordinate of the window
812e0dac50fSopenharmony_ci     * @param windowIds array of window id
813e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
814e0dac50fSopenharmony_ci     */
815e0dac50fSopenharmony_ci    WMError GetWindowIdsByCoordinate(DisplayId displayId, int32_t windowNumber,
816e0dac50fSopenharmony_ci        int32_t x, int32_t y, std::vector<int32_t>& windowIds) const;
817e0dac50fSopenharmony_ci
818e0dac50fSopenharmony_ci    /**
819e0dac50fSopenharmony_ci     * @brief Release screen lock of foreground sessions.
820e0dac50fSopenharmony_ci     *
821e0dac50fSopenharmony_ci     * @return WM_OK means release success, others means failed.
822e0dac50fSopenharmony_ci     */
823e0dac50fSopenharmony_ci    WMError ReleaseForegroundSessionScreenLock();
824e0dac50fSopenharmony_ci
825e0dac50fSopenharmony_ciprivate:
826e0dac50fSopenharmony_ci    WindowManager();
827e0dac50fSopenharmony_ci    ~WindowManager();
828e0dac50fSopenharmony_ci    std::recursive_mutex mutex_;
829e0dac50fSopenharmony_ci    class Impl;
830e0dac50fSopenharmony_ci    std::unique_ptr<Impl> pImpl_;
831e0dac50fSopenharmony_ci    bool destroyed_ = false;
832e0dac50fSopenharmony_ci
833e0dac50fSopenharmony_ci    void OnWMSConnectionChanged(int32_t userId, int32_t screenId, bool isConnected) const;
834e0dac50fSopenharmony_ci    void UpdateFocusStatus(uint32_t windowId, const sptr<IRemoteObject>& abilityToken, WindowType windowType,
835e0dac50fSopenharmony_ci        DisplayId displayId, bool focused) const;
836e0dac50fSopenharmony_ci    void UpdateFocusChangeInfo(const sptr<FocusChangeInfo>& focusChangeInfo, bool focused) const;
837e0dac50fSopenharmony_ci    void UpdateWindowModeTypeInfo(WindowModeType type) const;
838e0dac50fSopenharmony_ci    void UpdateSystemBarRegionTints(DisplayId displayId, const SystemBarRegionTints& tints) const;
839e0dac50fSopenharmony_ci    void NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos,
840e0dac50fSopenharmony_ci        WindowUpdateType type) const;
841e0dac50fSopenharmony_ci    void UpdateWindowVisibilityInfo(
842e0dac50fSopenharmony_ci        const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos) const;
843e0dac50fSopenharmony_ci    void UpdateWindowDrawingContentInfo(
844e0dac50fSopenharmony_ci        const std::vector<sptr<WindowDrawingContentInfo>>& windowDrawingContentInfos) const;
845e0dac50fSopenharmony_ci    void UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing) const;
846e0dac50fSopenharmony_ci    void NotifyWaterMarkFlagChangedResult(bool showWaterMark) const;
847e0dac50fSopenharmony_ci    void NotifyGestureNavigationEnabledResult(bool enable) const;
848e0dac50fSopenharmony_ci    void UpdateVisibleWindowNum(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo);
849e0dac50fSopenharmony_ci    WMError NotifyWindowStyleChange(WindowStyleType type);
850e0dac50fSopenharmony_ci    void NotifyWindowPidVisibilityChanged(const sptr<WindowPidVisibilityInfo>& info) const;
851e0dac50fSopenharmony_ci};
852e0dac50fSopenharmony_ci} // namespace Rosen
853e0dac50fSopenharmony_ci} // namespace OHOS
854e0dac50fSopenharmony_ci
855e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_WINDOW_MANAGER_H
856