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