• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef 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