1 /*
2  * Copyright (c) 2024 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 "dm_common.h"
21 #include "wm_single_instance.h"
22 #include "screen_info.h"
23 
24 namespace OHOS::Rosen {
25 class ScreenManagerLite : public RefBase {
26 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManagerLite);
27 friend class DMSDeathRecipientLite;
28 public:
29     /*
30      * used by powermgr
31      */
32     class IScreenListener : public virtual RefBase {
33     public:
34         /**
35          * @brief Notify when a new screen is connected.
36          */
37         virtual void OnConnect(ScreenId) = 0;
38 
39         /**
40          * @brief Notify when a screen is disconnected.
41          */
42         virtual void OnDisconnect(ScreenId) = 0;
43 
44         /**
45          * @brief Notify when state of the screen is changed.
46          */
47         virtual void OnChange(ScreenId) = 0;
48     };
49 
50     class IScreenModeChangeListener : public virtual RefBase {
51     public:
52 
53         /**
54          * @brief Notify when state of the screenMode is changed.
55          */
56         virtual void NotifyScreenModeChange(const std::vector<sptr<ScreenInfo>>&) = 0;
57     };
58 
59     /**
60      * @brief Register screen mode change listener.
61      *
62      * @param listener IScreenModeChangeListener.
63      * @return DM_OK means register success, others means register failed.
64      */
65     DMError RegisterScreenModeChangeListener(sptr<IScreenModeChangeListener> listener);
66 
67     /**
68      * @brief Unregister screen listener.
69      *
70      * @param listener IScreenModeChangeListener.
71      * @return DM_OK means unregister success, others means unregister failed.
72      */
73     DMError UnregisterScreenModeChangeListener(sptr<IScreenModeChangeListener> listener);
74 
75     /**
76      * @brief Register screen listener.
77      *
78      * @param listener IScreenListener.
79      * @return DM_OK means register success, others means register failed.
80      */
81     DMError RegisterScreenListener(sptr<IScreenListener> listener);
82 
83     /**
84      * @brief Unregister screen listener.
85      *
86      * @param listener IScreenListener.
87      * @return DM_OK means unregister success, others means unregister failed.
88      */
89     DMError UnregisterScreenListener(sptr<IScreenListener> listener);
90 
91     /**
92      * @brief Set the screen power state on the specified screen.
93      *
94      * @param screenId Screen id.
95      * @param state Screen power state.
96      * @param reason Reason for power state change.
97      * @return True means set success, false means set failed.
98      */
99     bool SetSpecifiedScreenPower(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason);
100 
101     /**
102      * @brief Set the screen power states for all screens.
103      *
104      * @param state Screen power state.
105      * @param reason Reason for power state change.
106      * @return True means set success, false means set failed.
107      */
108     bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason);
109 
110     /**
111      * @brief Get screen power state.
112      *
113      * @param screenId Screen id.
114      * @return Power state of screen.
115      */
116     ScreenPowerState GetScreenPower(ScreenId screenId);
117 private:
118     ScreenManagerLite();
119     ~ScreenManagerLite();
120     void OnRemoteDied();
121 
122     class Impl;
123     sptr<Impl> pImpl_;
124 };
125 } // namespace OHOS::Rosen
126 
127 #endif // FOUNDATION_DM_SCREEN_MANAGER_H