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 Change the display mode of the foldable device asynchronously. 188 * 189 * @param mode target display mode to change. 190 */ 191 void SetFoldDisplayModeAsync(const FoldDisplayMode mode); 192 193 /** 194 * @brief Get the display object by id. 195 * 196 * @param displayId Id of the target display. 197 * @return Default display object. 198 */ 199 sptr<DisplayLite> GetDisplayById(DisplayId displayId); 200 201 /* 202 * used by powermgr 203 */ 204 /** 205 * @brief Begin to wake up screen. 206 * 207 * @param reason Reason for power state change. 208 * @return True means begin success, false means begin failed. 209 */ 210 bool WakeUpBegin(PowerStateChangeReason reason); 211 212 /** 213 * @brief Wake up screen end. 214 * 215 * @return True means end success, false means end failed. 216 */ 217 bool WakeUpEnd(); 218 219 /** 220 * @brief Begin to suspend the screen. 221 * 222 * @param reason Reason for power state change. 223 * @return True means begin success, false means begin failed. 224 */ 225 bool SuspendBegin(PowerStateChangeReason reason); 226 227 /** 228 * @brief Suspend screen end. 229 * 230 * @return True means suspend screen end success. 231 * @return False means suspend screen end failed. 232 */ 233 bool SuspendEnd(); 234 235 /** 236 * @brief Get id of internal screen. 237 * 238 * @return Internal screen id. 239 */ 240 ScreenId GetInternalScreenId(); 241 242 /** 243 * @brief Set the screen power state by screen id. 244 * 245 * @param screenId Screen id. 246 * @param state Screen power state. 247 * @param reason Reason for power state change. 248 * @return True means set success, false means set failed. 249 */ 250 bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason); 251 252 /** 253 * @brief Set the Display State object 254 * 255 * @param state State of display. 256 * @param callback Callback for display state. 257 * @return True means set success, false means set failed. 258 */ 259 bool SetDisplayState(DisplayState state, DisplayStateCallback callback); 260 261 /** 262 * @brief Get the state of the target display. 263 * 264 * @param displayId Display id. 265 * @return State of display. 266 */ 267 DisplayState GetDisplayState(DisplayId displayId); 268 269 /** 270 * @brief Try to cancel screenoff action before display power off. 271 * 272 * @return True means cancel screenoff action success. 273 * @return False means cancel screenoff action failed. 274 */ 275 bool TryToCancelScreenOff(); 276 277 /** 278 * @brief Set the brightness level of the target screen. 279 * 280 * @param screenId Target screen. 281 * @param level Brightness level. 282 */ 283 bool SetScreenBrightness(uint64_t screenId, uint32_t level); 284 285 /** 286 * @brief Get the brightness level of the target screen. 287 * 288 * @param screenId Screen id. 289 * @return Brightness value of screen. 290 */ 291 uint32_t GetScreenBrightness(uint64_t screenId) const; 292 293 /** 294 * @brief Obtain the id of the default display. 295 * 296 * @return Default display id. 297 */ 298 DisplayId GetDefaultDisplayId(); 299 300 /** 301 * @brief Get IDs of all displays. 302 * 303 * @return All display IDs. 304 */ 305 std::vector<DisplayId> GetAllDisplayIds(); 306 307 /** 308 * @brief Get virtual screen flag. 309 * 310 * @param screenId virtual screen id. 311 * @return virtual screen flag 312 */ 313 VirtualScreenFlag GetVirtualScreenFlag(ScreenId screenId); 314 315 /** 316 * @brief Set System Keyboard status. 317 * 318 * @param isTpKeyboardOn whether system keyboard with touchpad is shown, default is false. 319 * @return DM_OK means set system keyboard status success. 320 */ 321 DMError SetSystemKeyboardStatus(bool isTpKeyboardOn = false); 322 private: 323 DisplayManagerLite(); 324 ~DisplayManagerLite(); 325 void OnRemoteDied(); 326 327 class Impl; 328 std::recursive_mutex mutex_; 329 bool destroyed_ = false; 330 sptr<Impl> pImpl_; 331 }; 332 } // namespace OHOS::Rosen 333 334 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H