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([[maybe_unused]]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([[maybe_unused]]FoldDisplayMode displayMode)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 void SetFoldDisplayMode(const FoldDisplayMode mode); 152 153 /** 154 * @brief Get the display object by id. 155 * 156 * @param displayId Id of the target display. 157 * @return Default display object. 158 */ 159 sptr<DisplayLite> GetDisplayById(DisplayId displayId); 160 161 /* 162 * used by powermgr 163 */ 164 /** 165 * @brief Begin to wake up screen. 166 * 167 * @param reason Reason for power state change. 168 * @return True means begin success, false means begin failed. 169 */ 170 bool WakeUpBegin(PowerStateChangeReason reason); 171 172 /** 173 * @brief Wake up screen end. 174 * 175 * @return True means end success, false means end failed. 176 */ 177 bool WakeUpEnd(); 178 179 /** 180 * @brief Begin to suspend the screen. 181 * 182 * @param reason Reason for power state change. 183 * @return True means begin success, false means begin failed. 184 */ 185 bool SuspendBegin(PowerStateChangeReason reason); 186 187 /** 188 * @brief Suspend screen end. 189 * 190 * @return True means suspend screen end success. 191 * @return False means suspend screen end failed. 192 */ 193 bool SuspendEnd(); 194 195 /** 196 * @brief Get id of internal screen. 197 * 198 * @return Internal screen id. 199 */ 200 ScreenId GetInternalScreenId(); 201 202 /** 203 * @brief Set the screen power state by screen id. 204 * 205 * @param screenId Screen id. 206 * @param state Screen power state. 207 * @param reason Reason for power state change. 208 * @return True means set success, false means set failed. 209 */ 210 bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason); 211 212 /** 213 * @brief Set the Display State object 214 * 215 * @param state State of display. 216 * @param callback Callback for display state. 217 * @return True means set success, false means set failed. 218 */ 219 bool SetDisplayState(DisplayState state, DisplayStateCallback callback); 220 221 /** 222 * @brief Get the state of the target display. 223 * 224 * @param displayId Display id. 225 * @return State of display. 226 */ 227 DisplayState GetDisplayState(DisplayId displayId); 228 229 /** 230 * @brief Try to cancel screenoff action before display power off. 231 * 232 * @return True means cancel screenoff action success. 233 * @return False means cancel screenoff action failed. 234 */ 235 bool TryToCancelScreenOff(); 236 237 /** 238 * @brief Set the brightness level of the target screen. 239 * 240 * @param screenId Target screen. 241 * @param level Brightness level. 242 */ 243 bool SetScreenBrightness(uint64_t screenId, uint32_t level); 244 245 /** 246 * @brief Get the brightness level of the target screen. 247 * 248 * @param screenId Screen id. 249 * @return Brightness value of screen. 250 */ 251 uint32_t GetScreenBrightness(uint64_t screenId) const; 252 253 /** 254 * @brief Obtain the id of the default display. 255 * 256 * @return Default display id. 257 */ 258 DisplayId GetDefaultDisplayId(); 259 260 /** 261 * @brief Get IDs of all displays. 262 * 263 * @return All display IDs. 264 */ 265 std::vector<DisplayId> GetAllDisplayIds(); 266 private: 267 DisplayManagerLite(); 268 ~DisplayManagerLite(); 269 void OnRemoteDied(); 270 271 class Impl; 272 std::recursive_mutex mutex_; 273 bool destroyed_ = false; 274 sptr<Impl> pImpl_; 275 }; 276 } // namespace OHOS::Rosen 277 278 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H