1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at, 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software, 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_DM_DISPLAY_MANAGER_LITE_H 17 #define FOUNDATION_DM_DISPLAY_MANAGER_LITE_H 18 19 #include <vector> 20 #include <mutex> 21 22 #include "display_lite.h" 23 #include "dm_common.h" 24 #include "wm_single_instance.h" 25 #include "display_change_info.h" 26 27 namespace OHOS::Rosen { 28 class DisplayManagerLite { 29 WM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManagerLite); 30 friend class DMSDeathRecipientLite; 31 public: 32 class IDisplayListener : public virtual RefBase { 33 public: 34 /** 35 * @brief Notify when a new display is created. 36 */ 37 virtual void OnCreate(DisplayId) = 0; 38 39 /** 40 * @brief Notify when the display is destroyed. 41 */ 42 virtual void OnDestroy(DisplayId) = 0; 43 44 /** 45 * @brief Notify when the state of a display changes 46 */ 47 virtual void OnChange(DisplayId) = 0; 48 }; 49 50 class IFoldStatusListener : public virtual RefBase { 51 public: 52 /** 53 * @brief Notify listeners when screen fold status changed. 54 * 55 * @param foldStatus Screen foldStatus. 56 */ 57 virtual void OnFoldStatusChanged([[maybe_unused]]FoldStatus foldStatus) {} 58 }; 59 60 class IDisplayModeListener : public virtual RefBase { 61 public: 62 /** 63 * @brief Notify listeners when display mode changed. 64 * 65 * @param displayMode DisplayMode. 66 */ 67 virtual void OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode) {} 68 }; 69 70 /** 71 * @brief Register a display listener. 72 * 73 * @param listener IDisplayListener. 74 * @return DM_OK means register success, others means register failed. 75 */ 76 DMError RegisterDisplayListener(sptr<IDisplayListener> listener); 77 78 /** 79 * @brief Unregister an existed display listener. 80 * 81 * @param listener IDisplayListener. 82 * @return DM_OK means unregister success, others means unregister failed. 83 */ 84 DMError UnregisterDisplayListener(sptr<IDisplayListener> listener); 85 86 /** 87 * @brief Register a listener for the event of screen fold status changed. 88 * 89 * @param listener IFoldStatusListener. 90 * @return DM_OK means register success, others means register failed. 91 */ 92 DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener); 93 94 /** 95 * @brief Unregister an existed listener for the event of screen fold status changed. 96 * 97 * @param listener IFoldStatusListener. 98 * @return DM_OK means unregister success, others means unregister failed. 99 */ 100 DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener); 101 102 /** 103 * @brief Register a listener for the event of display mode changed. 104 * 105 * @param listener IDisplayModeListener. 106 * @return DM_OK means register success, others means register failed. 107 */ 108 DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener); 109 110 /** 111 * @brief Unregister an existed listener for the event of display mode changed. 112 * 113 * @param listener IDisplayModeListener. 114 * @return DM_OK means unregister success, others means unregister failed. 115 */ 116 DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener); 117 118 /** 119 * @brief Get the default display object. 120 * 121 * @return Default display object. 122 */ 123 sptr<DisplayLite> GetDefaultDisplay(); 124 125 /** 126 * @brief Check whether the device is foldable. 127 * 128 * @return true means the device is foldable. 129 */ 130 bool IsFoldable(); 131 132 /** 133 * @brief Get the current fold status of the foldable device. 134 * 135 * @return fold status of device. 136 */ 137 FoldStatus GetFoldStatus(); 138 139 /** 140 * @brief Get the display mode of the foldable device. 141 * 142 * @return display mode of the foldable device. 143 */ 144 FoldDisplayMode GetFoldDisplayMode(); 145 146 /** 147 * @brief Change the display mode of the foldable device. 148 * 149 * @param mode target display mode to change. 150 * 使用场景:目前仅提供给维修场景使用,折叠屏手动色彩校准 151 */ 152 void SetFoldDisplayMode(const FoldDisplayMode mode); 153 154 /** 155 * @brief Get the display object by id. 156 * 157 * @param displayId Id of the target display. 158 * @return Default display object. 159 */ 160 sptr<DisplayLite> GetDisplayById(DisplayId displayId); 161 162 /* 163 * used by powermgr 164 */ 165 /** 166 * @brief Begin to wake up screen. 167 * 168 * @param reason Reason for power state change. 169 * @return True means begin success, false means begin failed. 170 */ 171 bool WakeUpBegin(PowerStateChangeReason reason); 172 173 /** 174 * @brief Wake up screen end. 175 * 176 * @return True means end success, false means end failed. 177 */ 178 bool WakeUpEnd(); 179 180 /** 181 * @brief Begin to suspend the screen. 182 * 183 * @param reason Reason for power state change. 184 * @return True means begin success, false means begin failed. 185 */ 186 bool SuspendBegin(PowerStateChangeReason reason); 187 188 /** 189 * @brief Suspend screen end. 190 * 191 * @return True means suspend screen end success. 192 * @return False means suspend screen end failed. 193 */ 194 bool SuspendEnd(); 195 196 /** 197 * @brief Set the Display State object 198 * 199 * @param state State of display. 200 * @param callback Callback for display state. 201 * @return True means set success, false means set failed. 202 */ 203 bool SetDisplayState(DisplayState state, DisplayStateCallback callback); 204 205 /** 206 * @brief Get the state of the target display. 207 * 208 * @param displayId Display id. 209 * @return State of display. 210 */ 211 DisplayState GetDisplayState(DisplayId displayId); 212 213 /** 214 * @brief Try to cancel screenoff action before display power off. 215 * 216 * @return True means cancel screenoff action success. 217 * @return False means cancel screenoff action failed. 218 */ 219 bool TryToCancelScreenOff(); 220 221 /** 222 * @brief Set the brightness level of the target screen. 223 * 224 * @param screenId Target screen. 225 * @param level Brightness level. 226 */ 227 bool SetScreenBrightness(uint64_t screenId, uint32_t level); 228 229 /** 230 * @brief Get the brightness level of the target screen. 231 * 232 * @param screenId Screen id. 233 * @return Brightness value of screen. 234 */ 235 uint32_t GetScreenBrightness(uint64_t screenId) const; 236 237 /** 238 * @brief Obtain the id of the default display. 239 * 240 * @return Default display id. 241 */ 242 DisplayId GetDefaultDisplayId(); 243 244 /** 245 * @brief Get IDs of all displays. 246 * 247 * @return All display IDs. 248 */ 249 std::vector<DisplayId> GetAllDisplayIds(); 250 251 /** 252 * @brief Get virtual screen flag. 253 * 254 * @param screenId virtual screen id. 255 * @return virtual screen flag 256 */ 257 VirtualScreenFlag GetVirtualScreenFlag(ScreenId screenId); 258 private: 259 DisplayManagerLite(); 260 ~DisplayManagerLite(); 261 void OnRemoteDied(); 262 263 class Impl; 264 std::recursive_mutex mutex_; 265 bool destroyed_ = false; 266 sptr<Impl> pImpl_; 267 }; 268 } // namespace OHOS::Rosen 269 270 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H