1 /*
2 * Copyright (c) 2021-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 "window_manager.h"
17
18 #include <algorithm>
19 #include <cinttypes>
20
21 #include "input_manager.h"
22
23 #include "marshalling_helper.h"
24 #include "window_adapter.h"
25 #include "window_manager_agent.h"
26 #include "window_manager_hilog.h"
27 #include "window_display_change_adapter.h"
28 #include "wm_common.h"
29
30 namespace OHOS {
31 namespace Rosen {
32 namespace {
33 constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowManager"};
34 struct WindowChecker : public MMI::IWindowChecker {
35 public:
36 WindowChecker() = default;
37 ~WindowChecker() = default;
38 int32_t CheckWindowId(int32_t windowId) const override;
39 };
40 }
41
42 WM_IMPLEMENT_SINGLE_INSTANCE(WindowManager)
43
44 class WindowManager::Impl {
45 public:
Impl(std::recursive_mutex & mutex)46 explicit Impl(std::recursive_mutex& mutex) : mutex_(mutex) {}
47 void NotifyWMSConnected(int32_t userId, int32_t screenId);
48 void NotifyWMSDisconnected(int32_t userId, int32_t screenId);
49 void NotifyFocused(uint32_t windowId, const sptr<IRemoteObject>& abilityToken,
50 WindowType windowType, DisplayId displayId);
51 void NotifyUnfocused(uint32_t windowId, const sptr<IRemoteObject>& abilityToken,
52 WindowType windowType, DisplayId displayId);
53 void NotifyFocused(const sptr<FocusChangeInfo>& focusChangeInfo);
54 void NotifyWindowModeChange(WindowModeType type);
55 void NotifyUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo);
56 void NotifySystemBarChanged(DisplayId displayId, const SystemBarRegionTints& tints);
57 void NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos, WindowUpdateType type);
58 void NotifyWindowVisibilityInfoChanged(const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos);
59 void NotifyWindowDrawingContentInfoChanged(const std::vector<sptr<WindowDrawingContentInfo>>&
60 windowDrawingContentInfos);
61 void UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing);
62 void NotifyWaterMarkFlagChangedResult(bool showWaterMark);
63 void NotifyVisibleWindowNumChanged(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo);
64 void NotifyGestureNavigationEnabledResult(bool enable);
65 void NotifyDisplayInfoChanged(const sptr<IRemoteObject>& token, DisplayId displayId,
66 float density, DisplayOrientation orientation);
67 void NotifyWindowStyleChange(WindowStyleType type);
68
69 static inline SingletonDelegator<WindowManager> delegator_;
70
71 std::recursive_mutex& mutex_;
72 sptr<IWMSConnectionChangedListener> wmsConnectionChangedListener_;
73 std::vector<sptr<IFocusChangedListener>> focusChangedListeners_;
74 sptr<WindowManagerAgent> focusChangedListenerAgent_;
75 std::vector<sptr<IWindowModeChangedListener>> windowModeListeners_;
76 sptr<WindowManagerAgent> windowModeListenerAgent_;
77 std::vector<sptr<ISystemBarChangedListener>> systemBarChangedListeners_;
78 sptr<WindowManagerAgent> systemBarChangedListenerAgent_;
79 std::vector<sptr<IWindowUpdateListener>> windowUpdateListeners_;
80 sptr<WindowManagerAgent> windowUpdateListenerAgent_;
81 std::vector<sptr<IVisibilityChangedListener>> windowVisibilityListeners_;
82 sptr<WindowManagerAgent> windowVisibilityListenerAgent_;
83 std::vector<sptr<IDrawingContentChangedListener>> windowDrawingContentListeners_;
84 sptr<WindowManagerAgent> windowDrawingContentListenerAgent_;
85 std::vector<sptr<ICameraFloatWindowChangedListener>> cameraFloatWindowChangedListeners_;
86 sptr<WindowManagerAgent> cameraFloatWindowChangedListenerAgent_;
87 std::vector<sptr<IWaterMarkFlagChangedListener>> waterMarkFlagChangeListeners_;
88 sptr<WindowManagerAgent> waterMarkFlagChangeAgent_;
89 std::vector<sptr<IGestureNavigationEnabledChangedListener>> gestureNavigationEnabledListeners_;
90 sptr<WindowManagerAgent> gestureNavigationEnabledAgent_;
91 std::vector<sptr<IVisibleWindowNumChangedListener>> visibleWindowNumChangedListeners_;
92 sptr<WindowManagerAgent> visibleWindowNumChangedListenerAgent_;
93 std::vector<sptr<IWindowStyleChangedListener>> windowStyleListeners_;
94 sptr<WindowManagerAgent> windowStyleListenerAgent_;
95 std::map<sptr<IRemoteObject>,
96 std::vector<sptr<WindowDisplayChangeAdapter>>> displayInfoChangedListeners_;
97 };
98
NotifyWMSConnected(int32_t userId,int32_t screenId)99 void WindowManager::Impl::NotifyWMSConnected(int32_t userId, int32_t screenId)
100 {
101 TLOGI(WmsLogTag::WMS_MULTI_USER, "WMS connected [userId:%{public}d; screenId:%{public}d]", userId, screenId);
102 sptr<IWMSConnectionChangedListener> wmsConnectionChangedListener;
103 {
104 std::lock_guard<std::recursive_mutex> lock(mutex_);
105 wmsConnectionChangedListener = wmsConnectionChangedListener_;
106 }
107 if (wmsConnectionChangedListener != nullptr) {
108 wmsConnectionChangedListener->OnConnected(userId, screenId);
109 }
110 }
111
NotifyWMSDisconnected(int32_t userId,int32_t screenId)112 void WindowManager::Impl::NotifyWMSDisconnected(int32_t userId, int32_t screenId)
113 {
114 TLOGI(WmsLogTag::WMS_MULTI_USER, "WMS disconnected [userId:%{public}d; screenId:%{public}d]", userId, screenId);
115 sptr<IWMSConnectionChangedListener> wmsConnectionChangedListener;
116 {
117 std::lock_guard<std::recursive_mutex> lock(mutex_);
118 wmsConnectionChangedListener = wmsConnectionChangedListener_;
119 }
120 if (wmsConnectionChangedListener != nullptr) {
121 wmsConnectionChangedListener->OnDisconnected(userId, screenId);
122 }
123 }
124
NotifyFocused(const sptr<FocusChangeInfo> & focusChangeInfo)125 void WindowManager::Impl::NotifyFocused(const sptr<FocusChangeInfo>& focusChangeInfo)
126 {
127 TLOGD(WmsLogTag::WMS_FOCUS, "NotifyFocused [%{public}u; %{public}" PRIu64"; %{public}d; %{public}d; %{public}u]",
128 focusChangeInfo->windowId_, focusChangeInfo->displayId_, focusChangeInfo->pid_, focusChangeInfo->uid_,
129 static_cast<uint32_t>(focusChangeInfo->windowType_));
130 std::vector<sptr<IFocusChangedListener>> focusChangeListeners;
131 {
132 std::lock_guard<std::recursive_mutex> lock(mutex_);
133 focusChangeListeners = focusChangedListeners_;
134 }
135 WLOGFD("NotifyFocused listeners: %{public}zu", focusChangeListeners.size());
136 for (auto& listener : focusChangeListeners) {
137 listener->OnFocused(focusChangeInfo);
138 }
139 }
140
NotifyUnfocused(const sptr<FocusChangeInfo> & focusChangeInfo)141 void WindowManager::Impl::NotifyUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo)
142 {
143 TLOGD(WmsLogTag::WMS_FOCUS, "NotifyUnfocused [%{public}u; %{public}" PRIu64"; %{public}d; %{public}d; %{public}u]",
144 focusChangeInfo->windowId_, focusChangeInfo->displayId_, focusChangeInfo->pid_, focusChangeInfo->uid_,
145 static_cast<uint32_t>(focusChangeInfo->windowType_));
146 std::vector<sptr<IFocusChangedListener>> focusChangeListeners;
147 {
148 std::lock_guard<std::recursive_mutex> lock(mutex_);
149 focusChangeListeners = focusChangedListeners_;
150 }
151 WLOGFD("NotifyUnfocused listeners: %{public}zu", focusChangeListeners.size());
152 for (auto& listener : focusChangeListeners) {
153 listener->OnUnfocused(focusChangeInfo);
154 }
155 }
156
NotifyWindowModeChange(WindowModeType type)157 void WindowManager::Impl::NotifyWindowModeChange(WindowModeType type)
158 {
159 TLOGI(WmsLogTag::WMS_MAIN, "WindowManager::Impl UpdateWindowModeTypeInfo type: %{public}d",
160 static_cast<uint8_t>(type));
161 std::vector<sptr<IWindowModeChangedListener>> windowModeListeners;
162 {
163 std::lock_guard<std::recursive_mutex> lock(mutex_);
164 windowModeListeners = windowModeListeners_;
165 }
166 for (auto &listener : windowModeListeners) {
167 listener->OnWindowModeUpdate(type);
168 }
169 }
170
NotifySystemBarChanged(DisplayId displayId,const SystemBarRegionTints & tints)171 void WindowManager::Impl::NotifySystemBarChanged(DisplayId displayId, const SystemBarRegionTints& tints)
172 {
173 for (auto tint : tints) {
174 WLOGFD("type:%{public}d, enable:%{public}d," \
175 "backgroundColor:%{public}x, contentColor:%{public}x " \
176 "region:[%{public}d, %{public}d, %{public}d, %{public}d]",
177 tint.type_, tint.prop_.enable_, tint.prop_.backgroundColor_, tint.prop_.contentColor_,
178 tint.region_.posX_, tint.region_.posY_, tint.region_.width_, tint.region_.height_);
179 }
180 std::vector<sptr<ISystemBarChangedListener>> systemBarChangeListeners;
181 {
182 std::lock_guard<std::recursive_mutex> lock(mutex_);
183 systemBarChangeListeners = systemBarChangedListeners_;
184 }
185 for (auto& listener : systemBarChangeListeners) {
186 listener->OnSystemBarPropertyChange(displayId, tints);
187 }
188 }
189
NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>> & infos,WindowUpdateType type)190 void WindowManager::Impl::NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos,
191 WindowUpdateType type)
192 {
193 if (infos.empty()) {
194 WLOGFE("infos is empty");
195 return;
196 }
197 for (auto& info : infos) {
198 if (info == nullptr) {
199 TLOGD(WmsLogTag::WMS_MAIN, "info is nullptr");
200 continue;
201 }
202 TLOGD(WmsLogTag::WMS_MAIN, "NotifyAccessibilityWindowInfo: wid[%{public}u], innerWid_[%{public}u]," \
203 "uiNodeId_[%{public}u], rect[%{public}d %{public}d %{public}d %{public}d]," \
204 "isFocused[%{public}d], isDecorEnable[%{public}d], displayId[%{public}" PRIu64"], layer[%{public}u]," \
205 "mode[%{public}u], type[%{public}u, updateType[%{public}d], bundle[%{public}s]",
206 info->wid_, info->innerWid_, info->uiNodeId_, info->windowRect_.width_, info->windowRect_.height_,
207 info->windowRect_.posX_, info->windowRect_.posY_, info->focused_, info->isDecorEnable_, info->displayId_,
208 info->layer_, info->mode_, info->type_, type, info->bundleName_.c_str());
209 for (const auto& rect : info->touchHotAreas_) {
210 TLOGD(WmsLogTag::WMS_MAIN, "window touch hot areas rect[x=%{public}d,y=%{public}d," \
211 "w=%{public}d,h=%{public}d]", rect.posX_, rect.posY_, rect.width_, rect.height_);
212 }
213 }
214
215 std::vector<sptr<IWindowUpdateListener>> windowUpdateListeners;
216 {
217 std::lock_guard<std::recursive_mutex> lock(mutex_);
218 windowUpdateListeners = windowUpdateListeners_;
219 }
220 for (auto& listener : windowUpdateListeners) {
221 listener->OnWindowUpdate(infos, type);
222 }
223 }
224
NotifyWindowVisibilityInfoChanged(const std::vector<sptr<WindowVisibilityInfo>> & windowVisibilityInfos)225 void WindowManager::Impl::NotifyWindowVisibilityInfoChanged(
226 const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos)
227 {
228 std::vector<sptr<IVisibilityChangedListener>> visibilityChangeListeners;
229 {
230 std::lock_guard<std::recursive_mutex> lock(mutex_);
231 visibilityChangeListeners = windowVisibilityListeners_;
232 }
233 for (auto& listener : visibilityChangeListeners) {
234 WLOGD("Notify WindowVisibilityInfo to caller");
235 listener->OnWindowVisibilityChanged(windowVisibilityInfos);
236 }
237 }
238
NotifyWindowDrawingContentInfoChanged(const std::vector<sptr<WindowDrawingContentInfo>> & windowDrawingContentInfos)239 void WindowManager::Impl::NotifyWindowDrawingContentInfoChanged(
240 const std::vector<sptr<WindowDrawingContentInfo>>& windowDrawingContentInfos)
241 {
242 std::vector<sptr<IDrawingContentChangedListener>> windowDrawingContentChangeListeners;
243 {
244 std::lock_guard<std::recursive_mutex> lock(mutex_);
245 windowDrawingContentChangeListeners = windowDrawingContentListeners_;
246 }
247 for (auto& listener : windowDrawingContentChangeListeners) {
248 WLOGFD("Notify windowDrawingContentInfo to caller");
249 listener->OnWindowDrawingContentChanged(windowDrawingContentInfos);
250 }
251 }
252
UpdateCameraFloatWindowStatus(uint32_t accessTokenId,bool isShowing)253 void WindowManager::Impl::UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing)
254 {
255 TLOGD(WmsLogTag::DEFAULT,
256 "Camera float window, accessTokenId = %{private}u, isShowing = %{public}u", accessTokenId, isShowing);
257 std::vector<sptr<ICameraFloatWindowChangedListener>> cameraFloatWindowChangeListeners;
258 {
259 std::lock_guard<std::recursive_mutex> lock(mutex_);
260 cameraFloatWindowChangeListeners = cameraFloatWindowChangedListeners_;
261 }
262 for (auto& listener : cameraFloatWindowChangeListeners) {
263 listener->OnCameraFloatWindowChange(accessTokenId, isShowing);
264 }
265 }
266
NotifyWaterMarkFlagChangedResult(bool showWaterMark)267 void WindowManager::Impl::NotifyWaterMarkFlagChangedResult(bool showWaterMark)
268 {
269 WLOGFI("Notify water mark flag changed result, showWaterMark = %{public}d", showWaterMark);
270 std::vector<sptr<IWaterMarkFlagChangedListener>> waterMarkFlagChangeListeners;
271 {
272 std::lock_guard<std::recursive_mutex> lock(mutex_);
273 waterMarkFlagChangeListeners = waterMarkFlagChangeListeners_;
274 }
275 for (auto& listener : waterMarkFlagChangeListeners) {
276 listener->OnWaterMarkFlagUpdate(showWaterMark);
277 }
278 }
279
NotifyGestureNavigationEnabledResult(bool enable)280 void WindowManager::Impl::NotifyGestureNavigationEnabledResult(bool enable)
281 {
282 WLOGFI("Notify gesture navigation enable result, enable = %{public}d", enable);
283 std::vector<sptr<IGestureNavigationEnabledChangedListener>> gestureNavigationEnabledListeners;
284 {
285 std::lock_guard<std::recursive_mutex> lock(mutex_);
286 gestureNavigationEnabledListeners = gestureNavigationEnabledListeners_;
287 }
288 for (auto& listener : gestureNavigationEnabledListeners) {
289 listener->OnGestureNavigationEnabledUpdate(enable);
290 }
291 }
292
NotifyVisibleWindowNumChanged(const std::vector<VisibleWindowNumInfo> & visibleWindowNumInfo)293 void WindowManager::Impl::NotifyVisibleWindowNumChanged(
294 const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo)
295 {
296 std::vector<sptr<IVisibleWindowNumChangedListener>> visibleWindowNumChangedListeners;
297 {
298 std::lock_guard<std::recursive_mutex> lock(mutex_);
299 visibleWindowNumChangedListeners = visibleWindowNumChangedListeners_;
300 }
301 for (auto& listener : visibleWindowNumChangedListeners) {
302 if (listener == nullptr) {
303 continue;
304 }
305 listener->OnVisibleWindowNumChange(visibleWindowNumInfo);
306 }
307 }
308
NotifyDisplayInfoChanged(const sptr<IRemoteObject> & token,DisplayId displayId,float density,DisplayOrientation orientation)309 void WindowManager::Impl::NotifyDisplayInfoChanged(const sptr<IRemoteObject>& token, DisplayId displayId,
310 float density, DisplayOrientation orientation)
311 {
312 auto iter = displayInfoChangedListeners_.end();
313 std::vector<sptr<WindowDisplayChangeAdapter>> displayInfoChangedListeners;
314 {
315 std::lock_guard<std::recursive_mutex> lock(mutex_);
316 iter = displayInfoChangedListeners_.find(token);
317 if (iter == displayInfoChangedListeners_.end()) {
318 TLOGI(WmsLogTag::DMS, "can not find token in listener list, need not notify the change of display info");
319 return;
320 }
321 displayInfoChangedListeners = iter->second;
322 }
323
324 for (auto& listener : displayInfoChangedListeners) {
325 listener->OnDisplayInfoChange(token, displayId, density, orientation);
326 }
327 }
328
NotifyWindowStyleChange(WindowStyleType type)329 void WindowManager::Impl::NotifyWindowStyleChange(WindowStyleType type)
330 {
331 TLOGI(WmsLogTag::WMS_MAIN, "WindowStyleChange type: %{public}d",
332 static_cast<uint8_t>(type));
333 std::vector<sptr<IWindowStyleChangedListener>> windowStyleListeners;
334 {
335 std::lock_guard<std::recursive_mutex> lock(mutex_);
336 windowStyleListeners = windowStyleListeners_;
337 }
338 for (auto &listener : windowStyleListeners) {
339 TLOGI(WmsLogTag::WMS_MAIN, "WindowStyleChange type: %{public}d",
340 static_cast<uint8_t>(type));
341 listener->OnWindowStyleUpdate(type);
342 }
343 }
344
WindowManager()345 WindowManager::WindowManager() : pImpl_(std::make_unique<Impl>(mutex_))
346 {
347 }
348
CheckWindowId(int32_t windowId) const349 int32_t WindowChecker::CheckWindowId(int32_t windowId) const
350 {
351 int32_t pid = INVALID_PID;
352 WMError ret = SingletonContainer::Get<WindowAdapter>().CheckWindowId(windowId, pid);
353 if (ret != WMError::WM_OK) {
354 WLOGFE("Window(%{public}d) do not allow styles to be set", windowId);
355 }
356 return pid;
357 }
358
~WindowManager()359 WindowManager::~WindowManager()
360 {
361 std::lock_guard<std::recursive_mutex> lock(mutex_);
362 destroyed_ = true;
363 }
364
RegisterWMSConnectionChangedListener(const sptr<IWMSConnectionChangedListener> & listener)365 WMError WindowManager::RegisterWMSConnectionChangedListener(const sptr<IWMSConnectionChangedListener>& listener)
366 {
367 int32_t clientUserId = GetUserIdByUid(getuid());
368 if (clientUserId != SYSTEM_USERID) {
369 TLOGW(WmsLogTag::WMS_MULTI_USER, "Not u0 user, permission denied");
370 return WMError::WM_ERROR_INVALID_PERMISSION;
371 }
372 if (listener == nullptr) {
373 TLOGE(WmsLogTag::WMS_MULTI_USER, "WMS connection changed listener registered could not be null");
374 return WMError::WM_ERROR_NULLPTR;
375 }
376 TLOGI(WmsLogTag::WMS_MULTI_USER, "Register enter");
377 {
378 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
379 if (pImpl_->wmsConnectionChangedListener_) {
380 TLOGI(WmsLogTag::WMS_MULTI_USER, "wmsConnectionChangedListener is already registered, do nothing");
381 return WMError::WM_OK;
382 }
383 pImpl_->wmsConnectionChangedListener_ = listener;
384 }
385 auto ret = SingletonContainer::Get<WindowAdapter>().RegisterWMSConnectionChangedListener(
386 [this](int32_t userId, int32_t screenId, bool isConnected) {
387 this->OnWMSConnectionChanged(userId, screenId, isConnected);
388 });
389 if (ret != WMError::WM_OK) {
390 pImpl_->wmsConnectionChangedListener_ = nullptr;
391 }
392 return ret;
393 }
394
UnregisterWMSConnectionChangedListener()395 WMError WindowManager::UnregisterWMSConnectionChangedListener()
396 {
397 TLOGI(WmsLogTag::WMS_MULTI_USER, "Unregister enter");
398 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
399 pImpl_->wmsConnectionChangedListener_ = nullptr;
400 return WMError::WM_OK;
401 }
402
RegisterFocusChangedListener(const sptr<IFocusChangedListener> & listener)403 WMError WindowManager::RegisterFocusChangedListener(const sptr<IFocusChangedListener>& listener)
404 {
405 if (listener == nullptr) {
406 WLOGFE("listener could not be null");
407 return WMError::WM_ERROR_NULLPTR;
408 }
409
410 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
411 WMError ret = WMError::WM_OK;
412 if (pImpl_->focusChangedListenerAgent_ == nullptr) {
413 pImpl_->focusChangedListenerAgent_ = new WindowManagerAgent();
414 }
415 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
416 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_FOCUS, pImpl_->focusChangedListenerAgent_);
417 if (ret != WMError::WM_OK) {
418 WLOGFW("RegisterWindowManagerAgent failed!");
419 pImpl_->focusChangedListenerAgent_ = nullptr;
420 } else {
421 auto iter = std::find(pImpl_->focusChangedListeners_.begin(), pImpl_->focusChangedListeners_.end(), listener);
422 if (iter != pImpl_->focusChangedListeners_.end()) {
423 WLOGFW("Listener is already registered.");
424 return WMError::WM_OK;
425 }
426 pImpl_->focusChangedListeners_.push_back(listener);
427 }
428 return ret;
429 }
430
UnregisterFocusChangedListener(const sptr<IFocusChangedListener> & listener)431 WMError WindowManager::UnregisterFocusChangedListener(const sptr<IFocusChangedListener>& listener)
432 {
433 if (listener == nullptr) {
434 WLOGFE("listener could not be null");
435 return WMError::WM_ERROR_NULLPTR;
436 }
437
438 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
439 auto iter = std::find(pImpl_->focusChangedListeners_.begin(), pImpl_->focusChangedListeners_.end(), listener);
440 if (iter == pImpl_->focusChangedListeners_.end()) {
441 WLOGFE("could not find this listener");
442 return WMError::WM_OK;
443 }
444 pImpl_->focusChangedListeners_.erase(iter);
445 WMError ret = WMError::WM_OK;
446 if (pImpl_->focusChangedListeners_.empty() && pImpl_->focusChangedListenerAgent_ != nullptr) {
447 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
448 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_FOCUS, pImpl_->focusChangedListenerAgent_);
449 if (ret == WMError::WM_OK) {
450 pImpl_->focusChangedListenerAgent_ = nullptr;
451 }
452 }
453 return ret;
454 }
455
RegisterWindowModeChangedListener(const sptr<IWindowModeChangedListener> & listener)456 WMError WindowManager::RegisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener)
457 {
458 if (listener == nullptr) {
459 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
460 return WMError::WM_ERROR_NULLPTR;
461 }
462
463 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
464 WMError ret = WMError::WM_OK;
465 if (pImpl_->windowModeListenerAgent_ == nullptr) {
466 pImpl_->windowModeListenerAgent_ = new WindowManagerAgent();
467 }
468 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
469 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_MODE, pImpl_->windowModeListenerAgent_);
470 if (ret != WMError::WM_OK) {
471 TLOGW(WmsLogTag::WMS_MAIN, "RegisterWindowManagerAgent failed!");
472 pImpl_->windowModeListenerAgent_ = nullptr;
473 return ret;
474 }
475 auto iter = std::find(pImpl_->windowModeListeners_.begin(), pImpl_->windowModeListeners_.end(), listener);
476 if (iter != pImpl_->windowModeListeners_.end()) {
477 TLOGW(WmsLogTag::WMS_MAIN, "Listener is already registered.");
478 return WMError::WM_OK;
479 }
480 pImpl_->windowModeListeners_.push_back(listener);
481 return ret;
482 }
483
UnregisterWindowModeChangedListener(const sptr<IWindowModeChangedListener> & listener)484 WMError WindowManager::UnregisterWindowModeChangedListener(const sptr<IWindowModeChangedListener>& listener)
485 {
486 if (listener == nullptr) {
487 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
488 return WMError::WM_ERROR_NULLPTR;
489 }
490
491 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
492 auto iter = std::find(pImpl_->windowModeListeners_.begin(), pImpl_->windowModeListeners_.end(), listener);
493 if (iter == pImpl_->windowModeListeners_.end()) {
494 TLOGE(WmsLogTag::WMS_MAIN, "could not find this listener");
495 return WMError::WM_OK;
496 }
497 pImpl_->windowModeListeners_.erase(iter);
498 WMError ret = WMError::WM_OK;
499 if (pImpl_->windowModeListeners_.empty() && pImpl_->windowModeListenerAgent_ != nullptr) {
500 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
501 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_MODE, pImpl_->windowModeListenerAgent_);
502 if (ret == WMError::WM_OK) {
503 pImpl_->windowModeListenerAgent_ = nullptr;
504 }
505 }
506 return ret;
507 }
508
RegisterSystemBarChangedListener(const sptr<ISystemBarChangedListener> & listener)509 WMError WindowManager::RegisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener)
510 {
511 if (listener == nullptr) {
512 WLOGFE("listener could not be null");
513 return WMError::WM_ERROR_NULLPTR;
514 }
515
516 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
517 WMError ret = WMError::WM_OK;
518 if (pImpl_->systemBarChangedListenerAgent_ == nullptr) {
519 pImpl_->systemBarChangedListenerAgent_ = new WindowManagerAgent();
520 }
521 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
522 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_SYSTEM_BAR, pImpl_->systemBarChangedListenerAgent_);
523 if (ret != WMError::WM_OK) {
524 WLOGFW("RegisterWindowManagerAgent failed!");
525 pImpl_->systemBarChangedListenerAgent_ = nullptr;
526 } else {
527 auto iter = std::find(pImpl_->systemBarChangedListeners_.begin(), pImpl_->systemBarChangedListeners_.end(),
528 listener);
529 if (iter != pImpl_->systemBarChangedListeners_.end()) {
530 WLOGFW("Listener is already registered.");
531 return WMError::WM_OK;
532 }
533 pImpl_->systemBarChangedListeners_.push_back(listener);
534 }
535 return ret;
536 }
537
UnregisterSystemBarChangedListener(const sptr<ISystemBarChangedListener> & listener)538 WMError WindowManager::UnregisterSystemBarChangedListener(const sptr<ISystemBarChangedListener>& listener)
539 {
540 if (listener == nullptr) {
541 WLOGFE("listener could not be null");
542 return WMError::WM_ERROR_NULLPTR;
543 }
544
545 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
546 auto iter = std::find(pImpl_->systemBarChangedListeners_.begin(), pImpl_->systemBarChangedListeners_.end(),
547 listener);
548 if (iter == pImpl_->systemBarChangedListeners_.end()) {
549 WLOGFE("could not find this listener");
550 return WMError::WM_OK;
551 }
552 pImpl_->systemBarChangedListeners_.erase(iter);
553 WMError ret = WMError::WM_OK;
554 if (pImpl_->systemBarChangedListeners_.empty() && pImpl_->systemBarChangedListenerAgent_ != nullptr) {
555 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
556 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_SYSTEM_BAR, pImpl_->systemBarChangedListenerAgent_);
557 if (ret == WMError::WM_OK) {
558 pImpl_->systemBarChangedListenerAgent_ = nullptr;
559 }
560 }
561 return ret;
562 }
563
MinimizeAllAppWindows(DisplayId displayId)564 WMError WindowManager::MinimizeAllAppWindows(DisplayId displayId)
565 {
566 WLOGFD("displayId %{public}" PRIu64"", displayId);
567 return SingletonContainer::Get<WindowAdapter>().MinimizeAllAppWindows(displayId);
568 }
569
ToggleShownStateForAllAppWindows()570 WMError WindowManager::ToggleShownStateForAllAppWindows()
571 {
572 WLOGFD("ToggleShownStateForAllAppWindows");
573 return SingletonContainer::Get<WindowAdapter>().ToggleShownStateForAllAppWindows();
574 }
575
SetWindowLayoutMode(WindowLayoutMode mode)576 WMError WindowManager::SetWindowLayoutMode(WindowLayoutMode mode)
577 {
578 WLOGFD("set window layout mode: %{public}u", mode);
579 WMError ret = SingletonContainer::Get<WindowAdapter>().SetWindowLayoutMode(mode);
580 if (ret != WMError::WM_OK) {
581 WLOGFE("set layout mode failed");
582 }
583 return ret;
584 }
585
RegisterWindowUpdateListener(const sptr<IWindowUpdateListener> & listener)586 WMError WindowManager::RegisterWindowUpdateListener(const sptr<IWindowUpdateListener> &listener)
587 {
588 if (listener == nullptr) {
589 WLOGFE("listener could not be null");
590 return WMError::WM_ERROR_NULLPTR;
591 }
592 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
593 WMError ret = WMError::WM_OK;
594 if (pImpl_->windowUpdateListenerAgent_ == nullptr) {
595 pImpl_->windowUpdateListenerAgent_ = new WindowManagerAgent();
596 }
597 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
598 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_UPDATE, pImpl_->windowUpdateListenerAgent_);
599 if (ret != WMError::WM_OK) {
600 WLOGFW("RegisterWindowManagerAgent failed!");
601 pImpl_->windowUpdateListenerAgent_ = nullptr;
602 } else {
603 auto iter = std::find(pImpl_->windowUpdateListeners_.begin(), pImpl_->windowUpdateListeners_.end(), listener);
604 if (iter != pImpl_->windowUpdateListeners_.end()) {
605 WLOGI("Listener is already registered.");
606 return WMError::WM_OK;
607 }
608 pImpl_->windowUpdateListeners_.emplace_back(listener);
609 }
610 return ret;
611 }
612
UnregisterWindowUpdateListener(const sptr<IWindowUpdateListener> & listener)613 WMError WindowManager::UnregisterWindowUpdateListener(const sptr<IWindowUpdateListener>& listener)
614 {
615 if (listener == nullptr) {
616 WLOGFE("listener could not be null");
617 return WMError::WM_ERROR_NULLPTR;
618 }
619 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
620 auto iter = std::find(pImpl_->windowUpdateListeners_.begin(), pImpl_->windowUpdateListeners_.end(), listener);
621 if (iter == pImpl_->windowUpdateListeners_.end()) {
622 WLOGFE("could not find this listener");
623 return WMError::WM_OK;
624 }
625 pImpl_->windowUpdateListeners_.erase(iter);
626 WMError ret = WMError::WM_OK;
627 if (pImpl_->windowUpdateListeners_.empty() && pImpl_->windowUpdateListenerAgent_ != nullptr) {
628 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
629 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_UPDATE, pImpl_->windowUpdateListenerAgent_);
630 if (ret == WMError::WM_OK) {
631 pImpl_->windowUpdateListenerAgent_ = nullptr;
632 }
633 }
634 return ret;
635 }
636
RegisterVisibilityChangedListener(const sptr<IVisibilityChangedListener> & listener)637 WMError WindowManager::RegisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener)
638 {
639 if (listener == nullptr) {
640 WLOGFE("listener could not be null");
641 return WMError::WM_ERROR_NULLPTR;
642 }
643 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
644 WMError ret = WMError::WM_OK;
645 if (pImpl_->windowVisibilityListenerAgent_ == nullptr) {
646 pImpl_->windowVisibilityListenerAgent_ = new WindowManagerAgent();
647 }
648 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
649 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_VISIBILITY,
650 pImpl_->windowVisibilityListenerAgent_);
651 if (ret != WMError::WM_OK) {
652 WLOGFW("RegisterWindowManagerAgent failed!");
653 pImpl_->windowVisibilityListenerAgent_ = nullptr;
654 } else {
655 auto iter = std::find(pImpl_->windowVisibilityListeners_.begin(), pImpl_->windowVisibilityListeners_.end(),
656 listener);
657 if (iter != pImpl_->windowVisibilityListeners_.end()) {
658 WLOGFW("Listener is already registered.");
659 return WMError::WM_OK;
660 }
661 pImpl_->windowVisibilityListeners_.emplace_back(listener);
662 }
663 return ret;
664 }
665
UnregisterVisibilityChangedListener(const sptr<IVisibilityChangedListener> & listener)666 WMError WindowManager::UnregisterVisibilityChangedListener(const sptr<IVisibilityChangedListener>& listener)
667 {
668 if (listener == nullptr) {
669 WLOGFE("listener could not be null");
670 return WMError::WM_ERROR_NULLPTR;
671 }
672 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
673 pImpl_->windowVisibilityListeners_.erase(std::remove_if(pImpl_->windowVisibilityListeners_.begin(),
674 pImpl_->windowVisibilityListeners_.end(), [listener](sptr<IVisibilityChangedListener> registeredListener) {
675 return registeredListener == listener;
676 }), pImpl_->windowVisibilityListeners_.end());
677
678 WMError ret = WMError::WM_OK;
679 if (pImpl_->windowVisibilityListeners_.empty() && pImpl_->windowVisibilityListenerAgent_ != nullptr) {
680 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
681 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_VISIBILITY,
682 pImpl_->windowVisibilityListenerAgent_);
683 if (ret == WMError::WM_OK) {
684 pImpl_->windowVisibilityListenerAgent_ = nullptr;
685 }
686 }
687 return ret;
688 }
689
RegisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener> & listener)690 WMError WindowManager::RegisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener>& listener)
691 {
692 if (listener == nullptr) {
693 WLOGFE("listener could not be null");
694 return WMError::WM_ERROR_NULLPTR;
695 }
696
697 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
698 WMError ret = WMError::WM_OK;
699 if (pImpl_->cameraFloatWindowChangedListenerAgent_ == nullptr) {
700 pImpl_->cameraFloatWindowChangedListenerAgent_ = new WindowManagerAgent();
701 }
702 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
703 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_CAMERA_FLOAT,
704 pImpl_->cameraFloatWindowChangedListenerAgent_);
705 if (ret != WMError::WM_OK) {
706 WLOGFW("RegisterWindowManagerAgent failed!");
707 pImpl_->cameraFloatWindowChangedListenerAgent_ = nullptr;
708 } else {
709 auto iter = std::find(pImpl_->cameraFloatWindowChangedListeners_.begin(),
710 pImpl_->cameraFloatWindowChangedListeners_.end(), listener);
711 if (iter != pImpl_->cameraFloatWindowChangedListeners_.end()) {
712 WLOGFW("Listener is already registered.");
713 return WMError::WM_OK;
714 }
715 pImpl_->cameraFloatWindowChangedListeners_.push_back(listener);
716 }
717 return ret;
718 }
719
UnregisterCameraFloatWindowChangedListener(const sptr<ICameraFloatWindowChangedListener> & listener)720 WMError WindowManager::UnregisterCameraFloatWindowChangedListener(
721 const sptr<ICameraFloatWindowChangedListener>& listener)
722 {
723 if (listener == nullptr) {
724 WLOGFE("listener could not be null");
725 return WMError::WM_ERROR_NULLPTR;
726 }
727
728 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
729 auto iter = std::find(pImpl_->cameraFloatWindowChangedListeners_.begin(),
730 pImpl_->cameraFloatWindowChangedListeners_.end(), listener);
731 if (iter == pImpl_->cameraFloatWindowChangedListeners_.end()) {
732 WLOGFE("could not find this listener");
733 return WMError::WM_OK;
734 }
735 pImpl_->cameraFloatWindowChangedListeners_.erase(iter);
736 WMError ret = WMError::WM_OK;
737 if (pImpl_->cameraFloatWindowChangedListeners_.empty() &&
738 pImpl_->cameraFloatWindowChangedListenerAgent_ != nullptr) {
739 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
740 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_CAMERA_FLOAT,
741 pImpl_->cameraFloatWindowChangedListenerAgent_);
742 if (ret == WMError::WM_OK) {
743 pImpl_->cameraFloatWindowChangedListenerAgent_ = nullptr;
744 }
745 }
746 return ret;
747 }
748
RegisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener> & listener)749 WMError WindowManager::RegisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener)
750 {
751 if (listener == nullptr) {
752 WLOGFE("listener could not be null");
753 return WMError::WM_ERROR_NULLPTR;
754 }
755
756 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
757 WMError ret = WMError::WM_OK;
758 if (pImpl_->waterMarkFlagChangeAgent_ == nullptr) {
759 pImpl_->waterMarkFlagChangeAgent_ = new WindowManagerAgent();
760 }
761 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
762 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WATER_MARK_FLAG,
763 pImpl_->waterMarkFlagChangeAgent_);
764 if (ret != WMError::WM_OK) {
765 WLOGFW("RegisterWindowManagerAgent failed!");
766 pImpl_->waterMarkFlagChangeAgent_ = nullptr;
767 } else {
768 auto iter = std::find(pImpl_->waterMarkFlagChangeListeners_.begin(),
769 pImpl_->waterMarkFlagChangeListeners_.end(), listener);
770 if (iter != pImpl_->waterMarkFlagChangeListeners_.end()) {
771 WLOGFW("Listener is already registered.");
772 return WMError::WM_OK;
773 }
774 pImpl_->waterMarkFlagChangeListeners_.push_back(listener);
775 }
776 WLOGFD("Try to registerWaterMarkFlagChangedListener && result : %{public}u", static_cast<uint32_t>(ret));
777 return ret;
778 }
779
UnregisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener> & listener)780 WMError WindowManager::UnregisterWaterMarkFlagChangedListener(const sptr<IWaterMarkFlagChangedListener>& listener)
781 {
782 if (listener == nullptr) {
783 WLOGFE("listener could not be null");
784 return WMError::WM_ERROR_NULLPTR;
785 }
786
787 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
788 auto iter = std::find(pImpl_->waterMarkFlagChangeListeners_.begin(),
789 pImpl_->waterMarkFlagChangeListeners_.end(), listener);
790 if (iter == pImpl_->waterMarkFlagChangeListeners_.end()) {
791 WLOGFE("could not find this listener");
792 return WMError::WM_OK;
793 }
794 pImpl_->waterMarkFlagChangeListeners_.erase(iter);
795 WMError ret = WMError::WM_OK;
796 if (pImpl_->waterMarkFlagChangeListeners_.empty() &&
797 pImpl_->waterMarkFlagChangeAgent_ != nullptr) {
798 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
799 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WATER_MARK_FLAG,
800 pImpl_->waterMarkFlagChangeAgent_);
801 if (ret == WMError::WM_OK) {
802 pImpl_->waterMarkFlagChangeAgent_ = nullptr;
803 }
804 }
805 WLOGFD("Try to unregisterWaterMarkFlagChangedListener && result : %{public}u", static_cast<uint32_t>(ret));
806 return ret;
807 }
808
RegisterGestureNavigationEnabledChangedListener(const sptr<IGestureNavigationEnabledChangedListener> & listener)809 WMError WindowManager::RegisterGestureNavigationEnabledChangedListener(
810 const sptr<IGestureNavigationEnabledChangedListener>& listener)
811 {
812 if (listener == nullptr) {
813 WLOGFE("listener could not be null");
814 return WMError::WM_ERROR_NULLPTR;
815 }
816
817 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
818 WMError ret = WMError::WM_OK;
819 if (pImpl_->gestureNavigationEnabledAgent_ == nullptr) {
820 pImpl_->gestureNavigationEnabledAgent_ = new (std::nothrow)WindowManagerAgent();
821 }
822 if (pImpl_->gestureNavigationEnabledAgent_ != nullptr) {
823 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
824 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_GESTURE_NAVIGATION_ENABLED,
825 pImpl_->gestureNavigationEnabledAgent_);
826 } else {
827 WLOGFE("Create windowManagerAgent object failed!");
828 ret = WMError::WM_ERROR_NULLPTR;
829 }
830 if (ret != WMError::WM_OK) {
831 WLOGFE("RegisterWindowManagerAgent failed!");
832 pImpl_->gestureNavigationEnabledAgent_ = nullptr;
833 } else {
834 auto iter = std::find(pImpl_->gestureNavigationEnabledListeners_.begin(),
835 pImpl_->gestureNavigationEnabledListeners_.end(), listener);
836 if (iter != pImpl_->gestureNavigationEnabledListeners_.end()) {
837 WLOGFW("Listener is already registered.");
838 return WMError::WM_OK;
839 }
840 pImpl_->gestureNavigationEnabledListeners_.push_back(listener);
841 }
842 WLOGFD("Try to registerGestureNavigationEnabledChangedListener and result is %{public}u",
843 static_cast<uint32_t>(ret));
844 return ret;
845 }
846
UnregisterGestureNavigationEnabledChangedListener(const sptr<IGestureNavigationEnabledChangedListener> & listener)847 WMError WindowManager::UnregisterGestureNavigationEnabledChangedListener(
848 const sptr<IGestureNavigationEnabledChangedListener>& listener)
849 {
850 if (listener == nullptr) {
851 WLOGFE("listener could not be null");
852 return WMError::WM_ERROR_NULLPTR;
853 }
854
855 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
856 auto iter = std::find(pImpl_->gestureNavigationEnabledListeners_.begin(),
857 pImpl_->gestureNavigationEnabledListeners_.end(), listener);
858 if (iter == pImpl_->gestureNavigationEnabledListeners_.end()) {
859 WLOGFE("could not find this listener");
860 return WMError::WM_ERROR_INVALID_PARAM;
861 }
862 pImpl_->gestureNavigationEnabledListeners_.erase(iter);
863 WMError ret = WMError::WM_OK;
864 if (pImpl_->gestureNavigationEnabledListeners_.empty() &&
865 pImpl_->gestureNavigationEnabledAgent_ != nullptr) {
866 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
867 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_GESTURE_NAVIGATION_ENABLED,
868 pImpl_->gestureNavigationEnabledAgent_);
869 if (ret == WMError::WM_OK) {
870 pImpl_->gestureNavigationEnabledAgent_ = nullptr;
871 }
872 }
873 WLOGFD("Try to unregisterGestureNavigationEnabledChangedListener and result is %{public}u",
874 static_cast<uint32_t>(ret));
875 return ret;
876 }
877
RegisterDisplayInfoChangedListener(const sptr<IRemoteObject> & token,const sptr<IDisplayInfoChangedListener> & listener)878 WMError WindowManager::RegisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token,
879 const sptr<IDisplayInfoChangedListener>& listener)
880 {
881 if (token == nullptr) {
882 TLOGE(WmsLogTag::DMS, "ability token could not be null");
883 return WMError::WM_ERROR_NULLPTR;
884 }
885
886 if (listener == nullptr) {
887 TLOGE(WmsLogTag::DMS, "listener could not be null");
888 return WMError::WM_ERROR_NULLPTR;
889 }
890
891 sptr<WindowDisplayChangeAdapter> listenerAdapter = new (std::nothrow) WindowDisplayChangeAdapter(token, listener);
892 if (listenerAdapter == nullptr) {
893 TLOGE(WmsLogTag::DMS, "create listener adapter failed.");
894 return WMError::WM_ERROR_NO_MEM;
895 }
896 std::lock_guard<std::recursive_mutex> lock(mutex_);
897 auto iter = pImpl_->displayInfoChangedListeners_.find(token);
898 if (iter == pImpl_->displayInfoChangedListeners_.end()) {
899 pImpl_->displayInfoChangedListeners_.insert({token, {listenerAdapter}});
900 } else {
901 auto listerneIter = std::find_if(iter->second.begin(), iter->second.end(),
902 [&listener](const sptr<WindowDisplayChangeAdapter>& item) {
903 return listener == item->GetListener();
904 });
905 if (listerneIter != iter->second.end()) {
906 TLOGW(WmsLogTag::DMS, "listener is already registered.");
907 } else {
908 iter->second.push_back(listenerAdapter);
909 }
910 }
911 TLOGD(WmsLogTag::DMS, "try to registerDisplayInfoChangedListener success");
912 return WMError::WM_OK;
913 }
914
UnregisterDisplayInfoChangedListener(const sptr<IRemoteObject> & token,const sptr<IDisplayInfoChangedListener> & listener)915 WMError WindowManager::UnregisterDisplayInfoChangedListener(const sptr<IRemoteObject>& token,
916 const sptr<IDisplayInfoChangedListener>& listener)
917 {
918 if (token == nullptr) {
919 TLOGE(WmsLogTag::DMS, "ability token could not be null");
920 return WMError::WM_ERROR_NULLPTR;
921 }
922
923 if (listener == nullptr) {
924 TLOGE(WmsLogTag::DMS, "listener could not be null");
925 return WMError::WM_ERROR_NULLPTR;
926 }
927
928 std::lock_guard<std::recursive_mutex> lock(mutex_);
929 auto iter = pImpl_->displayInfoChangedListeners_.find(token);
930 if (iter == pImpl_->displayInfoChangedListeners_.end()) {
931 TLOGW(WmsLogTag::DMS, "can not find the ability token");
932 } else {
933 auto listerneIter = std::find_if(iter->second.begin(), iter->second.end(),
934 [&listener](sptr<WindowDisplayChangeAdapter>& item) {
935 return listener == item->GetListener();
936 });
937 if (listerneIter == iter->second.end()) {
938 TLOGW(WmsLogTag::DMS, "can not find the listener.");
939 } else {
940 iter->second.erase(listerneIter);
941 if (iter->second.empty()) {
942 pImpl_->displayInfoChangedListeners_.erase(iter);
943 }
944 }
945 }
946 TLOGD(WmsLogTag::DMS, "try to unregisterDisplayInfoChangedListener success");
947 return WMError::WM_OK;
948 }
949
NotifyDisplayInfoChange(const sptr<IRemoteObject> & token,DisplayId displayId,float density,DisplayOrientation orientation)950 WMError WindowManager::NotifyDisplayInfoChange(const sptr<IRemoteObject>& token, DisplayId displayId,
951 float density, DisplayOrientation orientation)
952 {
953 TLOGD(WmsLogTag::DMS, "notify display info change, displayid = %{public}" PRIu64", density=%{public}f," \
954 "orientation = %{public}d", displayId, density, orientation);
955 if (token == nullptr) {
956 TLOGE(WmsLogTag::DMS, "notify display info change failed, token is nullptr");
957 return WMError::WM_ERROR_INVALID_PARAM;
958 }
959 pImpl_->NotifyDisplayInfoChanged(token, displayId, density, orientation);
960 return WMError::WM_OK;
961 }
962
GetFocusWindowInfo(FocusChangeInfo & focusInfo)963 void WindowManager::GetFocusWindowInfo(FocusChangeInfo& focusInfo)
964 {
965 SingletonContainer::Get<WindowAdapter>().GetFocusWindowInfo(focusInfo);
966 }
967
OnWMSConnectionChanged(int32_t userId,int32_t screenId,bool isConnected) const968 void WindowManager::OnWMSConnectionChanged(int32_t userId, int32_t screenId, bool isConnected) const
969 {
970 if (isConnected) {
971 pImpl_->NotifyWMSConnected(userId, screenId);
972 } else {
973 pImpl_->NotifyWMSDisconnected(userId, screenId);
974 }
975 }
976
UpdateFocusChangeInfo(const sptr<FocusChangeInfo> & focusChangeInfo,bool focused) const977 void WindowManager::UpdateFocusChangeInfo(const sptr<FocusChangeInfo>& focusChangeInfo, bool focused) const
978 {
979 if (focusChangeInfo == nullptr) {
980 WLOGFE("focusChangeInfo is nullptr.");
981 return;
982 }
983 TLOGD(WmsLogTag::WMS_FOCUS, "window focus change: %{public}d, id: %{public}u", focused, focusChangeInfo->windowId_);
984 if (focused) {
985 pImpl_->NotifyFocused(focusChangeInfo);
986 } else {
987 pImpl_->NotifyUnfocused(focusChangeInfo);
988 }
989 }
990
UpdateWindowModeTypeInfo(WindowModeType type) const991 void WindowManager::UpdateWindowModeTypeInfo(WindowModeType type) const
992 {
993 pImpl_->NotifyWindowModeChange(type);
994 }
995
GetWindowModeType(WindowModeType & windowModeType) const996 WMError WindowManager::GetWindowModeType(WindowModeType& windowModeType) const
997 {
998 WMError ret = SingletonContainer::Get<WindowAdapter>().GetWindowModeType(windowModeType);
999 if (ret != WMError::WM_OK) {
1000 WLOGFE("get window mode type failed");
1001 }
1002 return ret;
1003 }
1004
UpdateSystemBarRegionTints(DisplayId displayId,const SystemBarRegionTints & tints) const1005 void WindowManager::UpdateSystemBarRegionTints(DisplayId displayId,
1006 const SystemBarRegionTints& tints) const
1007 {
1008 pImpl_->NotifySystemBarChanged(displayId, tints);
1009 }
1010
NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>> & infos,WindowUpdateType type) const1011 void WindowManager::NotifyAccessibilityWindowInfo(const std::vector<sptr<AccessibilityWindowInfo>>& infos,
1012 WindowUpdateType type) const
1013 {
1014 pImpl_->NotifyAccessibilityWindowInfo(infos, type);
1015 }
1016
UpdateWindowVisibilityInfo(const std::vector<sptr<WindowVisibilityInfo>> & windowVisibilityInfos) const1017 void WindowManager::UpdateWindowVisibilityInfo(
1018 const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos) const
1019 {
1020 pImpl_->NotifyWindowVisibilityInfoChanged(windowVisibilityInfos);
1021 }
1022
UpdateWindowDrawingContentInfo(const std::vector<sptr<WindowDrawingContentInfo>> & windowDrawingContentInfos) const1023 void WindowManager::UpdateWindowDrawingContentInfo(
1024 const std::vector<sptr<WindowDrawingContentInfo>>& windowDrawingContentInfos) const
1025 {
1026 pImpl_->NotifyWindowDrawingContentInfoChanged(windowDrawingContentInfos);
1027 }
1028
GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>> & infos) const1029 WMError WindowManager::GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos) const
1030 {
1031 WMError ret = SingletonContainer::Get<WindowAdapter>().GetAccessibilityWindowInfo(infos);
1032 if (ret != WMError::WM_OK) {
1033 WLOGFE("get window info failed");
1034 }
1035 return ret;
1036 }
1037
GetUnreliableWindowInfo(int32_t windowId,std::vector<sptr<UnreliableWindowInfo>> & infos) const1038 WMError WindowManager::GetUnreliableWindowInfo(int32_t windowId,
1039 std::vector<sptr<UnreliableWindowInfo>>& infos) const
1040 {
1041 WMError ret = SingletonContainer::Get<WindowAdapter>().GetUnreliableWindowInfo(windowId, infos);
1042 if (ret != WMError::WM_OK) {
1043 TLOGE(WmsLogTag::DEFAULT, "get unreliable window info failed");
1044 }
1045 return ret;
1046 }
1047
GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>> & infos) const1048 WMError WindowManager::GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos) const
1049 {
1050 WMError ret = SingletonContainer::Get<WindowAdapter>().GetVisibilityWindowInfo(infos);
1051 if (ret != WMError::WM_OK) {
1052 WLOGFE("get window visibility info failed");
1053 }
1054 return ret;
1055 }
1056
DumpSessionAll(std::vector<std::string> & infos)1057 WMError WindowManager::DumpSessionAll(std::vector<std::string> &infos)
1058 {
1059 WMError ret = SingletonContainer::Get<WindowAdapter>().DumpSessionAll(infos);
1060 if (ret != WMError::WM_OK) {
1061 WLOGFE("dump session all failed");
1062 }
1063 return ret;
1064 }
1065
DumpSessionWithId(int32_t persistentId,std::vector<std::string> & infos)1066 WMError WindowManager::DumpSessionWithId(int32_t persistentId, std::vector<std::string> &infos)
1067 {
1068 WMError ret = SingletonContainer::Get<WindowAdapter>().DumpSessionWithId(persistentId, infos);
1069 if (ret != WMError::WM_OK) {
1070 WLOGFE("dump session with id failed");
1071 }
1072 return ret;
1073 }
1074
GetUIContentRemoteObj(int32_t windowId,sptr<IRemoteObject> & uiContentRemoteObj)1075 WMError WindowManager::GetUIContentRemoteObj(int32_t windowId, sptr<IRemoteObject>& uiContentRemoteObj)
1076 {
1077 WMError ret = SingletonContainer::Get<WindowAdapter>().GetUIContentRemoteObj(windowId, uiContentRemoteObj);
1078 if (ret != WMError::WM_OK) {
1079 TLOGE(WmsLogTag::DEFAULT, "Failed to get UIContentRemoteObj. PersistentId=%{public}d; ret=%{public}u",
1080 windowId, static_cast<uint32_t>(ret));
1081 }
1082 return ret;
1083 }
1084
SetGestureNavigaionEnabled(bool enable) const1085 WMError WindowManager::SetGestureNavigaionEnabled(bool enable) const
1086 {
1087 WMError ret = SingletonContainer::Get<WindowAdapter>().SetGestureNavigaionEnabled(enable);
1088 if (ret != WMError::WM_OK) {
1089 WLOGFE("set gesture navigaion enabled failed");
1090 }
1091 return ret;
1092 }
1093
NotifyWindowExtensionVisibilityChange(int32_t pid,int32_t uid,bool visible)1094 WMError WindowManager::NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible)
1095 {
1096 WMError ret = SingletonContainer::Get<WindowAdapter>().NotifyWindowExtensionVisibilityChange(pid, uid, visible);
1097 if (ret != WMError::WM_OK) {
1098 WLOGFE("notify WindowExtension visibility change failed");
1099 }
1100 return ret;
1101 }
1102
UpdateCameraFloatWindowStatus(uint32_t accessTokenId,bool isShowing) const1103 void WindowManager::UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing) const
1104 {
1105 pImpl_->UpdateCameraFloatWindowStatus(accessTokenId, isShowing);
1106 }
1107
NotifyWaterMarkFlagChangedResult(bool showWaterMark) const1108 void WindowManager::NotifyWaterMarkFlagChangedResult(bool showWaterMark) const
1109 {
1110 pImpl_->NotifyWaterMarkFlagChangedResult(showWaterMark);
1111 }
1112
NotifyGestureNavigationEnabledResult(bool enable) const1113 void WindowManager::NotifyGestureNavigationEnabledResult(bool enable) const
1114 {
1115 pImpl_->NotifyGestureNavigationEnabledResult(enable);
1116 }
1117
RaiseWindowToTop(int32_t persistentId)1118 WMError WindowManager::RaiseWindowToTop(int32_t persistentId)
1119 {
1120 WMError ret = SingletonContainer::Get<WindowAdapter>().RaiseWindowToTop(persistentId);
1121 if (ret != WMError::WM_OK) {
1122 WLOGFE("raise window to top failed");
1123 }
1124 return ret;
1125 }
1126
NotifyWindowStyleChange(WindowStyleType type)1127 WMError WindowManager::NotifyWindowStyleChange(WindowStyleType type)
1128 {
1129 pImpl_->NotifyWindowStyleChange(type);
1130 return WMError::WM_OK;
1131 }
1132
RegisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener> & listener)1133 WMError WindowManager::RegisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener)
1134 {
1135 if (listener == nullptr) {
1136 WLOGFE("listener could not be null");
1137 return WMError::WM_ERROR_NULLPTR;
1138 }
1139 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
1140 WMError ret = WMError::WM_OK;
1141 if (pImpl_->windowDrawingContentListenerAgent_ == nullptr) {
1142 pImpl_->windowDrawingContentListenerAgent_ = new WindowManagerAgent();
1143 }
1144 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
1145 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_DRAWING_STATE,
1146 pImpl_->windowDrawingContentListenerAgent_);
1147 if (ret != WMError::WM_OK) {
1148 WLOGFW("RegisterWindowManagerAgent failed!");
1149 pImpl_->windowDrawingContentListenerAgent_ = nullptr;
1150 } else {
1151 auto iter = std::find(pImpl_->windowDrawingContentListeners_.begin(),
1152 pImpl_->windowDrawingContentListeners_.end(), listener);
1153 if (iter != pImpl_->windowDrawingContentListeners_.end()) {
1154 WLOGFW("Listener is already registered.");
1155 return WMError::WM_OK;
1156 }
1157 pImpl_->windowDrawingContentListeners_.emplace_back(listener);
1158 }
1159 return ret;
1160 }
1161
UnregisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener> & listener)1162 WMError WindowManager::UnregisterDrawingContentChangedListener(const sptr<IDrawingContentChangedListener>& listener)
1163 {
1164 if (listener == nullptr) {
1165 WLOGFE("listener could not be null");
1166 return WMError::WM_ERROR_NULLPTR;
1167 }
1168 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
1169 pImpl_->windowDrawingContentListeners_.erase(std::remove_if(pImpl_->windowDrawingContentListeners_.begin(),
1170 pImpl_->windowDrawingContentListeners_.end(),
1171 [listener](sptr<IDrawingContentChangedListener> registeredListener) { return registeredListener == listener; }),
1172 pImpl_->windowDrawingContentListeners_.end());
1173
1174 WMError ret = WMError::WM_OK;
1175 if (pImpl_->windowDrawingContentListeners_.empty() && pImpl_->windowDrawingContentListenerAgent_ != nullptr) {
1176 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
1177 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_DRAWING_STATE,
1178 pImpl_->windowDrawingContentListenerAgent_);
1179 if (ret == WMError::WM_OK) {
1180 pImpl_->windowDrawingContentListenerAgent_ = nullptr;
1181 }
1182 }
1183 return ret;
1184 }
1185
ShiftAppWindowFocus(int32_t sourcePersistentId,int32_t targetPersistentId)1186 WMError WindowManager::ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId)
1187 {
1188 WMError ret = SingletonContainer::Get<WindowAdapter>().ShiftAppWindowFocus(sourcePersistentId, targetPersistentId);
1189 if (ret != WMError::WM_OK) {
1190 WLOGFE("shift application window focus failed");
1191 }
1192 return ret;
1193 }
1194
RegisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener> & listener)1195 WMError WindowManager::RegisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener)
1196 {
1197 if (listener == nullptr) {
1198 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
1199 return WMError::WM_ERROR_NULLPTR;
1200 }
1201 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
1202 WMError ret = WMError::WM_OK;
1203 if (pImpl_->visibleWindowNumChangedListenerAgent_ == nullptr) {
1204 pImpl_->visibleWindowNumChangedListenerAgent_ = new WindowManagerAgent();
1205 }
1206 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
1207 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_VISIBLE_WINDOW_NUM,
1208 pImpl_->visibleWindowNumChangedListenerAgent_);
1209 if (ret != WMError::WM_OK) {
1210 TLOGE(WmsLogTag::WMS_MAIN, "RegisterWindowManagerAgent failed!");
1211 pImpl_->visibleWindowNumChangedListenerAgent_ = nullptr;
1212 } else {
1213 auto iter = std::find(pImpl_->visibleWindowNumChangedListeners_.begin(),
1214 pImpl_->visibleWindowNumChangedListeners_.end(), listener);
1215 if (iter != pImpl_->visibleWindowNumChangedListeners_.end()) {
1216 TLOGE(WmsLogTag::WMS_MAIN, "Listener is already registered.");
1217 return WMError::WM_OK;
1218 }
1219 pImpl_->visibleWindowNumChangedListeners_.emplace_back(listener);
1220 }
1221 return ret;
1222 }
1223
GetSnapshotByWindowId(int32_t windowId,std::shared_ptr<Media::PixelMap> & pixelMap)1224 WMError WindowManager::GetSnapshotByWindowId(int32_t windowId, std::shared_ptr<Media::PixelMap>& pixelMap)
1225 {
1226 return SingletonContainer::Get<WindowAdapter>().GetSnapshotByWindowId(windowId, pixelMap);
1227 }
1228
UnregisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener> & listener)1229 WMError WindowManager::UnregisterVisibleWindowNumChangedListener(const sptr<IVisibleWindowNumChangedListener>& listener)
1230 {
1231 if (listener == nullptr) {
1232 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
1233 return WMError::WM_ERROR_NULLPTR;
1234 }
1235 std::lock_guard<std::recursive_mutex> lock(pImpl_->mutex_);
1236 auto iter = std::find(pImpl_->visibleWindowNumChangedListeners_.begin(),
1237 pImpl_->visibleWindowNumChangedListeners_.end(), listener);
1238 if (iter == pImpl_->visibleWindowNumChangedListeners_.end()) {
1239 TLOGE(WmsLogTag::WMS_MAIN, "could not find this listener");
1240 return WMError::WM_OK;
1241 }
1242
1243 WMError ret = WMError::WM_OK;
1244 if (pImpl_->visibleWindowNumChangedListeners_.empty() && pImpl_->visibleWindowNumChangedListenerAgent_ != nullptr) {
1245 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
1246 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_VISIBLE_WINDOW_NUM,
1247 pImpl_->visibleWindowNumChangedListenerAgent_);
1248 if (ret == WMError::WM_OK) {
1249 pImpl_->visibleWindowNumChangedListenerAgent_ = nullptr;
1250 }
1251 }
1252 return ret;
1253 }
1254
UpdateVisibleWindowNum(const std::vector<VisibleWindowNumInfo> & visibleWindowNumInfo)1255 void WindowManager::UpdateVisibleWindowNum(const std::vector<VisibleWindowNumInfo>& visibleWindowNumInfo)
1256 {
1257 pImpl_->NotifyVisibleWindowNumChanged(visibleWindowNumInfo);
1258 }
1259
1260
RegisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener> & listener)1261 WMError WindowManager::RegisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener)
1262 {
1263 TLOGI(WmsLogTag::WMS_MAIN, "start register");
1264 if (listener == nullptr) {
1265 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
1266 return WMError::WM_ERROR_NULLPTR;
1267 }
1268 {
1269 std::lock_guard<std::recursive_mutex> lock(mutex_);
1270 if (pImpl_->windowStyleListenerAgent_ == nullptr) {
1271 pImpl_->windowStyleListenerAgent_ = new WindowManagerAgent();
1272 }
1273 auto iter = std::find(pImpl_->windowStyleListeners_.begin(), pImpl_->windowStyleListeners_.end(), listener);
1274 if (iter != pImpl_->windowStyleListeners_.end()) {
1275 TLOGW(WmsLogTag::WMS_MAIN, "Listener is already registered.");
1276 return WMError::WM_OK;
1277 }
1278 pImpl_->windowStyleListeners_.push_back(listener);
1279 }
1280 WMError ret = WMError::WM_OK;
1281 ret = SingletonContainer::Get<WindowAdapter>().RegisterWindowManagerAgent(
1282 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_STYLE, pImpl_->windowStyleListenerAgent_);
1283 if (ret != WMError::WM_OK) {
1284 TLOGW(WmsLogTag::WMS_MAIN, "RegisterWindowManagerAgent failed!");
1285 std::lock_guard<std::recursive_mutex> lock(mutex_);
1286 pImpl_->windowStyleListenerAgent_ = nullptr;
1287 auto iter = std::find(pImpl_->windowStyleListeners_.begin(), pImpl_->windowStyleListeners_.end(), listener);
1288 if (iter != pImpl_->windowStyleListeners_.end()) {
1289 pImpl_->windowStyleListeners_.erase(iter);
1290 }
1291 }
1292 return ret;
1293 }
1294
UnregisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener> & listener)1295 WMError WindowManager::UnregisterWindowStyleChangedListener(const sptr<IWindowStyleChangedListener>& listener)
1296 {
1297 TLOGI(WmsLogTag::WMS_MAIN, "start unregister");
1298 if (listener == nullptr) {
1299 TLOGE(WmsLogTag::WMS_MAIN, "listener could not be null");
1300 return WMError::WM_ERROR_NULLPTR;
1301 }
1302 {
1303 std::lock_guard<std::recursive_mutex> lock(mutex_);
1304 auto iter = std::find(pImpl_->windowStyleListeners_.begin(), pImpl_->windowStyleListeners_.end(), listener);
1305 if (iter == pImpl_->windowStyleListeners_.end()) {
1306 TLOGE(WmsLogTag::WMS_MAIN, "could not find this listener");
1307 return WMError::WM_OK;
1308 }
1309 pImpl_->windowStyleListeners_.erase(iter);
1310 }
1311 WMError ret = WMError::WM_OK;
1312 if (pImpl_->windowStyleListeners_.empty() && pImpl_->windowStyleListenerAgent_ != nullptr) {
1313 ret = SingletonContainer::Get<WindowAdapter>().UnregisterWindowManagerAgent(
1314 WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_STYLE, pImpl_->windowStyleListenerAgent_);
1315 if (ret == WMError::WM_OK) {
1316 std::lock_guard<std::recursive_mutex> lock(mutex_);
1317 pImpl_->windowStyleListenerAgent_ = nullptr;
1318 }
1319 }
1320 return ret;
1321 }
1322
GetWindowStyleType()1323 WindowStyleType WindowManager::GetWindowStyleType()
1324 {
1325 WindowStyleType styleType;
1326 if (SingletonContainer::Get<WindowAdapter>().GetWindowStyleType(styleType) == WMError::WM_OK) {
1327 return styleType;
1328 }
1329 return styleType;
1330 }
1331
GetWindowIdsByCoordinate(DisplayId displayId,int32_t windowNumber,int32_t x,int32_t y,std::vector<int32_t> & windowIds) const1332 WMError WindowManager::GetWindowIdsByCoordinate(DisplayId displayId, int32_t windowNumber,
1333 int32_t x, int32_t y, std::vector<int32_t>& windowIds) const
1334 {
1335 WMError ret = SingletonContainer::Get<WindowAdapter>().GetWindowIdsByCoordinate(
1336 displayId, windowNumber, x, y, windowIds);
1337 if (ret != WMError::WM_OK) {
1338 TLOGE(WmsLogTag::DEFAULT, "get windowIds by coordinate failed");
1339 }
1340 return ret;
1341 }
1342
ReleaseForegroundSessionScreenLock()1343 WMError WindowManager::ReleaseForegroundSessionScreenLock()
1344 {
1345 WMError ret = SingletonContainer::Get<WindowAdapter>().ReleaseForegroundSessionScreenLock();
1346 if (ret != WMError::WM_OK) {
1347 TLOGE(WmsLogTag::DEFAULT, "release screen lock failed");
1348 }
1349 return ret;
1350 }
1351
GetDisplayIdByWindowId(const std::vector<uint64_t> & windowIds,std::unordered_map<uint64_t,DisplayId> & windowDisplayIdMap)1352 WMError WindowManager::GetDisplayIdByWindowId(const std::vector<uint64_t>& windowIds,
1353 std::unordered_map<uint64_t, DisplayId>& windowDisplayIdMap)
1354 {
1355 WMError ret = SingletonContainer::Get<WindowAdapter>().GetDisplayIdByWindowId(windowIds, windowDisplayIdMap);
1356 if (ret != WMError::WM_OK) {
1357 TLOGE(WmsLogTag::DEFAULT, "failed");
1358 }
1359 return ret;
1360 }
1361
SetGlobalDragResizeType(DragResizeType dragResizeType)1362 WMError WindowManager::SetGlobalDragResizeType(DragResizeType dragResizeType)
1363 {
1364 WMError ret = SingletonContainer::Get<WindowAdapter>().SetGlobalDragResizeType(dragResizeType);
1365 if (ret != WMError::WM_OK) {
1366 TLOGE(WmsLogTag::DEFAULT, "failed");
1367 }
1368 return ret;
1369 }
1370
GetGlobalDragResizeType(DragResizeType & dragResizeType)1371 WMError WindowManager::GetGlobalDragResizeType(DragResizeType& dragResizeType)
1372 {
1373 WMError ret = SingletonContainer::Get<WindowAdapter>().GetGlobalDragResizeType(dragResizeType);
1374 if (ret != WMError::WM_OK) {
1375 TLOGE(WmsLogTag::DEFAULT, "failed");
1376 }
1377 return ret;
1378 }
1379
SetAppDragResizeType(const std::string & bundleName,DragResizeType dragResizeType)1380 WMError WindowManager::SetAppDragResizeType(const std::string& bundleName, DragResizeType dragResizeType)
1381 {
1382 WMError ret = SingletonContainer::Get<WindowAdapter>().SetAppDragResizeType(bundleName, dragResizeType);
1383 if (ret != WMError::WM_OK) {
1384 TLOGE(WmsLogTag::DEFAULT, "failed");
1385 }
1386 return ret;
1387 }
1388
GetAppDragResizeType(const std::string & bundleName,DragResizeType & dragResizeType)1389 WMError WindowManager::GetAppDragResizeType(const std::string& bundleName, DragResizeType& dragResizeType)
1390 {
1391 WMError ret = SingletonContainer::Get<WindowAdapter>().GetAppDragResizeType(bundleName, dragResizeType);
1392 if (ret != WMError::WM_OK) {
1393 TLOGE(WmsLogTag::DEFAULT, "failed");
1394 }
1395 return ret;
1396 }
1397 } // namespace Rosen
1398 } // namespace OHOS
1399