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 OHOS_ROSEN_WINDOW_MANAGER_H 17 #define OHOS_ROSEN_WINDOW_MANAGER_H 18 19 #include <memory> 20 #include <mutex> 21 #include <refbase.h> 22 #include <vector> 23 #include <iremote_object.h> 24 #include "wm_single_instance.h" 25 #include "wm_common.h" 26 #include "dm_common.h" 27 #include "focus_change_info.h" 28 #include "window_visibility_info.h" 29 #include "window_drawing_content_info.h" 30 #include "window.h" 31 #include "window_pid_visibility_info.h" 32 33 namespace OHOS { 34 namespace Rosen { 35 struct SystemBarRegionTint { 36 WindowType type_; 37 SystemBarProperty prop_; 38 Rect region_; SystemBarRegionTintSystemBarRegionTint39 SystemBarRegionTint() 40 : type_(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW), prop_(), region_{ 0, 0, 0, 0 } {} SystemBarRegionTintSystemBarRegionTint41 SystemBarRegionTint(WindowType type, SystemBarProperty prop, Rect region) 42 : type_(type), prop_(prop), region_(region) {} 43 }; 44 using SystemBarRegionTints = std::vector<SystemBarRegionTint>; 45 46 struct VisibleWindowNumInfo { 47 uint32_t displayId; 48 uint32_t visibleWindowNum; 49 }; 50 51 struct WindowSnapshotDataPack { 52 std::shared_ptr<Media::PixelMap> pixelMap = nullptr; 53 WMError result = WMError::WM_OK; 54 }; 55 56 /** 57 * @class IWMSConnectionChangedListener 58 * 59 * @brief Listener to observe WMS connection status. 60 */ 61 class IWMSConnectionChangedListener : virtual public RefBase { 62 public: 63 /** 64 * @brief Notify caller when WMS connected 65 * 66 * @param userId ID of the user who has connected to the WMS. 67 * 68 * @param screenId ID of the screen that is connected to the WMS, screenId is currently always 0. 69 */ 70 virtual void OnConnected(int32_t userId, int32_t screenId) = 0; 71 72 /** 73 * @brief Notify caller when WMS disconnected 74 * 75 * @param userId ID of the user who has disconnected to the WMS. 76 * 77 * @param screenId ID of the screen that is disconnected to the WMS, screenId is currently always 0. 78 */ 79 virtual void OnDisconnected(int32_t userId, int32_t screenId) = 0; 80 }; 81 82 /** 83 * @class IFocusChangedListener 84 * 85 * @brief Listener to observe focus changed. 86 */ 87 class IFocusChangedListener : virtual public RefBase { 88 public: 89 /** 90 * @brief Notify caller when window get focus 91 * 92 * @param focusChangeInfo Window info while its focus status changed. 93 */ 94 virtual void OnFocused(const sptr<FocusChangeInfo>& focusChangeInfo) = 0; 95 96 /** 97 * @brief Notify caller when window lose focus 98 * 99 * @param focusChangeInfo Window info while its focus status changed. 100 */ 101 virtual void OnUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo) = 0; 102 }; 103 104 /** 105 * @class IWindowModeChangedListener 106 * 107 * @brief Listener to observe window mode change. 108 */ 109 class IWindowModeChangedListener : virtual public RefBase { 110 public: 111 /** 112 * @brief Notify caller when window mode update. 113 * 114 * @param mode Window mode. 115 */ 116 virtual void OnWindowModeUpdate(WindowModeType mode) = 0; 117 }; 118 119 /** 120 * @class ISystemBarChangedListener 121 * 122 * @brief Listener to observe systembar changed. 123 */ 124 class ISystemBarChangedListener : virtual public RefBase { 125 public: 126 /** 127 * @brief Notify caller when system bar property changed 128 * 129 * @param displayId ID of display. 130 * @param tints Tint of system bar region. 131 */ 132 virtual void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) = 0; 133 }; 134 135 /** 136 * @class IGestureNavigationEnabledChangedListener 137 * 138 * @brief Listener to observe GestureNavigationEnabled changed. 139 */ 140 class IGestureNavigationEnabledChangedListener : virtual public RefBase { 141 public: 142 /** 143 * @brief Notify caller when GestureNavigationEnabled changed. 144 * 145 * @param enable True means set Gesture on, false means set Gesture off. 146 */ 147 virtual void OnGestureNavigationEnabledUpdate(bool enable) = 0; 148 }; 149 150 /** 151 * @class IVisibilityChangedListener 152 * 153 * @brief Listener to observe visibility changed. 154 */ 155 class IVisibilityChangedListener : virtual public RefBase { 156 public: 157 /** 158 * @brief Notify caller when window visibility changed. 159 * 160 * @param windowVisibilityInfo Window visibility info. 161 */ 162 virtual void OnWindowVisibilityChanged(const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfo) = 0; 163 }; 164 165 /** 166 * @class IDrawingContentChangedListener 167 * 168 * @brief Listener to observe drawing content changed. 169 */ 170 class IDrawingContentChangedListener : virtual public RefBase { 171 public: 172 /** 173 * @brief Notify caller when window DrawingContent changed. 174 * 175 * @param windowDrawingInfo Window DrawingContent info. 176 */ 177 virtual void OnWindowDrawingContentChanged(const std::vector<sptr<WindowDrawingContentInfo>>& 178 windowDrawingInfo) = 0; 179 }; 180 181 /** 182 * @class IWindowStyleChangedListener 183 * 184 * @brief Listener to observe windowStyle changed. 185 */ 186 class IWindowStyleChangedListener : virtual public RefBase { 187 public: 188 /** 189 * @brief Notify caller when window style changed. 190 * 191 * @param styleType 192 */ 193 virtual void OnWindowStyleUpdate(WindowStyleType styleType) = 0; 194 }; 195 196 /** 197 * @class IKeyboardCallingWindowDisplayChangedListener 198 * 199 * @brief Observe the display change of keyboard callingWindow. 200 */ 201 class IKeyboardCallingWindowDisplayChangedListener : virtual public RefBase { 202 public: 203 /** 204 * @brief Notify caller when calling window display changed. 205 * 206 * @param callingWindowInfo The information about the calling window. 207 */ 208 virtual void OnCallingWindowDisplayChanged(const CallingWindowInfo& callingWindowInfo) = 0; 209 }; 210 211 /** 212 * @class IWindowPidVisibilityChangedListener 213 * 214 * @brief Listener to observe window visibility that in same pid. 215 */ 216 class IWindowPidVisibilityChangedListener : virtual public RefBase { 217 public: 218 /** 219 * @brief Notify caller when window style changed. 220 * 221 * @param info 222 */ 223 virtual void NotifyWindowPidVisibilityChanged(const sptr<WindowPidVisibilityInfo>& info) = 0; 224 }; 225 226 /** 227 * @class IWindowInfoChangedListener 228 * 229 * @brief Listener to observe window info. 230 */ 231 class IWindowInfoChangedListener : virtual public RefBase { 232 public: 233 IWindowInfoChangedListener() = default; 234 235 virtual ~IWindowInfoChangedListener() = default; 236 237 /** 238 * @brief Notify caller when window Info changed. 239 * 240 * @param windowInfoList 241 */ 242 virtual void OnWindowInfoChanged( 243 const std::vector<std::unordered_map<WindowInfoKey, std::any>>& windowInfoList) = 0; 244 SetInterestInfo(const std::unordered_set<WindowInfoKey> & interestInfo)245 void SetInterestInfo(const std::unordered_set<WindowInfoKey>& interestInfo) { interestInfo_ = interestInfo; } GetInterestInfo()246 const std::unordered_set<WindowInfoKey>& GetInterestInfo() const { return interestInfo_; } AddInterestInfo(WindowInfoKey interestValue)247 void AddInterestInfo(WindowInfoKey interestValue) { interestInfo_.insert(interestValue); } 248 249 private: 250 std::unordered_set<WindowInfoKey> interestInfo_; 251 }; 252 253 /** 254 * @class AccessibilityWindowInfo 255 * 256 * @brief Window info used for Accessibility. 257 */ 258 class AccessibilityWindowInfo : public Parcelable { 259 public: 260 /** 261 * @brief Default construct of AccessibilityWindowInfo. 262 */ 263 AccessibilityWindowInfo() = default; 264 265 /** 266 * @brief Default deconstruct of AccessibilityWindowInfo. 267 */ 268 ~AccessibilityWindowInfo() = default; 269 270 /** 271 * @brief Marshalling AccessibilityWindowInfo. 272 * 273 * @param parcel Package of AccessibilityWindowInfo. 274 * @return True means marshall success, false means marshall failed. 275 */ 276 virtual bool Marshalling(Parcel& parcel) const override; 277 278 /** 279 * @brief Unmarshalling AccessibilityWindowInfo. 280 * 281 * @param parcel Package of AccessibilityWindowInfo. 282 * @return AccessibilityWindowInfo object. 283 */ 284 static AccessibilityWindowInfo* Unmarshalling(Parcel& parcel); 285 286 int32_t wid_; 287 int32_t innerWid_; 288 int32_t uiNodeId_; 289 Rect windowRect_; 290 bool focused_ { false }; 291 bool isDecorEnable_ { false }; 292 DisplayId displayId_; 293 uint32_t layer_; 294 WindowMode mode_; 295 WindowType type_; 296 float scaleVal_; 297 float scaleX_; 298 float scaleY_; 299 std::string bundleName_; 300 std::vector<Rect> touchHotAreas_; 301 }; 302 303 /** 304 * @class AppUseControlInfo 305 * 306 * @brief Window info used for AppUseControlInfo. 307 */ 308 struct AppUseControlInfo : public Parcelable { 309 /** 310 * @brief Marshalling AppUseControlInfo. 311 * 312 * @param parcel Package of AppUseControlInfo. 313 * @return True means marshall success, false means marshall failed. 314 */ MarshallingAppUseControlInfo315 virtual bool Marshalling(Parcel& parcel) const override 316 { 317 return parcel.WriteString(bundleName_) && 318 parcel.WriteInt32(appIndex_) && 319 parcel.WriteBool(isNeedControl_) && 320 parcel.WriteBool(isControlRecentOnly_); 321 } 322 323 /** 324 * @brief Unmarshalling AppUseControlInfo. 325 * 326 * @param parcel Package of AppUseControlInfo. 327 * @return AppUseControlInfo object. 328 */ UnmarshallingAppUseControlInfo329 static AppUseControlInfo* Unmarshalling(Parcel& parcel) 330 { 331 auto info = new AppUseControlInfo(); 332 if (!parcel.ReadString(info->bundleName_) || 333 !parcel.ReadInt32(info->appIndex_) || 334 !parcel.ReadBool(info->isNeedControl_) || 335 !parcel.ReadBool(info->isControlRecentOnly_)) { 336 delete info; 337 return nullptr; 338 } 339 return info; 340 } 341 342 std::string bundleName_ = ""; 343 int32_t appIndex_ = 0; 344 bool isNeedControl_ = false; 345 bool isControlRecentOnly_ = false; 346 }; 347 348 /** 349 * @struct AbilityInfoBase 350 * 351 * @brief ability info. 352 */ 353 struct AbilityInfoBase : public Parcelable { 354 /** 355 * @brief Marshalling AbilityInfoBase. 356 * 357 * @param parcel Package of AbilityInfoBase. 358 * @return True means marshall success, false means marshall failed. 359 */ MarshallingAbilityInfoBase360 bool Marshalling(Parcel& parcel) const override 361 { 362 return parcel.WriteString(bundleName) && 363 parcel.WriteString(moduleName) && 364 parcel.WriteString(abilityName) && 365 parcel.WriteInt32(appIndex); 366 } 367 368 /** 369 * @brief Unmarshalling AbilityInfoBase. 370 * 371 * @param parcel Package of AbilityInfoBase. 372 * @return AbilityInfoBase object. 373 */ UnmarshallingAbilityInfoBase374 static AbilityInfoBase* Unmarshalling(Parcel& parcel) 375 { 376 auto info = new AbilityInfoBase(); 377 if (!parcel.ReadString(info->bundleName) || 378 !parcel.ReadString(info->moduleName) || 379 !parcel.ReadString(info->abilityName) || 380 !parcel.ReadInt32(info->appIndex)) { 381 delete info; 382 return nullptr; 383 } 384 return info; 385 } 386 IsValidAbilityInfoBase387 bool IsValid() const 388 { 389 return !bundleName.empty() && !moduleName.empty() && !abilityName.empty() && appIndex >= 0; 390 } 391 ToKeyStringAbilityInfoBase392 std::string ToKeyString() const 393 { 394 return bundleName + "_" + moduleName + "_" + abilityName + "_" + std::to_string(appIndex); 395 } 396 397 std::string bundleName; 398 std::string moduleName; 399 std::string abilityName; 400 int32_t appIndex = 0; 401 }; 402 403 /** 404 * @class UnreliableWindowInfo 405 * 406 * @brief Unreliable Window Info. 407 */ 408 class UnreliableWindowInfo : public Parcelable { 409 public: 410 /** 411 * @brief Default construct of UnreliableWindowInfo. 412 */ 413 UnreliableWindowInfo() = default; 414 415 /** 416 * @brief Default deconstruct of UnreliableWindowInfo. 417 */ 418 ~UnreliableWindowInfo() = default; 419 420 /** 421 * @brief Marshalling UnreliableWindowInfo. 422 * 423 * @param parcel Package of UnreliableWindowInfo. 424 * @return True means marshall success, false means marshall failed. 425 */ 426 virtual bool Marshalling(Parcel& parcel) const override; 427 428 /** 429 * @brief Unmarshalling UnreliableWindowInfo. 430 * 431 * @param parcel Package of UnreliableWindowInfo. 432 * @return UnreliableWindowInfo object. 433 */ 434 static UnreliableWindowInfo* Unmarshalling(Parcel& parcel); 435 436 int32_t windowId_ { 0 }; 437 Rect windowRect_; 438 uint32_t zOrder_ { 0 }; 439 float floatingScale_ { 1.0f }; 440 float scaleX_ { 1.0f }; 441 float scaleY_ { 1.0f }; 442 }; 443 444 /** 445 * @class IWindowUpdateListener 446 * 447 * @brief Listener to observe window update. 448 */ 449 class IWindowUpdateListener : virtual public RefBase { 450 public: 451 /** 452 * @brief Notify caller when AccessibilityWindowInfo update. 453 * 454 * @param infos Window info used for Accessibility. 455 * @param type Type for window update. 456 */ 457 virtual void OnWindowUpdate(const std::vector<sptr<AccessibilityWindowInfo>>& infos, WindowUpdateType type) = 0; 458 }; 459 460 /** 461 * @class IWaterMarkFlagChangedListener 462 * 463 * @brief Listener to observe water mark flag changed. 464 */ 465 class IWaterMarkFlagChangedListener : virtual public RefBase { 466 public: 467 /** 468 * @brief Notify caller when water mark flag changed. 469 * 470 * @param showWaterMark True means show water mark, false means the opposite. 471 */ 472 virtual void OnWaterMarkFlagUpdate(bool showWaterMark) = 0; 473 }; 474 475 /** 476 * @class IVisibleWindowNumChangedListener 477 * 478 * @brief Listener to observe visible main window num changed. 479 */ 480 class IVisibleWindowNumChangedListener : virtual public RefBase { 481 public: 482 /** 483 * @brief Notify caller when visible window num changed 484 * 485 * @param visibleWindowNum visible window num . 486 */ 487 virtual void OnVisibleWindowNumChange(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo) = 0; 488 }; 489 490 /** 491 * @class ICameraFloatWindowChangedListener 492 * 493 * @brief Listener to observe camera window changed. 494 */ 495 class ICameraFloatWindowChangedListener : virtual public RefBase { 496 public: 497 /** 498 * @brief Notify caller when camera window changed. 499 * 500 * @param accessTokenId Token id of camera window. 501 * @param isShowing True means camera is shown, false means the opposite. 502 */ 503 virtual void OnCameraFloatWindowChange(uint32_t accessTokenId, bool isShowing) = 0; 504 }; 505 506 /** 507 * @class ICameraWindowChangedListener 508 * 509 * @brief Listener to observe camera window changed. 510 */ 511 class ICameraWindowChangedListener : virtual public RefBase { 512 public: 513 /** 514 * @brief Notify caller when camera window changed. 515 * 516 * @param accessTokenId Token id of camera window. 517 * @param isShowing True means camera is shown, false means the opposite. 518 */ 519 virtual void OnCameraWindowChange(uint32_t accessTokenId, bool isShowing) = 0; 520 }; 521 522 /** 523 * @class IDisplayInfoChangedListener 524 * 525 * @brief Listener to observe display information changed. 526 */ 527 class IDisplayInfoChangedListener : virtual public RefBase { 528 public: 529 /** 530 * @brief Notify caller when display information changed. 531 * 532 * @param token token of ability. 533 * @param displayId ID of the display where the main window of the ability is located. 534 * @param density density of the display where the main window of the ability is located. 535 * @param orientation orientation of the display where the main window of the ability is located. 536 */ 537 virtual void OnDisplayInfoChange(const sptr<IRemoteObject>& token, 538 DisplayId displayId, float density, DisplayOrientation orientation) = 0; 539 }; 540 541 /** 542 * @class IPiPStateChangedListener 543 * 544 * @brief Listener to observe PiP State changed. 545 */ 546 class IPiPStateChangedListener : virtual public RefBase { 547 public: 548 /** 549 * @brief Notify caller when PiP State changed. 550 * 551 * @param bundleName the name of the bundle in PiP state changed. 552 * @param isForeground the state of the bundle in PiP State. 553 */ 554 virtual void OnPiPStateChanged(const std::string& bundleName, bool isForeground) = 0; 555 }; 556 557 /** 558 * @class WindowManager 559 * 560 * @brief WindowManager used to manage window. 561 */ 562 class WindowManager { 563 WM_DECLARE_SINGLE_INSTANCE_BASE(WindowManager); 564 friend class WindowManagerAgent; 565 friend class WMSDeathRecipient; 566 friend class SSMDeathRecipient; 567 public: 568 /** 569 * @brief Register WMS connection status changed listener. 570 * @attention Callable only by u0 system user. A process only supports successful registration once. 571 * When the foundation service restarts, you need to re-register the listener. 572 * If you want to re-register, please call UnregisterWMSConnectionChangedListener first. 573 * 574 * @param listener IWMSConnectionChangedListener. 575 * @return WM_OK means register success, others means register failed. 576 */ 577 WMError RegisterWMSConnectionChangedListener(const sptr<IWMSConnectionChangedListener>& listener); 578 579 /** 580 * @brief Unregister WMS connection status changed listener. 581 * @attention Callable only by u0 system user. 582 * 583 * @return WM_OK means unregister success, others means unregister failed. 584 */ 585 WMError UnregisterWMSConnectionChangedListener(); 586 587 /** 588 * @brief Register focus changed listener. 589 * 590 * @param listener IFocusChangedListener. 591 * @return WM_OK means register success, others means register failed. 592 */ 593 WMError RegisterFocusChangedListener(const sptr<IFocusChangedListener>& listener); 594 595 /** 596 * @brief Unregister focus changed listener. 597 * 598 * @param listener IFocusChangedListener. 599 * @return WM_OK means unregister success, others means unregister failed. 600 */ 601 WMError UnregisterFocusChangedListener(const sptr<IFocusChangedListener>& listener); 602 603 /** 604 * @brief Register window mode listener. 605 * 606 * @param listener IWindowModeChangedListener. 607 * @return WM_OK means register success, others means register failed. 608 */ 609 WMError RegisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener); 610 611 /** 612 * @brief Unregister window mode listener. 613 * 614 * @param listener IWindowModeChangedListener. 615 * @return WM_OK means unregister success, others means unregister failed. 616 */ 617 WMError UnregisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener); 618 619 /** 620 * @brief Get window mode type. 621 * 622 * @param void 623 * @return WM_OK means get success, others means get failed. 624 */ 625 WMError GetWindowModeType(WindowModeType& windowModeType) const; 626 627 /** 628 * @brief Register system bar changed listener. 629 * 630 * @param listener ISystemBarChangedListener. 631 * @return WM_OK means register success, others means register failed. 632 */ 633 WMError RegisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener); 634 635 /** 636 * @brief Unregister system bar changed listener. 637 * 638 * @param listener ISystemBarChangedListener. 639 * @return WM_OK means unregister success, others means unregister failed. 640 */ 641 WMError UnregisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener); 642 643 /** 644 * @brief Register window updated listener. 645 * 646 * @param listener IWindowUpdateListener. 647 * @return WM_OK means register success, others means register failed. 648 */ 649 WMError RegisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener); 650 651 /** 652 * @brief Unregister window updated listener. 653 * 654 * @param listener IWindowUpdateListener. 655 * @return WM_OK means unregister success, others means unregister failed. 656 */ 657 WMError UnregisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener); 658 659 /** 660 * @brief Register visibility changed listener. 661 * 662 * @param listener IVisibilityChangedListener. 663 * @return WM_OK means register success, others means register failed. 664 */ 665 WMError RegisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener); 666 667 /** 668 * @brief Unregister visibility changed listener. 669 * 670 * @param listener IVisibilityChangedListener. 671 * @return WM_OK means unregister success, others means unregister failed. 672 */ 673 WMError UnregisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener); 674 675 /** 676 * @brief Register drawingcontent changed listener. 677 * 678 * @param listener IDrawingContentChangedListener. 679 * @return WM_OK means register success, others means register failed. 680 */ 681 WMError RegisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener); 682 683 /** 684 * @brief Unregister drawingcontent changed listener. 685 * 686 * @param listener IDrawingContentChangedListener. 687 * @return WM_OK means unregister success, others means unregister failed. 688 */ 689 WMError UnregisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener); 690 691 /** 692 * @brief Register camera float window changed listener. 693 * 694 * @param listener ICameraFloatWindowChangedListener. 695 * @return WM_OK means register success, others means register failed. 696 */ 697 WMError RegisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener>& listener); 698 699 /** 700 * @brief Unregister camera float window changed listener. 701 * 702 * @param listener ICameraFloatWindowChangedListener. 703 * @return WM_OK means unregister success, others means unregister failed. 704 */ 705 WMError UnregisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener>& listener); 706 707 /** 708 * @brief Register water mark flag changed listener. 709 * 710 * @param listener IWaterMarkFlagChangedListener. 711 * @return WM_OK means register success, others means register failed. 712 */ 713 WMError RegisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener); 714 715 /** 716 * @brief Unregister water mark flag changed listener. 717 * 718 * @param listener IWaterMarkFlagChangedListener. 719 * @return WM_OK means unregister success, others means unregister failed. 720 */ 721 WMError UnregisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener); 722 723 /** 724 * @brief Register gesture navigation enabled changed listener. 725 * 726 * @param listener IGestureNavigationEnabledChangedListener. 727 * @return WM_OK means register success, others means register failed. 728 */ 729 WMError RegisterGestureNavigationEnabledChangedListener( 730 const sptr<IGestureNavigationEnabledChangedListener>& listener); 731 732 /** 733 * @brief Unregister gesture navigation enabled changed listener. 734 * 735 * @param listener IGestureNavigationEnabledChangedListener. 736 * @return WM_OK means unregister success, others means unregister failed. 737 */ 738 WMError UnregisterGestureNavigationEnabledChangedListener( 739 const sptr<IGestureNavigationEnabledChangedListener>& listener); 740 741 /** 742 * @brief register display information changed listener. 743 * 744 * @param token token of ability. 745 * @param listener IDisplayInfoChangedListener. 746 * @return WM_OK means register success, others means register failed. 747 */ 748 WMError RegisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token, 749 const sptr<IDisplayInfoChangedListener>& listener); 750 751 /** 752 * @brief unregister display info changed listener.Before the ability is destroyed, the 753 * UnregisterDisplayInfoChangedListener interface must be invoked. 754 * Otherwise, the sptr token may be destroyed abnormally. 755 * 756 * @param token token of ability. 757 * @param listener IDisplayInfoChangedListener. 758 * @return WM_OK means unregister success, others means unregister failed. 759 */ 760 WMError UnregisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token, 761 const sptr<IDisplayInfoChangedListener>& listener); 762 763 /** 764 * @brief Register window in same pid visibility changed listener. 765 * @caller SA 766 * @permission SA permission 767 * 768 * @param listener IWindowPidVisibilityChangedListener. 769 * @return WM_OK means register success, others means register failed. 770 */ 771 WMError RegisterWindowPidVisibilityChangedListener(const sptr<IWindowPidVisibilityChangedListener>& listener); 772 773 /** 774 * @brief Unregister window in same pid visibility changed listener. 775 * 776 * @param listener IWindowPidVisibilityChangedListener. 777 * @return WM_OK means unregister success, others means unregister failed. 778 */ 779 WMError UnregisterWindowPidVisibilityChangedListener(const sptr<IWindowPidVisibilityChangedListener>& listener); 780 781 /** 782 * @brief notify display information change. 783 * 784 * @param token ability token. 785 * @param displayid ID of the display where the main window of the ability is located 786 * @param density density of the display where the main window of the ability is located. 787 * @param orientation orientation of the display where the main window of the ability is located. 788 * @return WM_OK means notify success, others means notify failed. 789 */ 790 WMError NotifyDisplayInfoChange(const sptr<IRemoteObject>& token, DisplayId displayId, 791 float density, DisplayOrientation orientation); 792 793 /** 794 * @brief Minimize all app window. 795 * 796 * @param displayId Display id. 797 * @return WM_OK means minimize success, others means minimize failed. 798 */ 799 WMError MinimizeAllAppWindows(DisplayId displayId); 800 801 /** 802 * @brief Toggle all app windows to the foreground. 803 * 804 * @return WM_OK means toggle success, others means toggle failed. 805 */ 806 WMError ToggleShownStateForAllAppWindows(); 807 808 /** 809 * @brief Set window layout mode. 810 * 811 * @param mode Window layout mode. 812 * @return WM_OK means set success, others means set failed. 813 */ 814 WMError SetWindowLayoutMode(WindowLayoutMode mode); 815 816 /** 817 * @brief Get accessibility window info. 818 * 819 * @param infos WindowInfos used for Accessibility. 820 * @return WM_OK means get success, others means get failed. 821 */ 822 WMError GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos) const; 823 824 /** 825 * @brief Get unreliable window info. 826 * 827 * @param infos Unreliable Window Info. 828 * @return WM_OK means get success, others means get failed. 829 */ 830 WMError GetUnreliableWindowInfo(int32_t windowId, 831 std::vector<sptr<UnreliableWindowInfo>>& infos) const; 832 833 /** 834 * @brief List window info. 835 * 836 * @param windowInfoOption Option for selecting window info. 837 * @param infos Window info. 838 * @return WM_OK means get success, others means get failed. 839 */ 840 WMError ListWindowInfo(const WindowInfoOption& windowInfoOption, std::vector<sptr<WindowInfo>>& infos) const; 841 842 /** 843 * @brief Get window layout info. 844 * 845 * @param displayId DisplayId of which display to get window layout infos. 846 * @param infos Window layout infos. 847 * @return WM_OK means get success, others means get failed. 848 */ 849 WMError GetAllWindowLayoutInfo(DisplayId displayId, std::vector<sptr<WindowLayoutInfo>>& infos) const; 850 851 /** 852 * @brief Get visibility window info. 853 * 854 * @param infos Visible window infos 855 * @return WM_OK means get success, others means get failed. 856 */ 857 WMError GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos) const; 858 859 /** 860 * @brief Set gesture navigation enabled. 861 * 862 * @param enable True means set gesture on, false means set gesture off. 863 * @return WM_OK means set success, others means set failed. 864 */ 865 WMError SetGestureNavigationEnabled(bool enable) const; 866 867 /** 868 * @brief Get focus window. 869 * 870 * @param focusInfo Focus window info. 871 * @return FocusChangeInfo object about focus window. 872 */ 873 void GetFocusWindowInfo(FocusChangeInfo& focusInfo, DisplayId displayId = DEFAULT_DISPLAY_ID); 874 875 /** 876 * @brief Dump all session info 877 * 878 * @param infos session infos 879 * @return WM_OK means set success, others means set failed. 880 */ 881 WMError DumpSessionAll(std::vector<std::string>& infos); 882 883 /** 884 * @brief Dump session info with id 885 * 886 * @param infos session infos 887 * @return WM_OK means set success, others means set failed. 888 */ 889 WMError DumpSessionWithId(int32_t persistentId, std::vector<std::string>& infos); 890 891 /** 892 * @brief Get uiContent remote object 893 * 894 * @param windowId windowId 895 * @param uiContentRemoteObj uiContentRemoteObj 896 * @return WM_OK if successfully retrieved uiContentRemoteObj 897 */ 898 WMError GetUIContentRemoteObj(int32_t windowId, sptr<IRemoteObject>& uiContentRemoteObj); 899 900 /** 901 * @brief raise window to top by windowId 902 * 903 * @param persistentId this window to raise 904 * @return WM_OK if raise success 905 */ 906 WMError RaiseWindowToTop(int32_t persistentId); 907 908 /** 909 * @brief notify window extension visibility change 910 * 911 * @param pid process id 912 * @param uid user id 913 * @param visible visibility 914 * @return WM_OK means notify success, others means notify failed. 915 */ 916 WMError NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible); 917 918 /** 919 * @brief Shift window focus within the same application. Only main window and subwindow. 920 * 921 * @param sourcePersistentId Window id which the focus shift from 922 * @param targetPersistentId Window id which the focus shift to 923 * @return WM_OK means shift window focus success, others means failed. 924 */ 925 WMError ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId); 926 927 /** 928 * @brief Get snapshot by window id. 929 * 930 * @param windowId Window id which want to snapshot. 931 * @param pixelMap Snapshot output pixel map. 932 * @return WM_OK means get snapshot success, others means failed. 933 */ 934 WMError GetSnapshotByWindowId(int32_t windowId, std::shared_ptr<Media::PixelMap>& pixelMap); 935 936 /** 937 * @brief Register visible main window num changed listener. 938 * 939 * @param listener IVisibleWindowNumChangedListener. 940 * @return WM_OK means register success, others means register failed. 941 */ 942 WMError RegisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener); 943 944 /** 945 * @brief Unregister visible main window num changed listener. 946 * 947 * @param listener IVisibleWindowNumChangedListener. 948 * @return WM_OK means unregister success, others means unregister failed. 949 */ 950 WMError UnregisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener); 951 952 /** 953 * @brief Register WindowStyle changed listener. 954 * 955 * @param listener IWindowStyleChangedListener 956 * @return WM_OK means register success, others means unregister failed. 957 */ 958 WMError RegisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener); 959 960 /** 961 * @brief Unregister WindowStyle changed listener. 962 * 963 * @param listener IWindowStyleChangedListener 964 * @return WM_OK means unregister success, others means unregister failed. 965 */ 966 WMError UnregisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener); 967 968 /** 969 * @brief Register a listener to detect display changes for the keyboard calling window. 970 * 971 * @param listener IKeyboardCallingWindowDisplayChangedListener 972 * @return WM_OK means register success, others means unregister failed. 973 */ RegisterCallingWindowDisplayChangedListener(const sptr<IKeyboardCallingWindowDisplayChangedListener> & listener)974 WMError RegisterCallingWindowDisplayChangedListener( 975 const sptr<IKeyboardCallingWindowDisplayChangedListener>& listener) 976 { 977 return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; 978 } 979 980 /** 981 * @brief Unregister the listener that detects display changes for the keyboard calling window. 982 * 983 * @param listener IKeyboardCallingWindowDisplayChangedListener 984 * @return WM_OK means unregister success, others means unregister failed. 985 */ UnregisterCallingWindowDisplayChangedListener(const sptr<IKeyboardCallingWindowDisplayChangedListener> & listener)986 WMError UnregisterCallingWindowDisplayChangedListener( 987 const sptr<IKeyboardCallingWindowDisplayChangedListener>& listener) 988 { 989 return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; 990 } 991 992 /** 993 * @brief Skip Snapshot for app process. 994 * 995 * @param pid process id 996 * @param skip True means skip, false means not skip. 997 * @return WM_OK means snapshot skip success, others means snapshot skip failed. 998 */ 999 WMError SkipSnapshotForAppProcess(int32_t pid, bool skip); 1000 1001 /** 1002 * @brief Get window style type. 1003 * 1004 * @param windowStyleType WindowType 1005 * @return @return WM_OK means get window style success, others means failed. 1006 */ 1007 WindowStyleType GetWindowStyleType(); 1008 1009 /** 1010 * @brief set process watermark. 1011 * 1012 * @param pid pid 1013 * @param watermarkName watermark picture name 1014 * @param isEnabled add or remove 1015 * @return WM_OK means set process watermark success, others means failed. 1016 */ 1017 WMError SetProcessWatermark(int32_t pid, const std::string& watermarkName, bool isEnabled); 1018 1019 /** 1020 * @brief Get window ids by coordinate. 1021 * 1022 * @param displayId display id 1023 * @param windowNumber indicates the number of query windows 1024 * @param x x-coordinate of the window 1025 * @param y y-coordinate of the window 1026 * @param windowIds array of window id 1027 * @return WM_OK means get success, others means get failed. 1028 */ 1029 WMError GetWindowIdsByCoordinate(DisplayId displayId, int32_t windowNumber, 1030 int32_t x, int32_t y, std::vector<int32_t>& windowIds) const; 1031 1032 /** 1033 * @brief Update screen lock status for app. 1034 * 1035 * @param bundleName BundleName of specific app 1036 * @param isRelease True means screen lock, false means reLock screen lock 1037 * @return WM_OK means update success, others means failed. 1038 */ 1039 WMError UpdateScreenLockStatusForApp(const std::string& bundleName, bool isRelease); 1040 1041 /** 1042 * @brief Get displayId by windowId. 1043 * 1044 * @param windowIds list of window ids that need to get screen ids 1045 * @param windowDisplayIdMap map of windows and displayIds 1046 * @return WM_OK means get success, others means failed. 1047 */ 1048 WMError GetDisplayIdByWindowId(const std::vector<uint64_t>& windowIds, 1049 std::unordered_map<uint64_t, DisplayId>& windowDisplayIdMap); 1050 1051 /** 1052 * @brief Set global drag resize type. 1053 * this priority is highest. 1054 * 1055 * @param dragResizeType global drag resize type to set 1056 * @return WM_OK means get success, others means failed. 1057 */ 1058 WMError SetGlobalDragResizeType(DragResizeType dragResizeType); 1059 1060 /** 1061 * @brief Get global drag resize type. 1062 * if it is RESIZE_TYPE_UNDEFINED, return default value. 1063 * 1064 * @param dragResizeType global drag resize type to get 1065 * @return WM_OK means get success, others means failed. 1066 */ 1067 WMError GetGlobalDragResizeType(DragResizeType& dragResizeType); 1068 1069 /** 1070 * @brief Set drag resize type of specific app. 1071 * only when global value is RESIZE_TYPE_UNDEFINED, this value take effect. 1072 * 1073 * @param bundleName bundleName of specific app 1074 * @param dragResizeType drag resize type to set 1075 * @return WM_OK means get success, others means failed. 1076 */ 1077 WMError SetAppDragResizeType(const std::string& bundleName, DragResizeType dragResizeType); 1078 1079 /** 1080 * @brief Get drag resize type of specific app. 1081 * effective order: 1082 * 1. global value 1083 * 2. app value 1084 * 3. default value 1085 * 1086 * @param bundleName bundleName of specific app 1087 * @param dragResizeType drag resize type to get 1088 * @return WM_OK means get success, others means failed. 1089 */ 1090 WMError GetAppDragResizeType(const std::string& bundleName, DragResizeType& dragResizeType); 1091 1092 /** 1093 * @brief Shift window pointer event within the same application. Only main window and subwindow. 1094 * 1095 * @param sourceWindowId Window id which the pointer event shift from 1096 * @param targetWindowId Window id which the pointer event shift to 1097 * @return WM_OK means shift window pointer event success, others means failed. 1098 */ 1099 WMError ShiftAppWindowPointerEvent(int32_t sourceWindowId, int32_t targetWindowId); 1100 1101 /** 1102 * @brief Request focus. 1103 * 1104 * @param persistentId previous window id 1105 * @param isFocused true if request focus, otherwise false, default is true 1106 * @param byForeground true if by foreground, otherwise false, default is true 1107 * @param reason the reason for requesting focus, default is SA_REQUEST 1108 * @return WM_OK means request focus success, others means failed. 1109 */ 1110 WMError RequestFocus(int32_t persistentId, bool isFocused = true, 1111 bool byForeground = true, WindowFocusChangeReason reason = WindowFocusChangeReason::SA_REQUEST); 1112 1113 /** 1114 * @brief Minimize window within the vector of windowid, Only main window. 1115 * 1116 * @param WindowId window id which to minimize 1117 * @return WM_OK means window minimize event success, others means failed. 1118 */ 1119 WMError MinimizeByWindowId(const std::vector<int32_t>& windowIds); 1120 1121 /** 1122 * @brief Register window info change callback. 1123 * 1124 * @param observedInfo Property which to observe. 1125 * @param listener Listener to observe window info. 1126 * @return WM_OK means register success, others means failed. 1127 */ 1128 WMError RegisterWindowInfoChangeCallback(const std::unordered_set<WindowInfoKey>& observedInfo, 1129 const sptr<IWindowInfoChangedListener>& listener); 1130 1131 /** 1132 * @brief Unregister window info change callback. 1133 * 1134 * @param observedInfo Property which to observe. 1135 * @param listener Listener to observe window info. 1136 * @return WM_OK means unregister success, others means failed. 1137 */ 1138 WMError UnregisterWindowInfoChangeCallback(const std::unordered_set<WindowInfoKey>& observedInfo, 1139 const sptr<IWindowInfoChangedListener>& listener); 1140 1141 private: 1142 WindowManager(); 1143 ~WindowManager(); 1144 std::recursive_mutex mutex_; 1145 class Impl; 1146 std::unique_ptr<Impl> pImpl_; 1147 bool destroyed_ = false; 1148 1149 void OnWMSConnectionChanged(int32_t userId, int32_t screenId, bool isConnected) const; 1150 void UpdateFocusStatus(uint32_t windowId, const sptr<IRemoteObject>& abilityToken, WindowType windowType, 1151 DisplayId displayId, bool focused) const; 1152 void UpdateFocusChangeInfo(const sptr<FocusChangeInfo>& focusChangeInfo, bool focused) const; 1153 void UpdateWindowModeTypeInfo(WindowModeType type) const; 1154 void UpdateSystemBarRegionTints(DisplayId displayId, const SystemBarRegionTints& tints) const; 1155 void NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos, 1156 WindowUpdateType type) const; 1157 void UpdateWindowVisibilityInfo( 1158 const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos) const; 1159 void UpdateWindowDrawingContentInfo( 1160 const std::vector<sptr<WindowDrawingContentInfo>>& windowDrawingContentInfos) const; 1161 void UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing) const; 1162 void NotifyWaterMarkFlagChangedResult(bool showWaterMark) const; 1163 void NotifyGestureNavigationEnabledResult(bool enable) const; 1164 void UpdateVisibleWindowNum(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo); 1165 WMError NotifyWindowStyleChange(WindowStyleType type); 1166 void NotifyWindowPidVisibilityChanged(const sptr<WindowPidVisibilityInfo>& info) const; 1167 WMError ProcessRegisterWindowInfoChangeCallback(WindowInfoKey observedInfo, 1168 const sptr<IWindowInfoChangedListener>& listener); 1169 WMError ProcessUnregisterWindowInfoChangeCallback(WindowInfoKey observedInfo, 1170 const sptr<IWindowInfoChangedListener>& listener); 1171 WMError RegisterVisibilityStateChangedListener(const sptr<IWindowInfoChangedListener>& listener); 1172 WMError UnregisterVisibilityStateChangedListener(const sptr<IWindowInfoChangedListener>& listener); 1173 }; 1174 } // namespace Rosen 1175 } // namespace OHOS 1176 1177 #endif // OHOS_ROSEN_WINDOW_MANAGER_H 1178