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 FOUNDATION_DM_DISPLAY_MANAGER_H 17e0dac50fSopenharmony_ci#define FOUNDATION_DM_DISPLAY_MANAGER_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <vector> 20e0dac50fSopenharmony_ci#include <mutex> 21e0dac50fSopenharmony_ci#include <ipc_skeleton.h> 22e0dac50fSopenharmony_ci#include <pixel_map.h> 23e0dac50fSopenharmony_ci#include <set> 24e0dac50fSopenharmony_ci 25e0dac50fSopenharmony_ci#include "display.h" 26e0dac50fSopenharmony_ci#include "dm_common.h" 27e0dac50fSopenharmony_ci#include "fold_screen_info.h" 28e0dac50fSopenharmony_ci#include "wm_single_instance.h" 29e0dac50fSopenharmony_ci#include "screenshot_info.h" 30e0dac50fSopenharmony_ci#include "display_change_info.h" 31e0dac50fSopenharmony_ci 32e0dac50fSopenharmony_cinamespace OHOS::Rosen { 33e0dac50fSopenharmony_ciclass DisplayManager { 34e0dac50fSopenharmony_ciWM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManager); 35e0dac50fSopenharmony_cifriend class DMSDeathRecipient; 36e0dac50fSopenharmony_cipublic: 37e0dac50fSopenharmony_ci class IDisplayListener : public virtual RefBase { 38e0dac50fSopenharmony_ci public: 39e0dac50fSopenharmony_ci /** 40e0dac50fSopenharmony_ci * @brief Notify when a new display is created. 41e0dac50fSopenharmony_ci */ 42e0dac50fSopenharmony_ci virtual void OnCreate(DisplayId) = 0; 43e0dac50fSopenharmony_ci 44e0dac50fSopenharmony_ci /** 45e0dac50fSopenharmony_ci * @brief Notify when the display is destroyed. 46e0dac50fSopenharmony_ci */ 47e0dac50fSopenharmony_ci virtual void OnDestroy(DisplayId) = 0; 48e0dac50fSopenharmony_ci 49e0dac50fSopenharmony_ci /** 50e0dac50fSopenharmony_ci * @brief Notify when the state of a display changes 51e0dac50fSopenharmony_ci */ 52e0dac50fSopenharmony_ci virtual void OnChange(DisplayId) = 0; 53e0dac50fSopenharmony_ci }; 54e0dac50fSopenharmony_ci 55e0dac50fSopenharmony_ci class IScreenshotListener : public virtual RefBase { 56e0dac50fSopenharmony_ci public: 57e0dac50fSopenharmony_ci /** 58e0dac50fSopenharmony_ci * @brief Notify when a screenshot event occurs. 59e0dac50fSopenharmony_ci * 60e0dac50fSopenharmony_ci * @param info Screenshot info. 61e0dac50fSopenharmony_ci */ 62e0dac50fSopenharmony_ci virtual void OnScreenshot([[maybe_unused]]const ScreenshotInfo info) {} 63e0dac50fSopenharmony_ci }; 64e0dac50fSopenharmony_ci 65e0dac50fSopenharmony_ci class IPrivateWindowListener : public virtual RefBase { 66e0dac50fSopenharmony_ci public: 67e0dac50fSopenharmony_ci /** 68e0dac50fSopenharmony_ci * @brief Monitor whether the existence of privacy window has changed. 69e0dac50fSopenharmony_ci * 70e0dac50fSopenharmony_ci * @param hasPrivate True means the display has private window, false means the opposite. 71e0dac50fSopenharmony_ci */ 72e0dac50fSopenharmony_ci virtual void OnPrivateWindow([[maybe_unused]]bool hasPrivate) {} 73e0dac50fSopenharmony_ci }; 74e0dac50fSopenharmony_ci 75e0dac50fSopenharmony_ci class IPrivateWindowListChangeListener : public virtual RefBase { 76e0dac50fSopenharmony_ci public: 77e0dac50fSopenharmony_ci /** 78e0dac50fSopenharmony_ci * @brief Monitor whether the existence of privacy window list has changed. 79e0dac50fSopenharmony_ci * 80e0dac50fSopenharmony_ci * @param displayId Id of the target display. 81e0dac50fSopenharmony_ci * 82e0dac50fSopenharmony_ci * @param privacyWindowList privacywindow bundlename list of the target display. 83e0dac50fSopenharmony_ci */ 84e0dac50fSopenharmony_ci virtual void OnPrivateWindowListChange([[maybe_unused]]DisplayId displayId, 85e0dac50fSopenharmony_ci [[maybe_unused]]std::vector<std::string> privacyWindowList) {} 86e0dac50fSopenharmony_ci 87e0dac50fSopenharmony_ci /** 88e0dac50fSopenharmony_ci * @brief only for UT to compare privacy window list. 89e0dac50fSopenharmony_ci * 90e0dac50fSopenharmony_ci * @param callback callback. 91e0dac50fSopenharmony_ci */ 92e0dac50fSopenharmony_ci virtual void setCallback([[maybe_unused]]std::function<void(std::vector<std::string>)> callback) {} 93e0dac50fSopenharmony_ci private: 94e0dac50fSopenharmony_ci std::function<void(std::vector<std::string>)> callback_; 95e0dac50fSopenharmony_ci }; 96e0dac50fSopenharmony_ci 97e0dac50fSopenharmony_ci class IFoldStatusListener : public virtual RefBase { 98e0dac50fSopenharmony_ci public: 99e0dac50fSopenharmony_ci /** 100e0dac50fSopenharmony_ci * @brief Notify listeners when screen fold status changed. 101e0dac50fSopenharmony_ci * 102e0dac50fSopenharmony_ci * @param foldStatus Screen foldStatus. 103e0dac50fSopenharmony_ci */ 104e0dac50fSopenharmony_ci virtual void OnFoldStatusChanged([[maybe_unused]]FoldStatus foldStatus) {} 105e0dac50fSopenharmony_ci }; 106e0dac50fSopenharmony_ci 107e0dac50fSopenharmony_ci class IFoldAngleListener : public virtual RefBase { 108e0dac50fSopenharmony_ci public: 109e0dac50fSopenharmony_ci /** 110e0dac50fSopenharmony_ci * @brief Notify listeners when screen fold angles changed. 111e0dac50fSopenharmony_ci * 112e0dac50fSopenharmony_ci * @param foldAngles Screen fold angles array. 113e0dac50fSopenharmony_ci */ 114e0dac50fSopenharmony_ci virtual void OnFoldAngleChanged([[maybe_unused]]std::vector<float> foldAngles) {} 115e0dac50fSopenharmony_ci }; 116e0dac50fSopenharmony_ci 117e0dac50fSopenharmony_ci class ICaptureStatusListener : public virtual RefBase { 118e0dac50fSopenharmony_ci public: 119e0dac50fSopenharmony_ci /** 120e0dac50fSopenharmony_ci * @brief Notify listeners when screen capture status changed. 121e0dac50fSopenharmony_ci * 122e0dac50fSopenharmony_ci * @param isCapture Screen capture status. 123e0dac50fSopenharmony_ci */ 124e0dac50fSopenharmony_ci virtual void OnCaptureStatusChanged([[maybe_unused]]bool isCapture) {} 125e0dac50fSopenharmony_ci }; 126e0dac50fSopenharmony_ci 127e0dac50fSopenharmony_ci class IDisplayUpdateListener : public virtual RefBase { 128e0dac50fSopenharmony_ci public: 129e0dac50fSopenharmony_ci /** 130e0dac50fSopenharmony_ci * @brief Notify listeners when session change display. 131e0dac50fSopenharmony_ci * 132e0dac50fSopenharmony_ci * @param infos DisplayChangeInfo. 133e0dac50fSopenharmony_ci */ 134e0dac50fSopenharmony_ci virtual void OnDisplayUpdate([[maybe_unused]]const sptr<DisplayChangeInfo>& info) {} 135e0dac50fSopenharmony_ci }; 136e0dac50fSopenharmony_ci 137e0dac50fSopenharmony_ci class IDisplayModeListener : public virtual RefBase { 138e0dac50fSopenharmony_ci public: 139e0dac50fSopenharmony_ci /** 140e0dac50fSopenharmony_ci * @brief Notify listeners when display mode changed. 141e0dac50fSopenharmony_ci * 142e0dac50fSopenharmony_ci * @param displayMode DisplayMode. 143e0dac50fSopenharmony_ci */ 144e0dac50fSopenharmony_ci virtual void OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode) {} 145e0dac50fSopenharmony_ci }; 146e0dac50fSopenharmony_ci 147e0dac50fSopenharmony_ci class IAvailableAreaListener : public virtual RefBase { 148e0dac50fSopenharmony_ci public: 149e0dac50fSopenharmony_ci /** 150e0dac50fSopenharmony_ci * @brief Notify listeners when available area changed. 151e0dac50fSopenharmony_ci * 152e0dac50fSopenharmony_ci * @param DMRect area. 153e0dac50fSopenharmony_ci */ 154e0dac50fSopenharmony_ci virtual void OnAvailableAreaChanged(DMRect area) {} 155e0dac50fSopenharmony_ci }; 156e0dac50fSopenharmony_ci 157e0dac50fSopenharmony_ci /** 158e0dac50fSopenharmony_ci * @brief Obtain all displays. 159e0dac50fSopenharmony_ci * 160e0dac50fSopenharmony_ci * @return All displays. 161e0dac50fSopenharmony_ci */ 162e0dac50fSopenharmony_ci std::vector<sptr<Display>> GetAllDisplays(); 163e0dac50fSopenharmony_ci 164e0dac50fSopenharmony_ci /** 165e0dac50fSopenharmony_ci * @brief Obtain the id of the default display. 166e0dac50fSopenharmony_ci * 167e0dac50fSopenharmony_ci * @return Default display id. 168e0dac50fSopenharmony_ci */ 169e0dac50fSopenharmony_ci DisplayId GetDefaultDisplayId(); 170e0dac50fSopenharmony_ci 171e0dac50fSopenharmony_ci /** 172e0dac50fSopenharmony_ci * @brief Get the default display object. 173e0dac50fSopenharmony_ci * 174e0dac50fSopenharmony_ci * @return Default display object. 175e0dac50fSopenharmony_ci */ 176e0dac50fSopenharmony_ci sptr<Display> GetDefaultDisplay(); 177e0dac50fSopenharmony_ci 178e0dac50fSopenharmony_ci /** 179e0dac50fSopenharmony_ci * @brief Get the default display object by means of sync. 180e0dac50fSopenharmony_ci * 181e0dac50fSopenharmony_ci * @return Default display id. 182e0dac50fSopenharmony_ci */ 183e0dac50fSopenharmony_ci sptr<Display> GetDefaultDisplaySync(bool isFromNapi = false); 184e0dac50fSopenharmony_ci 185e0dac50fSopenharmony_ci /** 186e0dac50fSopenharmony_ci * @brief Get the display object by id. 187e0dac50fSopenharmony_ci * 188e0dac50fSopenharmony_ci * @param displayId Id of the target display. 189e0dac50fSopenharmony_ci * @return Default display object. 190e0dac50fSopenharmony_ci */ 191e0dac50fSopenharmony_ci sptr<Display> GetDisplayById(DisplayId displayId); 192e0dac50fSopenharmony_ci 193e0dac50fSopenharmony_ci /** 194e0dac50fSopenharmony_ci * @brief Get the display object by corresponding screenId. 195e0dac50fSopenharmony_ci * 196e0dac50fSopenharmony_ci * @param screenId The id of the target screen. 197e0dac50fSopenharmony_ci * @return Display object. 198e0dac50fSopenharmony_ci */ 199e0dac50fSopenharmony_ci sptr<Display> GetDisplayByScreen(ScreenId screenId); 200e0dac50fSopenharmony_ci 201e0dac50fSopenharmony_ci /** 202e0dac50fSopenharmony_ci * @brief Get IDs of all displays. 203e0dac50fSopenharmony_ci * 204e0dac50fSopenharmony_ci * @return All display IDs. 205e0dac50fSopenharmony_ci */ 206e0dac50fSopenharmony_ci std::vector<DisplayId> GetAllDisplayIds(); 207e0dac50fSopenharmony_ci 208e0dac50fSopenharmony_ci /** 209e0dac50fSopenharmony_ci * @brief Get whether the target display contains privacy windows. 210e0dac50fSopenharmony_ci * 211e0dac50fSopenharmony_ci * @param displayId Display id. 212e0dac50fSopenharmony_ci * @param hasPrivateWindow True means display has private window, false means the opposite. 213e0dac50fSopenharmony_ci * @return DM_OK means query privacy success, others means query failed. 214e0dac50fSopenharmony_ci */ 215e0dac50fSopenharmony_ci DMError HasPrivateWindow(DisplayId displayId, bool& hasPrivateWindow); 216e0dac50fSopenharmony_ci 217e0dac50fSopenharmony_ci /** 218e0dac50fSopenharmony_ci * @brief Get screenshot of the target display. 219e0dac50fSopenharmony_ci * 220e0dac50fSopenharmony_ci * @param displayId Display id. 221e0dac50fSopenharmony_ci * @param errorCode error code. 222e0dac50fSopenharmony_ci * @return PixelMap object of screenshot. 223e0dac50fSopenharmony_ci */ 224e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId, DmErrorCode* errorCode = nullptr); 225e0dac50fSopenharmony_ci 226e0dac50fSopenharmony_ci /** 227e0dac50fSopenharmony_ci * @brief Get screenshot by user select area. 228e0dac50fSopenharmony_ci * 229e0dac50fSopenharmony_ci * @param rect user select area. 230e0dac50fSopenharmony_ci * @param errorCode error code. 231e0dac50fSopenharmony_ci * @return PixelMap object of screenshot. 232e0dac50fSopenharmony_ci */ 233e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> GetSnapshotByPicker(Media::Rect &rect, DmErrorCode* errorCode = nullptr); 234e0dac50fSopenharmony_ci 235e0dac50fSopenharmony_ci /** 236e0dac50fSopenharmony_ci * @brief Get screenshot of the target display. 237e0dac50fSopenharmony_ci * 238e0dac50fSopenharmony_ci * @param displayId Display id. 239e0dac50fSopenharmony_ci * @param rect Rect of screenshot. 240e0dac50fSopenharmony_ci * @param size Size of screenshot. 241e0dac50fSopenharmony_ci * @param rotation Parameter of rotation. 242e0dac50fSopenharmony_ci * @param errorCode error code. 243e0dac50fSopenharmony_ci * @return PixelMap object of screenshot. 244e0dac50fSopenharmony_ci */ 245e0dac50fSopenharmony_ci std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId, const Media::Rect &rect, 246e0dac50fSopenharmony_ci const Media::Size &size, int rotation, DmErrorCode* errorCode = nullptr); 247e0dac50fSopenharmony_ci 248e0dac50fSopenharmony_ci /** 249e0dac50fSopenharmony_ci * @brief Begin to wake up screen. 250e0dac50fSopenharmony_ci * 251e0dac50fSopenharmony_ci * @param reason Reason for power state change. 252e0dac50fSopenharmony_ci * @return True means begin success, false means begin failed. 253e0dac50fSopenharmony_ci */ 254e0dac50fSopenharmony_ci bool WakeUpBegin(PowerStateChangeReason reason); 255e0dac50fSopenharmony_ci 256e0dac50fSopenharmony_ci /** 257e0dac50fSopenharmony_ci * @brief Wake up screen end. 258e0dac50fSopenharmony_ci * 259e0dac50fSopenharmony_ci * @return True means end success, false means end failed. 260e0dac50fSopenharmony_ci */ 261e0dac50fSopenharmony_ci bool WakeUpEnd(); 262e0dac50fSopenharmony_ci 263e0dac50fSopenharmony_ci /** 264e0dac50fSopenharmony_ci * @brief Begin to suspend the screen. 265e0dac50fSopenharmony_ci * 266e0dac50fSopenharmony_ci * @param reason Reason for power state change. 267e0dac50fSopenharmony_ci * @return True means begin success, false means begin failed. 268e0dac50fSopenharmony_ci */ 269e0dac50fSopenharmony_ci bool SuspendBegin(PowerStateChangeReason reason); 270e0dac50fSopenharmony_ci 271e0dac50fSopenharmony_ci /** 272e0dac50fSopenharmony_ci * @brief Suspend screen end. 273e0dac50fSopenharmony_ci * 274e0dac50fSopenharmony_ci * @return True means suspend screen end success. 275e0dac50fSopenharmony_ci * @return False means suspend screen end failed. 276e0dac50fSopenharmony_ci */ 277e0dac50fSopenharmony_ci bool SuspendEnd(); 278e0dac50fSopenharmony_ci 279e0dac50fSopenharmony_ci /** 280e0dac50fSopenharmony_ci * @brief Get id of internal screen. 281e0dac50fSopenharmony_ci * 282e0dac50fSopenharmony_ci * @return Internal screen id. 283e0dac50fSopenharmony_ci */ 284e0dac50fSopenharmony_ci ScreenId GetInternalScreenId(); 285e0dac50fSopenharmony_ci 286e0dac50fSopenharmony_ci /** 287e0dac50fSopenharmony_ci * @brief Set the screen power state by screen id. 288e0dac50fSopenharmony_ci * 289e0dac50fSopenharmony_ci * @param screenId Screen id. 290e0dac50fSopenharmony_ci * @param state Screen power state. 291e0dac50fSopenharmony_ci * @param reason Reason for power state change. 292e0dac50fSopenharmony_ci * @return True means set success, false means set failed. 293e0dac50fSopenharmony_ci */ 294e0dac50fSopenharmony_ci bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason); 295e0dac50fSopenharmony_ci 296e0dac50fSopenharmony_ci /** 297e0dac50fSopenharmony_ci * @brief Set the Display State object 298e0dac50fSopenharmony_ci * 299e0dac50fSopenharmony_ci * @param state State of display. 300e0dac50fSopenharmony_ci * @param callback Callback for display state. 301e0dac50fSopenharmony_ci * @return True means set success, false means set failed. 302e0dac50fSopenharmony_ci */ 303e0dac50fSopenharmony_ci bool SetDisplayState(DisplayState state, DisplayStateCallback callback); 304e0dac50fSopenharmony_ci 305e0dac50fSopenharmony_ci /** 306e0dac50fSopenharmony_ci * @brief Get the state of the target display. 307e0dac50fSopenharmony_ci * 308e0dac50fSopenharmony_ci * @param displayId Display id. 309e0dac50fSopenharmony_ci * @return State of display. 310e0dac50fSopenharmony_ci */ 311e0dac50fSopenharmony_ci DisplayState GetDisplayState(DisplayId displayId); 312e0dac50fSopenharmony_ci 313e0dac50fSopenharmony_ci /** 314e0dac50fSopenharmony_ci * @brief Try to cancel screenoff action before display power off. 315e0dac50fSopenharmony_ci * 316e0dac50fSopenharmony_ci * @return True means cancel screenoff action success. 317e0dac50fSopenharmony_ci * @return False means cancel screenoff action failed. 318e0dac50fSopenharmony_ci */ 319e0dac50fSopenharmony_ci bool TryToCancelScreenOff(); 320e0dac50fSopenharmony_ci 321e0dac50fSopenharmony_ci /** 322e0dac50fSopenharmony_ci * @brief Set the brightness level of the target screen. 323e0dac50fSopenharmony_ci * 324e0dac50fSopenharmony_ci * @param screenId Target screen. 325e0dac50fSopenharmony_ci * @param level Brightness level. 326e0dac50fSopenharmony_ci */ 327e0dac50fSopenharmony_ci bool SetScreenBrightness(uint64_t screenId, uint32_t level); 328e0dac50fSopenharmony_ci 329e0dac50fSopenharmony_ci /** 330e0dac50fSopenharmony_ci * @brief Get the brightness level of the target screen. 331e0dac50fSopenharmony_ci * 332e0dac50fSopenharmony_ci * @param screenId Screen id. 333e0dac50fSopenharmony_ci * @return Brightness value of screen. 334e0dac50fSopenharmony_ci */ 335e0dac50fSopenharmony_ci uint32_t GetScreenBrightness(uint64_t screenId) const; 336e0dac50fSopenharmony_ci 337e0dac50fSopenharmony_ci /** 338e0dac50fSopenharmony_ci * @brief Notify when events of certain types occur. 339e0dac50fSopenharmony_ci * 340e0dac50fSopenharmony_ci * @param event Enumerate value of DisplayEvent. 341e0dac50fSopenharmony_ci */ 342e0dac50fSopenharmony_ci void NotifyDisplayEvent(DisplayEvent event); 343e0dac50fSopenharmony_ci 344e0dac50fSopenharmony_ci /** 345e0dac50fSopenharmony_ci * @brief Freeze target displays. 346e0dac50fSopenharmony_ci * 347e0dac50fSopenharmony_ci * @param displayIds Display id needed to freeze. 348e0dac50fSopenharmony_ci * @return True means freeze success, false means freeze failed. 349e0dac50fSopenharmony_ci */ 350e0dac50fSopenharmony_ci bool Freeze(std::vector<DisplayId> displayIds); 351e0dac50fSopenharmony_ci 352e0dac50fSopenharmony_ci /** 353e0dac50fSopenharmony_ci * @brief Unfreeze target displays. 354e0dac50fSopenharmony_ci * 355e0dac50fSopenharmony_ci * @param displayIds Display id needed to unfreeze. 356e0dac50fSopenharmony_ci * @return True means unfreeze success, false means unfreeze failed. 357e0dac50fSopenharmony_ci */ 358e0dac50fSopenharmony_ci bool Unfreeze(std::vector<DisplayId> displayIds); 359e0dac50fSopenharmony_ci 360e0dac50fSopenharmony_ci /** 361e0dac50fSopenharmony_ci * @brief Register a display listener. 362e0dac50fSopenharmony_ci * 363e0dac50fSopenharmony_ci * @param listener IDisplayListener. 364e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 365e0dac50fSopenharmony_ci */ 366e0dac50fSopenharmony_ci DMError RegisterDisplayListener(sptr<IDisplayListener> listener); 367e0dac50fSopenharmony_ci 368e0dac50fSopenharmony_ci /** 369e0dac50fSopenharmony_ci * @brief Unregister an existed display listener. 370e0dac50fSopenharmony_ci * 371e0dac50fSopenharmony_ci * @param listener IDisplayListener. 372e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 373e0dac50fSopenharmony_ci */ 374e0dac50fSopenharmony_ci DMError UnregisterDisplayListener(sptr<IDisplayListener> listener); 375e0dac50fSopenharmony_ci 376e0dac50fSopenharmony_ci /** 377e0dac50fSopenharmony_ci * @brief Register a listener for display power events. 378e0dac50fSopenharmony_ci * 379e0dac50fSopenharmony_ci * @param listener IDisplayPowerEventListener. 380e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 381e0dac50fSopenharmony_ci */ 382e0dac50fSopenharmony_ci DMError RegisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener); 383e0dac50fSopenharmony_ci 384e0dac50fSopenharmony_ci /** 385e0dac50fSopenharmony_ci * @brief Unregister an existed listener for display power events. 386e0dac50fSopenharmony_ci * 387e0dac50fSopenharmony_ci * @param listener IDisplayPowerEventListener. 388e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 389e0dac50fSopenharmony_ci */ 390e0dac50fSopenharmony_ci DMError UnregisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener); 391e0dac50fSopenharmony_ci 392e0dac50fSopenharmony_ci /** 393e0dac50fSopenharmony_ci * @brief Register a listener for screenshot event. 394e0dac50fSopenharmony_ci * 395e0dac50fSopenharmony_ci * @param listener IScreenshotListener. 396e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 397e0dac50fSopenharmony_ci */ 398e0dac50fSopenharmony_ci DMError RegisterScreenshotListener(sptr<IScreenshotListener> listener); 399e0dac50fSopenharmony_ci 400e0dac50fSopenharmony_ci /** 401e0dac50fSopenharmony_ci * @brief Unregister an existed listener for screenshot event. 402e0dac50fSopenharmony_ci * 403e0dac50fSopenharmony_ci * @param listener IScreenshotListener. 404e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 405e0dac50fSopenharmony_ci */ 406e0dac50fSopenharmony_ci DMError UnregisterScreenshotListener(sptr<IScreenshotListener> listener); 407e0dac50fSopenharmony_ci 408e0dac50fSopenharmony_ci /** 409e0dac50fSopenharmony_ci * @brief Register a listener for the event of private window. 410e0dac50fSopenharmony_ci * 411e0dac50fSopenharmony_ci * @param listener IPrivateWindowListener. 412e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 413e0dac50fSopenharmony_ci */ 414e0dac50fSopenharmony_ci DMError RegisterPrivateWindowListener(sptr<IPrivateWindowListener> listener); 415e0dac50fSopenharmony_ci 416e0dac50fSopenharmony_ci /** 417e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of private window. 418e0dac50fSopenharmony_ci * 419e0dac50fSopenharmony_ci * @param listener IPrivateWindowListener. 420e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 421e0dac50fSopenharmony_ci */ 422e0dac50fSopenharmony_ci DMError UnregisterPrivateWindowListener(sptr<IPrivateWindowListener> listener); 423e0dac50fSopenharmony_ci 424e0dac50fSopenharmony_ci /** 425e0dac50fSopenharmony_ci * @brief Register a listener for the event of private window. 426e0dac50fSopenharmony_ci * 427e0dac50fSopenharmony_ci * @param listener IPrivateWindowListChangeListener. 428e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 429e0dac50fSopenharmony_ci */ 430e0dac50fSopenharmony_ci DMError RegisterPrivateWindowListChangeListener(sptr<IPrivateWindowListChangeListener> listener); 431e0dac50fSopenharmony_ci 432e0dac50fSopenharmony_ci /** 433e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of private window. 434e0dac50fSopenharmony_ci * 435e0dac50fSopenharmony_ci * @param listener IPrivateWindowListChangeListener. 436e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 437e0dac50fSopenharmony_ci */ 438e0dac50fSopenharmony_ci DMError UnregisterPrivateWindowListChangeListener(sptr<IPrivateWindowListChangeListener> listener); 439e0dac50fSopenharmony_ci 440e0dac50fSopenharmony_ci /** 441e0dac50fSopenharmony_ci * @brief Register a listener for the event of screen fold status changed. 442e0dac50fSopenharmony_ci * 443e0dac50fSopenharmony_ci * @param listener IFoldStatusListener. 444e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 445e0dac50fSopenharmony_ci */ 446e0dac50fSopenharmony_ci DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener); 447e0dac50fSopenharmony_ci 448e0dac50fSopenharmony_ci /** 449e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of screen fold status changed. 450e0dac50fSopenharmony_ci * 451e0dac50fSopenharmony_ci * @param listener IFoldStatusListener. 452e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 453e0dac50fSopenharmony_ci */ 454e0dac50fSopenharmony_ci DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener); 455e0dac50fSopenharmony_ci 456e0dac50fSopenharmony_ci /** 457e0dac50fSopenharmony_ci * @brief Register a listener for the event of screen fold angle changed. 458e0dac50fSopenharmony_ci * 459e0dac50fSopenharmony_ci * @param listener IFoldAngleListener. 460e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 461e0dac50fSopenharmony_ci */ 462e0dac50fSopenharmony_ci DMError RegisterFoldAngleListener(sptr<IFoldAngleListener> listener); 463e0dac50fSopenharmony_ci 464e0dac50fSopenharmony_ci /** 465e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of screen fold angle changed. 466e0dac50fSopenharmony_ci * 467e0dac50fSopenharmony_ci * @param listener IFoldAngleListener. 468e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 469e0dac50fSopenharmony_ci */ 470e0dac50fSopenharmony_ci DMError UnregisterFoldAngleListener(sptr<IFoldAngleListener> listener); 471e0dac50fSopenharmony_ci 472e0dac50fSopenharmony_ci /** 473e0dac50fSopenharmony_ci * @brief Register a listener for the event of screen capture status changed. 474e0dac50fSopenharmony_ci * 475e0dac50fSopenharmony_ci * @param listener ICaptureStatusListener. 476e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 477e0dac50fSopenharmony_ci */ 478e0dac50fSopenharmony_ci DMError RegisterCaptureStatusListener(sptr<ICaptureStatusListener> listener); 479e0dac50fSopenharmony_ci 480e0dac50fSopenharmony_ci /** 481e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of screen capture status changed. 482e0dac50fSopenharmony_ci * 483e0dac50fSopenharmony_ci * @param listener ICaptureStatusListener. 484e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 485e0dac50fSopenharmony_ci */ 486e0dac50fSopenharmony_ci DMError UnregisterCaptureStatusListener(sptr<ICaptureStatusListener> listener); 487e0dac50fSopenharmony_ci 488e0dac50fSopenharmony_ci /** 489e0dac50fSopenharmony_ci * @brief Register an listener when session changed. 490e0dac50fSopenharmony_ci * 491e0dac50fSopenharmony_ci * @param listener IDisplayUpdateListener. 492e0dac50fSopenharmony_ci * @return DM_OK means register success, others means unregister failed. 493e0dac50fSopenharmony_ci */ 494e0dac50fSopenharmony_ci DMError RegisterDisplayUpdateListener(sptr<IDisplayUpdateListener> listener); 495e0dac50fSopenharmony_ci 496e0dac50fSopenharmony_ci /** 497e0dac50fSopenharmony_ci * @brief Unregister an listener when session changed. 498e0dac50fSopenharmony_ci * 499e0dac50fSopenharmony_ci * @param listener IDisplayUpdateListener. 500e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 501e0dac50fSopenharmony_ci */ 502e0dac50fSopenharmony_ci DMError UnregisterDisplayUpdateListener(sptr<IDisplayUpdateListener> listener); 503e0dac50fSopenharmony_ci 504e0dac50fSopenharmony_ci /** 505e0dac50fSopenharmony_ci * @brief Register a listener for the event of display mode changed. 506e0dac50fSopenharmony_ci * 507e0dac50fSopenharmony_ci * @param listener IDisplayModeListener. 508e0dac50fSopenharmony_ci * @return DM_OK means register success, others means register failed. 509e0dac50fSopenharmony_ci */ 510e0dac50fSopenharmony_ci DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener); 511e0dac50fSopenharmony_ci 512e0dac50fSopenharmony_ci /** 513e0dac50fSopenharmony_ci * @brief Unregister an existed listener for the event of display mode changed. 514e0dac50fSopenharmony_ci * 515e0dac50fSopenharmony_ci * @param listener IDisplayModeListener. 516e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 517e0dac50fSopenharmony_ci */ 518e0dac50fSopenharmony_ci DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener); 519e0dac50fSopenharmony_ci 520e0dac50fSopenharmony_ci /** 521e0dac50fSopenharmony_ci * @brief Register a listener for the event of available area changed. 522e0dac50fSopenharmony_ci * 523e0dac50fSopenharmony_ci * @param listener IAvailableAreaListener. 524e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 525e0dac50fSopenharmony_ci */ 526e0dac50fSopenharmony_ci DMError RegisterAvailableAreaListener(sptr<IAvailableAreaListener> listener); 527e0dac50fSopenharmony_ci 528e0dac50fSopenharmony_ci /** 529e0dac50fSopenharmony_ci * @brief UnRegister a listener for the event of available area changed. 530e0dac50fSopenharmony_ci * 531e0dac50fSopenharmony_ci * @param listener IAvailableAreaListener. 532e0dac50fSopenharmony_ci * @return DM_OK means unregister success, others means unregister failed. 533e0dac50fSopenharmony_ci */ 534e0dac50fSopenharmony_ci DMError UnregisterAvailableAreaListener(sptr<IAvailableAreaListener> listener); 535e0dac50fSopenharmony_ci 536e0dac50fSopenharmony_ci /** 537e0dac50fSopenharmony_ci * @brief Add a surface node to the target display. 538e0dac50fSopenharmony_ci * 539e0dac50fSopenharmony_ci * @param displayId Target display. 540e0dac50fSopenharmony_ci * @param surfaceNode SurfaceNode object. 541e0dac50fSopenharmony_ci * @return DM_OK means add success, others means add failed. 542e0dac50fSopenharmony_ci */ 543e0dac50fSopenharmony_ci DMError AddSurfaceNodeToDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode); 544e0dac50fSopenharmony_ci 545e0dac50fSopenharmony_ci /** 546e0dac50fSopenharmony_ci * @brief Remove a surface node from the target display. 547e0dac50fSopenharmony_ci * 548e0dac50fSopenharmony_ci * @param displayId Target display. 549e0dac50fSopenharmony_ci * @param surfaceNode SurfaceNode object. 550e0dac50fSopenharmony_ci * @return DM_OK means remove success, others means remove failed. 551e0dac50fSopenharmony_ci */ 552e0dac50fSopenharmony_ci DMError RemoveSurfaceNodeFromDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode); 553e0dac50fSopenharmony_ci 554e0dac50fSopenharmony_ci /** 555e0dac50fSopenharmony_ci * @brief Check whether the device is foldable. 556e0dac50fSopenharmony_ci * 557e0dac50fSopenharmony_ci * @return true means the device is foldable. 558e0dac50fSopenharmony_ci */ 559e0dac50fSopenharmony_ci bool IsFoldable(); 560e0dac50fSopenharmony_ci 561e0dac50fSopenharmony_ci /** 562e0dac50fSopenharmony_ci * @brief Check whether the device is capture. 563e0dac50fSopenharmony_ci * 564e0dac50fSopenharmony_ci * @return true means the device is capture. 565e0dac50fSopenharmony_ci */ 566e0dac50fSopenharmony_ci bool IsCaptured(); 567e0dac50fSopenharmony_ci 568e0dac50fSopenharmony_ci /** 569e0dac50fSopenharmony_ci * @brief Get the current fold status of the foldable device. 570e0dac50fSopenharmony_ci * 571e0dac50fSopenharmony_ci * @return fold status of device. 572e0dac50fSopenharmony_ci */ 573e0dac50fSopenharmony_ci FoldStatus GetFoldStatus(); 574e0dac50fSopenharmony_ci 575e0dac50fSopenharmony_ci /** 576e0dac50fSopenharmony_ci * @brief Get the display mode of the foldable device. 577e0dac50fSopenharmony_ci * 578e0dac50fSopenharmony_ci * @return display mode of the foldable device. 579e0dac50fSopenharmony_ci */ 580e0dac50fSopenharmony_ci FoldDisplayMode GetFoldDisplayMode(); 581e0dac50fSopenharmony_ci 582e0dac50fSopenharmony_ci /** 583e0dac50fSopenharmony_ci * @brief Change the display mode of the foldable device. 584e0dac50fSopenharmony_ci * 585e0dac50fSopenharmony_ci * @param mode target display mode to change. 586e0dac50fSopenharmony_ci */ 587e0dac50fSopenharmony_ci void SetFoldDisplayMode(const FoldDisplayMode mode); 588e0dac50fSopenharmony_ci 589e0dac50fSopenharmony_ci /** 590e0dac50fSopenharmony_ci * @brief Change the display mode of the foldable device from js. 591e0dac50fSopenharmony_ci * 592e0dac50fSopenharmony_ci * @param mode target display mode to change. 593e0dac50fSopenharmony_ci * @return DM_OK means set success, others means set failed. 594e0dac50fSopenharmony_ci */ 595e0dac50fSopenharmony_ci DMError SetFoldDisplayModeFromJs(const FoldDisplayMode mode); 596e0dac50fSopenharmony_ci 597e0dac50fSopenharmony_ci /** 598e0dac50fSopenharmony_ci * @brief Set display scale. 599e0dac50fSopenharmony_ci * 600e0dac50fSopenharmony_ci * @param screenId screenId used in DisplayManager. 601e0dac50fSopenharmony_ci * @param scaleX screen scale in x axis. 602e0dac50fSopenharmony_ci * @param scaleY screen scale in y axis. 603e0dac50fSopenharmony_ci * @param pivotX screen scale pivot in x axis. 604e0dac50fSopenharmony_ci * @param pivotY screen scale pivot in y axis. 605e0dac50fSopenharmony_ci */ 606e0dac50fSopenharmony_ci void SetDisplayScale(ScreenId screenId, float scaleX, float scaleY, float pivotX, float pivotY); 607e0dac50fSopenharmony_ci 608e0dac50fSopenharmony_ci /** 609e0dac50fSopenharmony_ci * @brief Locked fold status. 610e0dac50fSopenharmony_ci * 611e0dac50fSopenharmony_ci * @param mode locked fold status is locked. 612e0dac50fSopenharmony_ci */ 613e0dac50fSopenharmony_ci void SetFoldStatusLocked(bool locked); 614e0dac50fSopenharmony_ci 615e0dac50fSopenharmony_ci /** 616e0dac50fSopenharmony_ci * @brief Locked fold status from js. 617e0dac50fSopenharmony_ci * 618e0dac50fSopenharmony_ci * @param locked locked fold status is locked. 619e0dac50fSopenharmony_ci * @return DM_OK means set success, others means set failed. 620e0dac50fSopenharmony_ci */ 621e0dac50fSopenharmony_ci DMError SetFoldStatusLockedFromJs(bool locked); 622e0dac50fSopenharmony_ci 623e0dac50fSopenharmony_ci /** 624e0dac50fSopenharmony_ci * @brief Get the fold crease region in the current display mode. 625e0dac50fSopenharmony_ci * 626e0dac50fSopenharmony_ci * @return fold crease region in the current display mode. 627e0dac50fSopenharmony_ci */ 628e0dac50fSopenharmony_ci sptr<FoldCreaseRegion> GetCurrentFoldCreaseRegion(); 629e0dac50fSopenharmony_ci 630e0dac50fSopenharmony_ci /** 631e0dac50fSopenharmony_ci * @brief convert screenId to RsScreenId. 632e0dac50fSopenharmony_ci * 633e0dac50fSopenharmony_ci * @param screenId screenId used in DisplayManager. 634e0dac50fSopenharmony_ci * @param rsScreenId screenId used in RenderService. 635e0dac50fSopenharmony_ci * 636e0dac50fSopenharmony_ci * @return convert success or not. 637e0dac50fSopenharmony_ci */ 638e0dac50fSopenharmony_ci bool ConvertScreenIdToRsScreenId(ScreenId screenId, ScreenId& rsScreenId); 639e0dac50fSopenharmony_ci 640e0dac50fSopenharmony_ci /** 641e0dac50fSopenharmony_ci * @brief Set virtual screen black list to RS. 642e0dac50fSopenharmony_ci * 643e0dac50fSopenharmony_ci * @param screenId ScreenId used in virtual screen. 644e0dac50fSopenharmony_ci * @param windowIdList The windowId list to shield on cast screen. 645e0dac50fSopenharmony_ci */ 646e0dac50fSopenharmony_ci void SetVirtualScreenBlackList(ScreenId screenId, std::vector<uint64_t>& windowIdList); 647e0dac50fSopenharmony_ci 648e0dac50fSopenharmony_ci /** 649e0dac50fSopenharmony_ci * @brief When casting the screen, the display not be skipped after the physical screen is turned off. 650e0dac50fSopenharmony_ci * 651e0dac50fSopenharmony_ci * @param screenId ScreenId used in virtual screen. 652e0dac50fSopenharmony_ci */ 653e0dac50fSopenharmony_ci void DisablePowerOffRenderControl(ScreenId screenId); 654e0dac50fSopenharmony_ci 655e0dac50fSopenharmony_ci /** 656e0dac50fSopenharmony_ci * @brief get to freeze status with specified pid list 657e0dac50fSopenharmony_ci * 658e0dac50fSopenharmony_ci * @param pidList Indicates the calling pid 659e0dac50fSopenharmony_ci * @param isProxy value is true indicates process status is freeze 660e0dac50fSopenharmony_ci * @param DM_OK means process status update success, others means update failed. 661e0dac50fSopenharmony_ci */ 662e0dac50fSopenharmony_ci DMError ProxyForFreeze(std::set<int32_t> pidList, bool isProxy); 663e0dac50fSopenharmony_ci 664e0dac50fSopenharmony_ci /** 665e0dac50fSopenharmony_ci * @brief reset all process freeze status 666e0dac50fSopenharmony_ci * 667e0dac50fSopenharmony_ci * @param DM_OK means process status update success, others means update failed. 668e0dac50fSopenharmony_ci */ 669e0dac50fSopenharmony_ci DMError ResetAllFreezeStatus(); 670e0dac50fSopenharmony_ci 671e0dac50fSopenharmony_ci /** 672e0dac50fSopenharmony_ci * @brief get all display physical resolution 673e0dac50fSopenharmony_ci * 674e0dac50fSopenharmony_ci * @return all physical resolution 675e0dac50fSopenharmony_ci */ 676e0dac50fSopenharmony_ci std::vector<DisplayPhysicalResolution> GetAllDisplayPhysicalResolution(); 677e0dac50fSopenharmony_ci 678e0dac50fSopenharmony_ci /** 679e0dac50fSopenharmony_ci * @brief set virtual screen security exemption 680e0dac50fSopenharmony_ci * 681e0dac50fSopenharmony_ci * @param DM_OK means set exemption is success. 682e0dac50fSopenharmony_ci */ 683e0dac50fSopenharmony_ci DMError SetVirtualScreenSecurityExemption(ScreenId screenId, uint32_t pid, std::vector<uint64_t>& windowIdList); 684e0dac50fSopenharmony_ci 685e0dac50fSopenharmony_ci constexpr static int32_t MAX_RESOLUTION_SIZE_SCREENSHOT = 3840; // max resolution, 4K 686e0dac50fSopenharmony_ci 687e0dac50fSopenharmony_ci /** 688e0dac50fSopenharmony_ci * @brief Add displayId for current ability through Ability Management. 689e0dac50fSopenharmony_ci * 690e0dac50fSopenharmony_ci * @param displayId Identifier of the current display. 691e0dac50fSopenharmony_ci * @param abilityToken Token of the ability. 692e0dac50fSopenharmony_ci */ 693e0dac50fSopenharmony_ci void AddDisplayIdFromAms(DisplayId displayId, const wptr<IRemoteObject>& abilityToken); 694e0dac50fSopenharmony_ci 695e0dac50fSopenharmony_ci /** 696e0dac50fSopenharmony_ci * @brief Removes the display identifier through the Ability Management. 697e0dac50fSopenharmony_ci * 698e0dac50fSopenharmony_ci * @param abilityToken Token of ability. 699e0dac50fSopenharmony_ci */ 700e0dac50fSopenharmony_ci void RemoveDisplayIdFromAms(const wptr<IRemoteObject>& abilityToken); 701e0dac50fSopenharmony_ci 702e0dac50fSopenharmony_ciprivate: 703e0dac50fSopenharmony_ci DisplayManager(); 704e0dac50fSopenharmony_ci ~DisplayManager(); 705e0dac50fSopenharmony_ci void OnRemoteDied(); 706e0dac50fSopenharmony_ci 707e0dac50fSopenharmony_ci void ShowDisplayIdList(bool isShowLog = false); 708e0dac50fSopenharmony_ci std::mutex displayOperateMutex_; 709e0dac50fSopenharmony_ci DisplayId GetCallingAbilityDisplayId(); 710e0dac50fSopenharmony_ci std::vector<std::pair<wptr<IRemoteObject>, DisplayId>> displayIdList_ {}; 711e0dac50fSopenharmony_ci 712e0dac50fSopenharmony_ci class Impl; 713e0dac50fSopenharmony_ci std::recursive_mutex mutex_; 714e0dac50fSopenharmony_ci sptr<Impl> pImpl_; 715e0dac50fSopenharmony_ci}; 716e0dac50fSopenharmony_ci} // namespace OHOS::Rosen 717e0dac50fSopenharmony_ci 718e0dac50fSopenharmony_ci#endif // FOUNDATION_DM_DISPLAY_MANAGER_H