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