• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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_H
17 #define FOUNDATION_DM_DISPLAY_MANAGER_H
18 
19 #include <vector>
20 #include <mutex>
21 #include <pixel_map.h>
22 
23 #include "display.h"
24 #include "dm_common.h"
25 #include "fold_screen_info.h"
26 #include "wm_single_instance.h"
27 #include "screenshot_info.h"
28 
29 namespace OHOS::Rosen {
30 class DisplayManager {
31 WM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManager);
32 friend class DMSDeathRecipient;
33 public:
34     class IDisplayListener : public virtual RefBase {
35     public:
36         /**
37          * @brief Notify when a new display is created.
38          */
39         virtual void OnCreate(DisplayId) = 0;
40 
41         /**
42          * @brief Notify when the display is destroyed.
43          */
44         virtual void OnDestroy(DisplayId) = 0;
45 
46         /**
47          * @brief Notify when the state of a display changes
48          */
49         virtual void OnChange(DisplayId) = 0;
50     };
51 
52     class IScreenshotListener : public virtual RefBase {
53     public:
54         /**
55          * @brief Notify when a screenshot event occurs.
56          *
57          * @param info Screenshot info.
58          */
OnScreenshot(const ScreenshotInfo info)59         virtual void OnScreenshot([[maybe_unused]]const ScreenshotInfo info) {}
60     };
61 
62     class IPrivateWindowListener : public virtual RefBase {
63     public:
64         /**
65          * @brief Monitor whether the existence of privacy window has changed.
66          *
67          * @param hasPrivate True means the display has private window, false means the opposite.
68          */
OnPrivateWindow(bool hasPrivate)69         virtual void OnPrivateWindow([[maybe_unused]]bool hasPrivate) {}
70     };
71 
72     class IFoldStatusListener : public virtual RefBase {
73     public:
74         /**
75          * @brief Notify listeners when screen fold status changed.
76          *
77          * @param foldStatus Screen foldStatus.
78          */
OnFoldStatusChanged(FoldStatus foldStatus)79         virtual void OnFoldStatusChanged(FoldStatus foldStatus) {}
80     };
81 
82     class IDisplayModeListener : public virtual RefBase {
83     public:
84         /**
85          * @brief Notify listeners when display mode changed.
86          *
87          * @param displayMode DisplayMode.
88          */
OnDisplayModeChanged(FoldDisplayMode displayMode)89         virtual void OnDisplayModeChanged(FoldDisplayMode displayMode) {}
90     };
91 
92     /**
93      * @brief Obtain all displays.
94      *
95      * @return All displays.
96      */
97     std::vector<sptr<Display>> GetAllDisplays();
98 
99     /**
100      * @brief Obtain the id of the default display.
101      *
102      * @return Default display id.
103      */
104     DisplayId GetDefaultDisplayId();
105 
106     /**
107      * @brief Get the default display object.
108      *
109      * @return Default display object.
110      */
111     sptr<Display> GetDefaultDisplay();
112 
113     /**
114      * @brief Get the default display object by means of sync.
115      *
116      * @return Default display id.
117      */
118     sptr<Display> GetDefaultDisplaySync();
119 
120     /**
121      * @brief Get the display object by id.
122      *
123      * @param displayId Id of the target display.
124      * @return Default display object.
125      */
126     sptr<Display> GetDisplayById(DisplayId displayId);
127 
128     /**
129      * @brief Get the display object by corresponding screenId.
130      *
131      * @param screenId The id of the target screen.
132      * @return Display object.
133      */
134     sptr<Display> GetDisplayByScreen(ScreenId screenId);
135 
136     /**
137      * @brief Get IDs of all displays.
138      *
139      * @return All display IDs.
140      */
141     std::vector<DisplayId> GetAllDisplayIds();
142 
143     /**
144      * @brief Get whether the target display contains privacy windows.
145      *
146      * @param displayId Display id.
147      * @param hasPrivateWindow True means display has private window, false means the opposite.
148      * @return DM_OK means query privacy success, others means query failed.
149      */
150     DMError HasPrivateWindow(DisplayId displayId, bool& hasPrivateWindow);
151 
152     /**
153      * @brief Get screenshot of the target display.
154      *
155      * @param displayId Display id.
156      * @param errorCode error code.
157      * @return PixelMap object of screenshot.
158      */
159     std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId, DmErrorCode* errorCode = nullptr);
160     /**
161      * @brief Get screenshot of the target display.
162      *
163      * @param displayId Display id.
164      * @param rect Rect of screenshot.
165      * @param size Size of screenshot.
166      * @param rotation Parameter of rotation.
167      * @param errorCode error code.
168      * @return PixelMap object of screenshot.
169      */
170     std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId, const Media::Rect &rect,
171         const Media::Size &size, int rotation, DmErrorCode* errorCode = nullptr);
172 
173     /**
174      * @brief Begin to wake up screen.
175      *
176      * @param reason Reason for power state change.
177      * @return True means begin success, false means begin failed.
178      */
179     bool WakeUpBegin(PowerStateChangeReason reason);
180 
181     /**
182      * @brief Wake up screen end.
183      *
184      * @return True means end success, false means end failed.
185      */
186     bool WakeUpEnd();
187 
188     /**
189      * @brief Begin to suspend the screen.
190      *
191      * @param reason Reason for power state change.
192      * @return True means begin success, false means begin failed.
193      */
194     bool SuspendBegin(PowerStateChangeReason reason);
195 
196     /**
197      * @brief Suspend screen end.
198      *
199      * @return True means suspend screen end success.
200      * @return False means suspend screen end failed.
201      */
202     bool SuspendEnd();
203 
204     /**
205      * @brief Set the Display State object
206      *
207      * @param state State of display.
208      * @param callback Callback for display state.
209      * @return True means set success, false means set failed.
210      */
211     bool SetDisplayState(DisplayState state, DisplayStateCallback callback);
212 
213     /**
214      * @brief Get the state of the target display.
215      *
216      * @param displayId Display id.
217      * @return State of display.
218      */
219     DisplayState GetDisplayState(DisplayId displayId);
220 
221     /**
222      * @brief Set the brightness level of the target screen.
223      *
224      * @param screenId Target screen.
225      * @param level Brightness level.
226      */
227     bool SetScreenBrightness(uint64_t screenId, uint32_t level);
228 
229     /**
230      * @brief Get the brightness level of the target screen.
231      *
232      * @param screenId Screen id.
233      * @return Brightness value of screen.
234      */
235     uint32_t GetScreenBrightness(uint64_t screenId) const;
236 
237     /**
238      * @brief Notify when events of certain types occur.
239      *
240      * @param event Enumerate value of DisplayEvent.
241      */
242     void NotifyDisplayEvent(DisplayEvent event);
243 
244     /**
245      * @brief Freeze target displays.
246      *
247      * @param displayIds Display id needed to freeze.
248      * @return True means freeze success, false means freeze failed.
249      */
250     bool Freeze(std::vector<DisplayId> displayIds);
251 
252     /**
253      * @brief Unfreeze target displays.
254      *
255      * @param displayIds Display id needed to unfreeze.
256      * @return True means unfreeze success, false means unfreeze failed.
257      */
258     bool Unfreeze(std::vector<DisplayId> displayIds);
259 
260     /**
261      * @brief Resgister a display listener.
262      *
263      * @param listener IDisplayListener.
264      * @return DM_OK means register success, others means register failed.
265      */
266     DMError RegisterDisplayListener(sptr<IDisplayListener> listener);
267 
268     /**
269      * @brief Unregister an existed display listener.
270      *
271      * @param listener IDisplayListener.
272      * @return DM_OK means unregister success, others means unregister failed.
273      */
274     DMError UnregisterDisplayListener(sptr<IDisplayListener> listener);
275 
276     /**
277      * @brief Register a listener for display power events.
278      *
279      * @param listener IDisplayPowerEventListener.
280      * @return DM_OK means register success, others means register failed.
281      */
282     DMError RegisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener);
283 
284     /**
285      * @brief Unregiste an existed listener for display power events.
286      *
287      * @param listener IDisplayPowerEventListener.
288      * @return DM_OK means unregister success, others means unregister failed.
289      */
290     DMError UnregisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener);
291 
292     /**
293      * @brief Register a listener for screenshot event.
294      *
295      * @param listener IScreenshotListener.
296      * @return DM_OK means register success, others means register failed.
297      */
298     DMError RegisterScreenshotListener(sptr<IScreenshotListener> listener);
299 
300     /**
301      * @brief Unregister an existed listener for screenshot event.
302      *
303      * @param listener IScreenshotListener.
304      * @return DM_OK means unregister success, others means unregister failed.
305      */
306     DMError UnregisterScreenshotListener(sptr<IScreenshotListener> listener);
307 
308     /**
309      * @brief Register a listener for the event of private window.
310      *
311      * @param listener IPrivateWindowListener.
312      * @return DM_OK means register success, others means register failed.
313      */
314     DMError RegisterPrivateWindowListener(sptr<IPrivateWindowListener> listener);
315 
316     /**
317      * @brief Unregister an existed listener for the event of private window.
318      *
319      * @param listener IPrivateWindowListener.
320      * @return DM_OK means unregister success, others means unregister failed.
321      */
322     DMError UnregisterPrivateWindowListener(sptr<IPrivateWindowListener> listener);
323 
324     /**
325      * @brief Register a listener for the event of screen fold status changed.
326      *
327      * @param listener IFoldStatusListener.
328      * @return DM_OK means register success, others means register failed.
329      */
330     DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener);
331 
332     /**
333      * @brief Unregister an existed listener for the event of screen fold status changed.
334      *
335      * @param listener IFoldStatusListener.
336      * @return DM_OK means unregister success, others means unregister failed.
337      */
338     DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener);
339 
340     /**
341      * @brief Register a listener for the event of dispaly mode changed.
342      *
343      * @param listener IDisplayModeListener.
344      * @return DM_OK means register success, others means register failed.
345      */
346     DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener);
347 
348     /**
349      * @brief Unregister an existed listener for the event of dispaly mode changed.
350      *
351      * @param listener IDisplayModeListener.
352      * @return DM_OK means unregister success, others means unregister failed.
353      */
354     DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener);
355 
356     /**
357      * @brief Add a surface node to the target display.
358      *
359      * @param displayId Target display.
360      * @param surfaceNode SurfaceNode object.
361      * @return DM_OK means add success, others means add failed.
362      */
363     DMError AddSurfaceNodeToDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode);
364 
365     /**
366      * @brief Remove a surface node from the target display.
367      *
368      * @param displayId Target display.
369      * @param surfaceNode SurfaceNode object.
370      * @return DM_OK means remove success, others means remove failed.
371      */
372     DMError RemoveSurfaceNodeFromDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode);
373 
374     /**
375      * @brief Check whether the device is foldable.
376      *
377      * @return true means the device is foldable.
378      */
379     bool IsFoldable();
380 
381     /**
382      * @brief Get the current fold status of the foldable device.
383      *
384      * @return fold status of device.
385      */
386     FoldStatus GetFoldStatus();
387 
388     /**
389      * @brief Get the display mode of the foldable device.
390      *
391      * @return display mode of the foldable device.
392      */
393     FoldDisplayMode GetFoldDisplayMode();
394 
395     /**
396      * @brief Change the display mode of the foldable device.
397      *
398      * @param mode target display mode to change.
399      */
400     void SetFoldDisplayMode(const FoldDisplayMode mode);
401 
402     /**
403      * @brief Get the fold crease region in the current display mode.
404      *
405      * @return fold crease region in the current display mode.
406      */
407     sptr<FoldCreaseRegion> GetCurrentFoldCreaseRegion();
408 
409     constexpr static int32_t MAX_RESOLUTION_SIZE_SCREENSHOT = 3840; // max resolution, 4K
410 
411 private:
412     DisplayManager();
413     ~DisplayManager();
414     void OnRemoteDied();
415 
416     class Impl;
417     std::recursive_mutex mutex_;
418     bool destroyed_ = false;
419     sptr<Impl> pImpl_;
420 };
421 } // namespace OHOS::Rosen
422 
423 #endif // FOUNDATION_DM_DISPLAY_MANAGER_H