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