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