• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "display_manager_agent_controller.h"
17 #include "window_manager_hilog.h"
18 
19 namespace OHOS {
20 namespace Rosen {
WM_IMPLEMENT_SINGLE_INSTANCE(DisplayManagerAgentController)21 WM_IMPLEMENT_SINGLE_INSTANCE(DisplayManagerAgentController)
22 
23 DMError DisplayManagerAgentController::RegisterDisplayManagerAgent(
24     const sptr<IDisplayManagerAgent>& displayManagerAgent,
25     DisplayManagerAgentType type)
26 {
27     return dmAgentContainer_.RegisterAgent(displayManagerAgent, type) ? DMError::DM_OK :DMError::DM_ERROR_NULLPTR;
28 }
29 
UnregisterDisplayManagerAgent(const sptr<IDisplayManagerAgent> & displayManagerAgent,DisplayManagerAgentType type)30 DMError DisplayManagerAgentController::UnregisterDisplayManagerAgent(
31     const sptr<IDisplayManagerAgent>& displayManagerAgent,
32     DisplayManagerAgentType type)
33 {
34     return dmAgentContainer_.UnregisterAgent(displayManagerAgent, type) ? DMError::DM_OK :DMError::DM_ERROR_NULLPTR;
35 }
36 
NotifyDisplayPowerEvent(DisplayPowerEvent event,EventStatus status)37 bool DisplayManagerAgentController::NotifyDisplayPowerEvent(DisplayPowerEvent event, EventStatus status)
38 {
39     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_POWER_EVENT_LISTENER);
40     if (agents.empty()) {
41         return false;
42     }
43     TLOGI(WmsLogTag::DMS, "NotifyDisplayPowerEvent");
44     for (auto& agent : agents) {
45         agent->NotifyDisplayPowerEvent(event, status);
46     }
47     return true;
48 }
49 
NotifyDisplayStateChanged(DisplayId id,DisplayState state)50 bool DisplayManagerAgentController::NotifyDisplayStateChanged(DisplayId id, DisplayState state)
51 {
52     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_STATE_LISTENER);
53     if (agents.empty()) {
54         return false;
55     }
56     TLOGI(WmsLogTag::DMS, "NotifyDisplayStateChanged");
57     for (auto& agent : agents) {
58         agent->NotifyDisplayStateChanged(id, state);
59     }
60     return true;
61 }
62 
OnScreenConnect(sptr<ScreenInfo> screenInfo)63 void DisplayManagerAgentController::OnScreenConnect(sptr<ScreenInfo> screenInfo)
64 {
65     if (screenInfo == nullptr) {
66         return;
67     }
68     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::SCREEN_EVENT_LISTENER);
69     if (agents.empty()) {
70         return;
71     }
72     TLOGI(WmsLogTag::DMS, "OnScreenConnect");
73     for (auto& agent : agents) {
74         agent->OnScreenConnect(screenInfo);
75     }
76 }
77 
OnScreenDisconnect(ScreenId screenId)78 void DisplayManagerAgentController::OnScreenDisconnect(ScreenId screenId)
79 {
80     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::SCREEN_EVENT_LISTENER);
81     if (agents.empty()) {
82         return;
83     }
84     TLOGI(WmsLogTag::DMS, "OnScreenDisconnect");
85     for (auto& agent : agents) {
86         agent->OnScreenDisconnect(screenId);
87     }
88 }
89 
OnScreenChange(sptr<ScreenInfo> screenInfo,ScreenChangeEvent screenChangeEvent)90 void DisplayManagerAgentController::OnScreenChange(sptr<ScreenInfo> screenInfo, ScreenChangeEvent screenChangeEvent)
91 {
92     if (screenInfo == nullptr) {
93         return;
94     }
95     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::SCREEN_EVENT_LISTENER);
96     if (agents.empty()) {
97         return;
98     }
99     TLOGI(WmsLogTag::DMS, "OnScreenChange");
100     for (auto& agent : agents) {
101         agent->OnScreenChange(screenInfo, screenChangeEvent);
102     }
103 }
104 
OnScreenGroupChange(const std::string & trigger,const sptr<ScreenInfo> & screenInfo,ScreenGroupChangeEvent groupEvent)105 void DisplayManagerAgentController::OnScreenGroupChange(const std::string& trigger,
106     const sptr<ScreenInfo>& screenInfo, ScreenGroupChangeEvent groupEvent)
107 {
108     if (screenInfo == nullptr) {
109         return;
110     }
111     std::vector<sptr<ScreenInfo>> screenInfos;
112     screenInfos.push_back(screenInfo);
113     OnScreenGroupChange(trigger, screenInfos, groupEvent);
114 }
115 
OnScreenGroupChange(const std::string & trigger,const std::vector<sptr<ScreenInfo>> & screenInfos,ScreenGroupChangeEvent groupEvent)116 void DisplayManagerAgentController::OnScreenGroupChange(const std::string& trigger,
117     const std::vector<sptr<ScreenInfo>>& screenInfos, ScreenGroupChangeEvent groupEvent)
118 {
119     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::SCREEN_EVENT_LISTENER);
120     std::vector<sptr<ScreenInfo>> infos;
121     for (auto& screenInfo : screenInfos) {
122         if (screenInfo != nullptr) {
123             infos.emplace_back(screenInfo);
124         }
125     }
126     if (agents.empty() || infos.empty()) {
127         return;
128     }
129     for (auto& agent : agents) {
130         agent->OnScreenGroupChange(trigger, infos, groupEvent);
131     }
132 }
133 
OnDisplayCreate(sptr<DisplayInfo> displayInfo)134 void DisplayManagerAgentController::OnDisplayCreate(sptr<DisplayInfo> displayInfo)
135 {
136     if (displayInfo == nullptr) {
137         return;
138     }
139     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_EVENT_LISTENER);
140     if (agents.empty()) {
141         return;
142     }
143     TLOGI(WmsLogTag::DMS, "OnDisplayCreate");
144     for (auto& agent : agents) {
145         agent->OnDisplayCreate(displayInfo);
146     }
147 }
148 
OnDisplayDestroy(DisplayId displayId)149 void DisplayManagerAgentController::OnDisplayDestroy(DisplayId displayId)
150 {
151     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_EVENT_LISTENER);
152     if (agents.empty()) {
153         return;
154     }
155     TLOGI(WmsLogTag::DMS, "OnDisplayDestroy");
156     for (auto& agent : agents) {
157         agent->OnDisplayDestroy(displayId);
158     }
159 }
160 
OnDisplayChange(sptr<DisplayInfo> displayInfo,DisplayChangeEvent displayChangeEvent)161 void DisplayManagerAgentController::OnDisplayChange(
162     sptr<DisplayInfo> displayInfo, DisplayChangeEvent displayChangeEvent)
163 {
164     if (displayInfo == nullptr) {
165         return;
166     }
167     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_EVENT_LISTENER);
168     if (agents.empty()) {
169         return;
170     }
171     TLOGI(WmsLogTag::DMS, "OnDisplayChange");
172     for (auto& agent : agents) {
173         agent->OnDisplayChange(displayInfo, displayChangeEvent);
174     }
175 }
176 
OnScreenshot(sptr<ScreenshotInfo> info)177 void DisplayManagerAgentController::OnScreenshot(sptr<ScreenshotInfo> info)
178 {
179     if (info == nullptr) {
180         return;
181     }
182     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::SCREENSHOT_EVENT_LISTENER);
183     if (agents.empty()) {
184         return;
185     }
186     TLOGI(WmsLogTag::DMS, "onScreenshot");
187     for (auto& agent : agents) {
188         agent->OnScreenshot(info);
189     }
190 }
191 
NotifyPrivateWindowStateChanged(bool hasPrivate)192 void DisplayManagerAgentController::NotifyPrivateWindowStateChanged(bool hasPrivate)
193 {
194     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::PRIVATE_WINDOW_LISTENER);
195     if (agents.empty()) {
196         return;
197     }
198     TLOGI(WmsLogTag::DMS, "PrivateWindow status : %{public}u", hasPrivate);
199     for (auto& agent : agents) {
200         agent->NotifyPrivateWindowStateChanged(hasPrivate);
201     }
202 }
203 
NotifyFoldStatusChanged(FoldStatus foldStatus)204 void DisplayManagerAgentController::NotifyFoldStatusChanged(FoldStatus foldStatus)
205 {
206     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::FOLD_STATUS_CHANGED_LISTENER);
207     if (agents.empty()) {
208         return;
209     }
210     TLOGI(WmsLogTag::DMS, "FoldStatus is : %{public}u", foldStatus);
211     for (auto& agent : agents) {
212         agent->NotifyFoldStatusChanged(foldStatus);
213     }
214 }
215 
NotifyDisplayChangeInfoChanged(const sptr<DisplayChangeInfo> & info)216 void DisplayManagerAgentController::NotifyDisplayChangeInfoChanged(const sptr<DisplayChangeInfo>& info)
217 {
218     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_UPDATE_LISTENER);
219     if (agents.empty()) {
220         return;
221     }
222     for (auto& agent : agents) {
223         agent->NotifyDisplayChangeInfoChanged(info);
224     }
225 }
226 
NotifyDisplayModeChanged(FoldDisplayMode displayMode)227 void DisplayManagerAgentController::NotifyDisplayModeChanged(FoldDisplayMode displayMode)
228 {
229     auto agents = dmAgentContainer_.GetAgentsByType(DisplayManagerAgentType::DISPLAY_MODE_CHANGED_LISTENER);
230     if (agents.empty()) {
231         return;
232     }
233     TLOGI(WmsLogTag::DMS, "FoldDisplayMode is : %{public}u", displayMode);
234     for (auto& agent : agents) {
235         agent->NotifyDisplayModeChanged(displayMode);
236     }
237 }
238 }
239 }