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 */ OnFoldStatusChanged(FoldStatus foldStatus)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 */ OnDisplayModeChanged(FoldDisplayMode displayMode)67 virtual void OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode) {} 68 }; 69 70 class IScreenMagneticStateListener : public virtual RefBase { 71 public: 72 /** 73 * @brief Notify listeners when screen magnetic state changed. 74 * 75 * @param screenMagneticState ScreenMagneticState. 76 */ OnScreenMagneticStateChanged(bool isMagneticState)77 virtual void OnScreenMagneticStateChanged([[maybe_unused]]bool isMagneticState) {} 78 }; 79 80 /** 81 * @brief Register a display listener. 82 * 83 * @param listener IDisplayListener. 84 * @return DM_OK means register success, others means register failed. 85 */ 86 DMError RegisterDisplayListener(sptr<IDisplayListener> listener); 87 88 /** 89 * @brief Unregister an existed display listener. 90 * 91 * @param listener IDisplayListener. 92 * @return DM_OK means unregister success, others means unregister failed. 93 */ 94 DMError UnregisterDisplayListener(sptr<IDisplayListener> listener); 95 96 /** 97 * @brief Register a listener for the event of screen fold status changed. 98 * 99 * @param listener IFoldStatusListener. 100 * @return DM_OK means register success, others means register failed. 101 */ 102 DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener); 103 104 /** 105 * @brief Unregister an existed listener for the event of screen fold status changed. 106 * 107 * @param listener IFoldStatusListener. 108 * @return DM_OK means unregister success, others means unregister failed. 109 */ 110 DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener); 111 112 /** 113 * @brief Register a listener for the event of display mode changed. 114 * 115 * @param listener IDisplayModeListener. 116 * @return DM_OK means register success, others means register failed. 117 */ 118 DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener); 119 120 /** 121 * @brief Unregister an existed listener for the event of display mode changed. 122 * 123 * @param listener IDisplayModeListener. 124 * @return DM_OK means unregister success, others means unregister failed. 125 */ 126 DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener); 127 128 /** 129 * @brief Register a listener for the event of screen magnetic state changed. 130 * 131 * @param listener IScreenMagneticStateListener. 132 * @return DM_OK means register success, others means register failed. 133 */ 134 DMError RegisterScreenMagneticStateListener(sptr<IScreenMagneticStateListener> listener); 135 136 /** 137 * @brief Unregister an existed listener for the event of screen magnetic state changed. 138 * 139 * @param listener IScreenMagneticStateListener. 140 * @return DM_OK means unregister success, others means unregister failed. 141 */ 142 DMError UnregisterScreenMagneticStateListener(sptr<IScreenMagneticStateListener> listener); 143 144 /** 145 * @brief Get the default display object. 146 * 147 * @return Default display object. 148 */ 149 sptr<DisplayLite> GetDefaultDisplay(); 150 151 /** 152 * @brief Check whether the device is foldable. 153 * 154 * @return true means the device is foldable. 155 */ 156 bool IsFoldable(); 157 158 /** 159 * @brief Get the current fold status of the foldable device. 160 * 161 * @return fold status of device. 162 */ 163 FoldStatus GetFoldStatus(); 164 165 /** 166 * @brief Get the display mode of the foldable device. 167 * 168 * @return display mode of the foldable device. 169 */ 170 FoldDisplayMode GetFoldDisplayMode(); 171 172 /** 173 * @brief Get the display mode of the foldable device for external. 174 * 175 * @return display mode of the foldable device. 176 */ 177 FoldDisplayMode GetFoldDisplayModeForExternal(); 178 179 /** 180 * @brief Change the display mode of the foldable device. 181 * 182 * @param mode target display mode to change. 183 */ 184 void SetFoldDisplayMode(const FoldDisplayMode mode); 185 186 /** 187 * @brief Get the display object by id. 188 * 189 * @param displayId Id of the target display. 190 * @return Default display object. 191 */ 192 sptr<DisplayLite> GetDisplayById(DisplayId displayId); 193 194 /* 195 * used by powermgr 196 */ 197 /** 198 * @brief Begin to wake up screen. 199 * 200 * @param reason Reason for power state change. 201 * @return True means begin success, false means begin failed. 202 */ 203 bool WakeUpBegin(PowerStateChangeReason reason); 204 205 /** 206 * @brief Wake up screen end. 207 * 208 * @return True means end success, false means end failed. 209 */ 210 bool WakeUpEnd(); 211 212 /** 213 * @brief Begin to suspend the screen. 214 * 215 * @param reason Reason for power state change. 216 * @return True means begin success, false means begin failed. 217 */ 218 bool SuspendBegin(PowerStateChangeReason reason); 219 220 /** 221 * @brief Suspend screen end. 222 * 223 * @return True means suspend screen end success. 224 * @return False means suspend screen end failed. 225 */ 226 bool SuspendEnd(); 227 228 /** 229 * @brief Get id of internal screen. 230 * 231 * @return Internal screen id. 232 */ 233 ScreenId GetInternalScreenId(); 234 235 /** 236 * @brief Set the screen power state by screen id. 237 * 238 * @param screenId Screen id. 239 * @param state Screen power state. 240 * @param reason Reason for power state change. 241 * @return True means set success, false means set failed. 242 */ 243 bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason); 244 245 /** 246 * @brief Set the Display State object 247 * 248 * @param state State of display. 249 * @param callback Callback for display state. 250 * @return True means set success, false means set failed. 251 */ 252 bool SetDisplayState(DisplayState state, DisplayStateCallback callback); 253 254 /** 255 * @brief Get the state of the target display. 256 * 257 * @param displayId Display id. 258 * @return State of display. 259 */ 260 DisplayState GetDisplayState(DisplayId displayId); 261 262 /** 263 * @brief Try to cancel screenoff action before display power off. 264 * 265 * @return True means cancel screenoff action success. 266 * @return False means cancel screenoff action failed. 267 */ 268 bool TryToCancelScreenOff(); 269 270 /** 271 * @brief Set the brightness level of the target screen. 272 * 273 * @param screenId Target screen. 274 * @param level Brightness level. 275 */ 276 bool SetScreenBrightness(uint64_t screenId, uint32_t level); 277 278 /** 279 * @brief Get the brightness level of the target screen. 280 * 281 * @param screenId Screen id. 282 * @return Brightness value of screen. 283 */ 284 uint32_t GetScreenBrightness(uint64_t screenId) const; 285 286 /** 287 * @brief Obtain the id of the default display. 288 * 289 * @return Default display id. 290 */ 291 DisplayId GetDefaultDisplayId(); 292 293 /** 294 * @brief Get IDs of all displays. 295 * 296 * @return All display IDs. 297 */ 298 std::vector<DisplayId> GetAllDisplayIds(); 299 300 /** 301 * @brief Get virtual screen flag. 302 * 303 * @param screenId virtual screen id. 304 * @return virtual screen flag 305 */ 306 VirtualScreenFlag GetVirtualScreenFlag(ScreenId screenId); 307 308 /** 309 * @brief Set System Keyboard is on or off. 310 * 311 * @param isOn system keyboard is on, default is false. 312 * @return DM_OK means set system keyboard on is success. 313 */ 314 DMError SetSystemKeyboardStatus(bool isOn = false); 315 private: 316 DisplayManagerLite(); 317 ~DisplayManagerLite(); 318 void OnRemoteDied(); 319 320 class Impl; 321 std::recursive_mutex mutex_; 322 bool destroyed_ = false; 323 sptr<Impl> pImpl_; 324 }; 325 } // namespace OHOS::Rosen 326 327 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H