1 /*
2  * Copyright (c) 2023 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_DISPLAY_MANAGER_LITE_H
17 #define FOUNDATION_DM_DISPLAY_MANAGER_LITE_H
18 
19 #include <vector>
20 #include <mutex>
21 
22 #include "display_lite.h"
23 #include "dm_common.h"
24 #include "wm_single_instance.h"
25 #include "display_change_info.h"
26 
27 namespace OHOS::Rosen {
28 class DisplayManagerLite {
29 WM_DECLARE_SINGLE_INSTANCE_BASE(DisplayManagerLite);
30 friend class DMSDeathRecipientLite;
31 public:
32     class IDisplayListener : public virtual RefBase {
33     public:
34         /**
35          * @brief Notify when a new display is created.
36          */
37         virtual void OnCreate(DisplayId) = 0;
38 
39         /**
40          * @brief Notify when the display is destroyed.
41          */
42         virtual void OnDestroy(DisplayId) = 0;
43 
44         /**
45          * @brief Notify when the state of a display changes
46          */
47         virtual void OnChange(DisplayId) = 0;
48     };
49 
50     class IFoldStatusListener : public virtual RefBase {
51     public:
52         /**
53          * @brief Notify listeners when screen fold status changed.
54          *
55          * @param foldStatus Screen foldStatus.
56          */
OnFoldStatusChanged([[maybe_unused]]FoldStatus foldStatus)57         virtual void OnFoldStatusChanged([[maybe_unused]]FoldStatus foldStatus) {}
58     };
59 
60     class IDisplayModeListener : public virtual RefBase {
61     public:
62         /**
63          * @brief Notify listeners when display mode changed.
64          *
65          * @param displayMode DisplayMode.
66          */
OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode)67         virtual void OnDisplayModeChanged([[maybe_unused]]FoldDisplayMode displayMode) {}
68     };
69 
70     /**
71      * @brief Register a display listener.
72      *
73      * @param listener IDisplayListener.
74      * @return DM_OK means register success, others means register failed.
75      */
76     DMError RegisterDisplayListener(sptr<IDisplayListener> listener);
77 
78     /**
79      * @brief Unregister an existed display listener.
80      *
81      * @param listener IDisplayListener.
82      * @return DM_OK means unregister success, others means unregister failed.
83      */
84     DMError UnregisterDisplayListener(sptr<IDisplayListener> listener);
85 
86     /**
87      * @brief Register a listener for the event of screen fold status changed.
88      *
89      * @param listener IFoldStatusListener.
90      * @return DM_OK means register success, others means register failed.
91      */
92     DMError RegisterFoldStatusListener(sptr<IFoldStatusListener> listener);
93 
94     /**
95      * @brief Unregister an existed listener for the event of screen fold status changed.
96      *
97      * @param listener IFoldStatusListener.
98      * @return DM_OK means unregister success, others means unregister failed.
99      */
100     DMError UnregisterFoldStatusListener(sptr<IFoldStatusListener> listener);
101 
102     /**
103      * @brief Register a listener for the event of display mode changed.
104      *
105      * @param listener IDisplayModeListener.
106      * @return DM_OK means register success, others means register failed.
107      */
108     DMError RegisterDisplayModeListener(sptr<IDisplayModeListener> listener);
109 
110     /**
111      * @brief Unregister an existed listener for the event of display mode changed.
112      *
113      * @param listener IDisplayModeListener.
114      * @return DM_OK means unregister success, others means unregister failed.
115      */
116     DMError UnregisterDisplayModeListener(sptr<IDisplayModeListener> listener);
117 
118     /**
119      * @brief Get the default display object.
120      *
121      * @return Default display object.
122      */
123     sptr<DisplayLite> GetDefaultDisplay();
124 
125     /**
126      * @brief Check whether the device is foldable.
127      *
128      * @return true means the device is foldable.
129      */
130     bool IsFoldable();
131 
132     /**
133      * @brief Get the current fold status of the foldable device.
134      *
135      * @return fold status of device.
136      */
137     FoldStatus GetFoldStatus();
138 
139     /**
140      * @brief Get the display mode of the foldable device.
141      *
142      * @return display mode of the foldable device.
143      */
144     FoldDisplayMode GetFoldDisplayMode();
145 
146     /**
147      * @brief Change the display mode of the foldable device.
148      *
149      * @param mode target display mode to change.
150      */
151     void SetFoldDisplayMode(const FoldDisplayMode mode);
152 
153     /**
154      * @brief Get the display object by id.
155      *
156      * @param displayId Id of the target display.
157      * @return Default display object.
158      */
159     sptr<DisplayLite> GetDisplayById(DisplayId displayId);
160 
161     /*
162      * used by powermgr
163      */
164     /**
165      * @brief Begin to wake up screen.
166      *
167      * @param reason Reason for power state change.
168      * @return True means begin success, false means begin failed.
169      */
170     bool WakeUpBegin(PowerStateChangeReason reason);
171 
172     /**
173      * @brief Wake up screen end.
174      *
175      * @return True means end success, false means end failed.
176      */
177     bool WakeUpEnd();
178 
179     /**
180      * @brief Begin to suspend the screen.
181      *
182      * @param reason Reason for power state change.
183      * @return True means begin success, false means begin failed.
184      */
185     bool SuspendBegin(PowerStateChangeReason reason);
186 
187     /**
188      * @brief Suspend screen end.
189      *
190      * @return True means suspend screen end success.
191      * @return False means suspend screen end failed.
192      */
193     bool SuspendEnd();
194 
195     /**
196      * @brief Get id of internal screen.
197      *
198      * @return Internal screen id.
199      */
200     ScreenId GetInternalScreenId();
201 
202     /**
203      * @brief Set the screen power state by screen id.
204      *
205      * @param screenId Screen id.
206      * @param state Screen power state.
207      * @param reason Reason for power state change.
208      * @return True means set success, false means set failed.
209      */
210     bool SetScreenPowerById(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason);
211 
212     /**
213      * @brief Set the Display State object
214      *
215      * @param state State of display.
216      * @param callback Callback for display state.
217      * @return True means set success, false means set failed.
218      */
219     bool SetDisplayState(DisplayState state, DisplayStateCallback callback);
220 
221     /**
222      * @brief Get the state of the target display.
223      *
224      * @param displayId Display id.
225      * @return State of display.
226      */
227     DisplayState GetDisplayState(DisplayId displayId);
228 
229     /**
230      * @brief Try to cancel screenoff action before display power off.
231      *
232      * @return True means cancel screenoff action success.
233      * @return False means cancel screenoff action failed.
234      */
235     bool TryToCancelScreenOff();
236 
237     /**
238      * @brief Set the brightness level of the target screen.
239      *
240      * @param screenId Target screen.
241      * @param level Brightness level.
242      */
243     bool SetScreenBrightness(uint64_t screenId, uint32_t level);
244 
245     /**
246      * @brief Get the brightness level of the target screen.
247      *
248      * @param screenId Screen id.
249      * @return Brightness value of screen.
250      */
251     uint32_t GetScreenBrightness(uint64_t screenId) const;
252 
253     /**
254      * @brief Obtain the id of the default display.
255      *
256      * @return Default display id.
257      */
258     DisplayId GetDefaultDisplayId();
259 
260     /**
261      * @brief Get IDs of all displays.
262      *
263      * @return All display IDs.
264      */
265     std::vector<DisplayId> GetAllDisplayIds();
266 private:
267     DisplayManagerLite();
268     ~DisplayManagerLite();
269     void OnRemoteDied();
270 
271     class Impl;
272     std::recursive_mutex mutex_;
273     bool destroyed_ = false;
274     sptr<Impl> pImpl_;
275 };
276 } // namespace OHOS::Rosen
277 
278 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H