• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_DM_SCREEN_MANAGER_H
17 #define FOUNDATION_DM_SCREEN_MANAGER_H
18 
19 #include <refbase.h>
20 #include "screen.h"
21 #include "dm_common.h"
22 #include "screen_group.h"
23 #include "wm_single_instance.h"
24 #include "wm_single_instance.h"
25 
26 namespace OHOS::Rosen {
27 class ScreenManager : public RefBase {
28 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManager);
29 friend class DMSDeathRecipient;
30 public:
31     class IScreenListener : public virtual RefBase {
32     public:
33         /**
34          * @brief Notify when a new screen is connected.
35          */
36         virtual void OnConnect(ScreenId) = 0;
37 
38         /**
39          * @brief Notify when a screen is disconnected.
40          */
41         virtual void OnDisconnect(ScreenId) = 0;
42 
43         /**
44          * @brief Notify when state of the screen is changed.
45          */
46         virtual void OnChange(ScreenId) = 0;
47     };
48 
49     class IScreenGroupListener : public virtual RefBase {
50     public:
51         /**
52          * @brief Notify when state of the screenGroup is changed.
53          */
54         virtual void OnChange(const std::vector<ScreenId>&, ScreenGroupChangeEvent) = 0;
55     };
56 
57     class IVirtualScreenGroupListener : public virtual RefBase {
58     public:
59         struct ChangeInfo {
60             ScreenGroupChangeEvent event;
61             std::string trigger;
62             std::vector<ScreenId> ids;
63         };
64         /**
65          * @brief Notify when an event related to screen mirror occurs.
66          *
67          * @param info Change info of screen mirror.
68          */
OnMirrorChange(const ChangeInfo & info)69         virtual void OnMirrorChange([[maybe_unused]]const ChangeInfo& info) {}
70     };
71 
72     /**
73      * @brief Get the screen object by screen id.
74      *
75      * @param screenId Screen id.
76      * @return Screen object.
77      */
78     sptr<Screen> GetScreenById(ScreenId screenId);
79 
80     /**
81      * @brief Get the screen group object by groupId.
82      *
83      * @param groupId Screen group id.
84      * @return ScreenGroup object.
85      */
86     sptr<ScreenGroup> GetScreenGroup(ScreenId groupId);
87 
88     /**
89      * @brief Get all screens object.
90      *
91      * @param screens All screen objects.
92      * @return DM_OK means get success, others means get failed.
93      */
94     DMError GetAllScreens(std::vector<sptr<Screen>>& screens);
95 
96     /**
97      * @brief Make screens as expand-screen.
98      *
99      * @param options Option of expand.
100      * @param screenGroupId Screen group id.
101      * @return DM_OK means make expand success, others means make expand failed.
102      */
103     DMError MakeExpand(const std::vector<ExpandOption>& options, ScreenId& screenGroupId);
104 
105     /**
106      * @brief Make screens as mirror-screen
107      *
108      * @param mainScreenId Main screen id.
109      * @param mirrorScreenId Mirror screen ids.
110      * @param screenGroupId Screen group id.
111      * @return DM_OK means make mirror success, others means make mirror failed.
112      */
113     DMError MakeMirror(ScreenId mainScreenId, std::vector<ScreenId> mirrorScreenId, ScreenId& screenGroupId);
114 
115     /**
116      * @brief Stop expand screens.
117      *
118      * @param expandScreenIds Expand screen ids.
119      * @return DM_OK means stop expand success, others means stop expand failed.
120      */
121     DMError StopExpand(const std::vector<ScreenId>& expandScreenIds);
122 
123     /**
124      * @brief Stop mirror screens.
125      *
126      * @param mirrorScreenIds Mirror screen ids.
127      * @return DM_OK means stop mirror success, others means stop mirror failed.
128      */
129     DMError StopMirror(const std::vector<ScreenId>& mirrorScreenIds);
130 
131     /**
132      * @brief Remove virtual screen from group.
133      *
134      * @param screens Screen ids.
135      * @return DM_OK means remove success, others means remove failed.
136      */
137     DMError RemoveVirtualScreenFromGroup(std::vector<ScreenId> screens);
138 
139     /**
140      * @brief Create virtual screen.
141      *
142      * @param option Indicates the options of the virtual screen.
143      * @return Screen id.
144      */
145     ScreenId CreateVirtualScreen(VirtualScreenOption option);
146 
147     /**
148      * @brief Destroy virtual screen.
149      *
150      * @param screenId Indicates the screen id of the virtual screen.
151      * @return DM_OK means destroy success, others means destroy failed.
152      */
153     DMError DestroyVirtualScreen(ScreenId screenId);
154 
155     /**
156      * @brief Set surface for the virtual screen.
157      *
158      * @param screenId Screen id.
159      * @param surface Surface object.
160      * @return DM_OK means set success, others means set failed.
161      */
162     DMError SetVirtualScreenSurface(ScreenId screenId, sptr<Surface> surface);
163 
164     /**
165      * @brief Set the screen power states for all screens.
166      *
167      * @param state Screen power state.
168      * @param reason Reason for power state change.
169      * @return True means set success, false means set failed.
170      */
171     bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason);
172 
173     /**
174      * @brief Get screen power state.
175      *
176      * @param screenId Screen id.
177      * @return Power state of screen.
178      */
179     ScreenPowerState GetScreenPower(ScreenId screenId);
180 
181     /**
182      * @brief Set screen rotation lock status.
183      *
184      * @param isLocked True means forbide to rotate screen, false means the opposite.
185      * @return DM_OK means set success, others means set failed.
186      */
187     DMError SetScreenRotationLocked(bool isLocked);
188 
189     /**
190      * @brief Get screen rotation lock status.
191      *
192      * @param isLocked Query the rotation lock status.
193      * @return DM_OK means query success, others means query failed.
194      */
195     DMError IsScreenRotationLocked(bool& isLocked);
196 
197     /**
198      * @brief Register screen listener.
199      *
200      * @param listener IScreenListener.
201      * @return DM_OK means register success, others means register failed.
202      */
203     DMError RegisterScreenListener(sptr<IScreenListener> listener);
204 
205     /**
206      * @brief Unregister screen listener.
207      *
208      * @param listener IScreenListener.
209      * @return DM_OK means unregister success, others means unregister failed.
210      */
211     DMError UnregisterScreenListener(sptr<IScreenListener> listener);
212 
213     /**
214      * @brief Register screen group listener.
215      *
216      * @param listener IScreenGroupListener.
217      * @return DM_OK means register success, others means register failed.
218      */
219     DMError RegisterScreenGroupListener(sptr<IScreenGroupListener> listener);
220 
221     /**
222      * @brief Unregister screen group listener.
223      *
224      * @param listener IScreenGroupListener.
225      * @return DM_OK means unregister success, others means unregister failed.
226      */
227     DMError UnregisterScreenGroupListener(sptr<IScreenGroupListener> listener);
228 
229     /**
230      * @brief Register virtual screen group listener.
231      *
232      * @param listener IVirtualScreenGroupListener.
233      * @return DM_OK means register success, others means register failed.
234      */
235     DMError RegisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener);
236 
237     /**
238      * @brief Unregister virtual screen group listener.
239      *
240      * @param listener IVirtualScreenGroupListener.
241      * @return DM_OK means unregister success, others means unregister failed.
242      */
243     DMError UnregisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener);
244 private:
245     ScreenManager();
246     ~ScreenManager();
247     void OnRemoteDied();
248 
249     class Impl;
250     sptr<Impl> pImpl_;
251 };
252 } // namespace OHOS::Rosen
253 
254 #endif // FOUNDATION_DM_SCREEN_MANAGER_H