• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "window_manager_service_proxy.h"
17 
18 #include "window_manager_hilog.h"
19 
20 namespace OHOS {
21 namespace {
22 constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0, "WMServiceProxy"};
23 }
24 
WindowManagerServiceProxy(struct wms * wms,struct wl_display * display,sptr<IAnimationService> & as)25 WindowManagerServiceProxy::WindowManagerServiceProxy(struct wms *wms, struct wl_display *display,
26     sptr<IAnimationService> &as)
27 {
28     this->wms = wms;
29     this->display = display;
30     this->as = as;
31 }
32 
33 namespace {
WMServerErrorToGSError(int32_t error)34 GSError WMServerErrorToGSError(int32_t error)
35 {
36     switch (error) {
37         case WMS_ERROR_OK:
38             return static_cast<GSError>(GSERROR_OK);
39         case WMS_ERROR_INVALID_PARAM:
40             return static_cast<GSError>(GSERROR_INVALID_ARGUMENTS);
41         case WMS_ERROR_PID_CHECK:
42             return static_cast<GSError>(GSERROR_API_FAILED + EACCES);
43         case WMS_ERROR_NO_MEMORY:
44             return static_cast<GSError>(GSERROR_API_FAILED + ENOMEM);
45         case WMS_ERROR_INNER_ERROR:
46             return static_cast<GSError>(GSERROR_SERVER_ERROR);
47         case WMS_ERROR_OTHER:
48             return static_cast<GSError>(GSERROR_SERVER_ERROR);
49         case WMS_ERROR_API_FAILED:
50             return static_cast<GSError>(GSERROR_API_FAILED);
51         default:
52             return static_cast<GSError>(GSERROR_INTERNEL);
53     }
54     return static_cast<GSError>(GSERROR_INTERNEL);
55 }
56 } // namespace
57 
OnReply(wms_error error)58 void WindowManagerServiceProxy::OnReply(wms_error error)
59 {
60     WMLOGFD("reply: %{public}d", error);
61     std::lock_guard<std::mutex> lock(promiseQueueMutex);
62     if (promiseQueue.empty() == false) {
63         promiseQueue.front()->Resolve(WMServerErrorToGSError(error));
64         promiseQueue.pop();
65     } else {
66         WMLOGFW("OnReply promiseQueue is empty");
67     }
68 }
69 
OnDisplayChange(uint32_t did,const char * name,wms_screen_status state,int32_t width,int32_t height,wms_screen_type type)70 void WindowManagerServiceProxy::OnDisplayChange(uint32_t did,
71     const char *name, wms_screen_status state, int32_t width, int32_t height, wms_screen_type type)
72 {
73     WMLOGFI("state: %{public}d, did: %{public}d, %{public}s(%{public}dx%{public}d)",
74         state, did, name, width, height);
75 
76     auto match = [did](const auto &info) { return info.id == static_cast<int32_t>(did); };
77     auto ret = std::find_if(displays.begin(), displays.end(), match);
78 
79     if (state == WMS_SCREEN_STATUS_ADD) {
80         if (ret == displays.end()) {
81             constexpr int32_t tmpVsyncFreq = 60;
82             struct WMDisplayInfo info = {
83                 .id = did,
84                 .width = width,
85                 .height = height,
86                 .phyWidth = width,
87                 .phyHeight = height,
88                 .vsync = tmpVsyncFreq,
89                 .type = static_cast<enum DisplayType>(type),
90             };
91             displays.push_back(info);
92         }
93         if (displayListener != nullptr) {
94             displayListener->OnScreenPlugin(did);
95         }
96     }
97 
98     if (state == WMS_SCREEN_STATUS_REMOVE) {
99         if (ret != displays.end()) {
100             displays.erase(ret);
101         }
102         if (displayListener != nullptr) {
103             displayListener->OnScreenPlugout(did);
104         }
105     }
106 }
107 
OnDisplayPower(uint32_t error,int32_t status)108 void WindowManagerServiceProxy::OnDisplayPower(uint32_t error, int32_t status)
109 {
110     std::lock_guard<std::mutex> lock(powerStatusPromiseQueueMutex);
111     if (!powerStatusPromiseQueue.empty()) {
112         struct PowerStatus retval = {
113             .wret = WMServerErrorToGSError(error),
114             .status = static_cast<DispPowerStatus>(status),
115         };
116         powerStatusPromiseQueue.front()->Resolve(retval);
117         powerStatusPromiseQueue.pop();
118     } else {
119         WMLOGFW("OnDisplayPower powerStatusPromiseQueue is empty");
120     }
121 }
122 
OnDisplayBacklight(uint32_t error,uint32_t level)123 void WindowManagerServiceProxy::OnDisplayBacklight(uint32_t error, uint32_t level)
124 {
125     std::lock_guard<std::mutex> lock(backlightPromiseQueueMutex);
126     if (!backlightPromiseQueue.empty()) {
127         struct Backlight retval = {
128             .wret = WMServerErrorToGSError(error),
129             .level = level,
130         };
131         backlightPromiseQueue.front()->Resolve(retval);
132         backlightPromiseQueue.pop();
133     } else {
134         WMLOGFW("OnDisplayPower backlightPromiseQueue is empty");
135     }
136 }
137 
OnDisplayModeChange(uint32_t mode)138 void WindowManagerServiceProxy::OnDisplayModeChange(uint32_t mode)
139 {
140     WMLOGFI("mode: %{public}u", mode);
141     displayModes = mode;
142 }
143 
OnGlobalWindowStatus(uint32_t pid,uint32_t wid,uint32_t status)144 void WindowManagerServiceProxy::OnGlobalWindowStatus(uint32_t pid, uint32_t wid, uint32_t status)
145 {
146     WMLOGFI("global window status: pid=%{public}u status=%{public}u wid=%{public}u", pid, status, wid);
147     if (globalWindowChangeListener != nullptr) {
148         if (status == WMS_WINDOW_STATUS_CREATED) {
149             globalWindowChangeListener->OnWindowCreate(pid, wid);
150         }
151         if (status == WMS_WINDOW_STATUS_DESTROYED) {
152             globalWindowChangeListener->OnWindowDestroy(pid, wid);
153         }
154     }
155 }
156 
OnScreenShot(wms_error reply,uint32_t did,int32_t fd,int32_t width,int32_t height,int32_t stride,uint32_t format,uint32_t timestampSec,uint32_t timestampNanoSec)157 void WindowManagerServiceProxy::OnScreenShot(wms_error reply,
158     uint32_t did, int32_t fd, int32_t width, int32_t height,
159     int32_t stride, uint32_t format, uint32_t timestampSec, uint32_t timestampNanoSec)
160 {
161     WMLOGFI("reply: %{public}u, did: %{public}d, fd: %{public}d, %{public}dx%{public}d, stride: %{public}d, "
162         "format: %{public}u, timestampSec: %{public}u, timestampNanoSec: %{public}u",
163         reply, did, fd, width, height, stride, format, timestampSec, timestampNanoSec);
164 
165     {
166         std::lock_guard<std::mutex> lock(screenShotPromisesMutex);
167         if (screenShotPromises.find(did) == screenShotPromises.end()) {
168             WMLOGFW("cannot found %{public}d 's promise", did);
169             return;
170         }
171 
172         if (screenShotPromises[did] == nullptr) {
173             WMLOGFW("cannot resolve %{public}d screenshot promise, it's nullptr", did);
174             return;
175         }
176 
177         constexpr int64_t SEC_TO_MSEC = 1000;
178         constexpr int64_t NSEC_TO_MSEC = 1000 * 1000;
179         int64_t timestampMillSec = timestampSec * SEC_TO_MSEC + timestampNanoSec / NSEC_TO_MSEC;
180         WMSImageInfo info = {
181             .wret = static_cast<GSError>(reply),
182             .fd = fd,
183             .width = width,
184             .height = height,
185             .stride = stride,
186             .format = format,
187             .timestamp = timestampMillSec,
188         };
189         screenShotPromises[did]->Resolve(info);
190         screenShotPromises.erase(did);
191     }
192 }
193 
OnWindowShot(wms_error reply,uint32_t wid,int32_t fd,int32_t width,int32_t height,int32_t stride,uint32_t format,uint32_t timestampSec,uint32_t timestampNanoSec)194 void WindowManagerServiceProxy::OnWindowShot(wms_error reply,
195     uint32_t wid, int32_t fd, int32_t width, int32_t height,
196     int32_t stride, uint32_t format, uint32_t timestampSec, uint32_t timestampNanoSec)
197 {
198     WMLOGFI("reply: %{public}u, wid: %{public}d, fd: %{public}d, %{public}dx%{public}d, stride: %{public}d, "
199         "format: %{public}u, timestampSec: %{public}u, timestampNanoSec: %{public}u",
200         reply, wid, fd, width, height, stride, format, timestampSec, timestampNanoSec);
201 
202     {
203         std::lock_guard<std::mutex> lock(windowShotPromisesMutex);
204         if (windowShotPromises.find(wid) == windowShotPromises.end()) {
205             WMLOGFW("cannot found %{public}d 's promise", wid);
206             return;
207         }
208 
209         if (windowShotPromises[wid] == nullptr) {
210             WMLOGFW("cannot resolve %{public}d windowshot promise, it's nullptr", wid);
211             return;
212         }
213 
214         constexpr int64_t SEC_TO_MSEC = 1000;
215         constexpr int64_t NSEC_TO_MSEC = 1000 * 1000;
216         int64_t timestampMillSec = timestampSec * SEC_TO_MSEC + timestampNanoSec / NSEC_TO_MSEC;
217         WMSImageInfo info = {
218             .wret = static_cast<GSError>(reply),
219             .fd = fd,
220             .width = width,
221             .height = height,
222             .stride = stride,
223             .format = format,
224             .timestamp = timestampMillSec,
225         };
226         windowShotPromises[wid]->Resolve(info);
227         windowShotPromises.erase(wid);
228     }
229 }
230 
GetDisplays(std::vector<struct WMDisplayInfo> & displays)231 GSError WindowManagerServiceProxy::GetDisplays(std::vector<struct WMDisplayInfo> &displays)
232 {
233     displays = this->displays;
234     return GSERROR_OK;
235 }
236 
GetDisplayPower(int32_t did)237 sptr<PromisePowerStatus> WindowManagerServiceProxy::GetDisplayPower(int32_t did)
238 {
239     WMLOGFI("display: %{public}d", did);
240     sptr<PromisePowerStatus> ret = new PromisePowerStatus();
241     std::lock_guard<std::mutex> lock(powerStatusPromiseQueueMutex);
242     powerStatusPromiseQueue.push(ret);
243     wms_get_display_power(wms, did);
244     wl_display_flush(display);
245     return ret;
246 }
247 
SetDisplayPower(int32_t did,DispPowerStatus status)248 sptr<PromiseGSError> WindowManagerServiceProxy::SetDisplayPower(int32_t did, DispPowerStatus status)
249 {
250     WMLOGFI("display: %{public}d, status: %{public}d", did, status);
251     sptr<PromiseGSError> ret = new PromiseGSError();
252     std::lock_guard<std::mutex> lock(promiseQueueMutex);
253     promiseQueue.push(ret);
254     wms_set_display_power(wms, did, static_cast<int32_t>(status));
255     wl_display_flush(display);
256     return ret;
257 }
258 
GetDisplayBacklight(int32_t did)259 sptr<PromiseBacklight> WindowManagerServiceProxy::GetDisplayBacklight(int32_t did)
260 {
261     WMLOGFI("display: %{public}d", did);
262     sptr<PromiseBacklight> ret = new PromiseBacklight();
263     std::lock_guard<std::mutex> lock(backlightPromiseQueueMutex);
264     backlightPromiseQueue.push(ret);
265     wms_get_display_backlight(wms, did);
266     wl_display_flush(display);
267     return ret;
268 }
269 
SetDisplayBacklight(int32_t did,uint32_t level)270 sptr<PromiseGSError> WindowManagerServiceProxy::SetDisplayBacklight(int32_t did, uint32_t level)
271 {
272     WMLOGFI("display: %{public}d, level: %{public}u", did, level);
273     sptr<PromiseGSError> ret = new PromiseGSError();
274     std::lock_guard<std::mutex> lock(promiseQueueMutex);
275     promiseQueue.push(ret);
276     wms_set_display_backlight(wms, did, level);
277     wl_display_flush(display);
278     return ret;
279 }
280 
GetDisplayModes(uint32_t & displayModes)281 GSError WindowManagerServiceProxy::GetDisplayModes(uint32_t &displayModes)
282 {
283     displayModes = this->displayModes;
284     return GSERROR_OK;
285 }
286 
SetDisplayMode(WMSDisplayMode modes)287 sptr<PromiseGSError> WindowManagerServiceProxy::SetDisplayMode(WMSDisplayMode modes)
288 {
289     WMLOGFI("modes: %{public}d", modes);
290     sptr<PromiseGSError> ret = new PromiseGSError();
291     std::lock_guard<std::mutex> lock(promiseQueueMutex);
292     promiseQueue.push(ret);
293     wms_set_display_mode(wms, modes);
294     wms_commit_changes(wms);
295     wl_display_flush(display);
296     return ret;
297 }
298 
SetDisplayDirection(WMSDisplayDirection direction)299 GSError WindowManagerServiceProxy::SetDisplayDirection(WMSDisplayDirection direction)
300 {
301     return GSERROR_NOT_SUPPORT;
302 }
303 
OnDisplayDirectionChange(DisplayDirectionChangeFunc func)304 GSError WindowManagerServiceProxy::OnDisplayDirectionChange(DisplayDirectionChangeFunc func)
305 {
306     return GSERROR_NOT_SUPPORT;
307 }
308 
OnWindowListChange(IWindowChangeListenerClazz * listener)309 sptr<Promise<GSError>> WindowManagerServiceProxy::OnWindowListChange(IWindowChangeListenerClazz *listener)
310 {
311     sptr<PromiseGSError> promise = new PromiseGSError();
312     globalWindowChangeListener = listener;
313     std::lock_guard<std::mutex> lock(promiseQueueMutex);
314     promiseQueue.push(promise);
315     wms_config_global_window_status(wms, (listener == nullptr) ? 0 : 1);
316     wl_display_flush(display);
317     return promise;
318 }
319 
ShotScreen(int32_t did)320 sptr<PromiseWMSImageInfo> WindowManagerServiceProxy::ShotScreen(int32_t did)
321 {
322     WMLOGFI("did: %{public}d", did);
323     sptr<PromiseWMSImageInfo> promise = new PromiseWMSImageInfo();
324     {
325         std::lock_guard<std::mutex> lock(screenShotPromisesMutex);
326         screenShotPromises[did] = promise;
327     }
328     wms_screenshot(wms, did);
329     wl_display_flush(display);
330     return promise;
331 }
332 
ShotWindow(int32_t wid)333 sptr<PromiseWMSImageInfo> WindowManagerServiceProxy::ShotWindow(int32_t wid)
334 {
335     WMLOGFI("wid: %{public}d", wid);
336     sptr<PromiseWMSImageInfo> promise = new PromiseWMSImageInfo();
337     {
338         std::lock_guard<std::mutex> lock(windowShotPromisesMutex);
339         windowShotPromises[wid] = promise;
340     }
341     wms_windowshot(wms, wid);
342     wl_display_flush(display);
343     return promise;
344 }
345 
SetStatusBarVisibility(bool visibility)346 sptr<PromiseGSError> WindowManagerServiceProxy::SetStatusBarVisibility(bool visibility)
347 {
348     WMLOGFI("visibility: %{public}d", visibility);
349     sptr<PromiseGSError> ret = new PromiseGSError();
350     std::lock_guard<std::mutex> lock(promiseQueueMutex);
351     promiseQueue.push(ret);
352     wms_set_status_bar_visibility(wms, visibility ? WMS_VISIBILITY_TRUE : WMS_VISIBILITY_FALSE);
353     wl_display_flush(display);
354     return ret;
355 }
356 
SetNavigationBarVisibility(bool visibility)357 sptr<PromiseGSError> WindowManagerServiceProxy::SetNavigationBarVisibility(bool visibility)
358 {
359     WMLOGFI("visibility: %{public}d", visibility);
360     sptr<PromiseGSError> ret = new PromiseGSError();
361     std::lock_guard<std::mutex> lock(promiseQueueMutex);
362     promiseQueue.push(ret);
363     wms_set_navigation_bar_visibility(wms, visibility ? WMS_VISIBILITY_TRUE : WMS_VISIBILITY_FALSE);
364     wl_display_flush(display);
365     return ret;
366 }
367 
AddDisplayChangeListener(IWindowManagerDisplayListenerClazz * listener)368 GSError WindowManagerServiceProxy::AddDisplayChangeListener(IWindowManagerDisplayListenerClazz *listener)
369 {
370     WMLOGFI("listener: %{public}s", (listener != nullptr) ? "Yes" : "No");
371     displayListener = listener;
372     return GSERROR_OK;
373 }
374 
DestroyWindow(int32_t wid)375 sptr<PromiseGSError> WindowManagerServiceProxy::DestroyWindow(int32_t wid)
376 {
377     WMLOGFI("wid: %{public}d", wid);
378     sptr<PromiseGSError> ret = new PromiseGSError();
379     std::lock_guard<std::mutex> lock(promiseQueueMutex);
380     promiseQueue.push(ret);
381     wms_destroy_window(wms, wid);
382     wl_display_flush(display);
383     return ret;
384 }
385 
SwitchTop(int32_t wid)386 sptr<PromiseGSError> WindowManagerServiceProxy::SwitchTop(int32_t wid)
387 {
388     WMLOGFI("wid: %{public}d", wid);
389     sptr<PromiseGSError> ret = new PromiseGSError();
390     std::lock_guard<std::mutex> lock(promiseQueueMutex);
391     promiseQueue.push(ret);
392     wms_set_window_top(wms, wid);
393     wms_commit_changes(wms);
394     wl_display_flush(display);
395     return ret;
396 }
397 
Show(int32_t wid)398 sptr<PromiseGSError> WindowManagerServiceProxy::Show(int32_t wid)
399 {
400     WMLOGFI("wid: %{public}d", wid);
401     sptr<PromiseGSError> ret = new PromiseGSError();
402     std::lock_guard<std::mutex> lock(promiseQueueMutex);
403     promiseQueue.push(ret);
404     wms_set_window_visibility(wms, wid, WMS_VISIBILITY_TRUE);
405     wms_commit_changes(wms);
406     wl_display_flush(display);
407     return ret;
408 }
409 
Hide(int32_t wid)410 sptr<PromiseGSError> WindowManagerServiceProxy::Hide(int32_t wid)
411 {
412     WMLOGFI("wid: %{public}d", wid);
413     sptr<PromiseGSError> ret = new PromiseGSError();
414     std::lock_guard<std::mutex> lock(promiseQueueMutex);
415     promiseQueue.push(ret);
416     wms_set_window_visibility(wms, wid, WMS_VISIBILITY_FALSE);
417     wms_commit_changes(wms);
418     wl_display_flush(display);
419     return ret;
420 }
421 
Move(int32_t wid,int32_t x,int32_t y)422 sptr<PromiseGSError> WindowManagerServiceProxy::Move(int32_t wid, int32_t x, int32_t y)
423 {
424     WMLOGFI("wid: %{public}d, (%{public}d, %{public}d)", wid, x, y);
425     sptr<PromiseGSError> ret = new PromiseGSError();
426     std::lock_guard<std::mutex> lock(promiseQueueMutex);
427     promiseQueue.push(ret);
428     wms_set_window_position(wms, wid, x, y);
429     wms_commit_changes(wms);
430     wl_display_flush(display);
431     return ret;
432 }
433 
Resize(int32_t wid,uint32_t width,uint32_t height)434 sptr<PromiseGSError> WindowManagerServiceProxy::Resize(int32_t wid, uint32_t width, uint32_t height)
435 {
436     WMLOGFI("wid: %{public}d, %{public}dx%{public}d", wid, width, height);
437     sptr<PromiseGSError> ret = new PromiseGSError();
438     std::lock_guard<std::mutex> lock(promiseQueueMutex);
439     promiseQueue.push(ret);
440     wms_set_window_size(wms, wid, width, height);
441     wms_commit_changes(wms);
442     wl_display_flush(display);
443     return ret;
444 }
445 
ScaleTo(int32_t wid,uint32_t width,uint32_t height)446 sptr<PromiseGSError> WindowManagerServiceProxy::ScaleTo(int32_t wid, uint32_t width, uint32_t height)
447 {
448     WMLOGFI("wid: %{public}d, %{public}dx%{public}d", wid, width, height);
449     sptr<PromiseGSError> ret = new PromiseGSError();
450     std::lock_guard<std::mutex> lock(promiseQueueMutex);
451     promiseQueue.push(ret);
452     wms_set_window_scale(wms, wid, width, height);
453     wms_commit_changes(wms);
454     wl_display_flush(display);
455     return ret;
456 }
457 
SetWindowType(int32_t wid,WindowType type)458 sptr<PromiseGSError> WindowManagerServiceProxy::SetWindowType(int32_t wid, WindowType type)
459 {
460     WMLOGFI("wid: %{public}d, type: %{public}d", wid, type);
461     sptr<PromiseGSError> ret = new PromiseGSError();
462     std::lock_guard<std::mutex> lock(promiseQueueMutex);
463     promiseQueue.push(ret);
464     wms_set_window_type(wms, wid, type);
465     wms_commit_changes(wms);
466     wl_display_flush(display);
467     return ret;
468 }
469 
SetWindowMode(int32_t wid,WindowMode mode)470 sptr<PromiseGSError> WindowManagerServiceProxy::SetWindowMode(int32_t wid, WindowMode mode)
471 {
472     WMLOGFI("wid: %{public}d, mode: %{public}d", wid, mode);
473     sptr<PromiseGSError> ret = new PromiseGSError();
474     std::lock_guard<std::mutex> lock(promiseQueueMutex);
475     promiseQueue.push(ret);
476     wms_set_window_mode(wms, wid, mode);
477     wms_commit_changes(wms);
478     wl_display_flush(display);
479     return ret;
480 }
481 
CreateVirtualDisplay(int32_t x,int32_t y,int32_t width,int32_t height)482 sptr<PromiseGSError> WindowManagerServiceProxy::CreateVirtualDisplay(
483     int32_t x, int32_t y, int32_t width, int32_t height)
484 {
485     sptr<PromiseGSError> ret = new PromiseGSError();
486     std::lock_guard<std::mutex> lock(promiseQueueMutex);
487     promiseQueue.push(ret);
488     wms_create_virtual_display(wms, x, y, width, height);
489     wms_commit_changes(wms);
490     wl_display_flush(display);
491     return ret;
492 }
493 
DestroyVirtualDisplay(uint32_t did)494 sptr<PromiseGSError> WindowManagerServiceProxy::DestroyVirtualDisplay(uint32_t did)
495 {
496     sptr<PromiseGSError> ret = new PromiseGSError();
497     std::lock_guard<std::mutex> lock(promiseQueueMutex);
498     promiseQueue.push(ret);
499     wms_destroy_virtual_display(wms, did);
500     wms_commit_changes(wms);
501     wl_display_flush(display);
502     return ret;
503 }
504 
StartRotationAnimation(uint32_t did,int32_t degree)505 GSError WindowManagerServiceProxy::StartRotationAnimation(uint32_t did, int32_t degree)
506 {
507     if (as == nullptr) {
508         return GSERROR_CONNOT_CONNECT_SERVER;
509     }
510 
511     return as->StartRotationAnimation(did, degree);
512 }
513 
SetSplitMode(SplitMode mode,int32_t x,int32_t y)514 sptr<PromiseGSError> WindowManagerServiceProxy::SetSplitMode(SplitMode mode, int32_t x, int32_t y)
515 {
516     WMLOGFI("mode: %{public}d, x: %{public}d, y: %{public}d", mode, x, y);
517     sptr<PromiseGSError> ret = new PromiseGSError();
518     std::lock_guard<std::mutex> lock(promiseQueueMutex);
519     promiseQueue.push(ret);
520     wms_set_split_mode(wms, mode, x, y);
521     wl_display_flush(display);
522     return ret;
523 }
524 
CreateLaunchPage(const std::string & filename)525 GSError WindowManagerServiceProxy::CreateLaunchPage(const std::string &filename)
526 {
527     if (as == nullptr) {
528         return GSERROR_CONNOT_CONNECT_SERVER;
529     }
530 
531     return as->CreateLaunchPage(filename);
532 }
533 
CancelLaunchPage()534 GSError WindowManagerServiceProxy::CancelLaunchPage()
535 {
536     if (as == nullptr) {
537         return GSERROR_CONNOT_CONNECT_SERVER;
538     }
539 
540     return as->CancelLaunchPage();
541 }
542 } // namespace OHOS
543