• 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 <ipc_skeleton.h>
22 #include <pixel_map.h>
23 #include <set>
24 
25 #include "display.h"
26 #include "dm_common.h"
27 #include "fold_screen_info.h"
28 #include "wm_single_instance.h"
29 #include "screenshot_info.h"
30 #include "display_change_info.h"
31 
32 namespace OHOS::Rosen {
33 /**
34  * @brief snapShot config
35  */
36 struct SnapShotConfig {
37     DisplayId displayId_ = DISPLAY_ID_INVALID;
38     Media::Size imageSize_;
39     Media::Rect imageRect_;
40     int rotation_;
41     bool isCaptureFullOfScreen_ = false;
42 };
43 
44 class DisplayManager {
45 WM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManager);
46 friend class DMSDeathRecipient;
47 public:
48     class IDisplayListener : public virtual RefBase {
49     public:
50         /**
51          * @brief Notify when a new display is created.
52          */
53         virtual void OnCreate(DisplayId) = 0;
54 
55         /**
56          * @brief Notify when the display is destroyed.
57          */
58         virtual void OnDestroy(DisplayId) = 0;
59 
60         /**
61          * @brief Notify when the state of a display changes
62          */
63         virtual void OnChange(DisplayId) = 0;
64     };
65 
66     class IScreenshotListener : public virtual RefBase {
67     public:
68         /**
69          * @brief Notify when a screenshot event occurs.
70          *
71          * @param info Screenshot info.
72          */
OnScreenshot(const ScreenshotInfo info)73         virtual void OnScreenshot([[maybe_unused]]const ScreenshotInfo info) {}
74     };
75 
76     class IPrivateWindowListener : public virtual RefBase {
77     public:
78         /**
79          * @brief Monitor whether the existence of privacy window has changed.
80          *
81          * @param hasPrivate True means the display has private window, false means the opposite.
82          */
OnPrivateWindow(bool hasPrivate)83         virtual void OnPrivateWindow([[maybe_unused]]bool hasPrivate) {}
84     };
85 
86     class IPrivateWindowListChangeListener : public virtual RefBase {
87     public:
88         /**
89          * @brief Monitor whether the existence of privacy window list has changed.
90          *
91          * @param displayId Id of the target display.
92          *
93          * @param privacyWindowList privacywindow bundlename list of the target display.
94          */
OnPrivateWindowListChange(DisplayId displayId,std::vector<std::string> privacyWindowList)95         virtual void OnPrivateWindowListChange([[maybe_unused]]DisplayId displayId,
96             [[maybe_unused]]std::vector<std::string> privacyWindowList) {}
97 
98         /**
99          * @brief only for UT to compare privacy window list.
100          *
101          * @param callback callback.
102          */
setCallback(std::function<void (std::vector<std::string>)> callback)103         virtual void setCallback([[maybe_unused]]std::function<void(std::vector<std::string>)> callback) {}
104     private:
105         std::function<void(std::vector<std::string>)> callback_;
106     };
107 
108     class IFoldStatusListener : public virtual RefBase {
109     public:
110         /**
111          * @brief Notify listeners when screen fold status changed.
112          *
113          * @param foldStatus Screen foldStatus.
114          */
OnFoldStatusChanged(FoldStatus foldStatus)115         virtual void OnFoldStatusChanged([[maybe_unused]]FoldStatus foldStatus) {}
116     };
117 
118     class IFoldAngleListener : public virtual RefBase {
119     public:
120         /**
121          * @brief Notify listeners when screen fold angles changed.
122          *
123          * @param foldAngles Screen fold angles array.
124          */
OnFoldAngleChanged(std::vector<float> foldAngles)125         virtual void OnFoldAngleChanged([[maybe_unused]]std::vector<float> foldAngles) {}
126     };
127 
128     class ICaptureStatusListener : public virtual RefBase {
129     public:
130         /**
131          * @brief Notify listeners when screen capture status changed.
132          *
133          * @param isCapture Screen capture status.
134          */
OnCaptureStatusChanged(bool isCapture)135         virtual void OnCaptureStatusChanged([[maybe_unused]]bool isCapture) {}
136     };
137 
138     class IDisplayUpdateListener : public virtual RefBase {
139     public:
140         /**
141          * @brief Notify listeners when session change display.
142          *
143          * @param infos DisplayChangeInfo.
144          */
OnDisplayUpdate(const sptr<DisplayChangeInfo> & info)145         virtual void OnDisplayUpdate([[maybe_unused]]const sptr<DisplayChangeInfo>& info) {}
146     };
147 
148     class IDisplayModeListener : public virtual RefBase {
149     public:
150         /**
151          * @brief Notify listeners when display mode changed.
152          *
153          * @param displayMode DisplayMode.
154          */
OnDisplayModeChanged(FoldDisplayMode displayMode)155         virtual void OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode) {}
156     };
157 
158     class IScreenMagneticStateListener : public virtual RefBase {
159     public:
160         /**
161          * @brief Notify listeners when screen magnetic state changed.
162          *
163          * @param screenMagneticState ScreenMagneticState.
164          */
OnScreenMagneticStateChanged(bool isMagneticState)165         virtual void OnScreenMagneticStateChanged([[maybe_unused]]bool isMagneticState) {}
166     };
167 
168     class IAvailableAreaListener : public virtual RefBase {
169     public:
170         /**
171          * @brief Notify listeners when available area changed.
172          *
173          * @param DMRect area.
174          */
OnAvailableAreaChanged(DMRect area)175         virtual void OnAvailableAreaChanged(DMRect area) {}
176     };
177 
178     /**
179      * @brief Obtain all displays.
180      *
181      * @return All displays.
182      */
183     std::vector<sptr<Display>> GetAllDisplays();
184 
185     /**
186      * @brief Obtain the id of the default display.
187      *
188      * @return Default display id.
189      */
190     DisplayId GetDefaultDisplayId();
191 
192     /**
193      * @brief Get the default display object.
194      *
195      * @return Default display object.
196      */
197     sptr<Display> GetDefaultDisplay();
198 
199     /**
200      * @brief Get the default display object by means of sync.
201      *
202      * @return Default display id.
203      */
204     sptr<Display> GetDefaultDisplaySync(bool isFromNapi = false);
205 
206     /**
207      * @brief Provide ability of setting virtual screen as primary for no-screen device.
208      *
209      * @param screenId ScreenId used in virtual screen.
210     */
211     bool SetVirtualScreenAsDefault(ScreenId screenId);
212 
213     /**
214      * @brief Get the display object by id.
215      *
216      * @param displayId Id of the target display.
217      * @return Default display object.
218      */
219     sptr<Display> GetDisplayById(DisplayId displayId);
220 
221     /**
222      * @brief Get the display object by id.Only for PC.
223      *
224      * @param displayId Id of the target display.
225      * @return Default display object.
226      */
227     sptr<DisplayInfo> GetVisibleAreaDisplayInfoById(DisplayId displayId);
228 
229     /**
230      * @brief get available area of the display.(the screen area without dock and statusbar)
231      *
232      * @param displayId Id of the target display.
233      * @param area available area of the screen.
234      * @return DMError
235      */
236     DMError GetExpandAvailableArea(DisplayId displayId, DMRect& area);
237 
238     /**
239      * @brief Get the display object by corresponding screenId.
240      *
241      * @param screenId The id of the target screen.
242      * @return Display object.
243      */
244     sptr<Display> GetDisplayByScreen(ScreenId screenId);
245 
246     /**
247      * @brief Get IDs of all displays.
248      *
249      * @return All display IDs.
250      */
251     std::vector<DisplayId> GetAllDisplayIds();
252 
253     /**
254      * @brief Get whether the target display contains privacy windows.
255      *
256      * @param displayId Display id.
257      * @param hasPrivateWindow True means display has private window, false means the opposite.
258      * @return DM_OK means query privacy success, others means query failed.
259      */
260     DMError HasPrivateWindow(DisplayId displayId, bool& hasPrivateWindow);
261 
262     /**
263      * @brief Get screenshot of the target display.
264      *
265      * @param displayId Display id.
266      * @param errorCode error code.
267      * @param isUseDma Whether to use DMA, not used by default.
268      * @param isCaptureFullOfScreen Whether to take screenshots of all displays on this screen.
269      * @return PixelMap object of screenshot.
270      */
271     std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId,
272         DmErrorCode* errorCode = nullptr, bool isUseDma = false, bool isCaptureFullOfScreen = false);
273 
274     /**
275      * @brief Get SDR and HDR screenshots of the specified display.
276      *
277      * @param displayId Display id.
278      * @param errorCode Error code.
279      * @param isUseDma Whether to use DMA, not used by default.
280      * @param isCaptureFullOfScreen Whether to take screenshots of all displays on this screen.
281      * @return std::vector<std::shared_ptr<Media::PixelMap>> Vector of screenshot pixel maps.
282      */
283     std::vector<std::shared_ptr<Media::PixelMap>> GetScreenHDRshot(DisplayId displayId,
284         DmErrorCode& errorCode, bool isUseDma = false, bool isCaptureFullOfScreen = false);
285 
286     /**
287      * @brief Get screenshot by user select area.
288      *
289      * @param rect user select area.
290      * @param errorCode error code.
291      * @return PixelMap object of screenshot.
292      */
293     std::shared_ptr<Media::PixelMap> GetSnapshotByPicker(Media::Rect &rect, DmErrorCode* errorCode = nullptr);
294 
295     /**
296      * @brief Get screenshot of the target display.
297      *
298      * @param displayId Display id.
299      * @param rect Rect of screenshot.
300      * @param size Size of screenshot.
301      * @param rotation Parameter of rotation.
302      * @param errorCode error code.
303      * @return PixelMap object of screenshot.
304      */
305     std::shared_ptr<Media::PixelMap> GetScreenshot(DisplayId displayId, const Media::Rect &rect,
306         const Media::Size &size, int rotation, DmErrorCode* errorCode = nullptr);
307 
308     /**
309      * @brief Get screenshot with option.
310      *
311      * @param snapShotConfig Parameter of rotation.
312      * @param errorCode error code.
313      * @return PixelMap object of screenshot.
314      */
315     std::shared_ptr<Media::PixelMap> GetScreenshotwithConfig(const SnapShotConfig &snapShotConfig,
316         DmErrorCode* errorCode = nullptr, bool isUseDma = false);
317 
318     /**
319      * @brief Begin to wake up screen.
320      *
321      * @param reason Reason for power state change.
322      * @return True means begin success, false means begin failed.
323      */
324     bool WakeUpBegin(PowerStateChangeReason reason);
325 
326     /**
327      * @brief Wake up screen end.
328      *
329      * @return True means end success, false means end failed.
330      */
331     bool WakeUpEnd();
332 
333     /**
334      * @brief Begin to suspend the screen.
335      *
336      * @param reason Reason for power state change.
337      * @return True means begin success, false means begin failed.
338      */
339     bool SuspendBegin(PowerStateChangeReason reason);
340 
341     /**
342      * @brief Suspend screen end.
343      *
344      * @return True means suspend screen end success.
345      * @return False means suspend screen end failed.
346      */
347     bool SuspendEnd();
348 
349     /**
350      * @brief Get id of internal screen.
351      *
352      * @return Internal screen id.
353      */
354     ScreenId GetInternalScreenId();
355 
356     /**
357      * @brief Set the screen power state by screen id.
358      *
359      * @param screenId Screen id.
360      * @param state Screen power state.
361      * @param reason Reason for power state change.
362      * @return True means set success, false means set failed.
363      */
364     bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason);
365 
366     /**
367      * @brief Set the Display State object
368      *
369      * @param state State of display.
370      * @param callback Callback for display state.
371      * @return True means set success, false means set failed.
372      */
373     bool SetDisplayState(DisplayState state, DisplayStateCallback callback);
374 
375     /**
376      * @brief Get the state of the target display.
377      *
378      * @param displayId Display id.
379      * @return State of display.
380      */
381     DisplayState GetDisplayState(DisplayId displayId);
382 
383     /**
384      * @brief Try to cancel screenoff action before display power off.
385      *
386      * @return True means cancel screenoff action success.
387      * @return False means cancel screenoff action failed.
388      */
389     bool TryToCancelScreenOff();
390 
391     /**
392      * @brief Set the brightness level of the target screen.
393      *
394      * @param screenId Target screen.
395      * @param level Brightness level.
396      */
397     bool SetScreenBrightness(uint64_t screenId, uint32_t level);
398 
399     /**
400      * @brief Get the brightness level of the target screen.
401      *
402      * @param screenId Screen id.
403      * @return Brightness value of screen.
404      */
405     uint32_t GetScreenBrightness(uint64_t screenId) const;
406 
407     /**
408      * @brief Notify when events of certain types occur.
409      *
410      * @param event Enumerate value of DisplayEvent.
411      */
412     void NotifyDisplayEvent(DisplayEvent event);
413 
414     /**
415      * @brief Freeze target displays.
416      *
417      * @param displayIds Display id needed to freeze.
418      * @return True means freeze success, false means freeze failed.
419      */
420     bool Freeze(std::vector<DisplayId> displayIds);
421 
422     /**
423      * @brief Unfreeze target displays.
424      *
425      * @param displayIds Display id needed to unfreeze.
426      * @return True means unfreeze success, false means unfreeze failed.
427      */
428     bool Unfreeze(std::vector<DisplayId> displayIds);
429 
430     /**
431      * @brief Register a display listener.
432      *
433      * @param listener IDisplayListener.
434      * @return DM_OK means register success, others means register failed.
435      */
436     DMError RegisterDisplayListener(sptr<IDisplayListener> listener);
437 
438     /**
439      * @brief Unregister an existed display listener.
440      *
441      * @param listener IDisplayListener.
442      * @return DM_OK means unregister success, others means unregister failed.
443      */
444     DMError UnregisterDisplayListener(sptr<IDisplayListener> listener);
445 
446     /**
447      * @brief Register a listener for display power events.
448      *
449      * @param listener IDisplayPowerEventListener.
450      * @return DM_OK means register success, others means register failed.
451      */
452     DMError RegisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener);
453 
454     /**
455      * @brief Unregister an existed listener for display power events.
456      *
457      * @param listener IDisplayPowerEventListener.
458      * @return DM_OK means unregister success, others means unregister failed.
459      */
460     DMError UnregisterDisplayPowerEventListener(sptr<IDisplayPowerEventListener> listener);
461 
462     /**
463      * @brief Register a listener for screenshot event.
464      *
465      * @param listener IScreenshotListener.
466      * @return DM_OK means register success, others means register failed.
467      */
468     DMError RegisterScreenshotListener(sptr<IScreenshotListener> listener);
469 
470     /**
471      * @brief Unregister an existed listener for screenshot event.
472      *
473      * @param listener IScreenshotListener.
474      * @return DM_OK means unregister success, others means unregister failed.
475      */
476     DMError UnregisterScreenshotListener(sptr<IScreenshotListener> listener);
477 
478     /**
479      * @brief Register a listener for the event of private window.
480      *
481      * @param listener IPrivateWindowListener.
482      * @return DM_OK means register success, others means register failed.
483      */
484     DMError RegisterPrivateWindowListener(sptr<IPrivateWindowListener> listener);
485 
486     /**
487      * @brief Unregister an existed listener for the event of private window.
488      *
489      * @param listener IPrivateWindowListener.
490      * @return DM_OK means unregister success, others means unregister failed.
491      */
492     DMError UnregisterPrivateWindowListener(sptr<IPrivateWindowListener> listener);
493 
494     /**
495      * @brief Register a listener for the event of private window.
496      *
497      * @param listener IPrivateWindowListChangeListener.
498      * @return DM_OK means register success, others means register failed.
499      */
500     DMError RegisterPrivateWindowListChangeListener(sptr<IPrivateWindowListChangeListener> listener);
501 
502     /**
503      * @brief Unregister an existed listener for the event of private window.
504      *
505      * @param listener IPrivateWindowListChangeListener.
506      * @return DM_OK means unregister success, others means unregister failed.
507      */
508     DMError UnregisterPrivateWindowListChangeListener(sptr<IPrivateWindowListChangeListener> listener);
509 
510     /**
511      * @brief Register a listener for the event of screen fold status changed.
512      *
513      * @param listener IFoldStatusListener.
514      * @return DM_OK means register success, others means register failed.
515      */
516     DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener);
517 
518     /**
519      * @brief Unregister an existed listener for the event of screen fold status changed.
520      *
521      * @param listener IFoldStatusListener.
522      * @return DM_OK means unregister success, others means unregister failed.
523      */
524     DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener);
525 
526     /**
527      * @brief Register a listener for the event of screen fold angle changed.
528      *
529      * @param listener IFoldAngleListener.
530      * @return DM_OK means register success, others means register failed.
531      */
532     DMError RegisterFoldAngleListener(sptr<IFoldAngleListener> listener);
533 
534     /**
535      * @brief Unregister an existed listener for the event of screen fold angle changed.
536      *
537      * @param listener IFoldAngleListener.
538      * @return DM_OK means unregister success, others means unregister failed.
539      */
540     DMError UnregisterFoldAngleListener(sptr<IFoldAngleListener> listener);
541 
542     /**
543      * @brief Register a listener for the event of screen capture status changed.
544      *
545      * @param listener ICaptureStatusListener.
546      * @return DM_OK means register success, others means register failed.
547      */
548     DMError RegisterCaptureStatusListener(sptr<ICaptureStatusListener> listener);
549 
550     /**
551      * @brief Unregister an existed listener for the event of screen capture status changed.
552      *
553      * @param listener ICaptureStatusListener.
554      * @return DM_OK means unregister success, others means unregister failed.
555      */
556     DMError UnregisterCaptureStatusListener(sptr<ICaptureStatusListener> listener);
557 
558     /**
559      * @brief Register an listener when session changed.
560      *
561      * @param listener IDisplayUpdateListener.
562      * @return DM_OK means register success, others means unregister failed.
563      */
564     DMError RegisterDisplayUpdateListener(sptr<IDisplayUpdateListener> listener);
565 
566     /**
567      * @brief Unregister an listener when session changed.
568      *
569      * @param listener IDisplayUpdateListener.
570      * @return DM_OK means unregister success, others means unregister failed.
571      */
572     DMError UnregisterDisplayUpdateListener(sptr<IDisplayUpdateListener> listener);
573 
574     /**
575      * @brief Register a listener for the event of display mode changed.
576      *
577      * @param listener IDisplayModeListener.
578      * @return DM_OK means register success, others means register failed.
579      */
580     DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener);
581 
582     /**
583      * @brief Unregister an existed listener for the event of display mode changed.
584      *
585      * @param listener IDisplayModeListener.
586      * @return DM_OK means unregister success, others means unregister failed.
587      */
588     DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener);
589 
590     /**
591      * @brief Register a listener for the event of screen magnetic state changed.
592      *
593      * @param listener IScreenMagneticStateListener.
594      * @return DM_OK means register success, others means register failed.
595      */
596     DMError RegisterScreenMagneticStateListener(sptr<IScreenMagneticStateListener> listener);
597 
598     /**
599      * @brief Unregister an existed listener for the event of screen magnetic state changed.
600      *
601      * @param listener IScreenMagneticStateListener.
602      * @return DM_OK means unregister success, others means unregister failed.
603      */
604     DMError UnregisterScreenMagneticStateListener(sptr<IScreenMagneticStateListener> listener);
605 
606     /**
607      * @brief Register a listener for the event of available  area changed.
608      *
609      * @param listener IAvailableAreaListener.
610      * @return DM_OK means unregister success, others means unregister failed.
611      */
612     DMError RegisterAvailableAreaListener(sptr<IAvailableAreaListener> listener);
613 
614     /**
615      * @brief Register a listener for the event of available  area changed.
616      *
617      * @param listener IAvailableAreaListener.
618      * @return DM_OK means unregister success, others means unregister failed.
619      */
620     DMError RegisterAvailableAreaListener(sptr<IAvailableAreaListener> listener, DisplayId displayId);
621 
622     /**
623      * @brief UnRegister a listener for the event of available  area changed.
624      *
625      * @param listener IAvailableAreaListener.
626      * @return DM_OK means unregister success, others means unregister failed.
627      */
628     DMError UnregisterAvailableAreaListener(sptr<IAvailableAreaListener> listener);
629 
630     /**
631      * @brief UnRegister a listener for the event of available  area changed.
632      *
633      * @param listener IAvailableAreaListener.
634      * @return DM_OK means unregister success, others means unregister failed.
635      */
636     DMError UnregisterAvailableAreaListener(sptr<IAvailableAreaListener> listener, DisplayId displayId);
637 
638     /**
639      * @brief Add a surface node to the target display.
640      *
641      * @param displayId Target display.
642      * @param surfaceNode SurfaceNode object.
643      * @return DM_OK means add success, others means add failed.
644      */
645     DMError AddSurfaceNodeToDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode);
646 
647     /**
648      * @brief Remove a surface node from the target display.
649      *
650      * @param displayId Target display.
651      * @param surfaceNode SurfaceNode object.
652      * @return DM_OK means remove success, others means remove failed.
653      */
654     DMError RemoveSurfaceNodeFromDisplay(DisplayId displayId, std::shared_ptr<class RSSurfaceNode>& surfaceNode);
655 
656     /**
657      * @brief Check whether the device is foldable.
658      *
659      * @return true means the device is foldable.
660      */
661     bool IsFoldable();
662 
663     /**
664      * @brief Check whether the device is capture.
665      *
666      * @return true means the device is capture.
667      */
668     bool IsCaptured();
669 
670     /**
671      * @brief Get the current fold status of the foldable device.
672      *
673      * @return fold status of device.
674      */
675     FoldStatus GetFoldStatus();
676 
677     /**
678      * @brief Get the display mode of the foldable device.
679      *
680      * @return display mode of the foldable device.
681      */
682     FoldDisplayMode GetFoldDisplayMode();
683 
684     /**
685      * @brief Get the display mode of the foldable device for external.
686      *
687      * @return display mode of the foldable device.
688      */
689     FoldDisplayMode GetFoldDisplayModeForExternal();
690 
691     /**
692      * @brief Change the display mode of the foldable device.
693      *
694      * @param mode target display mode to change.
695      */
696     void SetFoldDisplayMode(const FoldDisplayMode mode);
697 
698     /**
699      * @brief Change the display mode of the foldable device asynchronously.
700      *
701      * @param mode target display mode to change.
702      */
703     void SetFoldDisplayModeAsync(const FoldDisplayMode mode);
704 
705     /**
706      * @brief Change the display mode of the foldable device from js.
707      *
708      * @param mode target display mode to change.
709      * @param reason display mode change reason.
710      * @return DM_OK means set success, others means set failed.
711      */
712     DMError SetFoldDisplayModeFromJs(const FoldDisplayMode mode, std::string reason = "");
713 
714     /**
715      * @brief Set display scale.
716      *
717      * @param screenId screenId used in DisplayManager.
718      * @param scaleX screen scale in x axis.
719      * @param scaleY screen scale in y axis.
720      * @param pivotX screen scale pivot in x axis.
721      * @param pivotY screen scale pivot in y axis.
722      */
723     void SetDisplayScale(ScreenId screenId, float scaleX, float scaleY, float pivotX, float pivotY);
724 
725     /**
726      * @brief Locked fold status.
727      *
728      * @param mode locked fold status is locked.
729      */
730     void SetFoldStatusLocked(bool locked);
731 
732     /**
733      * @brief Locked fold status from js.
734      *
735      * @param locked locked fold status is locked.
736      * @return DM_OK means set success, others means set failed.
737      */
738     DMError SetFoldStatusLockedFromJs(bool locked);
739 
740     /**
741      * @brief Get the fold crease region in the current display mode.
742      *
743      * @return fold crease region in the current display mode.
744      */
745     sptr<FoldCreaseRegion> GetCurrentFoldCreaseRegion();
746 
747     /**
748      * @brief convert screenId to RsScreenId.
749      *
750      * @param screenId screenId used in DisplayManager.
751      * @param rsScreenId screenId used in RenderService.
752      *
753      * @return convert success or not.
754      */
755     bool ConvertScreenIdToRsScreenId(ScreenId screenId, ScreenId& rsScreenId);
756 
757     /**
758      * @brief Set virtual screen black list to RS.
759      *
760      * @param screenId ScreenId used in virtual screen.
761      * @param windowIdList The windowId list to shield on cast screen.
762      * @param surfaceIdList The surfaceId list to shield on cast screen.
763      * @param typeBlackList The surface type list to shield on cast screen.
764     */
765     void SetVirtualScreenBlackList(ScreenId screenId, std::vector<uint64_t>& windowIdList,
766         std::vector<uint64_t> surfaceIdList = {}, std::vector<uint8_t> typeBlackList = {});
767 
768     /**
769      * @brief Set virtual display mute flag to RS.
770      *
771      * @param screenId ScreenId used in virtual screen.
772      * @param muteFlag The mute flag.
773     */
774     void SetVirtualDisplayMuteFlag(ScreenId screenId, bool muteFlag);
775 
776     /**
777      * @brief When casting the screen, the display not be skipped after the physical screen is turned off.
778      *
779      * @param screenId ScreenId used in virtual screen.
780     */
781     void DisablePowerOffRenderControl(ScreenId screenId);
782 
783     /**
784      * @brief get to freeze status with specified pid list
785      *
786      * @param pidList Indicates the calling pid
787      * @param isProxy value is true indicates process status is freeze
788      * @param DM_OK means process status update success, others means update failed.
789     */
790     DMError ProxyForFreeze(std::set<int32_t> pidList, bool isProxy);
791 
792     /**
793      * @brief reset all process freeze status
794      *
795      * @param DM_OK means process status update success, others means update failed.
796     */
797     DMError ResetAllFreezeStatus();
798 
799     /**
800      * @brief get all display physical resolution
801      *
802      * @return all physical resolution
803      */
804     std::vector<DisplayPhysicalResolution> GetAllDisplayPhysicalResolution();
805 
806     /**
807      * @brief set virtual screen security exemption
808      *
809      * @param DM_OK means set exemption is success.
810     */
811     DMError SetVirtualScreenSecurityExemption(ScreenId screenId, uint32_t pid, std::vector<uint64_t>& windowIdList);
812 
813     constexpr static int32_t MAX_RESOLUTION_SIZE_SCREENSHOT = 3840; // max resolution, 4K
814 
815     /**
816      * @brief Add displayId for current ability through Ability Management.
817      *
818      * @param displayId Identifier of the current display.
819      * @param abilityToken Token of the ability.
820      */
821     void AddDisplayIdFromAms(DisplayId displayId, const wptr<IRemoteObject>& abilityToken);
822 
823     /**
824      * @brief Removes the display identifier through the Ability Management.
825      *
826      * @param abilityToken Token of ability.
827      */
828     void RemoveDisplayIdFromAms(const wptr<IRemoteObject>& abilityToken);
829 
830     /**
831      * @brief Get primary display object by means of sync.
832      *
833      * @return primary display.
834      */
835     sptr<Display> GetPrimaryDisplaySync();
836 
837     /**
838      * @brief Get screen capture of the target display.
839      *
840      * @param captureOption screen capture option.
841      * @param errorCode error code.
842      * @return PixelMap object of screen capture.
843      */
844     std::shared_ptr<Media::PixelMap> GetScreenCapture(const CaptureOption& captureOption,
845         DmErrorCode* errorCode = nullptr);
846 
847     /**
848      * @brief Get screenshot with capture option.
849      *
850      * @param captureOption  screen capture option.
851      * @param errorCode error code.
852      * @return PixelMap object of screenshot.
853      */
854     std::shared_ptr<Media::PixelMap> GetScreenshotWithOption(const CaptureOption& captureOption,
855         DmErrorCode* errorCode = nullptr);
856 
857     /**
858      * @brief Get screenshot with capture option.
859      *
860      * @param captureOption  screen capture option.
861      * @param rect Rect of screenshot.
862      * @param size Size of screenshot.
863      * @param rotation Parameter of rotation.
864      * @param errorCode error code.
865      * @return PixelMap object of screenshot.
866      */
867     std::shared_ptr<Media::PixelMap> GetScreenshotWithOption(const CaptureOption& captureOption,
868         const Media::Rect &rect, const Media::Size &size, int rotation, DmErrorCode* errorCode = nullptr);
869 
870     /**
871      * @brief Get SDR and HDR screenshot with capture option.
872      * @param captureOption  Screen capture option.
873      * @param errorCode Error code.
874      * @return std::vector<std::shared_ptr<Media::PixelMap>> Vector of screenshot pixel maps.
875      */
876     std::vector<std::shared_ptr<Media::PixelMap>> GetScreenHDRshotWithOption(
877         const CaptureOption& captureOption, DmErrorCode& errorCode);
878 
879     /**
880      * @brief Get CutoutInfo with rotation
881      *
882      * @param Rotation rotation.
883      * @return CutoutInfo object of default screen.
884      */
885     sptr<CutoutInfo> GetCutoutInfoWithRotation(Rotation rotation);
886 
887     /**
888      * @brief Get screenInfo of display area
889      *
890      * @param DisplayId displayId.
891      * @param DMRect displayArea.
892      * @param ScreenId screenId.
893      * @param DMRect screenArea.
894      * @return DM_OK means process get screenArea success.
895      */
896     DMError GetScreenAreaOfDisplayArea(DisplayId displayId, const DMRect& displayArea,
897         ScreenId& screenId, DMRect& screenArea);
898 
899     /**
900      * @brief Get primary display system dpi.
901      *
902      * @return primary display system dpi.
903      */
904     float GetPrimaryDisplaySystemDpi() const;
905 
906     /**
907      * @brief Convert a relative position to a global position
908      *
909      * @param relativePosition Position relative to current display
910      * @param position Global position convert from  relativePosition
911      * @return DM_OK means process convert position success, others means convert failed.
912      */
913     DMError ConvertRelativeCoordinateToGlobal(const RelativePosition& relativePosition, Position& position);
914 
915     /**
916      * @brief Convert a global position to a relative position
917      *
918      * @param globalPosition Global position
919      * @param relativePosition Relative position convert from globalPosition
920      * @return DM_OK means process convert position success, others means convert failed.
921      */
922     DMError ConvertGlobalCoordinateToRelative(const Position& globalPosition, RelativePosition& relativePosition);
923 
924     /**
925      * @brief Convert a global position to a relative position
926      *
927      * @param globalPosition Global position
928      * @param displayId DisplayId of current display
929      * @param relativePosition Relative position convert from globalPosition
930      * @return DM_OK means process convert position success, others means convert failed.
931      */
932     DMError ConvertGlobalCoordinateToRelativeWithDisplayId(const Position& globalPosition, DisplayId displayId,
933         RelativePosition& relativePosition);
934 
935 private:
936     DisplayManager();
937     ~DisplayManager();
938     void OnRemoteDied();
939 
940     void ShowDisplayIdList(bool isShowLog = false);
941     std::mutex displayOperateMutex_;
942     DisplayId GetCallingAbilityDisplayId();
943     std::vector<std::pair<wptr<IRemoteObject>, DisplayId>> displayIdList_ {};
944 
945     class Impl;
946     std::recursive_mutex mutex_;
947     sptr<Impl> pImpl_;
948     int32_t rotationIndex_ = 0;
949 };
950 } // namespace OHOS::Rosen
951 
952 #endif // FOUNDATION_DM_DISPLAY_MANAGER_H
953