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          */
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          */
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      */
152     void SetFoldDisplayMode(const FoldDisplayMode mode);
153 
154     /**
155      * @brief Get the display object by id.
156      *
157      * @param displayId Id of the target display.
158      * @return Default display object.
159      */
160     sptr<DisplayLite> GetDisplayById(DisplayId displayId);
161 
162     /*
163      * used by powermgr
164      */
165     /**
166      * @brief Begin to wake up screen.
167      *
168      * @param reason Reason for power state change.
169      * @return True means begin success, false means begin failed.
170      */
171     bool WakeUpBegin(PowerStateChangeReason reason);
172 
173     /**
174      * @brief Wake up screen end.
175      *
176      * @return True means end success, false means end failed.
177      */
178     bool WakeUpEnd();
179 
180     /**
181      * @brief Begin to suspend the screen.
182      *
183      * @param reason Reason for power state change.
184      * @return True means begin success, false means begin failed.
185      */
186     bool SuspendBegin(PowerStateChangeReason reason);
187 
188     /**
189      * @brief Suspend screen end.
190      *
191      * @return True means suspend screen end success.
192      * @return False means suspend screen end failed.
193      */
194     bool SuspendEnd();
195 
196     /**
197      * @brief Set the Display State object
198      *
199      * @param state State of display.
200      * @param callback Callback for display state.
201      * @return True means set success, false means set failed.
202      */
203     bool SetDisplayState(DisplayState state, DisplayStateCallback callback);
204 
205     /**
206      * @brief Get the state of the target display.
207      *
208      * @param displayId Display id.
209      * @return State of display.
210      */
211     DisplayState GetDisplayState(DisplayId displayId);
212 
213     /**
214      * @brief Try to cancel screenoff action before display power off.
215      *
216      * @return True means cancel screenoff action success.
217      * @return False means cancel screenoff action failed.
218      */
219     bool TryToCancelScreenOff();
220 
221     /**
222      * @brief Set the brightness level of the target screen.
223      *
224      * @param screenId Target screen.
225      * @param level Brightness level.
226      */
227     bool SetScreenBrightness(uint64_t screenId, uint32_t level);
228 
229     /**
230      * @brief Get the brightness level of the target screen.
231      *
232      * @param screenId Screen id.
233      * @return Brightness value of screen.
234      */
235     uint32_t GetScreenBrightness(uint64_t screenId) const;
236 
237     /**
238      * @brief Obtain the id of the default display.
239      *
240      * @return Default display id.
241      */
242     DisplayId GetDefaultDisplayId();
243 
244     /**
245      * @brief Get IDs of all displays.
246      *
247      * @return All display IDs.
248      */
249     std::vector<DisplayId> GetAllDisplayIds();
250 
251     /**
252      * @brief Get virtual screen flag.
253      *
254      * @param screenId virtual screen id.
255      * @return virtual screen flag
256      */
257     VirtualScreenFlag GetVirtualScreenFlag(ScreenId screenId);
258 private:
259     DisplayManagerLite();
260     ~DisplayManagerLite();
261     void OnRemoteDied();
262 
263     class Impl;
264     std::recursive_mutex mutex_;
265     bool destroyed_ = false;
266     sptr<Impl> pImpl_;
267 };
268 } // namespace OHOS::Rosen
269 
270 #endif // FOUNDATION_DM_DISPLAY_MANAGER_LITE_H