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_adapter.h"
17 #include <iservice_registry.h>
18 #include <key_event.h>
19 #include <system_ability_definition.h>
20 #include <rs_window_animation_target.h>
21 #include "window_manager.h"
22 #include "window_manager_proxy.h"
23 #include "window_manager_hilog.h"
24 #include "wm_common.h"
25 #include "scene_board_judgement.h"
26 #include "session_manager.h"
27 #include "focus_change_info.h"
28 #include <unistd.h>
29 #include "window_session_impl.h"
30
31 namespace OHOS {
32 namespace Rosen {
33 namespace {
34 constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowAdapter"};
35 }
WM_IMPLEMENT_SINGLE_INSTANCE(WindowAdapter)36 WM_IMPLEMENT_SINGLE_INSTANCE(WindowAdapter)
37
38 #define INIT_PROXY_CHECK_RETURN(ret) \
39 do { \
40 if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { \
41 if (!InitSSMProxy()) { \
42 WLOGFE("InitSSMProxy failed!"); \
43 return ret; \
44 } \
45 } else { \
46 if (!InitWMSProxy()) { \
47 WLOGFE("InitWMSProxy failed!"); \
48 return ret; \
49 } \
50 } \
51 } while (false)
52
53 #define CHECK_PROXY_RETURN_ERROR_IF_NULL(proxy, ret) \
54 do { \
55 if ((proxy) == nullptr) { \
56 TLOGE(WmsLogTag::DEFAULT, "window manager proxy is nullptr"); \
57 return ret; \
58 } \
59 } while (false)
60
61 #define CHECK_PROXY_RETURN_IF_NULL(proxy) \
62 do { \
63 if ((proxy) == nullptr) { \
64 TLOGE(WmsLogTag::DEFAULT, "window manager proxy is nullptr"); \
65 return; \
66 } \
67 } while (false)
68
69 WMError WindowAdapter::CreateWindow(sptr<IWindow>& window, sptr<WindowProperty>& windowProperty,
70 std::shared_ptr<RSSurfaceNode> surfaceNode, uint32_t& windowId, const sptr<IRemoteObject>& token)
71 {
72 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
73
74 auto wmsProxy = GetWindowManagerServiceProxy();
75 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
76 return wmsProxy->CreateWindow(window, windowProperty, surfaceNode, windowId, token);
77 }
78
AddWindow(sptr<WindowProperty> & windowProperty)79 WMError WindowAdapter::AddWindow(sptr<WindowProperty>& windowProperty)
80 {
81 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
82
83 auto wmsProxy = GetWindowManagerServiceProxy();
84 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
85 return wmsProxy->AddWindow(windowProperty);
86 }
87
RemoveWindow(uint32_t windowId,bool isFromInnerkits)88 WMError WindowAdapter::RemoveWindow(uint32_t windowId, bool isFromInnerkits)
89 {
90 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
91
92 auto wmsProxy = GetWindowManagerServiceProxy();
93 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
94 return wmsProxy->RemoveWindow(windowId, isFromInnerkits);
95 }
96
DestroyWindow(uint32_t windowId)97 WMError WindowAdapter::DestroyWindow(uint32_t windowId)
98 {
99 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
100
101 auto wmsProxy = GetWindowManagerServiceProxy();
102 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
103 return wmsProxy->DestroyWindow(windowId);
104 }
105
RequestFocus(uint32_t windowId)106 WMError WindowAdapter::RequestFocus(uint32_t windowId)
107 {
108 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
109
110 auto wmsProxy = GetWindowManagerServiceProxy();
111 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
112 return wmsProxy->RequestFocus(windowId);
113 }
114
RegisterWindowManagerAgent(WindowManagerAgentType type,const sptr<IWindowManagerAgent> & windowManagerAgent)115 WMError WindowAdapter::RegisterWindowManagerAgent(WindowManagerAgentType type,
116 const sptr<IWindowManagerAgent>& windowManagerAgent)
117 {
118 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
119
120 auto wmsProxy = GetWindowManagerServiceProxy();
121 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
122
123 {
124 std::lock_guard<std::mutex> lock(mutex_);
125 if (windowManagerAgentMap_.find(type) == windowManagerAgentMap_.end()) {
126 windowManagerAgentMap_[type] = std::set<sptr<IWindowManagerAgent>>();
127 }
128 windowManagerAgentMap_[type].insert(windowManagerAgent);
129 }
130
131 return wmsProxy->RegisterWindowManagerAgent(type, windowManagerAgent);
132 }
133
UnregisterWindowManagerAgent(WindowManagerAgentType type,const sptr<IWindowManagerAgent> & windowManagerAgent)134 WMError WindowAdapter::UnregisterWindowManagerAgent(WindowManagerAgentType type,
135 const sptr<IWindowManagerAgent>& windowManagerAgent)
136 {
137 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
138
139 auto wmsProxy = GetWindowManagerServiceProxy();
140 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
141 auto ret = wmsProxy->UnregisterWindowManagerAgent(type, windowManagerAgent);
142
143 std::lock_guard<std::mutex> lock(mutex_);
144 if (windowManagerAgentMap_.find(type) == windowManagerAgentMap_.end()) {
145 WLOGFW("WindowManagerAgentType = %{public}d not found", type);
146 return ret;
147 }
148
149 auto& agentSet = windowManagerAgentMap_[type];
150 auto agent = std::find(agentSet.begin(), agentSet.end(), windowManagerAgent);
151 if (agent == agentSet.end()) {
152 WLOGFW("Cannot find agent, type = %{public}d", type);
153 return ret;
154 }
155 agentSet.erase(agent);
156
157 return ret;
158 }
159
CheckWindowId(int32_t windowId,int32_t & pid)160 WMError WindowAdapter::CheckWindowId(int32_t windowId, int32_t& pid)
161 {
162 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
163
164 auto wmsProxy = GetWindowManagerServiceProxy();
165 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
166 return wmsProxy->CheckWindowId(windowId, pid);
167 }
168
GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>> & infos)169 WMError WindowAdapter::GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos)
170 {
171 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
172
173 auto wmsProxy = GetWindowManagerServiceProxy();
174 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
175 return wmsProxy->GetAccessibilityWindowInfo(infos);
176 }
177
GetUnreliableWindowInfo(int32_t windowId,std::vector<sptr<UnreliableWindowInfo>> & infos)178 WMError WindowAdapter::GetUnreliableWindowInfo(int32_t windowId,
179 std::vector<sptr<UnreliableWindowInfo>>& infos)
180 {
181 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
182
183 auto wmsProxy = GetWindowManagerServiceProxy();
184 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
185 return wmsProxy->GetUnreliableWindowInfo(windowId, infos);
186 }
187
GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>> & infos)188 WMError WindowAdapter::GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos)
189 {
190 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
191
192 auto wmsProxy = GetWindowManagerServiceProxy();
193 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
194 return wmsProxy->GetVisibilityWindowInfo(infos);
195 }
196
SetWindowAnimationController(const sptr<RSIWindowAnimationController> & controller)197 WMError WindowAdapter::SetWindowAnimationController(const sptr<RSIWindowAnimationController>& controller)
198 {
199 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
200
201 auto wmsProxy = GetWindowManagerServiceProxy();
202 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
203 return wmsProxy->SetWindowAnimationController(controller);
204 }
205
GetAvoidAreaByType(uint32_t windowId,AvoidAreaType type,AvoidArea & avoidArea)206 WMError WindowAdapter::GetAvoidAreaByType(uint32_t windowId, AvoidAreaType type, AvoidArea& avoidArea)
207 {
208 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
209
210 auto wmsProxy = GetWindowManagerServiceProxy();
211 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
212 avoidArea = wmsProxy->GetAvoidAreaByType(windowId, type);
213 return WMError::WM_OK;
214 }
215
NotifyServerReadyToMoveOrDrag(uint32_t windowId,sptr<WindowProperty> & windowProperty,sptr<MoveDragProperty> & moveDragProperty)216 void WindowAdapter::NotifyServerReadyToMoveOrDrag(uint32_t windowId, sptr<WindowProperty>& windowProperty,
217 sptr<MoveDragProperty>& moveDragProperty)
218 {
219 INIT_PROXY_CHECK_RETURN();
220
221 auto wmsProxy = GetWindowManagerServiceProxy();
222 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
223 wmsProxy->NotifyServerReadyToMoveOrDrag(windowId, windowProperty, moveDragProperty);
224 }
225
ProcessPointDown(uint32_t windowId,bool isPointDown)226 void WindowAdapter::ProcessPointDown(uint32_t windowId, bool isPointDown)
227 {
228 INIT_PROXY_CHECK_RETURN();
229
230 auto wmsProxy = GetWindowManagerServiceProxy();
231 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
232 wmsProxy->ProcessPointDown(windowId, isPointDown);
233 }
234
ProcessPointUp(uint32_t windowId)235 void WindowAdapter::ProcessPointUp(uint32_t windowId)
236 {
237 INIT_PROXY_CHECK_RETURN();
238
239 auto wmsProxy = GetWindowManagerServiceProxy();
240 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
241 wmsProxy->ProcessPointUp(windowId);
242 }
243
MinimizeAllAppWindows(DisplayId displayId)244 WMError WindowAdapter::MinimizeAllAppWindows(DisplayId displayId)
245 {
246 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
247
248 auto wmsProxy = GetWindowManagerServiceProxy();
249 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
250 return wmsProxy->MinimizeAllAppWindows(displayId);
251 }
252
ToggleShownStateForAllAppWindows()253 WMError WindowAdapter::ToggleShownStateForAllAppWindows()
254 {
255 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
256
257 auto wmsProxy = GetWindowManagerServiceProxy();
258 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
259 return wmsProxy->ToggleShownStateForAllAppWindows();
260 }
261
GetSystemConfig(SystemConfig & systemConfig)262 WMError WindowAdapter::GetSystemConfig(SystemConfig& systemConfig)
263 {
264 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
265
266 auto wmsProxy = GetWindowManagerServiceProxy();
267 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
268 return wmsProxy->GetSystemConfig(systemConfig);
269 }
270
GetModeChangeHotZones(DisplayId displayId,ModeChangeHotZones & hotZones)271 WMError WindowAdapter::GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones)
272 {
273 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
274
275 auto wmsProxy = GetWindowManagerServiceProxy();
276 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
277 return wmsProxy->GetModeChangeHotZones(displayId, hotZones);
278 }
279
InitWMSProxy()280 bool WindowAdapter::InitWMSProxy()
281 {
282 std::lock_guard<std::mutex> lock(mutex_);
283 if (!isProxyValid_) {
284 sptr<ISystemAbilityManager> systemAbilityManager =
285 SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
286 if (!systemAbilityManager) {
287 WLOGFE("Failed to get system ability mgr.");
288 return false;
289 }
290
291 sptr<IRemoteObject> remoteObject = systemAbilityManager->GetSystemAbility(WINDOW_MANAGER_SERVICE_ID);
292 if (!remoteObject) {
293 WLOGFE("Failed to get window manager service.");
294 return false;
295 }
296
297 windowManagerServiceProxy_ = iface_cast<IWindowManager>(remoteObject);
298 if (!windowManagerServiceProxy_ || !windowManagerServiceProxy_->AsObject()) {
299 WLOGFE("Failed to get system window manager services");
300 return false;
301 }
302
303 wmsDeath_ = new WMSDeathRecipient();
304 if (!wmsDeath_) {
305 WLOGFE("Failed to create death Recipient ptr WMSDeathRecipient");
306 return false;
307 }
308 if (remoteObject->IsProxyObject() && !remoteObject->AddDeathRecipient(wmsDeath_)) {
309 WLOGFE("Failed to add death recipient");
310 return false;
311 }
312 isProxyValid_ = true;
313 }
314 return true;
315 }
316
RegisterSessionRecoverCallbackFunc(int32_t persistentId,const SessionRecoverCallbackFunc & callbackFunc)317 void WindowAdapter::RegisterSessionRecoverCallbackFunc(
318 int32_t persistentId, const SessionRecoverCallbackFunc& callbackFunc)
319 {
320 TLOGI(WmsLogTag::WMS_RECOVER, "persistentId = %{public}d", persistentId);
321 std::lock_guard<std::mutex> lock(mutex_);
322 sessionRecoverCallbackFuncMap_[persistentId] = callbackFunc;
323 }
324
GetSnapshotByWindowId(int32_t windowId,std::shared_ptr<Media::PixelMap> & pixelMap)325 WMError WindowAdapter::GetSnapshotByWindowId(int32_t windowId, std::shared_ptr<Media::PixelMap>& pixelMap)
326 {
327 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_IPC_FAILED);
328
329 auto wmsProxy = GetWindowManagerServiceProxy();
330 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_IPC_FAILED);
331 return wmsProxy->GetSnapshotByWindowId(windowId, pixelMap);
332 }
333
UnregisterSessionRecoverCallbackFunc(int32_t persistentId)334 void WindowAdapter::UnregisterSessionRecoverCallbackFunc(int32_t persistentId)
335 {
336 std::lock_guard<std::mutex> lock(mutex_);
337 auto it = sessionRecoverCallbackFuncMap_.find(persistentId);
338 if (it != sessionRecoverCallbackFuncMap_.end()) {
339 sessionRecoverCallbackFuncMap_.erase(it);
340 }
341 }
342
RegisterWMSConnectionChangedListener(const WMSConnectionChangedCallbackFunc & callbackFunc)343 WMError WindowAdapter::RegisterWMSConnectionChangedListener(const WMSConnectionChangedCallbackFunc& callbackFunc)
344 {
345 WLOGFI("RegisterWMSConnectionChangedListener in");
346 return SessionManager::GetInstance().RegisterWMSConnectionChangedListener(callbackFunc);
347 }
348
WindowManagerAndSessionRecover()349 void WindowAdapter::WindowManagerAndSessionRecover()
350 {
351 ClearWindowAdapter();
352 if (!InitSSMProxy()) {
353 TLOGE(WmsLogTag::WMS_RECOVER, "InitSSMProxy failed");
354 return;
355 }
356
357 ReregisterWindowManagerAgent();
358
359 std::map<int32_t, SessionRecoverCallbackFunc> sessionRecoverCallbackFuncMap;
360 {
361 std::lock_guard<std::mutex> lock(mutex_);
362 sessionRecoverCallbackFuncMap = sessionRecoverCallbackFuncMap_;
363 }
364 for (const auto& it : sessionRecoverCallbackFuncMap) {
365 TLOGD(WmsLogTag::WMS_RECOVER, "Session recover callback, persistentId = %{public}" PRId32, it.first);
366 auto ret = it.second();
367 if (ret != WMError::WM_OK) {
368 TLOGE(WmsLogTag::WMS_RECOVER, "Session recover callback, persistentId = %{public}" PRId32 " is error",
369 it.first);
370 return;
371 }
372 }
373 }
374
ReregisterWindowManagerAgent()375 void WindowAdapter::ReregisterWindowManagerAgent()
376 {
377 std::lock_guard<std::mutex> lock(mutex_);
378 if (!windowManagerServiceProxy_ || !windowManagerServiceProxy_->AsObject()) {
379 TLOGE(WmsLogTag::WMS_RECOVER, "proxy is null");
380 return;
381 }
382 for (const auto& it : windowManagerAgentMap_) {
383 TLOGI(WmsLogTag::WMS_RECOVER, "Window manager agent type = %{public}" PRIu32 ", size = %{public}" PRIu64,
384 it.first, static_cast<uint64_t>(it.second.size()));
385 for (auto& agent : it.second) {
386 if (windowManagerServiceProxy_->RegisterWindowManagerAgent(it.first, agent) != WMError::WM_OK) {
387 TLOGE(WmsLogTag::WMS_RECOVER, "failed");
388 }
389 }
390 }
391 }
392
OnUserSwitch()393 void WindowAdapter::OnUserSwitch()
394 {
395 TLOGI(WmsLogTag::WMS_MULTI_USER, "User switched");
396 ClearWindowAdapter();
397 InitSSMProxy();
398 ReregisterWindowManagerAgent();
399 }
400
InitSSMProxy()401 bool WindowAdapter::InitSSMProxy()
402 {
403 std::lock_guard<std::mutex> lock(mutex_);
404 if (!isProxyValid_) {
405 windowManagerServiceProxy_ = SessionManager::GetInstance().GetSceneSessionManagerProxy();
406 if (!windowManagerServiceProxy_ || !windowManagerServiceProxy_->AsObject()) {
407 WLOGFE("Failed to get system scene session manager services");
408 return false;
409 }
410 wmsDeath_ = new (std::nothrow) WMSDeathRecipient();
411 if (!wmsDeath_) {
412 WLOGFE("Failed to create death Recipient ptr WMSDeathRecipient");
413 return false;
414 }
415 sptr<IRemoteObject> remoteObject = windowManagerServiceProxy_->AsObject();
416 if (remoteObject->IsProxyObject() && !remoteObject->AddDeathRecipient(wmsDeath_)) {
417 WLOGFE("Failed to add death recipient");
418 return false;
419 }
420 if (!recoverInitialized_) {
421 SessionManager::GetInstance().RegisterWindowManagerRecoverCallbackFunc(
422 [this] { this->WindowManagerAndSessionRecover(); });
423 recoverInitialized_ = true;
424 }
425 // U0 system user needs to subscribe OnUserSwitch event
426 int32_t clientUserId = GetUserIdByUid(getuid());
427 if (clientUserId == SYSTEM_USERID && !isRegisteredUserSwitchListener_) {
428 SessionManager::GetInstance().RegisterUserSwitchListener([this]() { this->OnUserSwitch(); });
429 isRegisteredUserSwitchListener_ = true;
430 }
431 isProxyValid_ = true;
432 }
433 return true;
434 }
435
ClearWindowAdapter()436 void WindowAdapter::ClearWindowAdapter()
437 {
438 std::lock_guard<std::mutex> lock(mutex_);
439 if ((windowManagerServiceProxy_ != nullptr) && (windowManagerServiceProxy_->AsObject() != nullptr)) {
440 windowManagerServiceProxy_->AsObject()->RemoveDeathRecipient(wmsDeath_);
441 }
442 isProxyValid_ = false;
443 windowManagerServiceProxy_ = nullptr;
444 }
445
OnRemoteDied(const wptr<IRemoteObject> & wptrDeath)446 void WMSDeathRecipient::OnRemoteDied(const wptr<IRemoteObject>& wptrDeath)
447 {
448 if (wptrDeath == nullptr) {
449 WLOGFE("wptrDeath is null");
450 return;
451 }
452
453 sptr<IRemoteObject> object = wptrDeath.promote();
454 if (!object) {
455 WLOGFE("object is null");
456 return;
457 }
458 WLOGI("wms OnRemoteDied");
459 SingletonContainer::Get<WindowAdapter>().ClearWindowAdapter();
460 }
461
GetTopWindowId(uint32_t mainWinId,uint32_t & topWinId)462 WMError WindowAdapter::GetTopWindowId(uint32_t mainWinId, uint32_t& topWinId)
463 {
464 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
465
466 auto wmsProxy = GetWindowManagerServiceProxy();
467 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
468 return wmsProxy->GetTopWindowId(mainWinId, topWinId);
469 }
470
GetParentMainWindowId(int32_t windowId,int32_t & mainWindowId)471 WMError WindowAdapter::GetParentMainWindowId(int32_t windowId, int32_t& mainWindowId)
472 {
473 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
474
475 auto wmsProxy = GetWindowManagerServiceProxy();
476 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
477 return wmsProxy->GetParentMainWindowId(windowId, mainWindowId);
478 }
479
SetWindowLayoutMode(WindowLayoutMode mode)480 WMError WindowAdapter::SetWindowLayoutMode(WindowLayoutMode mode)
481 {
482 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
483
484 auto wmsProxy = GetWindowManagerServiceProxy();
485 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
486 return wmsProxy->SetWindowLayoutMode(mode);
487 }
488
UpdateProperty(sptr<WindowProperty> & windowProperty,PropertyChangeAction action)489 WMError WindowAdapter::UpdateProperty(sptr<WindowProperty>& windowProperty, PropertyChangeAction action)
490 {
491 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
492
493 auto wmsProxy = GetWindowManagerServiceProxy();
494 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
495 return wmsProxy->UpdateProperty(windowProperty, action);
496 }
497
SetWindowGravity(uint32_t windowId,WindowGravity gravity,uint32_t percent)498 WMError WindowAdapter::SetWindowGravity(uint32_t windowId, WindowGravity gravity, uint32_t percent)
499 {
500 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
501
502 auto wmsProxy = GetWindowManagerServiceProxy();
503 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
504 return wmsProxy->SetWindowGravity(windowId, gravity, percent);
505 }
506
NotifyWindowTransition(sptr<WindowTransitionInfo> from,sptr<WindowTransitionInfo> to)507 WMError WindowAdapter::NotifyWindowTransition(sptr<WindowTransitionInfo> from, sptr<WindowTransitionInfo> to)
508 {
509 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
510
511 auto wmsProxy = GetWindowManagerServiceProxy();
512 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
513 return wmsProxy->NotifyWindowTransition(from, to, true);
514 }
515
MinimizeWindowsByLauncher(std::vector<uint32_t> windowIds,bool isAnimated,sptr<RSIWindowAnimationFinishedCallback> & finishCallback)516 void WindowAdapter::MinimizeWindowsByLauncher(std::vector<uint32_t> windowIds, bool isAnimated,
517 sptr<RSIWindowAnimationFinishedCallback>& finishCallback)
518 {
519 INIT_PROXY_CHECK_RETURN();
520
521 auto wmsProxy = GetWindowManagerServiceProxy();
522 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
523 wmsProxy->MinimizeWindowsByLauncher(windowIds, isAnimated, finishCallback);
524 }
525
UpdateAvoidAreaListener(uint32_t windowId,bool haveListener)526 WMError WindowAdapter::UpdateAvoidAreaListener(uint32_t windowId, bool haveListener)
527 {
528 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
529
530 auto wmsProxy = GetWindowManagerServiceProxy();
531 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
532 return wmsProxy->UpdateAvoidAreaListener(windowId, haveListener);
533 }
534
UpdateRsTree(uint32_t windowId,bool isAdd)535 WMError WindowAdapter::UpdateRsTree(uint32_t windowId, bool isAdd)
536 {
537 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
538
539 auto wmsProxy = GetWindowManagerServiceProxy();
540 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
541 return wmsProxy->UpdateRsTree(windowId, isAdd);
542 }
543
BindDialogTarget(uint32_t & windowId,sptr<IRemoteObject> targetToken)544 WMError WindowAdapter::BindDialogTarget(uint32_t& windowId, sptr<IRemoteObject> targetToken)
545 {
546 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
547
548 auto wmsProxy = GetWindowManagerServiceProxy();
549 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
550 return wmsProxy->BindDialogTarget(windowId, targetToken);
551 }
552
SetAnchorAndScale(int32_t x,int32_t y,float scale)553 void WindowAdapter::SetAnchorAndScale(int32_t x, int32_t y, float scale)
554 {
555 INIT_PROXY_CHECK_RETURN();
556
557 auto wmsProxy = GetWindowManagerServiceProxy();
558 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
559 wmsProxy->SetAnchorAndScale(x, y, scale);
560 }
561
SetAnchorOffset(int32_t deltaX,int32_t deltaY)562 void WindowAdapter::SetAnchorOffset(int32_t deltaX, int32_t deltaY)
563 {
564 INIT_PROXY_CHECK_RETURN();
565
566 auto wmsProxy = GetWindowManagerServiceProxy();
567 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
568 wmsProxy->SetAnchorOffset(deltaX, deltaY);
569 }
570
OffWindowZoom()571 void WindowAdapter::OffWindowZoom()
572 {
573 INIT_PROXY_CHECK_RETURN();
574
575 auto wmsProxy = GetWindowManagerServiceProxy();
576 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
577 wmsProxy->OffWindowZoom();
578 }
579
580 /** @note @window.hierarchy */
RaiseToAppTop(uint32_t windowId)581 WMError WindowAdapter::RaiseToAppTop(uint32_t windowId)
582 {
583 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
584
585 auto wmsProxy = GetWindowManagerServiceProxy();
586 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
587 return wmsProxy->RaiseToAppTop(windowId);
588 }
589
GetSnapshot(int32_t windowId)590 std::shared_ptr<Media::PixelMap> WindowAdapter::GetSnapshot(int32_t windowId)
591 {
592 INIT_PROXY_CHECK_RETURN(nullptr);
593
594 auto wmsProxy = GetWindowManagerServiceProxy();
595 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, nullptr);
596 return wmsProxy->GetSnapshot(windowId);
597 }
598
SetGestureNavigaionEnabled(bool enable)599 WMError WindowAdapter::SetGestureNavigaionEnabled(bool enable)
600 {
601 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
602
603 auto wmsProxy = GetWindowManagerServiceProxy();
604 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
605 return wmsProxy->SetGestureNavigaionEnabled(enable);
606 }
607
DispatchKeyEvent(uint32_t windowId,std::shared_ptr<MMI::KeyEvent> event)608 void WindowAdapter::DispatchKeyEvent(uint32_t windowId, std::shared_ptr<MMI::KeyEvent> event)
609 {
610 INIT_PROXY_CHECK_RETURN();
611
612 auto wmsProxy = GetWindowManagerServiceProxy();
613 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
614 wmsProxy->DispatchKeyEvent(windowId, event);
615 }
616
NotifyDumpInfoResult(const std::vector<std::string> & info)617 void WindowAdapter::NotifyDumpInfoResult(const std::vector<std::string>& info)
618 {
619 INIT_PROXY_CHECK_RETURN();
620
621 auto wmsProxy = GetWindowManagerServiceProxy();
622 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
623 wmsProxy->NotifyDumpInfoResult(info);
624 }
625
DumpSessionAll(std::vector<std::string> & infos)626 WMError WindowAdapter::DumpSessionAll(std::vector<std::string>& infos)
627 {
628 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
629
630 auto wmsProxy = GetWindowManagerServiceProxy();
631 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
632 return static_cast<WMError>(wmsProxy->DumpSessionAll(infos));
633 }
634
DumpSessionWithId(int32_t persistentId,std::vector<std::string> & infos)635 WMError WindowAdapter::DumpSessionWithId(int32_t persistentId, std::vector<std::string>& infos)
636 {
637 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
638
639 auto wmsProxy = GetWindowManagerServiceProxy();
640 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
641 return static_cast<WMError>(wmsProxy->DumpSessionWithId(persistentId, infos));
642 }
643
GetUIContentRemoteObj(int32_t persistentId,sptr<IRemoteObject> & uiContentRemoteObj)644 WMError WindowAdapter::GetUIContentRemoteObj(int32_t persistentId, sptr<IRemoteObject>& uiContentRemoteObj)
645 {
646 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
647
648 auto wmsProxy = GetWindowManagerServiceProxy();
649 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
650 return static_cast<WMError>(wmsProxy->GetUIContentRemoteObj(persistentId, uiContentRemoteObj));
651 }
652
GetWindowAnimationTargets(std::vector<uint32_t> missionIds,std::vector<sptr<RSWindowAnimationTarget>> & targets)653 WMError WindowAdapter::GetWindowAnimationTargets(std::vector<uint32_t> missionIds,
654 std::vector<sptr<RSWindowAnimationTarget>>& targets)
655 {
656 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
657
658 auto wmsProxy = GetWindowManagerServiceProxy();
659 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
660 return wmsProxy->GetWindowAnimationTargets(missionIds, targets);
661 }
662
SetMaximizeMode(MaximizeMode maximizeMode)663 void WindowAdapter::SetMaximizeMode(MaximizeMode maximizeMode)
664 {
665 INIT_PROXY_CHECK_RETURN();
666
667 auto wmsProxy = GetWindowManagerServiceProxy();
668 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
669 wmsProxy->SetMaximizeMode(maximizeMode);
670 }
671
GetMaximizeMode()672 MaximizeMode WindowAdapter::GetMaximizeMode()
673 {
674 INIT_PROXY_CHECK_RETURN(MaximizeMode::MODE_FULL_FILL);
675
676 auto wmsProxy = GetWindowManagerServiceProxy();
677 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, MaximizeMode::MODE_FULL_FILL);
678 return wmsProxy->GetMaximizeMode();
679 }
680
GetFocusWindowInfo(FocusChangeInfo & focusInfo)681 void WindowAdapter::GetFocusWindowInfo(FocusChangeInfo& focusInfo)
682 {
683 INIT_PROXY_CHECK_RETURN();
684
685 auto wmsProxy = GetWindowManagerServiceProxy();
686 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
687 wmsProxy->GetFocusWindowInfo(focusInfo);
688 }
689
UpdateSessionAvoidAreaListener(int32_t & persistentId,bool haveListener)690 WMError WindowAdapter::UpdateSessionAvoidAreaListener(int32_t& persistentId, bool haveListener)
691 {
692 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
693
694 auto wmsProxy = GetWindowManagerServiceProxy();
695 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
696 return static_cast<WMError>(wmsProxy->UpdateSessionAvoidAreaListener(persistentId, haveListener));
697 }
698
UpdateSessionTouchOutsideListener(int32_t & persistentId,bool haveListener)699 WMError WindowAdapter::UpdateSessionTouchOutsideListener(int32_t& persistentId, bool haveListener)
700 {
701 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
702
703 auto wmsProxy = GetWindowManagerServiceProxy();
704 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
705 return static_cast<WMError>(
706 wmsProxy->UpdateSessionTouchOutsideListener(persistentId, haveListener));
707 }
708
NotifyWindowExtensionVisibilityChange(int32_t pid,int32_t uid,bool visible)709 WMError WindowAdapter::NotifyWindowExtensionVisibilityChange(int32_t pid, int32_t uid, bool visible)
710 {
711 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
712
713 auto wmsProxy = GetWindowManagerServiceProxy();
714 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
715 return static_cast<WMError>(wmsProxy->NotifyWindowExtensionVisibilityChange(pid, uid, visible));
716 }
717
RaiseWindowToTop(int32_t persistentId)718 WMError WindowAdapter::RaiseWindowToTop(int32_t persistentId)
719 {
720 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
721
722 auto wmsProxy = GetWindowManagerServiceProxy();
723 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
724 return static_cast<WMError>(wmsProxy->RaiseWindowToTop(persistentId));
725 }
726
UpdateSessionWindowVisibilityListener(int32_t persistentId,bool haveListener)727 WMError WindowAdapter::UpdateSessionWindowVisibilityListener(int32_t persistentId, bool haveListener)
728 {
729 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
730
731 auto wmsProxy = GetWindowManagerServiceProxy();
732 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
733 WSError ret = wmsProxy->UpdateSessionWindowVisibilityListener(persistentId, haveListener);
734 return static_cast<WMError>(ret);
735 }
736
ShiftAppWindowFocus(int32_t sourcePersistentId,int32_t targetPersistentId)737 WMError WindowAdapter::ShiftAppWindowFocus(int32_t sourcePersistentId, int32_t targetPersistentId)
738 {
739 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
740
741 auto wmsProxy = GetWindowManagerServiceProxy();
742 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
743 return static_cast<WMError>(
744 wmsProxy->ShiftAppWindowFocus(sourcePersistentId, targetPersistentId));
745 }
746
CreateAndConnectSpecificSession(const sptr<ISessionStage> & sessionStage,const sptr<IWindowEventChannel> & eventChannel,const std::shared_ptr<RSSurfaceNode> & surfaceNode,sptr<WindowSessionProperty> property,int32_t & persistentId,sptr<ISession> & session,SystemSessionConfig & systemConfig,sptr<IRemoteObject> token)747 void WindowAdapter::CreateAndConnectSpecificSession(const sptr<ISessionStage>& sessionStage,
748 const sptr<IWindowEventChannel>& eventChannel, const std::shared_ptr<RSSurfaceNode>& surfaceNode,
749 sptr<WindowSessionProperty> property, int32_t& persistentId, sptr<ISession>& session,
750 SystemSessionConfig& systemConfig, sptr<IRemoteObject> token)
751 {
752 INIT_PROXY_CHECK_RETURN();
753
754 auto wmsProxy = GetWindowManagerServiceProxy();
755 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
756 wmsProxy->CreateAndConnectSpecificSession(sessionStage, eventChannel,
757 surfaceNode, property, persistentId, session, systemConfig, token);
758 }
759
RecoverAndConnectSpecificSession(const sptr<ISessionStage> & sessionStage,const sptr<IWindowEventChannel> & eventChannel,const std::shared_ptr<RSSurfaceNode> & surfaceNode,sptr<WindowSessionProperty> property,sptr<ISession> & session,sptr<IRemoteObject> token)760 void WindowAdapter::RecoverAndConnectSpecificSession(const sptr<ISessionStage>& sessionStage,
761 const sptr<IWindowEventChannel>& eventChannel, const std::shared_ptr<RSSurfaceNode>& surfaceNode,
762 sptr<WindowSessionProperty> property, sptr<ISession>& session, sptr<IRemoteObject> token)
763 {
764 INIT_PROXY_CHECK_RETURN();
765 TLOGI(WmsLogTag::WMS_RECOVER, "called");
766
767 auto wmsProxy = GetWindowManagerServiceProxy();
768 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
769 wmsProxy->RecoverAndConnectSpecificSession(
770 sessionStage, eventChannel, surfaceNode, property, session, token);
771 }
772
DestroyAndDisconnectSpecificSession(const int32_t persistentId)773 WMError WindowAdapter::DestroyAndDisconnectSpecificSession(const int32_t persistentId)
774 {
775 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
776
777 auto wmsProxy = GetWindowManagerServiceProxy();
778 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
779 return static_cast<WMError>(wmsProxy->DestroyAndDisconnectSpecificSession(persistentId));
780 }
781
DestroyAndDisconnectSpecificSessionWithDetachCallback(const int32_t persistentId,const sptr<IRemoteObject> & callback)782 WMError WindowAdapter::DestroyAndDisconnectSpecificSessionWithDetachCallback(const int32_t persistentId,
783 const sptr<IRemoteObject>& callback)
784 {
785 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
786
787 auto wmsProxy = GetWindowManagerServiceProxy();
788 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
789 return static_cast<WMError>(
790 wmsProxy->DestroyAndDisconnectSpecificSessionWithDetachCallback(persistentId, callback));
791 }
792
RecoverAndReconnectSceneSession(const sptr<ISessionStage> & sessionStage,const sptr<IWindowEventChannel> & eventChannel,const std::shared_ptr<RSSurfaceNode> & surfaceNode,sptr<ISession> & session,sptr<WindowSessionProperty> property,sptr<IRemoteObject> token)793 WMError WindowAdapter::RecoverAndReconnectSceneSession(const sptr<ISessionStage>& sessionStage,
794 const sptr<IWindowEventChannel>& eventChannel, const std::shared_ptr<RSSurfaceNode>& surfaceNode,
795 sptr<ISession>& session, sptr<WindowSessionProperty> property, sptr<IRemoteObject> token)
796 {
797 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
798 TLOGI(WmsLogTag::WMS_RECOVER, "called");
799
800 auto wmsProxy = GetWindowManagerServiceProxy();
801 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
802 auto ret = wmsProxy->RecoverAndReconnectSceneSession(
803 sessionStage, eventChannel, surfaceNode, session, property, token);
804 if (ret != WSError::WS_OK) {
805 TLOGE(WmsLogTag::WMS_RECOVER, "failed, ret = %{public}d", ret);
806 return WMError::WM_DO_NOTHING;
807 }
808 return WMError::WM_OK;
809 }
810
SetSessionGravity(int32_t persistentId,SessionGravity gravity,uint32_t percent)811 WMError WindowAdapter::SetSessionGravity(int32_t persistentId, SessionGravity gravity, uint32_t percent)
812 {
813 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
814
815 auto wmsProxy = GetWindowManagerServiceProxy();
816 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
817 return static_cast<WMError>(wmsProxy->SetSessionGravity(persistentId, gravity, percent));
818 }
819
BindDialogSessionTarget(uint64_t persistentId,sptr<IRemoteObject> targetToken)820 WMError WindowAdapter::BindDialogSessionTarget(uint64_t persistentId, sptr<IRemoteObject> targetToken)
821 {
822 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
823
824 auto wmsProxy = GetWindowManagerServiceProxy();
825 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
826 return static_cast<WMError>(wmsProxy->BindDialogSessionTarget(persistentId, targetToken));
827 }
828
RequestFocusStatus(int32_t persistentId,bool isFocused)829 WMError WindowAdapter::RequestFocusStatus(int32_t persistentId, bool isFocused)
830 {
831 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
832
833 auto wmsProxy = GetWindowManagerServiceProxy();
834 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
835 return static_cast<WMError>(wmsProxy->RequestFocusStatus(persistentId, isFocused));
836 }
837
AddExtensionWindowStageToSCB(const sptr<ISessionStage> & sessionStage,const sptr<IRemoteObject> & token,uint64_t surfaceNodeId)838 void WindowAdapter::AddExtensionWindowStageToSCB(const sptr<ISessionStage>& sessionStage,
839 const sptr<IRemoteObject>& token, uint64_t surfaceNodeId)
840 {
841 INIT_PROXY_CHECK_RETURN();
842
843 auto wmsProxy = GetWindowManagerServiceProxy();
844 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
845 wmsProxy->AddExtensionWindowStageToSCB(sessionStage, token, surfaceNodeId);
846 }
847
RemoveExtensionWindowStageFromSCB(const sptr<ISessionStage> & sessionStage,const sptr<IRemoteObject> & token)848 void WindowAdapter::RemoveExtensionWindowStageFromSCB(const sptr<ISessionStage>& sessionStage,
849 const sptr<IRemoteObject>& token)
850 {
851 INIT_PROXY_CHECK_RETURN();
852
853 auto wmsProxy = GetWindowManagerServiceProxy();
854 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
855 wmsProxy->RemoveExtensionWindowStageFromSCB(sessionStage, token);
856 }
857
ProcessModalExtensionPointDown(const sptr<IRemoteObject> & token,int32_t posX,int32_t posY)858 void WindowAdapter::ProcessModalExtensionPointDown(const sptr<IRemoteObject>& token, int32_t posX, int32_t posY)
859 {
860 INIT_PROXY_CHECK_RETURN();
861
862 auto wmsProxy = GetWindowManagerServiceProxy();
863 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
864 wmsProxy->ProcessModalExtensionPointDown(token, posX, posY);
865 }
866
UpdateModalExtensionRect(const sptr<IRemoteObject> & token,Rect rect)867 void WindowAdapter::UpdateModalExtensionRect(const sptr<IRemoteObject>& token, Rect rect)
868 {
869 INIT_PROXY_CHECK_RETURN();
870
871 auto wmsProxy = GetWindowManagerServiceProxy();
872 CHECK_PROXY_RETURN_IF_NULL(wmsProxy);
873 wmsProxy->UpdateModalExtensionRect(token, rect);
874 }
875
AddOrRemoveSecureSession(int32_t persistentId,bool shouldHide)876 WMError WindowAdapter::AddOrRemoveSecureSession(int32_t persistentId, bool shouldHide)
877 {
878 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
879
880 auto wmsProxy = GetWindowManagerServiceProxy();
881 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
882 return static_cast<WMError>(wmsProxy->AddOrRemoveSecureSession(persistentId, shouldHide));
883 }
884
UpdateExtWindowFlags(const sptr<IRemoteObject> & token,uint32_t extWindowFlags,uint32_t extWindowActions)885 WMError WindowAdapter::UpdateExtWindowFlags(const sptr<IRemoteObject>& token, uint32_t extWindowFlags,
886 uint32_t extWindowActions)
887 {
888 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
889
890 auto wmsProxy = GetWindowManagerServiceProxy();
891 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
892 return static_cast<WMError>(wmsProxy->UpdateExtWindowFlags(token, extWindowFlags, extWindowActions));
893 }
894
GetHostWindowRect(int32_t hostWindowId,Rect & rect)895 WMError WindowAdapter::GetHostWindowRect(int32_t hostWindowId, Rect& rect)
896 {
897 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
898
899 auto wmsProxy = GetWindowManagerServiceProxy();
900 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
901 return static_cast<WMError>(wmsProxy->GetHostWindowRect(hostWindowId, rect));
902 }
903
GetFreeMultiWindowEnableState(bool & enable)904 WMError WindowAdapter::GetFreeMultiWindowEnableState(bool& enable)
905 {
906 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
907
908 auto wmsProxy = GetWindowManagerServiceProxy();
909 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
910 return static_cast<WMError>(wmsProxy->GetFreeMultiWindowEnableState(enable));
911 }
912
GetCallingWindowWindowStatus(int32_t persistentId,WindowStatus & windowStatus)913 WMError WindowAdapter::GetCallingWindowWindowStatus(int32_t persistentId, WindowStatus& windowStatus)
914 {
915 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
916
917 auto wmsProxy = GetWindowManagerServiceProxy();
918 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
919 return static_cast<WMError>(wmsProxy->GetCallingWindowWindowStatus(persistentId, windowStatus));
920 }
921
GetCallingWindowRect(int32_t persistentId,Rect & rect)922 WMError WindowAdapter::GetCallingWindowRect(int32_t persistentId, Rect& rect)
923 {
924 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
925
926 auto wmsProxy = GetWindowManagerServiceProxy();
927 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
928 return static_cast<WMError>(wmsProxy->GetCallingWindowRect(persistentId, rect));
929 }
930
GetWindowModeType(WindowModeType & windowModeType)931 WMError WindowAdapter::GetWindowModeType(WindowModeType& windowModeType)
932 {
933 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
934
935 WLOGFD("get window mode type");
936 auto wmsProxy = GetWindowManagerServiceProxy();
937 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
938 return wmsProxy->GetWindowModeType(windowModeType);
939 }
940
GetWindowStyleType(WindowStyleType & windowStyleType)941 WMError WindowAdapter::GetWindowStyleType(WindowStyleType& windowStyleType)
942 {
943 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
944 auto wmsProxy = GetWindowManagerServiceProxy();
945 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
946 return wmsProxy->GetWindowStyleType(windowStyleType);
947 }
948
GetWindowIdsByCoordinate(DisplayId displayId,int32_t windowNumber,int32_t x,int32_t y,std::vector<int32_t> & windowIds)949 WMError WindowAdapter::GetWindowIdsByCoordinate(DisplayId displayId, int32_t windowNumber,
950 int32_t x, int32_t y, std::vector<int32_t>& windowIds)
951 {
952 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
953 auto wmsProxy = GetWindowManagerServiceProxy();
954 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
955 return wmsProxy->GetWindowIdsByCoordinate(displayId, windowNumber, x, y, windowIds);
956 }
957
GetWindowManagerServiceProxy() const958 sptr<IWindowManager> WindowAdapter::GetWindowManagerServiceProxy() const
959 {
960 std::lock_guard<std::mutex> lock(mutex_);
961 return windowManagerServiceProxy_;
962 }
963
ReleaseForegroundSessionScreenLock()964 WMError WindowAdapter::ReleaseForegroundSessionScreenLock()
965 {
966 INIT_PROXY_CHECK_RETURN(WMError::WM_DO_NOTHING);
967 auto wmsProxy = GetWindowManagerServiceProxy();
968 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_DO_NOTHING);
969 return wmsProxy->ReleaseForegroundSessionScreenLock();
970 }
971
IsWindowRectAutoSave(const std::string & key,bool & enabled)972 WMError WindowAdapter::IsWindowRectAutoSave(const std::string& key, bool& enabled)
973 {
974 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
975 auto wmsProxy = GetWindowManagerServiceProxy();
976 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
977 return wmsProxy->IsWindowRectAutoSave(key, enabled);
978 }
979
GetDisplayIdByWindowId(const std::vector<uint64_t> & windowIds,std::unordered_map<uint64_t,DisplayId> & windowDisplayIdMap)980 WMError WindowAdapter::GetDisplayIdByWindowId(const std::vector<uint64_t>& windowIds,
981 std::unordered_map<uint64_t, DisplayId>& windowDisplayIdMap)
982 {
983 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
984 auto wmsProxy = GetWindowManagerServiceProxy();
985 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
986 return wmsProxy->GetDisplayIdByWindowId(windowIds, windowDisplayIdMap);
987 }
988
IsPcWindow(bool & isPcWindow)989 WMError WindowAdapter::IsPcWindow(bool& isPcWindow)
990 {
991 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
992 auto wmsProxy = GetWindowManagerServiceProxy();
993 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
994 return wmsProxy->IsPcWindow(isPcWindow);
995 }
996
IsPcOrPadFreeMultiWindowMode(bool & isPcOrPadFreeMultiWindowMode)997 WMError WindowAdapter::IsPcOrPadFreeMultiWindowMode(bool& isPcOrPadFreeMultiWindowMode)
998 {
999 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
1000 auto wmsProxy = GetWindowManagerServiceProxy();
1001 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
1002 return wmsProxy->IsPcOrPadFreeMultiWindowMode(isPcOrPadFreeMultiWindowMode);
1003 }
1004
SetGlobalDragResizeType(DragResizeType dragResizeType)1005 WMError WindowAdapter::SetGlobalDragResizeType(DragResizeType dragResizeType)
1006 {
1007 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
1008 auto wmsProxy = GetWindowManagerServiceProxy();
1009 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
1010 return wmsProxy->SetGlobalDragResizeType(dragResizeType);
1011 }
1012
GetGlobalDragResizeType(DragResizeType & dragResizeType)1013 WMError WindowAdapter::GetGlobalDragResizeType(DragResizeType& dragResizeType)
1014 {
1015 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
1016 auto wmsProxy = GetWindowManagerServiceProxy();
1017 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
1018 return wmsProxy->GetGlobalDragResizeType(dragResizeType);
1019 }
1020
SetAppDragResizeType(const std::string & bundleName,DragResizeType dragResizeType)1021 WMError WindowAdapter::SetAppDragResizeType(const std::string& bundleName, DragResizeType dragResizeType)
1022 {
1023 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
1024 auto wmsProxy = GetWindowManagerServiceProxy();
1025 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
1026 return wmsProxy->SetAppDragResizeType(bundleName, dragResizeType);
1027 }
1028
GetAppDragResizeType(const std::string & bundleName,DragResizeType & dragResizeType)1029 WMError WindowAdapter::GetAppDragResizeType(const std::string& bundleName, DragResizeType& dragResizeType)
1030 {
1031 INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR);
1032 auto wmsProxy = GetWindowManagerServiceProxy();
1033 CHECK_PROXY_RETURN_ERROR_IF_NULL(wmsProxy, WMError::WM_ERROR_SAMGR);
1034 return wmsProxy->GetAppDragResizeType(bundleName, dragResizeType);
1035 }
1036 } // namespace Rosen
1037 } // namespace OHOS
1038