1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 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_WINDOW_MANAGER_LITE_H
17e0dac50fSopenharmony_ci#define OHOS_ROSEN_WINDOW_MANAGER_LITE_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <iremote_object.h>
20e0dac50fSopenharmony_ci#include <memory>
21e0dac50fSopenharmony_ci#include <mutex>
22e0dac50fSopenharmony_ci#include <refbase.h>
23e0dac50fSopenharmony_ci#include <vector>
24e0dac50fSopenharmony_ci#include "focus_change_info.h"
25e0dac50fSopenharmony_ci#include "window_drawing_content_info.h"
26e0dac50fSopenharmony_ci#include "window_manager.h"
27e0dac50fSopenharmony_ci#include "window_visibility_info.h"
28e0dac50fSopenharmony_ci#include "wm_common.h"
29e0dac50fSopenharmony_ci#include "wm_single_instance.h"
30e0dac50fSopenharmony_ci
31e0dac50fSopenharmony_cinamespace OHOS {
32e0dac50fSopenharmony_cinamespace Rosen {
33e0dac50fSopenharmony_ci/**
34e0dac50fSopenharmony_ci * @class WindowManagerLite
35e0dac50fSopenharmony_ci *
36e0dac50fSopenharmony_ci * @brief WindowManagerLite used to manage window.
37e0dac50fSopenharmony_ci */
38e0dac50fSopenharmony_ciclass WindowManagerLite {
39e0dac50fSopenharmony_ciWM_DECLARE_SINGLE_INSTANCE_BASE(WindowManagerLite);
40e0dac50fSopenharmony_cifriend class WindowManagerAgentLite;
41e0dac50fSopenharmony_cifriend class WMSDeathRecipient;
42e0dac50fSopenharmony_cifriend class SSMDeathRecipient;
43e0dac50fSopenharmony_cipublic:
44e0dac50fSopenharmony_ci    /**
45e0dac50fSopenharmony_ci     * @brief Register focus changed listener.
46e0dac50fSopenharmony_ci     *
47e0dac50fSopenharmony_ci     * @param listener IFocusChangedListener.
48e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
49e0dac50fSopenharmony_ci     */
50e0dac50fSopenharmony_ci    WMError RegisterFocusChangedListener(const sptr<IFocusChangedListener>& listener);
51e0dac50fSopenharmony_ci    /**
52e0dac50fSopenharmony_ci     * @brief Unregister focus changed listener.
53e0dac50fSopenharmony_ci     *
54e0dac50fSopenharmony_ci     * @param listener IFocusChangedListener.
55e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
56e0dac50fSopenharmony_ci     */
57e0dac50fSopenharmony_ci    WMError UnregisterFocusChangedListener(const sptr<IFocusChangedListener>& listener);
58e0dac50fSopenharmony_ci    /**
59e0dac50fSopenharmony_ci     * @brief Register visibility changed listener.
60e0dac50fSopenharmony_ci     *
61e0dac50fSopenharmony_ci     * @param listener IVisibilityChangedListener.
62e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
63e0dac50fSopenharmony_ci     */
64e0dac50fSopenharmony_ci    WMError RegisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener);
65e0dac50fSopenharmony_ci    /**
66e0dac50fSopenharmony_ci     * @brief Unregister visibility changed listener.
67e0dac50fSopenharmony_ci     *
68e0dac50fSopenharmony_ci     * @param listener IVisibilityChangedListener.
69e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
70e0dac50fSopenharmony_ci     */
71e0dac50fSopenharmony_ci    WMError UnregisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener);
72e0dac50fSopenharmony_ci    /**
73e0dac50fSopenharmony_ci     * @brief Get visibility window info.
74e0dac50fSopenharmony_ci     *
75e0dac50fSopenharmony_ci     * @param infos Visible window infos
76e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
77e0dac50fSopenharmony_ci     */
78e0dac50fSopenharmony_ci    WMError GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos) const;
79e0dac50fSopenharmony_ci    /**
80e0dac50fSopenharmony_ci     * @brief Get focus window.
81e0dac50fSopenharmony_ci     *
82e0dac50fSopenharmony_ci     * @param focusInfo Focus window info.
83e0dac50fSopenharmony_ci     * @return FocusChangeInfo object about focus window.
84e0dac50fSopenharmony_ci     */
85e0dac50fSopenharmony_ci    void GetFocusWindowInfo(FocusChangeInfo& focusInfo);
86e0dac50fSopenharmony_ci    /**
87e0dac50fSopenharmony_ci    * @brief Register drawingcontent changed listener.
88e0dac50fSopenharmony_ci    *
89e0dac50fSopenharmony_ci    * @param listener IDrawingContentChangedListener.
90e0dac50fSopenharmony_ci    * @return WM_OK means register success, others means register failed.
91e0dac50fSopenharmony_ci    */
92e0dac50fSopenharmony_ci    WMError RegisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener);
93e0dac50fSopenharmony_ci
94e0dac50fSopenharmony_ci    /**
95e0dac50fSopenharmony_ci     * @brief Unregister drawingcontent changed listener.
96e0dac50fSopenharmony_ci     *
97e0dac50fSopenharmony_ci     * @param listener IDrawingContentChangedListener.
98e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
99e0dac50fSopenharmony_ci     */
100e0dac50fSopenharmony_ci    WMError UnregisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener);
101e0dac50fSopenharmony_ci    /**
102e0dac50fSopenharmony_ci     * @brief Register window mode listener.
103e0dac50fSopenharmony_ci     *
104e0dac50fSopenharmony_ci     * @param listener IWindowModeChangedListener.
105e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
106e0dac50fSopenharmony_ci     */
107e0dac50fSopenharmony_ci    WMError RegisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener);
108e0dac50fSopenharmony_ci    /**
109e0dac50fSopenharmony_ci     * @brief Unregister window mode listener.
110e0dac50fSopenharmony_ci     *
111e0dac50fSopenharmony_ci     * @param listener IWindowModeChangedListener.
112e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
113e0dac50fSopenharmony_ci     */
114e0dac50fSopenharmony_ci    WMError UnregisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener);
115e0dac50fSopenharmony_ci
116e0dac50fSopenharmony_ci    /**
117e0dac50fSopenharmony_ci    * @brief Register camera window changed listener.
118e0dac50fSopenharmony_ci    *
119e0dac50fSopenharmony_ci    * @param listener ICameraWindowChangedListener.
120e0dac50fSopenharmony_ci    * @return WM_OK means register success, others means register failed.
121e0dac50fSopenharmony_ci    */
122e0dac50fSopenharmony_ci    WMError RegisterCameraWindowChangedListener(const sptr<ICameraWindowChangedListener>& listener);
123e0dac50fSopenharmony_ci
124e0dac50fSopenharmony_ci    /**
125e0dac50fSopenharmony_ci   * @brief Unregister camera window changed listener.
126e0dac50fSopenharmony_ci   *
127e0dac50fSopenharmony_ci   * @param listener ICameraWindowChangedListener.
128e0dac50fSopenharmony_ci   * @return WM_OK means unregister success, others means unregister failed.
129e0dac50fSopenharmony_ci   */
130e0dac50fSopenharmony_ci    WMError UnregisterCameraWindowChangedListener(const sptr<ICameraWindowChangedListener>& listener);
131e0dac50fSopenharmony_ci
132e0dac50fSopenharmony_ci    /**
133e0dac50fSopenharmony_ci     * @brief Get window mode type.
134e0dac50fSopenharmony_ci     *
135e0dac50fSopenharmony_ci     * @param void
136e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
137e0dac50fSopenharmony_ci     */
138e0dac50fSopenharmony_ci    WMError GetWindowModeType(WindowModeType& windowModeType) const;
139e0dac50fSopenharmony_ci
140e0dac50fSopenharmony_ci    /**
141e0dac50fSopenharmony_ci     * @brief Get top num main window info.
142e0dac50fSopenharmony_ci     *
143e0dac50fSopenharmony_ci     * @param topNum the num of top window
144e0dac50fSopenharmony_ci     * @param topNInfo the top num window infos
145e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
146e0dac50fSopenharmony_ci     */
147e0dac50fSopenharmony_ci    WMError GetMainWindowInfos(int32_t topNum, std::vector<MainWindowInfo>& topNInfo);
148e0dac50fSopenharmony_ci
149e0dac50fSopenharmony_ci    /**
150e0dac50fSopenharmony_ci     * @brief Get all main window info.
151e0dac50fSopenharmony_ci     *
152e0dac50fSopenharmony_ci     * @param infos the all main window info.
153e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
154e0dac50fSopenharmony_ci     */
155e0dac50fSopenharmony_ci    WMError GetAllMainWindowInfos(std::vector<MainWindowInfo>& infos) const;
156e0dac50fSopenharmony_ci
157e0dac50fSopenharmony_ci    /**
158e0dac50fSopenharmony_ci     * @brief Clear a specified set of sessions.
159e0dac50fSopenharmony_ci     *
160e0dac50fSopenharmony_ci     * @param persistentIds a vector of session persistentId.
161e0dac50fSopenharmony_ci     * @return WM_OK means clear session success, others means clear failed.
162e0dac50fSopenharmony_ci     */
163e0dac50fSopenharmony_ci    WMError ClearMainSessions(const std::vector<int32_t>& persistentIds);
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ci    /**
166e0dac50fSopenharmony_ci     * @brief Clear a specified set of sessions.
167e0dac50fSopenharmony_ci     *
168e0dac50fSopenharmony_ci     * @param persistentIds a vector of session persistentId.
169e0dac50fSopenharmony_ci     * @param clearFailedIds a vector of session persistentId which is clear failed.
170e0dac50fSopenharmony_ci     * @return WM_OK means clear session success, others means clear failed.
171e0dac50fSopenharmony_ci     */
172e0dac50fSopenharmony_ci    WMError ClearMainSessions(const std::vector<int32_t>& persistentIds, std::vector<int32_t>& clearFailedIds);
173e0dac50fSopenharmony_ci
174e0dac50fSopenharmony_ci    /**
175e0dac50fSopenharmony_ci     * @brief raise window to top by windowId
176e0dac50fSopenharmony_ci     *
177e0dac50fSopenharmony_ci     * @param persistentId this window to raise
178e0dac50fSopenharmony_ci     * @return WM_OK if raise success
179e0dac50fSopenharmony_ci     */
180e0dac50fSopenharmony_ci    WMError RaiseWindowToTop(int32_t persistentId);
181e0dac50fSopenharmony_ci
182e0dac50fSopenharmony_ci    /**
183e0dac50fSopenharmony_ci     * @brief Register WMS connection status changed listener.
184e0dac50fSopenharmony_ci     * @attention Callable only by u0 system user. A process only supports successful registration once.
185e0dac50fSopenharmony_ci     * When the foundation service restarts, you need to re-register the listener.
186e0dac50fSopenharmony_ci     * If you want to re-register, please call UnregisterWMSConnectionChangedListener first.
187e0dac50fSopenharmony_ci     *
188e0dac50fSopenharmony_ci     * @param listener IWMSConnectionChangedListener.
189e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
190e0dac50fSopenharmony_ci     */
191e0dac50fSopenharmony_ci    WMError RegisterWMSConnectionChangedListener(const sptr<IWMSConnectionChangedListener>& listener);
192e0dac50fSopenharmony_ci
193e0dac50fSopenharmony_ci    /**
194e0dac50fSopenharmony_ci     * @brief Unregister WMS connection status changed listener.
195e0dac50fSopenharmony_ci     * @attention Callable only by u0 system user.
196e0dac50fSopenharmony_ci     *
197e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
198e0dac50fSopenharmony_ci     */
199e0dac50fSopenharmony_ci    WMError UnregisterWMSConnectionChangedListener();
200e0dac50fSopenharmony_ci
201e0dac50fSopenharmony_ci    /**
202e0dac50fSopenharmony_ci     * @brief Register WindowStyle changed listener.
203e0dac50fSopenharmony_ci     *
204e0dac50fSopenharmony_ci     * @param listener IWindowStyleChangedListener
205e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means unregister failed.
206e0dac50fSopenharmony_ci     */
207e0dac50fSopenharmony_ci    WMError RegisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener);
208e0dac50fSopenharmony_ci    /**
209e0dac50fSopenharmony_ci    * @brief Unregister WindowStyle changed listener.
210e0dac50fSopenharmony_ci    *
211e0dac50fSopenharmony_ci    * @param listener IWindowStyleChangedListener
212e0dac50fSopenharmony_ci    * @return WM_OK means unregister success, others means unregister failed.
213e0dac50fSopenharmony_ci    */
214e0dac50fSopenharmony_ci    WMError UnregisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener);
215e0dac50fSopenharmony_ci    /**
216e0dac50fSopenharmony_ci     * @brief Get window style type.
217e0dac50fSopenharmony_ci     *
218e0dac50fSopenharmony_ci     * @param windowStyleType WindowType
219e0dac50fSopenharmony_ci     * @return @return WM_OK means get window style success, others means failed.
220e0dac50fSopenharmony_ci     */
221e0dac50fSopenharmony_ci    WindowStyleType GetWindowStyleType();
222e0dac50fSopenharmony_ci
223e0dac50fSopenharmony_ci    /**
224e0dac50fSopenharmony_ci     * @brief Terminate session by persistentId and start caller.
225e0dac50fSopenharmony_ci     * @persistentId persistentId to be terminated.
226e0dac50fSopenharmony_ci     *
227e0dac50fSopenharmony_ci     * @return WM_OK means Terminate success, others means Terminate failed.
228e0dac50fSopenharmony_ci     */
229e0dac50fSopenharmony_ci    WMError TerminateSessionByPersistentId(int32_t persistentId);
230e0dac50fSopenharmony_ci
231e0dac50fSopenharmony_ci    /**
232e0dac50fSopenharmony_ci     * @brief Close target float window.
233e0dac50fSopenharmony_ci     *
234e0dac50fSopenharmony_ci     * @param bundleName the target float window need to be closed.
235e0dac50fSopenharmony_ci     * @return WM_OK means Close success, others means Close failed.
236e0dac50fSopenharmony_ci     */
237e0dac50fSopenharmony_ci    WMError CloseTargetFloatWindow(const std::string& bundleName);
238e0dac50fSopenharmony_ci
239e0dac50fSopenharmony_ci    /**
240e0dac50fSopenharmony_ci     * @brief Register listener for PiP window state changed.
241e0dac50fSopenharmony_ci     *
242e0dac50fSopenharmony_ci     * @param listener the PiP state changed listener.
243e0dac50fSopenharmony_ci     * @return WM_OK means Register success, others means Register failed.
244e0dac50fSopenharmony_ci     */
245e0dac50fSopenharmony_ci    WMError RegisterPiPStateChangedListener(const sptr<IPiPStateChangedListener>& listener);
246e0dac50fSopenharmony_ci
247e0dac50fSopenharmony_ci    /**
248e0dac50fSopenharmony_ci     * @brief Unregister listener for PiP window state changed.
249e0dac50fSopenharmony_ci     *
250e0dac50fSopenharmony_ci     * @param listener the PiP state changed listener.
251e0dac50fSopenharmony_ci     * @return WM_OK means Unregister success, others means Unregister failed.
252e0dac50fSopenharmony_ci     */
253e0dac50fSopenharmony_ci    WMError UnregisterPiPStateChangedListener(const sptr<IPiPStateChangedListener>& listener);
254e0dac50fSopenharmony_ci
255e0dac50fSopenharmony_ci    /**
256e0dac50fSopenharmony_ci     * @brief Close target PiP Window by bundleName.
257e0dac50fSopenharmony_ci     *
258e0dac50fSopenharmony_ci     * @param bundleName the target PiP Window need to be closed.
259e0dac50fSopenharmony_ci     * @return WM_OK means Close success, others means Close failed.
260e0dac50fSopenharmony_ci     */
261e0dac50fSopenharmony_ci    WMError CloseTargetPiPWindow(const std::string& bundleName);
262e0dac50fSopenharmony_ci
263e0dac50fSopenharmony_ci    /**
264e0dac50fSopenharmony_ci     * @brief Get current show PiP Window info.
265e0dac50fSopenharmony_ci     *
266e0dac50fSopenharmony_ci     * @param bundleName the current PiP window bundleName.
267e0dac50fSopenharmony_ci     * @return WM_OK means Get success, others means Get failed.
268e0dac50fSopenharmony_ci     */
269e0dac50fSopenharmony_ci    WMError GetCurrentPiPWindowInfo(std::string& bundleName);
270e0dac50fSopenharmony_ci
271e0dac50fSopenharmony_ci    /**
272e0dac50fSopenharmony_ci     * @brief Get accessibility window info.
273e0dac50fSopenharmony_ci     *
274e0dac50fSopenharmony_ci     * @param infos WindowInfos used for Accessibility.
275e0dac50fSopenharmony_ci     * @return WM_OK means get success, others means get failed.
276e0dac50fSopenharmony_ci     */
277e0dac50fSopenharmony_ci    WMError GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos) const;
278e0dac50fSopenharmony_ci
279e0dac50fSopenharmony_ci    /**
280e0dac50fSopenharmony_ci     * @brief Register window updated listener.
281e0dac50fSopenharmony_ci     *
282e0dac50fSopenharmony_ci     * @param listener IWindowUpdateListener.
283e0dac50fSopenharmony_ci     * @return WM_OK means register success, others means register failed.
284e0dac50fSopenharmony_ci     */
285e0dac50fSopenharmony_ci    WMError RegisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener);
286e0dac50fSopenharmony_ci
287e0dac50fSopenharmony_ci    /**
288e0dac50fSopenharmony_ci     * @brief Unregister window updated listener.
289e0dac50fSopenharmony_ci     *
290e0dac50fSopenharmony_ci     * @param listener IWindowUpdateListener.
291e0dac50fSopenharmony_ci     * @return WM_OK means unregister success, others means unregister failed.
292e0dac50fSopenharmony_ci     */
293e0dac50fSopenharmony_ci    WMError UnregisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener);
294e0dac50fSopenharmony_ci
295e0dac50fSopenharmony_ciprivate:
296e0dac50fSopenharmony_ci    WindowManagerLite();
297e0dac50fSopenharmony_ci    ~WindowManagerLite();
298e0dac50fSopenharmony_ci    std::recursive_mutex mutex_;
299e0dac50fSopenharmony_ci    class Impl;
300e0dac50fSopenharmony_ci    std::unique_ptr<Impl> pImpl_;
301e0dac50fSopenharmony_ci    bool destroyed_ = false;
302e0dac50fSopenharmony_ci
303e0dac50fSopenharmony_ci    void UpdateFocusStatus(uint32_t windowId, const sptr<IRemoteObject>& abilityToken, WindowType windowType,
304e0dac50fSopenharmony_ci        DisplayId displayId, bool focused) const;
305e0dac50fSopenharmony_ci    void UpdateFocusChangeInfo(const sptr<FocusChangeInfo>& focusChangeInfo, bool focused) const;
306e0dac50fSopenharmony_ci    void UpdateWindowVisibilityInfo(
307e0dac50fSopenharmony_ci        const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos) const;
308e0dac50fSopenharmony_ci    void UpdateWindowDrawingContentInfo(
309e0dac50fSopenharmony_ci        const std::vector<sptr<WindowDrawingContentInfo>>& windowDrawingContentInfos) const;
310e0dac50fSopenharmony_ci    void UpdateWindowModeTypeInfo(WindowModeType type) const;
311e0dac50fSopenharmony_ci    void UpdateCameraWindowStatus(uint32_t accessTokenId, bool isShowing) const;
312e0dac50fSopenharmony_ci    void UpdatePiPWindowStateChanged(const std::string& bundleName, bool isForeground) const;
313e0dac50fSopenharmony_ci    void OnRemoteDied();
314e0dac50fSopenharmony_ci    void OnWMSConnectionChanged(int32_t userId, int32_t screenId, bool isConnected) const;
315e0dac50fSopenharmony_ci    WMError NotifyWindowStyleChange(WindowStyleType type);
316e0dac50fSopenharmony_ci    void NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos,
317e0dac50fSopenharmony_ci        WindowUpdateType type) const;
318e0dac50fSopenharmony_ci};
319e0dac50fSopenharmony_ci} // namespace Rosen
320e0dac50fSopenharmony_ci} // namespace OHOS
321e0dac50fSopenharmony_ci
322e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_WINDOW_MANAGER_LITE_H
323