• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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