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 
23 namespace OHOS::Rosen {
24 class ScreenManagerLite : public RefBase {
25 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManagerLite);
26 friend class DMSDeathRecipientLite;
27 public:
28     /*
29      * used by powermgr
30      */
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     /**
50      * @brief Register screen listener.
51      *
52      * @param listener IScreenListener.
53      * @return DM_OK means register success, others means register failed.
54      */
55     DMError RegisterScreenListener(sptr<IScreenListener> listener);
56 
57     /**
58      * @brief Unregister screen listener.
59      *
60      * @param listener IScreenListener.
61      * @return DM_OK means unregister success, others means unregister failed.
62      */
63     DMError UnregisterScreenListener(sptr<IScreenListener> listener);
64 
65     /**
66      * @brief Set the screen power state on the specified screen.
67      *
68      * @param screenId Screen id.
69      * @param state Screen power state.
70      * @param reason Reason for power state change.
71      * @return True means set success, false means set failed.
72      */
73     bool SetSpecifiedScreenPower(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason);
74 
75     /**
76      * @brief Set the screen power states for all screens.
77      *
78      * @param state Screen power state.
79      * @param reason Reason for power state change.
80      * @return True means set success, false means set failed.
81      */
82     bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason);
83 
84     /**
85      * @brief Get screen power state.
86      *
87      * @param screenId Screen id.
88      * @return Power state of screen.
89      */
90     ScreenPowerState GetScreenPower(ScreenId screenId);
91 private:
92     ScreenManagerLite();
93     ~ScreenManagerLite();
94     void OnRemoteDied();
95 
96     class Impl;
97     sptr<Impl> pImpl_;
98 };
99 } // namespace OHOS::Rosen
100 
101 #endif // FOUNDATION_DM_SCREEN_MANAGER_H