1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#ifndef FOUNDATION_DM_SCREEN_MANAGER_H
17e0dac50fSopenharmony_ci#define FOUNDATION_DM_SCREEN_MANAGER_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <refbase.h>
20e0dac50fSopenharmony_ci#include "screen.h"
21e0dac50fSopenharmony_ci#include "dm_common.h"
22e0dac50fSopenharmony_ci#include "screen_group.h"
23e0dac50fSopenharmony_ci#include "wm_single_instance.h"
24e0dac50fSopenharmony_ci#include "wm_single_instance.h"
25e0dac50fSopenharmony_ci
26e0dac50fSopenharmony_cinamespace OHOS::Rosen {
27e0dac50fSopenharmony_ciclass ScreenManager : public RefBase {
28e0dac50fSopenharmony_ciWM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManager);
29e0dac50fSopenharmony_cifriend class DMSDeathRecipient;
30e0dac50fSopenharmony_cipublic:
31e0dac50fSopenharmony_ci    class IScreenListener : public virtual RefBase {
32e0dac50fSopenharmony_ci    public:
33e0dac50fSopenharmony_ci        /**
34e0dac50fSopenharmony_ci         * @brief Notify when a new screen is connected.
35e0dac50fSopenharmony_ci         */
36e0dac50fSopenharmony_ci        virtual void OnConnect(ScreenId) = 0;
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ci        /**
39e0dac50fSopenharmony_ci         * @brief Notify when a screen is disconnected.
40e0dac50fSopenharmony_ci         */
41e0dac50fSopenharmony_ci        virtual void OnDisconnect(ScreenId) = 0;
42e0dac50fSopenharmony_ci
43e0dac50fSopenharmony_ci        /**
44e0dac50fSopenharmony_ci         * @brief Notify when state of the screen is changed.
45e0dac50fSopenharmony_ci         */
46e0dac50fSopenharmony_ci        virtual void OnChange(ScreenId) = 0;
47e0dac50fSopenharmony_ci    };
48e0dac50fSopenharmony_ci
49e0dac50fSopenharmony_ci    class IScreenGroupListener : public virtual RefBase {
50e0dac50fSopenharmony_ci    public:
51e0dac50fSopenharmony_ci        /**
52e0dac50fSopenharmony_ci         * @brief Notify when state of the screenGroup is changed.
53e0dac50fSopenharmony_ci         */
54e0dac50fSopenharmony_ci        virtual void OnChange(const std::vector<ScreenId>&, ScreenGroupChangeEvent) = 0;
55e0dac50fSopenharmony_ci    };
56e0dac50fSopenharmony_ci
57e0dac50fSopenharmony_ci    class IVirtualScreenGroupListener : public virtual RefBase {
58e0dac50fSopenharmony_ci    public:
59e0dac50fSopenharmony_ci        struct ChangeInfo {
60e0dac50fSopenharmony_ci            ScreenGroupChangeEvent event;
61e0dac50fSopenharmony_ci            std::string trigger;
62e0dac50fSopenharmony_ci            std::vector<ScreenId> ids;
63e0dac50fSopenharmony_ci        };
64e0dac50fSopenharmony_ci        /**
65e0dac50fSopenharmony_ci         * @brief Notify when an event related to screen mirror occurs.
66e0dac50fSopenharmony_ci         *
67e0dac50fSopenharmony_ci         * @param info Change info of screen mirror.
68e0dac50fSopenharmony_ci         */
69e0dac50fSopenharmony_ci        virtual void OnMirrorChange([[maybe_unused]]const ChangeInfo& info) {}
70e0dac50fSopenharmony_ci    };
71e0dac50fSopenharmony_ci
72e0dac50fSopenharmony_ci    /**
73e0dac50fSopenharmony_ci     * @brief Get the screen object by screen id.
74e0dac50fSopenharmony_ci     *
75e0dac50fSopenharmony_ci     * @param screenId Screen id.
76e0dac50fSopenharmony_ci     * @return Screen object.
77e0dac50fSopenharmony_ci     */
78e0dac50fSopenharmony_ci    sptr<Screen> GetScreenById(ScreenId screenId);
79e0dac50fSopenharmony_ci
80e0dac50fSopenharmony_ci    /**
81e0dac50fSopenharmony_ci     * @brief Get the screen group object by groupId.
82e0dac50fSopenharmony_ci     *
83e0dac50fSopenharmony_ci     * @param groupId Screen group id.
84e0dac50fSopenharmony_ci     * @return ScreenGroup object.
85e0dac50fSopenharmony_ci     */
86e0dac50fSopenharmony_ci    sptr<ScreenGroup> GetScreenGroup(ScreenId groupId);
87e0dac50fSopenharmony_ci
88e0dac50fSopenharmony_ci    /**
89e0dac50fSopenharmony_ci     * @brief Get all screens object.
90e0dac50fSopenharmony_ci     *
91e0dac50fSopenharmony_ci     * @param screens All screen objects.
92e0dac50fSopenharmony_ci     * @return DM_OK means get success, others means get failed.
93e0dac50fSopenharmony_ci     */
94e0dac50fSopenharmony_ci    DMError GetAllScreens(std::vector<sptr<Screen>>& screens);
95e0dac50fSopenharmony_ci
96e0dac50fSopenharmony_ci    /**
97e0dac50fSopenharmony_ci     * @brief Make screens as expand-screen.
98e0dac50fSopenharmony_ci     *
99e0dac50fSopenharmony_ci     * @param options Option of expand.
100e0dac50fSopenharmony_ci     * @param screenGroupId Screen group id.
101e0dac50fSopenharmony_ci     * @return DM_OK means make expand success, others means make expand failed.
102e0dac50fSopenharmony_ci     */
103e0dac50fSopenharmony_ci    DMError MakeExpand(const std::vector<ExpandOption>& options, ScreenId& screenGroupId);
104e0dac50fSopenharmony_ci
105e0dac50fSopenharmony_ci    /**
106e0dac50fSopenharmony_ci     * @brief Make screens as mirror-screen
107e0dac50fSopenharmony_ci     *
108e0dac50fSopenharmony_ci     * @param mainScreenId Main screen id.
109e0dac50fSopenharmony_ci     * @param mirrorScreenId Mirror screen ids.
110e0dac50fSopenharmony_ci     * @param screenGroupId Screen group id.
111e0dac50fSopenharmony_ci     * @return DM_OK means make mirror success, others means make mirror failed.
112e0dac50fSopenharmony_ci     */
113e0dac50fSopenharmony_ci    DMError MakeMirror(ScreenId mainScreenId, std::vector<ScreenId> mirrorScreenId, ScreenId& screenGroupId);
114e0dac50fSopenharmony_ci
115e0dac50fSopenharmony_ci     /**
116e0dac50fSopenharmony_ci     * @brief Make screens as mirror-screen
117e0dac50fSopenharmony_ci     *
118e0dac50fSopenharmony_ci     * @param mainScreenId Main screen id.
119e0dac50fSopenharmony_ci     * @param secondaryScreenId secondary screen id.
120e0dac50fSopenharmony_ci     * @param screenMode Screen Combination Mode.
121e0dac50fSopenharmony_ci     * @return DM_OK means make mirror success, others means make mirror failed.
122e0dac50fSopenharmony_ci     */
123e0dac50fSopenharmony_ci    DMError SetMultiScreenMode(ScreenId mainScreenId, ScreenId secondaryScreenId,
124e0dac50fSopenharmony_ci        MultiScreenMode screenMode);
125e0dac50fSopenharmony_ci
126e0dac50fSopenharmony_ci     /**
127e0dac50fSopenharmony_ci     * @brief Set Screen Relative Position
128e0dac50fSopenharmony_ci     *
129e0dac50fSopenharmony_ci     * @param mainScreenOptions Main screen id and position.
130e0dac50fSopenharmony_ci     * @param secondScreenOption secondary screen id and position.
131e0dac50fSopenharmony_ci     * @return DM_OK means make mirror success, others means make mirror failed.
132e0dac50fSopenharmony_ci     */
133e0dac50fSopenharmony_ci    DMError SetMultiScreenRelativePosition(MultiScreenPositionOptions mainScreenOptions,
134e0dac50fSopenharmony_ci        MultiScreenPositionOptions secondScreenOption);
135e0dac50fSopenharmony_ci
136e0dac50fSopenharmony_ci    /**
137e0dac50fSopenharmony_ci    * @brief Make screens as unique-screen.
138e0dac50fSopenharmony_ci    *
139e0dac50fSopenharmony_ci    * @param screenIds Unique screen ids.
140e0dac50fSopenharmony_ci    * @return DM_OK means make unique screen success, others means make unique failed.
141e0dac50fSopenharmony_ci    */
142e0dac50fSopenharmony_ci    DMError MakeUniqueScreen(const std::vector<ScreenId>& screenIds);
143e0dac50fSopenharmony_ci
144e0dac50fSopenharmony_ci    /**
145e0dac50fSopenharmony_ci     * @brief Stop expand screens.
146e0dac50fSopenharmony_ci     *
147e0dac50fSopenharmony_ci     * @param expandScreenIds Expand screen ids.
148e0dac50fSopenharmony_ci     * @return DM_OK means stop expand success, others means stop expand failed.
149e0dac50fSopenharmony_ci     */
150e0dac50fSopenharmony_ci    DMError StopExpand(const std::vector<ScreenId>& expandScreenIds);
151e0dac50fSopenharmony_ci
152e0dac50fSopenharmony_ci    /**
153e0dac50fSopenharmony_ci     * @brief Stop mirror screens.
154e0dac50fSopenharmony_ci     *
155e0dac50fSopenharmony_ci     * @param mirrorScreenIds Mirror screen ids.
156e0dac50fSopenharmony_ci     * @return DM_OK means stop mirror success, others means stop mirror failed.
157e0dac50fSopenharmony_ci     */
158e0dac50fSopenharmony_ci    DMError StopMirror(const std::vector<ScreenId>& mirrorScreenIds);
159e0dac50fSopenharmony_ci
160e0dac50fSopenharmony_ci    /**
161e0dac50fSopenharmony_ci     * @brief Disable/enable global mirror screen.
162e0dac50fSopenharmony_ci     *
163e0dac50fSopenharmony_ci     * @param disableOrNot disable mirror screen or not.
164e0dac50fSopenharmony_ci     * @return DM_OK means disable or enable mirror success, others means failed.
165e0dac50fSopenharmony_ci     */
166e0dac50fSopenharmony_ci    DMError DisableMirror(bool disableOrNot);
167e0dac50fSopenharmony_ci
168e0dac50fSopenharmony_ci    /**
169e0dac50fSopenharmony_ci     * @brief Remove virtual screen from group.
170e0dac50fSopenharmony_ci     *
171e0dac50fSopenharmony_ci     * @param screens Screen ids.
172e0dac50fSopenharmony_ci     * @return DM_OK means remove success, others means remove failed.
173e0dac50fSopenharmony_ci     */
174e0dac50fSopenharmony_ci    DMError RemoveVirtualScreenFromGroup(std::vector<ScreenId> screens);
175e0dac50fSopenharmony_ci
176e0dac50fSopenharmony_ci    /**
177e0dac50fSopenharmony_ci     * @brief Create virtual screen.
178e0dac50fSopenharmony_ci     *
179e0dac50fSopenharmony_ci     * @param option Indicates the options of the virtual screen.
180e0dac50fSopenharmony_ci     * @return Screen id.
181e0dac50fSopenharmony_ci     */
182e0dac50fSopenharmony_ci    ScreenId CreateVirtualScreen(VirtualScreenOption option);
183e0dac50fSopenharmony_ci
184e0dac50fSopenharmony_ci    /**
185e0dac50fSopenharmony_ci     * @brief Destroy virtual screen.
186e0dac50fSopenharmony_ci     *
187e0dac50fSopenharmony_ci     * @param screenId Indicates the screen id of the virtual screen.
188e0dac50fSopenharmony_ci     * @return DM_OK means destroy success, others means destroy failed.
189e0dac50fSopenharmony_ci     */
190e0dac50fSopenharmony_ci    DMError DestroyVirtualScreen(ScreenId screenId);
191e0dac50fSopenharmony_ci
192e0dac50fSopenharmony_ci    /**
193e0dac50fSopenharmony_ci     * @brief Set surface for the virtual screen.
194e0dac50fSopenharmony_ci     *
195e0dac50fSopenharmony_ci     * @param screenId Screen id.
196e0dac50fSopenharmony_ci     * @param surface Surface object.
197e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
198e0dac50fSopenharmony_ci     */
199e0dac50fSopenharmony_ci    DMError SetVirtualScreenSurface(ScreenId screenId, sptr<Surface> surface);
200e0dac50fSopenharmony_ci
201e0dac50fSopenharmony_ci    /**
202e0dac50fSopenharmony_ci     * @brief Resize virtual screen
203e0dac50fSopenharmony_ci     *
204e0dac50fSopenharmony_ci     * @param screenId the id of virtual screen to be resized.
205e0dac50fSopenharmony_ci     * @param width the new width.
206e0dac50fSopenharmony_ci     * @param height the new height.
207e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
208e0dac50fSopenharmony_ci     */
209e0dac50fSopenharmony_ci    DMError ResizeVirtualScreen(ScreenId screenId, uint32_t width, uint32_t height);
210e0dac50fSopenharmony_ci
211e0dac50fSopenharmony_ci    /**
212e0dac50fSopenharmony_ci     * @brief Set buffer auto rotate
213e0dac50fSopenharmony_ci     *
214e0dac50fSopenharmony_ci     * @param screenId Screen id.
215e0dac50fSopenharmony_ci     * @param bufferRotation auto rotate
216e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
217e0dac50fSopenharmony_ci     */
218e0dac50fSopenharmony_ci    DMError SetVirtualMirrorScreenCanvasRotation(ScreenId screenId, bool canvasRotation);
219e0dac50fSopenharmony_ci
220e0dac50fSopenharmony_ci    /**
221e0dac50fSopenharmony_ci     * @brief Set virtual screen scale mode
222e0dac50fSopenharmony_ci     *
223e0dac50fSopenharmony_ci     * @param screenId Screen id.
224e0dac50fSopenharmony_ci     * @param scaleMode scale mode
225e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
226e0dac50fSopenharmony_ci     */
227e0dac50fSopenharmony_ci    DMError SetVirtualMirrorScreenScaleMode(ScreenId screenId, ScreenScaleMode scaleMode);
228e0dac50fSopenharmony_ci
229e0dac50fSopenharmony_ci    /**
230e0dac50fSopenharmony_ci     * @brief Set the screen power state on the specified screen.
231e0dac50fSopenharmony_ci     *
232e0dac50fSopenharmony_ci     * @param screenId Screen id.
233e0dac50fSopenharmony_ci     * @param state Screen power state.
234e0dac50fSopenharmony_ci     * @param reason Reason for power state change.
235e0dac50fSopenharmony_ci     * @return True means set success, false means set failed.
236e0dac50fSopenharmony_ci     */
237e0dac50fSopenharmony_ci    bool SetSpecifiedScreenPower(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason);
238e0dac50fSopenharmony_ci
239e0dac50fSopenharmony_ci    /**
240e0dac50fSopenharmony_ci     * @brief Set the screen power states for all screens.
241e0dac50fSopenharmony_ci     *
242e0dac50fSopenharmony_ci     * @param state Screen power state.
243e0dac50fSopenharmony_ci     * @param reason Reason for power state change.
244e0dac50fSopenharmony_ci     * @return True means set success, false means set failed.
245e0dac50fSopenharmony_ci     */
246e0dac50fSopenharmony_ci    bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason);
247e0dac50fSopenharmony_ci
248e0dac50fSopenharmony_ci    /**
249e0dac50fSopenharmony_ci     * @brief Get screen power state.
250e0dac50fSopenharmony_ci     *
251e0dac50fSopenharmony_ci     * @param screenId Screen id.
252e0dac50fSopenharmony_ci     * @return Power state of screen.
253e0dac50fSopenharmony_ci     */
254e0dac50fSopenharmony_ci    ScreenPowerState GetScreenPower(ScreenId screenId);
255e0dac50fSopenharmony_ci
256e0dac50fSopenharmony_ci    /**
257e0dac50fSopenharmony_ci     * @brief Set screen rotation lock status.
258e0dac50fSopenharmony_ci     *
259e0dac50fSopenharmony_ci     * @param isLocked True means forbid to rotate screen, false means the opposite.
260e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
261e0dac50fSopenharmony_ci     */
262e0dac50fSopenharmony_ci    DMError SetScreenRotationLocked(bool isLocked);
263e0dac50fSopenharmony_ci
264e0dac50fSopenharmony_ci    /**
265e0dac50fSopenharmony_ci     * @brief Set screen rotation lock status from js.
266e0dac50fSopenharmony_ci     *
267e0dac50fSopenharmony_ci     * @param isLocked True means forbid to rotate screen, false means the opposite.
268e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means set failed.
269e0dac50fSopenharmony_ci     */
270e0dac50fSopenharmony_ci    DMError SetScreenRotationLockedFromJs(bool isLocked);
271e0dac50fSopenharmony_ci
272e0dac50fSopenharmony_ci    /**
273e0dac50fSopenharmony_ci     * @brief Get screen rotation lock status.
274e0dac50fSopenharmony_ci     *
275e0dac50fSopenharmony_ci     * @param isLocked Query the rotation lock status.
276e0dac50fSopenharmony_ci     * @return DM_OK means query success, others means query failed.
277e0dac50fSopenharmony_ci     */
278e0dac50fSopenharmony_ci    DMError IsScreenRotationLocked(bool& isLocked);
279e0dac50fSopenharmony_ci
280e0dac50fSopenharmony_ci    /**
281e0dac50fSopenharmony_ci     * @brief Register screen listener.
282e0dac50fSopenharmony_ci     *
283e0dac50fSopenharmony_ci     * @param listener IScreenListener.
284e0dac50fSopenharmony_ci     * @return DM_OK means register success, others means register failed.
285e0dac50fSopenharmony_ci     */
286e0dac50fSopenharmony_ci    DMError RegisterScreenListener(sptr<IScreenListener> listener);
287e0dac50fSopenharmony_ci
288e0dac50fSopenharmony_ci    /**
289e0dac50fSopenharmony_ci     * @brief Unregister screen listener.
290e0dac50fSopenharmony_ci     *
291e0dac50fSopenharmony_ci     * @param listener IScreenListener.
292e0dac50fSopenharmony_ci     * @return DM_OK means unregister success, others means unregister failed.
293e0dac50fSopenharmony_ci     */
294e0dac50fSopenharmony_ci    DMError UnregisterScreenListener(sptr<IScreenListener> listener);
295e0dac50fSopenharmony_ci
296e0dac50fSopenharmony_ci    /**
297e0dac50fSopenharmony_ci     * @brief Register screen group listener.
298e0dac50fSopenharmony_ci     *
299e0dac50fSopenharmony_ci     * @param listener IScreenGroupListener.
300e0dac50fSopenharmony_ci     * @return DM_OK means register success, others means register failed.
301e0dac50fSopenharmony_ci     */
302e0dac50fSopenharmony_ci    DMError RegisterScreenGroupListener(sptr<IScreenGroupListener> listener);
303e0dac50fSopenharmony_ci
304e0dac50fSopenharmony_ci    /**
305e0dac50fSopenharmony_ci     * @brief Unregister screen group listener.
306e0dac50fSopenharmony_ci     *
307e0dac50fSopenharmony_ci     * @param listener IScreenGroupListener.
308e0dac50fSopenharmony_ci     * @return DM_OK means unregister success, others means unregister failed.
309e0dac50fSopenharmony_ci     */
310e0dac50fSopenharmony_ci    DMError UnregisterScreenGroupListener(sptr<IScreenGroupListener> listener);
311e0dac50fSopenharmony_ci
312e0dac50fSopenharmony_ci    /**
313e0dac50fSopenharmony_ci     * @brief Register virtual screen group listener.
314e0dac50fSopenharmony_ci     *
315e0dac50fSopenharmony_ci     * @param listener IVirtualScreenGroupListener.
316e0dac50fSopenharmony_ci     * @return DM_OK means register success, others means register failed.
317e0dac50fSopenharmony_ci     */
318e0dac50fSopenharmony_ci    DMError RegisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener);
319e0dac50fSopenharmony_ci
320e0dac50fSopenharmony_ci    /**
321e0dac50fSopenharmony_ci     * @brief Unregister virtual screen group listener.
322e0dac50fSopenharmony_ci     *
323e0dac50fSopenharmony_ci     * @param listener IVirtualScreenGroupListener.
324e0dac50fSopenharmony_ci     * @return DM_OK means unregister success, others means unregister failed.
325e0dac50fSopenharmony_ci     */
326e0dac50fSopenharmony_ci    DMError UnregisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener);
327e0dac50fSopenharmony_ci
328e0dac50fSopenharmony_ci    /**
329e0dac50fSopenharmony_ci     * @brief Get virtual screen flag.
330e0dac50fSopenharmony_ci     *
331e0dac50fSopenharmony_ci     * @param screenId virtual screen id.
332e0dac50fSopenharmony_ci     * @return virtual screen flag
333e0dac50fSopenharmony_ci     */
334e0dac50fSopenharmony_ci    VirtualScreenFlag GetVirtualScreenFlag(ScreenId screenId);
335e0dac50fSopenharmony_ci
336e0dac50fSopenharmony_ci    /**
337e0dac50fSopenharmony_ci     * @brief Set virtual screen flag.
338e0dac50fSopenharmony_ci     *
339e0dac50fSopenharmony_ci     * @param screenId virtual screen id.
340e0dac50fSopenharmony_ci     * @param screenFlag virtual screen flag.
341e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means failed.
342e0dac50fSopenharmony_ci     */
343e0dac50fSopenharmony_ci    DMError SetVirtualScreenFlag(ScreenId screenId, VirtualScreenFlag screenFlag);
344e0dac50fSopenharmony_ci
345e0dac50fSopenharmony_ci    /**
346e0dac50fSopenharmony_ci     * @brief Set virtual screen refresh rate with a refresh interval relative to the main screen.
347e0dac50fSopenharmony_ci     *
348e0dac50fSopenharmony_ci     * @param screenId virtual screen id.
349e0dac50fSopenharmony_ci     * @param refreshInterval refresh interval: range [1, main screen max refresh rate]. 2 indicates that
350e0dac50fSopenharmony_ci     *     the virtual screen refreshes 1 frame when the main screen refreshes 2 frames, 5 indicates that
351e0dac50fSopenharmony_ci     *     the virtual screen refreshes 1 frame when the main screen refreshes 5 frames, and so on.
352e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means failed.
353e0dac50fSopenharmony_ci     */
354e0dac50fSopenharmony_ci    DMError SetVirtualScreenRefreshRate(ScreenId screenId, uint32_t refreshInterval);
355e0dac50fSopenharmony_ci
356e0dac50fSopenharmony_ci    /**
357e0dac50fSopenharmony_ci     * @brief Set virtual screen max refresh rate .
358e0dac50fSopenharmony_ci     *
359e0dac50fSopenharmony_ci     * @param screenId virtual screen id.
360e0dac50fSopenharmony_ci     * @param refreshRate max refresh rate to be set.
361e0dac50fSopenharmony_ci     * @param actualRefreshRate the actual refresh rate that is finally set.
362e0dac50fSopenharmony_ci     * @return DM_OK means set success, others means failed.
363e0dac50fSopenharmony_ci     */
364e0dac50fSopenharmony_ci    DMError SetVirtualScreenMaxRefreshRate(ScreenId id, uint32_t refreshRate,
365e0dac50fSopenharmony_ci        uint32_t& actualRefreshRate);
366e0dac50fSopenharmony_ci
367e0dac50fSopenharmony_ci    /**
368e0dac50fSopenharmony_ci     * @brief when casting the screen, Virtual screen playback and pause function.
369e0dac50fSopenharmony_ci     *
370e0dac50fSopenharmony_ci     * @param screenId screenId used in virtual screen.
371e0dac50fSopenharmony_ci     * @param screenStatus VIRTUAL_SCREEN_PLAY or VIRTUAL_SCREEN_PAUSE.
372e0dac50fSopenharmony_ci     * @return True means set success, false means set failed.
373e0dac50fSopenharmony_ci     */
374e0dac50fSopenharmony_ci    bool SetVirtualScreenStatus(ScreenId screenId, VirtualScreenStatus screenStatus);
375e0dac50fSopenharmony_ciprivate:
376e0dac50fSopenharmony_ci    ScreenManager();
377e0dac50fSopenharmony_ci    ~ScreenManager();
378e0dac50fSopenharmony_ci    void OnRemoteDied();
379e0dac50fSopenharmony_ci
380e0dac50fSopenharmony_ci    class Impl;
381e0dac50fSopenharmony_ci    sptr<Impl> pImpl_;
382e0dac50fSopenharmony_ci};
383e0dac50fSopenharmony_ci} // namespace OHOS::Rosen
384e0dac50fSopenharmony_ci
385e0dac50fSopenharmony_ci#endif // FOUNDATION_DM_SCREEN_MANAGER_H