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