1 /*
2  * Copyright (c) 2024 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 #include "window_ffi.h"
16 #include <transaction/rs_interfaces.h>
17 #include "pixel_map_impl.h"
18 #include "window_manager_hilog.h"
19 
20 using namespace OHOS::FFI;
21 using namespace OHOS::Media;
22 
23 namespace OHOS {
24 namespace Rosen {
25 extern "C" {
26 const int32_t WM_ERROR_STATE_ABNORMALLY = 1300002;
27 
FfiOHOSCreateWindow(char * name,uint32_t windowType,OHOS::AbilityRuntime::Context * context,int64_t displayId,int64_t parentId)28 RetDataI64 FfiOHOSCreateWindow(char* name, uint32_t windowType, OHOS::AbilityRuntime::Context* context,
29     int64_t displayId, int64_t parentId)
30 {
31     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] CreateWindow start");
32     std::string nm = name;
33     RetDataI64 ret;
34     WindowParameters window;
35     window.name = nm;
36     window.winType = windowType;
37     window.context = context;
38     window.displayId = displayId;
39     window.parentId = parentId;
40     window.windowId = &ret.data;
41     ret.code = OHOS::Rosen::WindowManagerImpl::CreateWindow(window);
42     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] CreateWindow success");
43     return ret;
44 }
45 
FfiOHOSWindowSetWindowLayoutMode(uint32_t mode)46 int32_t FfiOHOSWindowSetWindowLayoutMode(uint32_t mode)
47 {
48     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowLayoutMode start");
49     int32_t ret = OHOS::Rosen::WindowManagerImpl::SetWindowLayoutMode(mode);
50     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowLayoutMode success");
51     return ret;
52 }
53 
FfiOHOSWindowMinimizeAll(int64_t displayId)54 int32_t FfiOHOSWindowMinimizeAll(int64_t displayId)
55 {
56     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] MinimizeAll start");
57     int32_t ret = OHOS::Rosen::WindowManagerImpl::MinimizeAll(displayId);
58     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] MinimizeAll success");
59     return ret;
60 }
61 
FfiOHOSGetLastWindow(OHOS::AbilityRuntime::Context * ctx)62 RetDataI64 FfiOHOSGetLastWindow(OHOS::AbilityRuntime::Context* ctx)
63 {
64     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetLastWindow start");
65     RetDataI64 ret;
66     ret.code = OHOS::Rosen::WindowManagerImpl::GetLastWindow(ctx, ret.data);
67     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetLastWindow success");
68     return ret;
69 }
70 
71 // window
FfiOHOSWindowHide(int64_t id)72 int32_t FfiOHOSWindowHide(int64_t id)
73 {
74     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Hide start");
75     auto instance = FFIData::GetData<CJWindowImpl>(id);
76     if (instance == nullptr) {
77         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
78         return WM_ERROR_STATE_ABNORMALLY;
79     }
80     int32_t res = instance->Hide();
81     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Hide success");
82     return res;
83 }
84 
FfiOHOSWindowHideWithAnimation(int64_t id)85 int32_t FfiOHOSWindowHideWithAnimation(int64_t id)
86 {
87     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] HideWithAnimation start");
88     auto instance = FFIData::GetData<CJWindowImpl>(id);
89     if (instance == nullptr) {
90         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
91         return WM_ERROR_STATE_ABNORMALLY;
92     }
93     int32_t res = instance->HideWithAnimation();
94     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] HideWithAnimation success");
95     return res;
96 }
97 
FfiOHOSWindowShowWindow(int64_t id)98 int32_t FfiOHOSWindowShowWindow(int64_t id)
99 {
100     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] ShowWindow start");
101     auto instance = FFIData::GetData<CJWindowImpl>(id);
102     if (instance == nullptr) {
103         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
104         return WM_ERROR_STATE_ABNORMALLY;
105     }
106     int32_t res = instance->ShowWindow();
107     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] ShowWindow success");
108     return res;
109 }
110 
FfiOHOSWindowShowWithAnimation(int64_t id)111 int32_t FfiOHOSWindowShowWithAnimation(int64_t id)
112 {
113     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] ShowWithAnimation start");
114     auto instance = FFIData::GetData<CJWindowImpl>(id);
115     if (instance == nullptr) {
116         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
117         return WM_ERROR_STATE_ABNORMALLY;
118     }
119     int32_t res = instance->ShowWithAnimation();
120     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] ShowWithAnimation success");
121     return res;
122 }
123 
FfiOHOSWindowDestroyWindow(int64_t id)124 int32_t FfiOHOSWindowDestroyWindow(int64_t id)
125 {
126     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] DestroyWindow start");
127     auto instance = FFIData::GetData<CJWindowImpl>(id);
128     if (instance == nullptr) {
129         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
130         return WM_ERROR_STATE_ABNORMALLY;
131     }
132     int32_t res = instance->DestroyWindow();
133     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] DestroyWindow success");
134     return res;
135 }
136 
FfiOHOSWindowMoveWindowTo(int64_t id,int32_t x,int32_t y)137 int32_t FfiOHOSWindowMoveWindowTo(int64_t id, int32_t x, int32_t y)
138 {
139     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] MoveWindowTo start");
140     auto instance = FFIData::GetData<CJWindowImpl>(id);
141     if (instance == nullptr) {
142         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
143         return WM_ERROR_STATE_ABNORMALLY;
144     }
145     int32_t res = instance->MoveWindowTo(x, y);
146     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] MoveWindowTo success");
147     return res;
148 }
149 
FfiOHOSWindowResize(int64_t id,uint32_t width,uint32_t height)150 int32_t FfiOHOSWindowResize(int64_t id, uint32_t width, uint32_t height)
151 {
152     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Resize start");
153     auto instance = FFIData::GetData<CJWindowImpl>(id);
154     if (instance == nullptr) {
155         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
156         return WM_ERROR_STATE_ABNORMALLY;
157     }
158     int32_t res = instance->Resize(width, height);
159     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Resize success");
160     return res;
161 }
162 
FfiOHOSWindowSetWindowMode(int64_t id,uint32_t mode)163 int32_t FfiOHOSWindowSetWindowMode(int64_t id, uint32_t mode)
164 {
165     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowMode start");
166     auto instance = FFIData::GetData<CJWindowImpl>(id);
167     if (instance == nullptr) {
168         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
169         return WM_ERROR_STATE_ABNORMALLY;
170     }
171     int32_t res = instance->SetWindowMode(mode);
172     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowMode success");
173     return res;
174 }
175 
FfiOHOSWindowGetWindowProperties(int64_t id,int32_t * errCode)176 CWindowProperties FfiOHOSWindowGetWindowProperties(int64_t id, int32_t* errCode)
177 {
178     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetWindowProperties start");
179     CWindowProperties res;
180     auto instance = FFIData::GetData<CJWindowImpl>(id);
181     if (instance == nullptr) {
182         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
183         *errCode = WM_ERROR_STATE_ABNORMALLY;
184         return res;
185     }
186     res = instance->GetWindowProperties(errCode);
187     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetWindowProperties success");
188     return res;
189 }
190 
FfiOHOSWindowSetWindowLayoutFullScreen(int64_t id,bool isLayoutFullScreen)191 int32_t FfiOHOSWindowSetWindowLayoutFullScreen(int64_t id, bool isLayoutFullScreen)
192 {
193     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowLayoutFullScreen start");
194     auto instance = FFIData::GetData<CJWindowImpl>(id);
195     if (instance == nullptr) {
196         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
197         return WM_ERROR_STATE_ABNORMALLY;
198     }
199     int32_t res = instance->SetWindowLayoutFullScreen(isLayoutFullScreen);
200     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowLayoutFullScreen success");
201     return res;
202 }
203 
FfiOHOSSetWindowBackgroundColor(int64_t id,const char * color)204 int32_t FfiOHOSSetWindowBackgroundColor(int64_t id, const char* color)
205 {
206     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowBackgroundColor start");
207     auto instance = FFIData::GetData<CJWindowImpl>(id);
208     if (instance == nullptr) {
209         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
210         return WM_ERROR_STATE_ABNORMALLY;
211     }
212     int32_t ret = instance->SetWindowBackgroundColor(color);
213     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowBackgroundColor success");
214     return ret;
215 }
216 
FfiOHOSWindowSetWindowBrightness(int64_t id,float brightness)217 int32_t FfiOHOSWindowSetWindowBrightness(int64_t id, float brightness)
218 {
219     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowBrightness start");
220     auto instance = FFIData::GetData<CJWindowImpl>(id);
221     if (instance == nullptr) {
222         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
223         return WM_ERROR_STATE_ABNORMALLY;
224     }
225     int32_t res = instance->SetWindowBrightness(brightness);
226     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowBrightness success");
227     return res;
228 }
229 
FfiOHOSWindowSetWindowFocusable(int64_t id,bool focusable)230 int32_t FfiOHOSWindowSetWindowFocusable(int64_t id, bool focusable)
231 {
232     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowFocusable start");
233     auto instance = FFIData::GetData<CJWindowImpl>(id);
234     if (instance == nullptr) {
235         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
236         return WM_ERROR_STATE_ABNORMALLY;
237     }
238     int32_t res = instance->SetWindowFocusable(focusable);
239     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowFocusable success");
240     return res;
241 }
242 
FfiOHOSWindowSetWindowKeepScreenOn(int64_t id,bool keepScreenOn)243 int32_t FfiOHOSWindowSetWindowKeepScreenOn(int64_t id, bool keepScreenOn)
244 {
245     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowKeepScreenOn start");
246     auto instance = FFIData::GetData<CJWindowImpl>(id);
247     if (instance == nullptr) {
248         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
249         return WM_ERROR_STATE_ABNORMALLY;
250     }
251     int32_t res = instance->SetWindowKeepScreenOn(keepScreenOn);
252     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowKeepScreenOn success");
253     return res;
254 }
255 
FfiOHOSWindowSetWindowPrivacyMode(int64_t id,bool isPrivacyMode)256 int32_t FfiOHOSWindowSetWindowPrivacyMode(int64_t id, bool isPrivacyMode)
257 {
258     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowPrivacyMode start");
259     auto instance = FFIData::GetData<CJWindowImpl>(id);
260     if (instance == nullptr) {
261         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
262         return WM_ERROR_STATE_ABNORMALLY;
263     }
264     int32_t res = instance->SetWindowPrivacyMode(isPrivacyMode);
265     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowPrivacyMode success");
266     return res;
267 }
268 
FfiOHOSWindowSetWindowTouchable(int64_t id,bool touchable)269 int32_t FfiOHOSWindowSetWindowTouchable(int64_t id, bool touchable)
270 {
271     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowTouchable start");
272     auto instance = FFIData::GetData<CJWindowImpl>(id);
273     if (instance == nullptr) {
274         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
275         return WM_ERROR_STATE_ABNORMALLY;
276     }
277     int32_t res = instance->SetWindowTouchable(touchable);
278     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowTouchable success");
279     return res;
280 }
281 
FfiOHOSWindowSetForbidSplitMove(int64_t id,bool isForbidSplitMove)282 int32_t FfiOHOSWindowSetForbidSplitMove(int64_t id, bool isForbidSplitMove)
283 {
284     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetForbidSplitMove start");
285     auto instance = FFIData::GetData<CJWindowImpl>(id);
286     if (instance == nullptr) {
287         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
288         return WM_ERROR_STATE_ABNORMALLY;
289     }
290     int32_t res = instance->SetForbidSplitMove(isForbidSplitMove);
291     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetForbidSplitMove success");
292     return res;
293 }
294 
FfiOHOSWindowIsWindowSupportWideGamut(int64_t id,int32_t * errCode)295 bool FfiOHOSWindowIsWindowSupportWideGamut(int64_t id, int32_t* errCode)
296 {
297     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] IsWindowSupportWideGamut start");
298     bool res = false;
299     auto instance = FFIData::GetData<CJWindowImpl>(id);
300     if (instance == nullptr) {
301         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
302         *errCode = WM_ERROR_STATE_ABNORMALLY;
303         return res;
304     }
305     res = instance->IsWindowSupportWideGamut(errCode);
306     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] IsWindowSupportWideGamut success");
307     return res;
308 }
309 
FfiOHOSWindowIsWindowShowing(int64_t id,int32_t * errCode)310 bool FfiOHOSWindowIsWindowShowing(int64_t id, int32_t* errCode)
311 {
312     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] IsWindowShowing start");
313     bool res = false;
314     auto instance = FFIData::GetData<CJWindowImpl>(id);
315     if (instance == nullptr) {
316         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] instance not exist %{public}" PRId64, id);
317         *errCode = WM_ERROR_STATE_ABNORMALLY;
318         return res;
319     }
320     res = instance->IsWindowShowing(errCode);
321     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] IsWindowShowing success");
322     return res;
323 }
324 
FFiOHOSWindowFindWindow(char * name)325 RetDataI64 FFiOHOSWindowFindWindow(char* name)
326 {
327     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowFindWindow start");
328     RetDataI64 ret;
329     ret.code = WindowManagerImpl::FindWindow(name, ret.data);
330     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowFindWindow success");
331     return ret;
332 }
333 
FFiOHOSWindowToggleShownStateForAllAppWindows()334 int32_t FFiOHOSWindowToggleShownStateForAllAppWindows()
335 {
336     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowToggleShownStateForAllAppWindows start");
337     WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(
338         SingletonContainer::Get<WindowManager>().ToggleShownStateForAllAppWindows());
339     if (ret != WmErrorCode::WM_OK) {
340         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowToggleShownStateForAllAppWindows error %{public}d", ret);
341         return static_cast<int32_t>(ret);
342     }
343     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowToggleShownStateForAllAppWindows success");
344     return SUCCESS_CODE;
345 }
346 
FFiOHOSWindowSetGestureNavigationEnabled(bool enable)347 int32_t FFiOHOSWindowSetGestureNavigationEnabled(bool enable)
348 {
349     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetGestureNavigationEnabled start");
350     WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(
351         SingletonContainer::Get<WindowManager>().SetGestureNavigaionEnabled(enable));
352     if (ret != WmErrorCode::WM_OK) {
353         TLOGE(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetGestureNavigationEnabled error %{public}d", ret);
354         return static_cast<int32_t>(ret);
355     }
356     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetGestureNavigationEnabled success");
357     return SUCCESS_CODE;
358 }
359 
FFiOHOSWindowSetWaterMarkImage(int64_t pixelMapId,bool enable)360 int32_t FFiOHOSWindowSetWaterMarkImage(int64_t pixelMapId, bool enable)
361 {
362     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetWaterMarkImage start");
363     auto pixelMapImpl = FFIData::GetData<PixelMapImpl>(pixelMapId);
364     if (pixelMapImpl == nullptr) {
365         return WM_ERROR_STATE_ABNORMALLY;
366     }
367     auto pixelMap = pixelMapImpl->GetRealPixelMap();
368     RSInterfaces::GetInstance().ShowWatermark(pixelMap, enable);
369     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetWaterMarkImage success");
370     return SUCCESS_CODE;
371 }
372 
FFiOHOSWindowSetBackdropBlurStyle(int64_t id,uint32_t blurStyle)373 int32_t FFiOHOSWindowSetBackdropBlurStyle(int64_t id, uint32_t blurStyle)
374 {
375     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBackdropBlurStyle start");
376     auto instance = FFIData::GetData<CJWindowImpl>(id);
377     if (instance == nullptr) {
378         return WM_ERROR_STATE_ABNORMALLY;
379     }
380     int32_t res = instance->SetBackdropBlurStyle(blurStyle);
381     if (res == SUCCESS_CODE) {
382         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBackdropBlurStyle success");
383     }
384     return res;
385 }
386 
FFiOHOSWindowSetPreferredOrientation(int64_t id,uint32_t orientation)387 int32_t FFiOHOSWindowSetPreferredOrientation(int64_t id, uint32_t orientation)
388 {
389     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetPreferredOrientation start");
390     auto instance = FFIData::GetData<CJWindowImpl>(id);
391     if (instance == nullptr) {
392         return WM_ERROR_STATE_ABNORMALLY;
393     }
394     int32_t res = instance->SetPreferredOrientation(orientation);
395     if (res == SUCCESS_CODE) {
396         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetPreferredOrientation success");
397     }
398     return res;
399 }
400 
FFiOHOSWindowGetWindowAvoidArea(int64_t id,uint32_t areaType,OHOS::Rosen::CAvoidArea * retPtr)401 int32_t FFiOHOSWindowGetWindowAvoidArea(int64_t id, uint32_t areaType,  OHOS::Rosen::CAvoidArea *retPtr)
402 {
403     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowGetWindowAvoidArea start");
404     auto instance = FFIData::GetData<CJWindowImpl>(id);
405     if (instance == nullptr) {
406         return WM_ERROR_STATE_ABNORMALLY;
407     }
408     int32_t res = instance->GetWindowAvoidArea(areaType, retPtr);
409     if (res == SUCCESS_CODE) {
410         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowGetWindowAvoidArea success");
411     }
412     return res;
413 }
414 
FFiOHOSWindowSetWaterMarkFlag(int64_t id,bool enable)415 int32_t FFiOHOSWindowSetWaterMarkFlag(int64_t id, bool enable)
416 {
417     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetWaterMarkFlag start");
418     auto instance = FFIData::GetData<CJWindowImpl>(id);
419     if (instance == nullptr) {
420         return WM_ERROR_STATE_ABNORMALLY;
421     }
422     int32_t res = instance->SetWaterMarkFlag(enable);
423     if (res == SUCCESS_CODE) {
424         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetWaterMarkFlag success");
425     }
426     return res;
427 }
428 
FFiOHOSWindowSetAspectRatio(int64_t id,double ratio)429 int32_t FFiOHOSWindowSetAspectRatio(int64_t id, double ratio)
430 {
431     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetAspectRatio start");
432     auto instance = FFIData::GetData<CJWindowImpl>(id);
433     if (instance == nullptr) {
434         return WM_ERROR_STATE_ABNORMALLY;
435     }
436     int32_t res = instance->SetAspectRatio(ratio);
437     if (res == SUCCESS_CODE) {
438         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetAspectRatio success");
439     }
440     return res;
441 }
442 
FFiOHOSWindowSetShadowRadius(int64_t id,double radius)443 int32_t FFiOHOSWindowSetShadowRadius(int64_t id, double radius)
444 {
445     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowRadius start");
446     auto instance = FFIData::GetData<CJWindowImpl>(id);
447     if (instance == nullptr) {
448         return WM_ERROR_STATE_ABNORMALLY;
449     }
450     int32_t res = instance->SetShadowRadius(radius);
451     if (res == SUCCESS_CODE) {
452         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowRadius success");
453     }
454     return res;
455 }
456 
FFiOHOSWindowSetShadowColor(int64_t id,char * color)457 int32_t FFiOHOSWindowSetShadowColor(int64_t id, char* color)
458 {
459     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowColor start");
460     std::string windowColor = color;
461     auto instance = FFIData::GetData<CJWindowImpl>(id);
462     if (instance == nullptr) {
463         return WM_ERROR_STATE_ABNORMALLY;
464     }
465     int32_t res = instance->SetShadowColor(windowColor);
466     if (res == SUCCESS_CODE) {
467         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowColor success");
468     }
469     return res;
470 }
471 
FFiOHOSWindowSetShadowOffsetX(int64_t id,double offsetX)472 int32_t FFiOHOSWindowSetShadowOffsetX(int64_t id, double offsetX)
473 {
474     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowOffsetX start");
475     auto instance = FFIData::GetData<CJWindowImpl>(id);
476     if (instance == nullptr) {
477         return WM_ERROR_STATE_ABNORMALLY;
478     }
479     int32_t res = instance->SetShadowOffsetX(offsetX);
480     if (res == SUCCESS_CODE) {
481         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowOffsetX success");
482     }
483     return res;
484 }
485 
FFiOHOSWindowSetShadowOffsetY(int64_t id,double offsetY)486 int32_t FFiOHOSWindowSetShadowOffsetY(int64_t id, double offsetY)
487 {
488     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowOffsetY start");
489     auto instance = FFIData::GetData<CJWindowImpl>(id);
490     if (instance == nullptr) {
491         return WM_ERROR_STATE_ABNORMALLY;
492     }
493     int32_t res = instance->SetShadowOffsetY(offsetY);
494     if (res == SUCCESS_CODE) {
495         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetShadowOffsetY success");
496     }
497     return res;
498 }
499 
FFiOHOSWindowSetBackdropBlur(int64_t id,double radius)500 int32_t FFiOHOSWindowSetBackdropBlur(int64_t id, double radius)
501 {
502     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBackdropBlur start");
503     auto instance = FFIData::GetData<CJWindowImpl>(id);
504     if (instance == nullptr) {
505         return WM_ERROR_STATE_ABNORMALLY;
506     }
507     int32_t res = instance->SetBackdropBlur(radius);
508     if (res == SUCCESS_CODE) {
509         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBackdropBlur success");
510     }
511     return res;
512 }
513 
FFiOHOSWindowSetBlur(int64_t id,double radius)514 int32_t FFiOHOSWindowSetBlur(int64_t id, double radius)
515 {
516     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBlur start");
517     auto instance = FFIData::GetData<CJWindowImpl>(id);
518     if (instance == nullptr) {
519         return WM_ERROR_STATE_ABNORMALLY;
520     }
521     int32_t res = instance->SetBlur(radius);
522     if (res == SUCCESS_CODE) {
523         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowSetBlur success");
524     }
525     return res;
526 }
527 
FFiOHOSWindowResetAspectRatio(int64_t id)528 int32_t FFiOHOSWindowResetAspectRatio(int64_t id)
529 {
530     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowResetAspectRatio start");
531     auto instance = FFIData::GetData<CJWindowImpl>(id);
532     if (instance == nullptr) {
533         return WM_ERROR_STATE_ABNORMALLY;
534     }
535     int32_t res = instance->ResetAspectRatio();
536     if (res == SUCCESS_CODE) {
537         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] FFiOHOSWindowResetAspectRatio success");
538     }
539     return res;
540 }
541 
FFiOHOSWindowMinimize(int64_t id)542 int32_t FFiOHOSWindowMinimize(int64_t id)
543 {
544     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Minimize start");
545     auto instance = FFIData::GetData<CJWindowImpl>(id);
546     if (instance == nullptr) {
547         return WM_ERROR_STATE_ABNORMALLY;
548     }
549     int32_t res = instance->Minimize();
550     if (res == SUCCESS_CODE) {
551         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Minimize success");
552     }
553     return res;
554 }
555 
FFiOHOSWindowSetWindowColorSpace(int64_t id,uint32_t colorSpace)556 int32_t FFiOHOSWindowSetWindowColorSpace(int64_t id, uint32_t colorSpace)
557 {
558     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowColorSpace start");
559     auto instance = FFIData::GetData<CJWindowImpl>(id);
560     if (instance == nullptr) {
561         return WM_ERROR_STATE_ABNORMALLY;
562     }
563     int32_t res = instance->SetWindowColorSpace(colorSpace);
564     if (res == SUCCESS_CODE) {
565         TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowColorSpace success");
566     }
567     return res;
568 }
569 
FFiOHOSWindowSetCornerRadius(int64_t id,float radius)570 int32_t FFiOHOSWindowSetCornerRadius(int64_t id, float radius)
571 {
572     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetCornerRadius start");
573     auto instance = FFIData::GetData<CJWindowImpl>(id);
574     if (instance == nullptr) {
575         return WM_ERROR_STATE_ABNORMALLY;
576     }
577     int32_t res = instance->SetCornerRadius(radius);
578     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetCornerRadius success");
579     return res;
580 }
581 
FFiOHOSWindowSetResizeByDragEnabled(int64_t id,bool enable)582 int32_t FFiOHOSWindowSetResizeByDragEnabled(int64_t id, bool enable)
583 {
584     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetResizeByDragEnabled start");
585     auto instance = FFIData::GetData<CJWindowImpl>(id);
586     if (instance == nullptr) {
587         return WM_ERROR_STATE_ABNORMALLY;
588     }
589     int32_t res = instance->SetResizeByDragEnabled(enable);
590     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetResizeByDragEnabled success");
591     return res;
592 }
593 
FFiOHOSWindowRaiseToAppTop(int64_t id)594 int32_t FFiOHOSWindowRaiseToAppTop(int64_t id)
595 {
596     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] RaiseToAppTop start");
597     auto instance = FFIData::GetData<CJWindowImpl>(id);
598     if (instance == nullptr) {
599         return WM_ERROR_STATE_ABNORMALLY;
600     }
601     int32_t res = instance->RaiseToAppTop();
602     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] RaiseToAppTop success");
603     return res;
604 }
605 
FFiOHOSWindowSetSnapshotSkip(int64_t id,bool isSkip)606 int32_t FFiOHOSWindowSetSnapshotSkip(int64_t id, bool isSkip)
607 {
608     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetSnapshotSkip start");
609     auto instance = FFIData::GetData<CJWindowImpl>(id);
610     if (instance == nullptr) {
611         return WM_ERROR_STATE_ABNORMALLY;
612     }
613     int32_t res = instance->SetSnapshotSkip(isSkip);
614     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetSnapshotSkip success");
615     return res;
616 }
617 
FFiOHOSWindowSetWakeUpScreen(int64_t id,bool wakeUp)618 int32_t FFiOHOSWindowSetWakeUpScreen(int64_t id, bool wakeUp)
619 {
620     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWakeUpScreen start");
621     auto instance = FFIData::GetData<CJWindowImpl>(id);
622     if (instance == nullptr) {
623         return WM_ERROR_STATE_ABNORMALLY;
624     }
625     int32_t res = static_cast<int32_t>(instance->SetWakeUpScreen(wakeUp));
626     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWakeUpScreen success");
627     return res;
628 }
629 
FFiOHOSWindowSetRaiseByClickEnabled(int64_t id,bool enable)630 int32_t FFiOHOSWindowSetRaiseByClickEnabled(int64_t id, bool enable)
631 {
632     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetRaiseByClickEnabled start");
633     auto instance = FFIData::GetData<CJWindowImpl>(id);
634     if (instance == nullptr) {
635         return WM_ERROR_STATE_ABNORMALLY;
636     }
637     int32_t res = instance->SetRaiseByClickEnabled(enable);
638     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetRaiseByClickEnabled success");
639     return res;
640 }
641 
FFiOHOSWindowGetWindowColorSpace(int64_t id,int32_t * errCode)642 int32_t FFiOHOSWindowGetWindowColorSpace(int64_t id, int32_t* errCode)
643 {
644     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetWindowColorSpace start");
645     auto instance = FFIData::GetData<CJWindowImpl>(id);
646     if (instance == nullptr) {
647         *errCode = WM_ERROR_STATE_ABNORMALLY;
648         return 0;
649     }
650     int32_t res = static_cast<int32_t>(instance->GetWindowColorSpace(errCode));
651     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] GetWindowColorSpace success");
652     return res;
653 }
654 
FFiOHOSWindowRaiseAboveTarget(int64_t id,int32_t windowId)655 int32_t FFiOHOSWindowRaiseAboveTarget(int64_t id, int32_t windowId)
656 {
657     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] RaiseAboveTarget start");
658     auto instance = FFIData::GetData<CJWindowImpl>(id);
659     if (instance == nullptr) {
660         return WM_ERROR_STATE_ABNORMALLY;
661     }
662     int32_t res = instance->RaiseAboveTarget(windowId);
663     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] RaiseAboveTarget success");
664     return res;
665 }
666 
FFiOHOSWindowTranslate(int64_t id,double x,double y,double z)667 int32_t FFiOHOSWindowTranslate(int64_t id, double x, double y, double z)
668 {
669     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Translate start");
670     auto instance = FFIData::GetData<CJWindowImpl>(id);
671     if (instance == nullptr) {
672         return WM_ERROR_STATE_ABNORMALLY;
673     }
674     int32_t res = instance->Translate(x, y, z);
675     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Translate success");
676     return res;
677 }
678 
FFiOHOSWindowRotate(int64_t id,WindowRotate window)679 int32_t FFiOHOSWindowRotate(int64_t id, WindowRotate window)
680 {
681     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Rotate start");
682     auto instance = FFIData::GetData<CJWindowImpl>(id);
683     if (instance == nullptr) {
684         return WM_ERROR_STATE_ABNORMALLY;
685     }
686     int32_t res = instance->Rotate(window.x, window.y, window.z, window.pivotX, window.pivotY);
687     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Rotate success");
688     return res;
689 }
690 
FFiOHOSWindowScale(int64_t id,double x,double y,double pivotX,double pivotY)691 int32_t FFiOHOSWindowScale(int64_t id, double x, double y, double pivotX, double pivotY)
692 {
693     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Scale start");
694     auto instance = FFIData::GetData<CJWindowImpl>(id);
695     if (instance == nullptr) {
696         return WM_ERROR_STATE_ABNORMALLY;
697     }
698     int32_t res = instance->Scale(x, y, pivotX, pivotY);
699     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Scale success");
700     return res;
701 }
702 
FFiOHOSWindowOpacity(int64_t id,double opacity)703 int32_t FFiOHOSWindowOpacity(int64_t id, double opacity)
704 {
705     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Opacity start");
706     auto instance = FFIData::GetData<CJWindowImpl>(id);
707     if (instance == nullptr) {
708         return WM_ERROR_STATE_ABNORMALLY;
709     }
710     int32_t res = instance->Opacity(opacity);
711     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Opacity success");
712     return res;
713 }
714 
FFiOHOSWindowSnapshot(int64_t id,int32_t * errCode)715 int64_t FFiOHOSWindowSnapshot(int64_t id, int32_t* errCode)
716 {
717     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Snapshot start");
718     auto instance = FFIData::GetData<CJWindowImpl>(id);
719     if (instance == nullptr) {
720         *errCode = WM_ERROR_STATE_ABNORMALLY;
721         return 0;
722     }
723     std::shared_ptr<Media::PixelMap> pmap = instance->Snapshot(errCode);
724     if (*errCode != 0) {
725         return 0;
726     }
727     auto nativeImage = FFIData::Create<PixelMapImpl>(move(pmap));
728     if (nativeImage == nullptr) {
729         TLOGI(WmsLogTag::WMS_DIALOG, "create image failed");
730         return 0;
731     }
732     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] Snapshot success");
733     return nativeImage->GetID();
734 }
735 
FFiOHOSWindowSetWindowSystemBarEnable(int64_t id,CArrString arr)736 int32_t FFiOHOSWindowSetWindowSystemBarEnable(int64_t id, CArrString arr)
737 {
738     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowSystemBarEnable start");
739     auto instance = FFIData::GetData<CJWindowImpl>(id);
740     if (instance == nullptr) {
741         return WM_ERROR_STATE_ABNORMALLY;
742     }
743     int32_t res = instance->SetWindowSystemBarEnable(arr.head, (uint32_t)arr.size);
744     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowSystemBarEnable success");
745     return res;
746 }
747 
FFiOHOSWindowSetWindowSystemBarProperties(int64_t id,CJBarProperties properties)748 int32_t FFiOHOSWindowSetWindowSystemBarProperties(int64_t id, CJBarProperties properties)
749 {
750     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowSystemBarProperties start");
751     auto instance = FFIData::GetData<CJWindowImpl>(id);
752     if (instance == nullptr) {
753         return WM_ERROR_STATE_ABNORMALLY;
754     }
755     CBarProperties cProperties;
756     cProperties.statusBarColor = properties.statusBarColor;
757     cProperties.isStatusBarLightIcon = properties.isStatusBarLightIcon;
758     cProperties.statusBarContentColor = properties.statusBarContentColor;
759     cProperties.navigationBarColor = properties.navigationBarColor;
760     cProperties.navigationBarContentColor = properties.navigationBarContentColor;
761     cProperties.isNavigationBarLightIcon = properties.isNavigationBarLightIcon;
762     int32_t res = instance->SetWindowSystemBarProperties(cProperties);
763     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] SetWindowSystemBarProperties success");
764     return res;
765 }
766 
FfiOHOSOnKeyboardHeightChange(int64_t id,int64_t callbackId)767 int32_t FfiOHOSOnKeyboardHeightChange(int64_t id, int64_t callbackId)
768 {
769     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] OnKeyboardHeightChange start");
770     auto instance = FFIData::GetData<CJWindowImpl>(id);
771     if (instance == nullptr) {
772         return WM_ERROR_STATE_ABNORMALLY;
773     }
774     int32_t ret = instance->OnRegisterWindowCallback("keyboardHeightChange", callbackId);
775     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] OnKeyboardHeightChange success");
776     return ret;
777 }
778 
FfiOHOSOffKeyboardHeightChange(int64_t id)779 int32_t FfiOHOSOffKeyboardHeightChange(int64_t id)
780 {
781     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] OffKeyboardHeightChange start");
782     auto instance = FFIData::GetData<CJWindowImpl>(id);
783     if (instance == nullptr) {
784         return WM_ERROR_STATE_ABNORMALLY;
785     }
786     int32_t ret = instance->UnregisterWindowCallback("keyboardHeightChange", (-1));
787     TLOGI(WmsLogTag::WMS_DIALOG, "[Window] OffKeyboardHeightChange success");
788     return ret;
789 }
790 
791 // WindowStage
FfiOHOSBindWindowStage(int64_t windowStageImplPtr)792 RetDataI64 FfiOHOSBindWindowStage(int64_t windowStageImplPtr)
793 {
794     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] bind to created WindowStage");
795     RetDataI64 ret;
796     auto actualWs = reinterpret_cast<CJWindowStageImpl*>(windowStageImplPtr);
797     if (actualWs == nullptr) {
798         TLOGE(WmsLogTag::WMS_DIALOG, "[WindowStage] Bind null obj");
799         ret.code = static_cast<int32_t>(WMError::WM_ERROR_NULLPTR);
800         return ret;
801     }
802     ret.code = static_cast<int32_t>(WMError::WM_OK);
803     ret.data = actualWs->GetID();
804     return ret;
805 }
806 
FfiOHOSGetMainWindow(int64_t id)807 RetDataI64 FfiOHOSGetMainWindow(int64_t id)
808 {
809     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] getMainWindow start");
810     RetDataI64 ret;
811     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
812     if (instance == nullptr) {
813         ret.code = WM_ERROR_STATE_ABNORMALLY;
814         return ret;
815     }
816     ret.code = instance->GetMainWindow(ret.data);
817     return ret;
818 }
819 
FfiOHOSCreateSubWindow(int64_t id,char * name)820 RetDataI64 FfiOHOSCreateSubWindow(int64_t id, char *name)
821 {
822     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] createSubWindow start");
823     RetDataI64 ret;
824     std::string nm = name;
825     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
826     if (instance == nullptr) {
827         ret.code = WM_ERROR_STATE_ABNORMALLY;
828         return ret;
829     }
830     ret.code = instance->CreateSubWindow(nm, ret.data);
831     return ret;
832 }
833 
FfiOHOSGetSubWindow(int64_t id)834 RetStruct FfiOHOSGetSubWindow(int64_t id)
835 {
836     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] getSubWindow start");
837     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
838     if (instance == nullptr) {
839         return {WM_ERROR_STATE_ABNORMALLY, 0, nullptr};
840     }
841     auto ret = instance->GetSubWindow();
842     return ret;
843 }
844 
FfiOHOSLoadContent(int64_t id,char * path)845 int32_t FfiOHOSLoadContent(int64_t id, char *path)
846 {
847     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] loadContent start");
848     std::string url = path;
849     std::string storageJson = " ";
850     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
851     if (instance == nullptr) {
852         return WM_ERROR_STATE_ABNORMALLY;
853     }
854     return instance->OnLoadContent(url, storageJson, false);
855 }
856 
FfiOHOSLoadContentByName(int64_t id,char * name)857 int32_t FfiOHOSLoadContentByName(int64_t id, char *name)
858 {
859     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] loadContentByName start");
860     return SUCCESS_CODE;
861 }
862 
FfiOHOSDisableWindowDecor(int64_t id)863 int32_t FfiOHOSDisableWindowDecor(int64_t id)
864 {
865     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] disableWindowDecor start");
866     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
867     if (instance == nullptr) {
868         return WM_ERROR_STATE_ABNORMALLY;
869     }
870     return instance->DisableWindowDecor();
871 }
872 
FfiOHOSSetShowOnLockScreen(int64_t id,bool showOnLockScreen)873 int32_t FfiOHOSSetShowOnLockScreen(int64_t id, bool showOnLockScreen)
874 {
875     TLOGI(WmsLogTag::WMS_DIALOG, "[WindowStage] setShowOnLockScreen start");
876     auto instance = FFIData::GetData<CJWindowStageImpl>(id);
877     if (instance == nullptr) {
878         return WM_ERROR_STATE_ABNORMALLY;
879     }
880     return instance->SetShowOnLockScreen(showOnLockScreen);
881 }
882 } // extern "C"
883 }
884 }
885