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