1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci#include "zidl/window_manager_proxy.h"
17e0dac50fSopenharmony_ci#include <ipc_types.h>
18e0dac50fSopenharmony_ci#include <key_event.h>
19e0dac50fSopenharmony_ci#include <rs_iwindow_animation_controller.h>
20e0dac50fSopenharmony_ci#include <rs_window_animation_target.h>
21e0dac50fSopenharmony_ci
22e0dac50fSopenharmony_ci#include "marshalling_helper.h"
23e0dac50fSopenharmony_ci#include "window_manager_hilog.h"
24e0dac50fSopenharmony_ci
25e0dac50fSopenharmony_cinamespace OHOS {
26e0dac50fSopenharmony_cinamespace Rosen {
27e0dac50fSopenharmony_cinamespace {
28e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowManagerProxy"};
29e0dac50fSopenharmony_ci}
30e0dac50fSopenharmony_ci
31e0dac50fSopenharmony_ci
32e0dac50fSopenharmony_ciWMError WindowManagerProxy::CreateWindow(sptr<IWindow>& window, sptr<WindowProperty>& property,
33e0dac50fSopenharmony_ci    const std::shared_ptr<RSSurfaceNode>& surfaceNode, uint32_t& windowId, sptr<IRemoteObject> token)
34e0dac50fSopenharmony_ci{
35e0dac50fSopenharmony_ci    MessageParcel data;
36e0dac50fSopenharmony_ci    MessageParcel reply;
37e0dac50fSopenharmony_ci    MessageOption option;
38e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
39e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
40e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
41e0dac50fSopenharmony_ci    }
42e0dac50fSopenharmony_ci
43e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(window->AsObject())) {
44e0dac50fSopenharmony_ci        WLOGFE("Write IWindow failed");
45e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
46e0dac50fSopenharmony_ci    }
47e0dac50fSopenharmony_ci
48e0dac50fSopenharmony_ci    if (!data.WriteParcelable(property.GetRefPtr())) {
49e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
50e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
51e0dac50fSopenharmony_ci    }
52e0dac50fSopenharmony_ci
53e0dac50fSopenharmony_ci    if (surfaceNode == nullptr || !surfaceNode->Marshalling(data)) {
54e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
55e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
56e0dac50fSopenharmony_ci    }
57e0dac50fSopenharmony_ci    if (token != nullptr) {
58e0dac50fSopenharmony_ci        if (!data.WriteRemoteObject(token)) {
59e0dac50fSopenharmony_ci            WLOGFE("Write abilityToken failed");
60e0dac50fSopenharmony_ci            return WMError::WM_ERROR_IPC_FAILED;
61e0dac50fSopenharmony_ci        }
62e0dac50fSopenharmony_ci    }
63e0dac50fSopenharmony_ci
64e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
65e0dac50fSopenharmony_ci    if (remote == nullptr) {
66e0dac50fSopenharmony_ci        WLOGFE("remote is null");
67e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
68e0dac50fSopenharmony_ci    }
69e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_CREATE_WINDOW),
70e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
71e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
72e0dac50fSopenharmony_ci    }
73e0dac50fSopenharmony_ci    windowId = reply.ReadUint32();
74e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
75e0dac50fSopenharmony_ci    property->SetWindowFlags(reply.ReadUint32());
76e0dac50fSopenharmony_ci    property->SetApiCompatibleVersion(reply.ReadUint32());
77e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
78e0dac50fSopenharmony_ci}
79e0dac50fSopenharmony_ci
80e0dac50fSopenharmony_ciWMError WindowManagerProxy::AddWindow(sptr<WindowProperty>& property)
81e0dac50fSopenharmony_ci{
82e0dac50fSopenharmony_ci    MessageParcel data;
83e0dac50fSopenharmony_ci    MessageParcel reply;
84e0dac50fSopenharmony_ci    MessageOption option;
85e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
86e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
87e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
88e0dac50fSopenharmony_ci    }
89e0dac50fSopenharmony_ci
90e0dac50fSopenharmony_ci    if (!data.WriteParcelable(property.GetRefPtr())) {
91e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
92e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
93e0dac50fSopenharmony_ci    }
94e0dac50fSopenharmony_ci
95e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
96e0dac50fSopenharmony_ci    if (remote == nullptr) {
97e0dac50fSopenharmony_ci        WLOGFE("remote is null");
98e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
99e0dac50fSopenharmony_ci    }
100e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_ADD_WINDOW),
101e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
102e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
103e0dac50fSopenharmony_ci    }
104e0dac50fSopenharmony_ci
105e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
106e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
107e0dac50fSopenharmony_ci}
108e0dac50fSopenharmony_ci
109e0dac50fSopenharmony_ciWMError WindowManagerProxy::RemoveWindow(uint32_t windowId, bool isFromInnerkits)
110e0dac50fSopenharmony_ci{
111e0dac50fSopenharmony_ci    MessageParcel data;
112e0dac50fSopenharmony_ci    MessageParcel reply;
113e0dac50fSopenharmony_ci    MessageOption option;
114e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
115e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
116e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
117e0dac50fSopenharmony_ci    }
118e0dac50fSopenharmony_ci
119e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
120e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
121e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
122e0dac50fSopenharmony_ci    }
123e0dac50fSopenharmony_ci
124e0dac50fSopenharmony_ci    if (!data.WriteBool(isFromInnerkits)) {
125e0dac50fSopenharmony_ci        WLOGFE("Write isFromInnerkits failed");
126e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
127e0dac50fSopenharmony_ci    }
128e0dac50fSopenharmony_ci
129e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
130e0dac50fSopenharmony_ci    if (remote == nullptr) {
131e0dac50fSopenharmony_ci        WLOGFE("remote is null");
132e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
133e0dac50fSopenharmony_ci    }
134e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_REMOVE_WINDOW),
135e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
136e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
137e0dac50fSopenharmony_ci    }
138e0dac50fSopenharmony_ci
139e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
140e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
141e0dac50fSopenharmony_ci}
142e0dac50fSopenharmony_ci
143e0dac50fSopenharmony_ciWMError WindowManagerProxy::DestroyWindow(uint32_t windowId, bool /* onlySelf */)
144e0dac50fSopenharmony_ci{
145e0dac50fSopenharmony_ci    MessageParcel data;
146e0dac50fSopenharmony_ci    MessageParcel reply;
147e0dac50fSopenharmony_ci    MessageOption option;
148e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
149e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
150e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
151e0dac50fSopenharmony_ci    }
152e0dac50fSopenharmony_ci
153e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
154e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
155e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
156e0dac50fSopenharmony_ci    }
157e0dac50fSopenharmony_ci
158e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
159e0dac50fSopenharmony_ci    if (remote == nullptr) {
160e0dac50fSopenharmony_ci        WLOGFE("remote is null");
161e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
162e0dac50fSopenharmony_ci    }
163e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_DESTROY_WINDOW),
164e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
165e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
166e0dac50fSopenharmony_ci    }
167e0dac50fSopenharmony_ci
168e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
169e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
170e0dac50fSopenharmony_ci}
171e0dac50fSopenharmony_ci
172e0dac50fSopenharmony_ciWMError WindowManagerProxy::RequestFocus(uint32_t windowId)
173e0dac50fSopenharmony_ci{
174e0dac50fSopenharmony_ci    MessageParcel data;
175e0dac50fSopenharmony_ci    MessageParcel reply;
176e0dac50fSopenharmony_ci    MessageOption option;
177e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
178e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
179e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
180e0dac50fSopenharmony_ci    }
181e0dac50fSopenharmony_ci
182e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
183e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
184e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
185e0dac50fSopenharmony_ci    }
186e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
187e0dac50fSopenharmony_ci    if (remote == nullptr) {
188e0dac50fSopenharmony_ci        WLOGFE("remote is null");
189e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
190e0dac50fSopenharmony_ci    }
191e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_REQUEST_FOCUS),
192e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
193e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
194e0dac50fSopenharmony_ci    }
195e0dac50fSopenharmony_ci
196e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
197e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
198e0dac50fSopenharmony_ci}
199e0dac50fSopenharmony_ci
200e0dac50fSopenharmony_ciAvoidArea WindowManagerProxy::GetAvoidAreaByType(uint32_t windowId, AvoidAreaType type)
201e0dac50fSopenharmony_ci{
202e0dac50fSopenharmony_ci    MessageParcel data;
203e0dac50fSopenharmony_ci    MessageParcel reply;
204e0dac50fSopenharmony_ci    MessageOption option;
205e0dac50fSopenharmony_ci
206e0dac50fSopenharmony_ci    AvoidArea avoidArea;
207e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
208e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
209e0dac50fSopenharmony_ci        return avoidArea;
210e0dac50fSopenharmony_ci    }
211e0dac50fSopenharmony_ci
212e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
213e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
214e0dac50fSopenharmony_ci        return avoidArea;
215e0dac50fSopenharmony_ci    }
216e0dac50fSopenharmony_ci
217e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
218e0dac50fSopenharmony_ci        WLOGFE("Write AvoidAreaType failed");
219e0dac50fSopenharmony_ci        return avoidArea;
220e0dac50fSopenharmony_ci    }
221e0dac50fSopenharmony_ci
222e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
223e0dac50fSopenharmony_ci    if (remote == nullptr) {
224e0dac50fSopenharmony_ci        WLOGFE("remote is null");
225e0dac50fSopenharmony_ci        return avoidArea;
226e0dac50fSopenharmony_ci    }
227e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_AVOID_AREA),
228e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
229e0dac50fSopenharmony_ci        return avoidArea;
230e0dac50fSopenharmony_ci    }
231e0dac50fSopenharmony_ci    sptr<AvoidArea> area = reply.ReadParcelable<AvoidArea>();
232e0dac50fSopenharmony_ci    if (area == nullptr) {
233e0dac50fSopenharmony_ci        return avoidArea;
234e0dac50fSopenharmony_ci    }
235e0dac50fSopenharmony_ci    return *area;
236e0dac50fSopenharmony_ci}
237e0dac50fSopenharmony_ci
238e0dac50fSopenharmony_ciWMError WindowManagerProxy::RegisterWindowManagerAgent(WindowManagerAgentType type,
239e0dac50fSopenharmony_ci    const sptr<IWindowManagerAgent>& windowManagerAgent)
240e0dac50fSopenharmony_ci{
241e0dac50fSopenharmony_ci    MessageParcel data;
242e0dac50fSopenharmony_ci    MessageParcel reply;
243e0dac50fSopenharmony_ci    MessageOption option;
244e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
245e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
246e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
247e0dac50fSopenharmony_ci    }
248e0dac50fSopenharmony_ci
249e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
250e0dac50fSopenharmony_ci        WLOGFE("Write type failed");
251e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
252e0dac50fSopenharmony_ci    }
253e0dac50fSopenharmony_ci
254e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(windowManagerAgent->AsObject())) {
255e0dac50fSopenharmony_ci        WLOGFE("Write IWindowManagerAgent failed");
256e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
257e0dac50fSopenharmony_ci    }
258e0dac50fSopenharmony_ci
259e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
260e0dac50fSopenharmony_ci    if (remote == nullptr) {
261e0dac50fSopenharmony_ci        WLOGFE("remote is null");
262e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
263e0dac50fSopenharmony_ci    }
264e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_REGISTER_WINDOW_MANAGER_AGENT),
265e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
266e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
267e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
268e0dac50fSopenharmony_ci    }
269e0dac50fSopenharmony_ci
270e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
271e0dac50fSopenharmony_ci}
272e0dac50fSopenharmony_ci
273e0dac50fSopenharmony_ciWMError WindowManagerProxy::UnregisterWindowManagerAgent(WindowManagerAgentType type,
274e0dac50fSopenharmony_ci    const sptr<IWindowManagerAgent>& windowManagerAgent)
275e0dac50fSopenharmony_ci{
276e0dac50fSopenharmony_ci    MessageParcel data;
277e0dac50fSopenharmony_ci    MessageParcel reply;
278e0dac50fSopenharmony_ci    MessageOption option;
279e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
280e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
281e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
282e0dac50fSopenharmony_ci    }
283e0dac50fSopenharmony_ci
284e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
285e0dac50fSopenharmony_ci        WLOGFE("Write type failed");
286e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
287e0dac50fSopenharmony_ci    }
288e0dac50fSopenharmony_ci
289e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(windowManagerAgent->AsObject())) {
290e0dac50fSopenharmony_ci        WLOGFE("Write IWindowManagerAgent failed");
291e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
292e0dac50fSopenharmony_ci    }
293e0dac50fSopenharmony_ci
294e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
295e0dac50fSopenharmony_ci    if (remote == nullptr) {
296e0dac50fSopenharmony_ci        WLOGFE("remote is null");
297e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
298e0dac50fSopenharmony_ci    }
299e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_UNREGISTER_WINDOW_MANAGER_AGENT),
300e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
301e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
302e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
303e0dac50fSopenharmony_ci    }
304e0dac50fSopenharmony_ci
305e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
306e0dac50fSopenharmony_ci}
307e0dac50fSopenharmony_ci
308e0dac50fSopenharmony_ciWMError WindowManagerProxy::SetWindowAnimationController(const sptr<RSIWindowAnimationController>& controller)
309e0dac50fSopenharmony_ci{
310e0dac50fSopenharmony_ci    MessageParcel data;
311e0dac50fSopenharmony_ci    MessageParcel reply;
312e0dac50fSopenharmony_ci    MessageOption option;
313e0dac50fSopenharmony_ci
314e0dac50fSopenharmony_ci    if (controller == nullptr) {
315e0dac50fSopenharmony_ci        WLOGFE("RSWindowAnimation Failed to set window animation controller, controller is null!");
316e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
317e0dac50fSopenharmony_ci    }
318e0dac50fSopenharmony_ci
319e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
320e0dac50fSopenharmony_ci        WLOGFE("RSWindowAnimation Failed to WriteInterfaceToken!");
321e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
322e0dac50fSopenharmony_ci    }
323e0dac50fSopenharmony_ci
324e0dac50fSopenharmony_ci    if (!data.WriteRemoteObject(controller->AsObject())) {
325e0dac50fSopenharmony_ci        WLOGFE("RSWindowAnimation Failed to write controller!");
326e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
327e0dac50fSopenharmony_ci    }
328e0dac50fSopenharmony_ci
329e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
330e0dac50fSopenharmony_ci    if (remote == nullptr) {
331e0dac50fSopenharmony_ci        WLOGFE("remote is null");
332e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
333e0dac50fSopenharmony_ci    }
334e0dac50fSopenharmony_ci    auto error = remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_ANIMATION_SET_CONTROLLER),
335e0dac50fSopenharmony_ci        data, reply, option);
336e0dac50fSopenharmony_ci    if (error != ERR_NONE) {
337e0dac50fSopenharmony_ci        WLOGFE("RSWindowAnimation Send request error: %{public}d", error);
338e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
339e0dac50fSopenharmony_ci    }
340e0dac50fSopenharmony_ci
341e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
342e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
343e0dac50fSopenharmony_ci}
344e0dac50fSopenharmony_ci
345e0dac50fSopenharmony_civoid WindowManagerProxy::NotifyServerReadyToMoveOrDrag(uint32_t windowId, sptr<WindowProperty>& windowProperty,
346e0dac50fSopenharmony_ci    sptr<MoveDragProperty>& moveDragProperty)
347e0dac50fSopenharmony_ci{
348e0dac50fSopenharmony_ci    MessageParcel data;
349e0dac50fSopenharmony_ci    MessageParcel reply;
350e0dac50fSopenharmony_ci    MessageOption option;
351e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
352e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
353e0dac50fSopenharmony_ci        return;
354e0dac50fSopenharmony_ci    }
355e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
356e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
357e0dac50fSopenharmony_ci        return;
358e0dac50fSopenharmony_ci    }
359e0dac50fSopenharmony_ci    if (!data.WriteParcelable(windowProperty.GetRefPtr())) {
360e0dac50fSopenharmony_ci        WLOGFE("Failed to write windowProperty!");
361e0dac50fSopenharmony_ci        return;
362e0dac50fSopenharmony_ci    }
363e0dac50fSopenharmony_ci    if (!data.WriteParcelable(moveDragProperty.GetRefPtr())) {
364e0dac50fSopenharmony_ci        WLOGFE("Failed to write moveDragProperty!");
365e0dac50fSopenharmony_ci        return;
366e0dac50fSopenharmony_ci    }
367e0dac50fSopenharmony_ci
368e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
369e0dac50fSopenharmony_ci    if (remote == nullptr) {
370e0dac50fSopenharmony_ci        WLOGFE("remote is null");
371e0dac50fSopenharmony_ci        return;
372e0dac50fSopenharmony_ci    }
373e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_NOTIFY_READY_MOVE_OR_DRAG),
374e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
375e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
376e0dac50fSopenharmony_ci    }
377e0dac50fSopenharmony_ci}
378e0dac50fSopenharmony_ci
379e0dac50fSopenharmony_civoid WindowManagerProxy::ProcessPointDown(uint32_t windowId, bool isPointDown)
380e0dac50fSopenharmony_ci{
381e0dac50fSopenharmony_ci    MessageParcel data;
382e0dac50fSopenharmony_ci    MessageParcel reply;
383e0dac50fSopenharmony_ci    MessageOption option;
384e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
385e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
386e0dac50fSopenharmony_ci        return;
387e0dac50fSopenharmony_ci    }
388e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
389e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
390e0dac50fSopenharmony_ci        return;
391e0dac50fSopenharmony_ci    }
392e0dac50fSopenharmony_ci    if (!data.WriteBool(isPointDown)) {
393e0dac50fSopenharmony_ci        WLOGFE("Write isPointDown failed");
394e0dac50fSopenharmony_ci        return;
395e0dac50fSopenharmony_ci    }
396e0dac50fSopenharmony_ci
397e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
398e0dac50fSopenharmony_ci    if (remote == nullptr) {
399e0dac50fSopenharmony_ci        WLOGFE("remote is null");
400e0dac50fSopenharmony_ci        return;
401e0dac50fSopenharmony_ci    }
402e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_PROCESS_POINT_DOWN),
403e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
404e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
405e0dac50fSopenharmony_ci    }
406e0dac50fSopenharmony_ci}
407e0dac50fSopenharmony_ci
408e0dac50fSopenharmony_civoid WindowManagerProxy::ProcessPointUp(uint32_t windowId)
409e0dac50fSopenharmony_ci{
410e0dac50fSopenharmony_ci    MessageParcel data;
411e0dac50fSopenharmony_ci    MessageParcel reply;
412e0dac50fSopenharmony_ci    MessageOption option;
413e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
414e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
415e0dac50fSopenharmony_ci        return;
416e0dac50fSopenharmony_ci    }
417e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
418e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
419e0dac50fSopenharmony_ci        return;
420e0dac50fSopenharmony_ci    }
421e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
422e0dac50fSopenharmony_ci    if (remote == nullptr) {
423e0dac50fSopenharmony_ci        WLOGFE("remote is null");
424e0dac50fSopenharmony_ci        return;
425e0dac50fSopenharmony_ci    }
426e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_PROCESS_POINT_UP),
427e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
428e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
429e0dac50fSopenharmony_ci    }
430e0dac50fSopenharmony_ci}
431e0dac50fSopenharmony_ci
432e0dac50fSopenharmony_ciWMError WindowManagerProxy::MinimizeAllAppWindows(DisplayId displayId)
433e0dac50fSopenharmony_ci{
434e0dac50fSopenharmony_ci    MessageParcel data;
435e0dac50fSopenharmony_ci    MessageParcel reply;
436e0dac50fSopenharmony_ci    MessageOption option;
437e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
438e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
439e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
440e0dac50fSopenharmony_ci    }
441e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
442e0dac50fSopenharmony_ci        WLOGFE("Write displayId failed");
443e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
444e0dac50fSopenharmony_ci    }
445e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
446e0dac50fSopenharmony_ci    if (remote == nullptr) {
447e0dac50fSopenharmony_ci        WLOGFE("remote is null");
448e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
449e0dac50fSopenharmony_ci    }
450e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_MINIMIZE_ALL_APP_WINDOWS),
451e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
452e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
453e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
454e0dac50fSopenharmony_ci    }
455e0dac50fSopenharmony_ci
456e0dac50fSopenharmony_ci    int32_t ret;
457e0dac50fSopenharmony_ci    if (!reply.ReadInt32(ret)) {
458e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
459e0dac50fSopenharmony_ci    }
460e0dac50fSopenharmony_ci
461e0dac50fSopenharmony_ci    WLOGFE("MinimizeAllAppWindows: %{public}u", ret);
462e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
463e0dac50fSopenharmony_ci}
464e0dac50fSopenharmony_ci
465e0dac50fSopenharmony_ciWMError WindowManagerProxy::ToggleShownStateForAllAppWindows()
466e0dac50fSopenharmony_ci{
467e0dac50fSopenharmony_ci    MessageParcel data;
468e0dac50fSopenharmony_ci    MessageParcel reply;
469e0dac50fSopenharmony_ci    MessageOption option;
470e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
471e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
472e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
473e0dac50fSopenharmony_ci    }
474e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
475e0dac50fSopenharmony_ci    if (remote == nullptr) {
476e0dac50fSopenharmony_ci        WLOGFE("remote is null");
477e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
478e0dac50fSopenharmony_ci    }
479e0dac50fSopenharmony_ci    if (remote->SendRequest(
480e0dac50fSopenharmony_ci        static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_TOGGLE_SHOWN_STATE_FOR_ALL_APP_WINDOWS),
481e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
482e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
483e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
484e0dac50fSopenharmony_ci    }
485e0dac50fSopenharmony_ci    int32_t ret;
486e0dac50fSopenharmony_ci    if (!reply.ReadInt32(ret)) {
487e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
488e0dac50fSopenharmony_ci    }
489e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
490e0dac50fSopenharmony_ci}
491e0dac50fSopenharmony_ci
492e0dac50fSopenharmony_ciWMError WindowManagerProxy::SetWindowLayoutMode(WindowLayoutMode mode)
493e0dac50fSopenharmony_ci{
494e0dac50fSopenharmony_ci    MessageParcel data;
495e0dac50fSopenharmony_ci    MessageParcel reply;
496e0dac50fSopenharmony_ci    MessageOption option;
497e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
498e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
499e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
500e0dac50fSopenharmony_ci    }
501e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(mode))) {
502e0dac50fSopenharmony_ci        WLOGFE("Write mode failed");
503e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
504e0dac50fSopenharmony_ci    }
505e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
506e0dac50fSopenharmony_ci    if (remote == nullptr) {
507e0dac50fSopenharmony_ci        WLOGFE("remote is null");
508e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
509e0dac50fSopenharmony_ci    }
510e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_UPDATE_LAYOUT_MODE),
511e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
512e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
513e0dac50fSopenharmony_ci    }
514e0dac50fSopenharmony_ci
515e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
516e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
517e0dac50fSopenharmony_ci}
518e0dac50fSopenharmony_ci
519e0dac50fSopenharmony_ciWMError WindowManagerProxy::UpdateProperty(sptr<WindowProperty>& windowProperty, PropertyChangeAction action,
520e0dac50fSopenharmony_ci    bool isAsyncTask)
521e0dac50fSopenharmony_ci{
522e0dac50fSopenharmony_ci    MessageParcel data;
523e0dac50fSopenharmony_ci    MessageParcel reply;
524e0dac50fSopenharmony_ci    MessageOption option;
525e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
526e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
527e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
528e0dac50fSopenharmony_ci    }
529e0dac50fSopenharmony_ci
530e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(action))) {
531e0dac50fSopenharmony_ci        WLOGFE("Write PropertyChangeAction failed");
532e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
533e0dac50fSopenharmony_ci    }
534e0dac50fSopenharmony_ci
535e0dac50fSopenharmony_ci    if (!windowProperty || !windowProperty->Write(data, action)) {
536e0dac50fSopenharmony_ci        WLOGFE("Write windowProperty failed");
537e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
538e0dac50fSopenharmony_ci    }
539e0dac50fSopenharmony_ci
540e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
541e0dac50fSopenharmony_ci    if (remote == nullptr) {
542e0dac50fSopenharmony_ci        WLOGFE("remote is null");
543e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
544e0dac50fSopenharmony_ci    }
545e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_UPDATE_PROPERTY),
546e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
547e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
548e0dac50fSopenharmony_ci    }
549e0dac50fSopenharmony_ci
550e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
551e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
552e0dac50fSopenharmony_ci}
553e0dac50fSopenharmony_ci
554e0dac50fSopenharmony_ciWMError WindowManagerProxy::SetWindowGravity(uint32_t windowId, WindowGravity gravity, uint32_t percent)
555e0dac50fSopenharmony_ci{
556e0dac50fSopenharmony_ci    MessageParcel data;
557e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
558e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
559e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
560e0dac50fSopenharmony_ci    }
561e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
562e0dac50fSopenharmony_ci        WLOGFE("Write mainWinId failed");
563e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
564e0dac50fSopenharmony_ci    }
565e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(gravity))) {
566e0dac50fSopenharmony_ci        WLOGFE("Write mainWinId failed");
567e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
568e0dac50fSopenharmony_ci    }
569e0dac50fSopenharmony_ci    if (!data.WriteUint32(percent)) {
570e0dac50fSopenharmony_ci        WLOGFE("Write mainWinId failed");
571e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
572e0dac50fSopenharmony_ci    }
573e0dac50fSopenharmony_ci
574e0dac50fSopenharmony_ci    MessageParcel reply;
575e0dac50fSopenharmony_ci    MessageOption option;
576e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
577e0dac50fSopenharmony_ci    if (remote == nullptr) {
578e0dac50fSopenharmony_ci        WLOGFE("remote is null");
579e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
580e0dac50fSopenharmony_ci    }
581e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_SET_WINDOW_GRAVITY),
582e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
583e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
584e0dac50fSopenharmony_ci    }
585e0dac50fSopenharmony_ci
586e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
587e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
588e0dac50fSopenharmony_ci}
589e0dac50fSopenharmony_ci
590e0dac50fSopenharmony_ci__attribute__((no_sanitize("cfi"))) WMError WindowManagerProxy::GetTopWindowId(
591e0dac50fSopenharmony_ci    uint32_t mainWinId, uint32_t& topWinId)
592e0dac50fSopenharmony_ci{
593e0dac50fSopenharmony_ci    MessageParcel data;
594e0dac50fSopenharmony_ci    MessageParcel reply;
595e0dac50fSopenharmony_ci    MessageOption option;
596e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
597e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
598e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
599e0dac50fSopenharmony_ci    }
600e0dac50fSopenharmony_ci
601e0dac50fSopenharmony_ci    if (!data.WriteUint32(mainWinId)) {
602e0dac50fSopenharmony_ci        WLOGFE("Write mainWinId failed");
603e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
604e0dac50fSopenharmony_ci    }
605e0dac50fSopenharmony_ci
606e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
607e0dac50fSopenharmony_ci    if (remote == nullptr) {
608e0dac50fSopenharmony_ci        WLOGFE("remote is null");
609e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
610e0dac50fSopenharmony_ci    }
611e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_TOP_WINDOW_ID),
612e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
613e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
614e0dac50fSopenharmony_ci    }
615e0dac50fSopenharmony_ci    topWinId = reply.ReadUint32();
616e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
617e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
618e0dac50fSopenharmony_ci}
619e0dac50fSopenharmony_ci
620e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetAccessibilityWindowInfo(std::vector<sptr<AccessibilityWindowInfo>>& infos)
621e0dac50fSopenharmony_ci{
622e0dac50fSopenharmony_ci    MessageParcel data;
623e0dac50fSopenharmony_ci    MessageParcel reply;
624e0dac50fSopenharmony_ci    MessageOption option;
625e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
626e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
627e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
628e0dac50fSopenharmony_ci    }
629e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
630e0dac50fSopenharmony_ci    if (remote == nullptr) {
631e0dac50fSopenharmony_ci        WLOGFE("remote is null");
632e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
633e0dac50fSopenharmony_ci    }
634e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_ACCESSIBILITY_WINDOW_INFO_ID),
635e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
636e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
637e0dac50fSopenharmony_ci    }
638e0dac50fSopenharmony_ci    if (!MarshallingHelper::UnmarshallingVectorParcelableObj<AccessibilityWindowInfo>(reply, infos)) {
639e0dac50fSopenharmony_ci        WLOGFE("read accessibility window infos failed");
640e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
641e0dac50fSopenharmony_ci    }
642e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
643e0dac50fSopenharmony_ci}
644e0dac50fSopenharmony_ci
645e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetUnreliableWindowInfo(int32_t windowId,
646e0dac50fSopenharmony_ci    std::vector<sptr<UnreliableWindowInfo>>& infos)
647e0dac50fSopenharmony_ci{
648e0dac50fSopenharmony_ci    MessageParcel data;
649e0dac50fSopenharmony_ci    MessageParcel reply;
650e0dac50fSopenharmony_ci    MessageOption option;
651e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
652e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
653e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
654e0dac50fSopenharmony_ci    }
655e0dac50fSopenharmony_ci    if (!data.WriteInt32(windowId)) {
656e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
657e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
658e0dac50fSopenharmony_ci    }
659e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
660e0dac50fSopenharmony_ci    if (remote == nullptr) {
661e0dac50fSopenharmony_ci        WLOGFE("remote is null");
662e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
663e0dac50fSopenharmony_ci    }
664e0dac50fSopenharmony_ci    if (remote->SendRequest(
665e0dac50fSopenharmony_ci        static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_UNRELIABLE_WINDOW_INFO_ID),
666e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
667e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
668e0dac50fSopenharmony_ci    }
669e0dac50fSopenharmony_ci    if (!MarshallingHelper::UnmarshallingVectorParcelableObj<UnreliableWindowInfo>(reply, infos)) {
670e0dac50fSopenharmony_ci        WLOGFE("read unreliable window infos failed");
671e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
672e0dac50fSopenharmony_ci    }
673e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
674e0dac50fSopenharmony_ci}
675e0dac50fSopenharmony_ci
676e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetVisibilityWindowInfo(std::vector<sptr<WindowVisibilityInfo>>& infos)
677e0dac50fSopenharmony_ci{
678e0dac50fSopenharmony_ci    MessageParcel data;
679e0dac50fSopenharmony_ci    MessageParcel reply;
680e0dac50fSopenharmony_ci    MessageOption option;
681e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
682e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
683e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
684e0dac50fSopenharmony_ci    }
685e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
686e0dac50fSopenharmony_ci    if (remote == nullptr) {
687e0dac50fSopenharmony_ci        WLOGFE("remote is null");
688e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
689e0dac50fSopenharmony_ci    }
690e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_VISIBILITY_WINDOW_INFO_ID),
691e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
692e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
693e0dac50fSopenharmony_ci    }
694e0dac50fSopenharmony_ci    if (!MarshallingHelper::UnmarshallingVectorParcelableObj<WindowVisibilityInfo>(reply, infos)) {
695e0dac50fSopenharmony_ci        WLOGFE("read visibility window infos failed");
696e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
697e0dac50fSopenharmony_ci    }
698e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
699e0dac50fSopenharmony_ci}
700e0dac50fSopenharmony_ci
701e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetSystemConfig(SystemConfig& systemConfig)
702e0dac50fSopenharmony_ci{
703e0dac50fSopenharmony_ci    MessageParcel data;
704e0dac50fSopenharmony_ci    MessageParcel reply;
705e0dac50fSopenharmony_ci    MessageOption option;
706e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
707e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
708e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
709e0dac50fSopenharmony_ci    }
710e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
711e0dac50fSopenharmony_ci    if (remote == nullptr) {
712e0dac50fSopenharmony_ci        WLOGFE("remote is null");
713e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
714e0dac50fSopenharmony_ci    }
715e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_SYSTEM_CONFIG),
716e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
717e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
718e0dac50fSopenharmony_ci    }
719e0dac50fSopenharmony_ci    sptr<SystemConfig> config = reply.ReadParcelable<SystemConfig>();
720e0dac50fSopenharmony_ci    if (config == nullptr) {
721e0dac50fSopenharmony_ci        WLOGFE("Read SystemConfig failed");
722e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
723e0dac50fSopenharmony_ci    }
724e0dac50fSopenharmony_ci    systemConfig = *config;
725e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
726e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
727e0dac50fSopenharmony_ci}
728e0dac50fSopenharmony_ci
729e0dac50fSopenharmony_ciWMError WindowManagerProxy::NotifyWindowTransition(sptr<WindowTransitionInfo>& from, sptr<WindowTransitionInfo>& to,
730e0dac50fSopenharmony_ci    bool isFromClient)
731e0dac50fSopenharmony_ci{
732e0dac50fSopenharmony_ci    MessageParcel data;
733e0dac50fSopenharmony_ci    MessageParcel reply;
734e0dac50fSopenharmony_ci    MessageOption option;
735e0dac50fSopenharmony_ci
736e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
737e0dac50fSopenharmony_ci        WLOGFE("Failed to WriteInterfaceToken!");
738e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
739e0dac50fSopenharmony_ci    }
740e0dac50fSopenharmony_ci
741e0dac50fSopenharmony_ci    if (!data.WriteParcelable(from)) {
742e0dac50fSopenharmony_ci        WLOGFE("Failed to write from ability window info!");
743e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
744e0dac50fSopenharmony_ci    }
745e0dac50fSopenharmony_ci
746e0dac50fSopenharmony_ci    if (!data.WriteParcelable(to)) {
747e0dac50fSopenharmony_ci        WLOGFE("Failed to write to ability window info!");
748e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
749e0dac50fSopenharmony_ci    }
750e0dac50fSopenharmony_ci
751e0dac50fSopenharmony_ci    if (!data.WriteBool(isFromClient)) {
752e0dac50fSopenharmony_ci        WLOGFE("Failed to write to isFromClient!");
753e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
754e0dac50fSopenharmony_ci    }
755e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
756e0dac50fSopenharmony_ci    if (remote == nullptr) {
757e0dac50fSopenharmony_ci        WLOGFE("remote is null");
758e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
759e0dac50fSopenharmony_ci    }
760e0dac50fSopenharmony_ci    auto error = remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_NOTIFY_WINDOW_TRANSITION),
761e0dac50fSopenharmony_ci        data, reply, option);
762e0dac50fSopenharmony_ci    if (error != ERR_NONE) {
763e0dac50fSopenharmony_ci        WLOGFE("Send request error: %{public}d", static_cast<uint32_t>(error));
764e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
765e0dac50fSopenharmony_ci    }
766e0dac50fSopenharmony_ci    auto ret = static_cast<WMError>(reply.ReadInt32());
767e0dac50fSopenharmony_ci    return ret;
768e0dac50fSopenharmony_ci}
769e0dac50fSopenharmony_ci
770e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetModeChangeHotZones(DisplayId displayId, ModeChangeHotZones& hotZones)
771e0dac50fSopenharmony_ci{
772e0dac50fSopenharmony_ci    MessageParcel data;
773e0dac50fSopenharmony_ci    MessageParcel reply;
774e0dac50fSopenharmony_ci    MessageOption option;
775e0dac50fSopenharmony_ci
776e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
777e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
778e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
779e0dac50fSopenharmony_ci    }
780e0dac50fSopenharmony_ci    if (!data.WriteUint64(displayId)) {
781e0dac50fSopenharmony_ci        WLOGFE("Write displayId failed");
782e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
783e0dac50fSopenharmony_ci    }
784e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
785e0dac50fSopenharmony_ci    if (remote == nullptr) {
786e0dac50fSopenharmony_ci        WLOGFE("remote is null");
787e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
788e0dac50fSopenharmony_ci    }
789e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_FULLSCREEN_AND_SPLIT_HOT_ZONE),
790e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
791e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
792e0dac50fSopenharmony_ci    }
793e0dac50fSopenharmony_ci
794e0dac50fSopenharmony_ci    auto ret = static_cast<WMError>(reply.ReadInt32());
795e0dac50fSopenharmony_ci    if (ret == WMError::WM_OK) {
796e0dac50fSopenharmony_ci        hotZones.fullscreen_.posX_ = reply.ReadInt32();
797e0dac50fSopenharmony_ci        hotZones.fullscreen_.posY_ = reply.ReadInt32();
798e0dac50fSopenharmony_ci        hotZones.fullscreen_.width_ = reply.ReadUint32();
799e0dac50fSopenharmony_ci        hotZones.fullscreen_.height_ = reply.ReadUint32();
800e0dac50fSopenharmony_ci
801e0dac50fSopenharmony_ci        hotZones.primary_.posX_ = reply.ReadInt32();
802e0dac50fSopenharmony_ci        hotZones.primary_.posY_ = reply.ReadInt32();
803e0dac50fSopenharmony_ci        hotZones.primary_.width_ = reply.ReadUint32();
804e0dac50fSopenharmony_ci        hotZones.primary_.height_ = reply.ReadUint32();
805e0dac50fSopenharmony_ci
806e0dac50fSopenharmony_ci        hotZones.secondary_.posX_ = reply.ReadInt32();
807e0dac50fSopenharmony_ci        hotZones.secondary_.posY_ = reply.ReadInt32();
808e0dac50fSopenharmony_ci        hotZones.secondary_.width_ = reply.ReadUint32();
809e0dac50fSopenharmony_ci        hotZones.secondary_.height_ = reply.ReadUint32();
810e0dac50fSopenharmony_ci    }
811e0dac50fSopenharmony_ci    return ret;
812e0dac50fSopenharmony_ci}
813e0dac50fSopenharmony_ci
814e0dac50fSopenharmony_civoid WindowManagerProxy::MinimizeWindowsByLauncher(std::vector<uint32_t> windowIds, bool isAnimated,
815e0dac50fSopenharmony_ci    sptr<RSIWindowAnimationFinishedCallback>& finishCallback)
816e0dac50fSopenharmony_ci{
817e0dac50fSopenharmony_ci    MessageParcel data;
818e0dac50fSopenharmony_ci    MessageParcel reply;
819e0dac50fSopenharmony_ci    MessageOption option;
820e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
821e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
822e0dac50fSopenharmony_ci        return;
823e0dac50fSopenharmony_ci    }
824e0dac50fSopenharmony_ci
825e0dac50fSopenharmony_ci    if (!data.WriteUInt32Vector(windowIds)) {
826e0dac50fSopenharmony_ci        WLOGFE("Write windowIds failed");
827e0dac50fSopenharmony_ci        return;
828e0dac50fSopenharmony_ci    }
829e0dac50fSopenharmony_ci
830e0dac50fSopenharmony_ci    if (!data.WriteBool(isAnimated)) {
831e0dac50fSopenharmony_ci        WLOGFE("Write isAnimated failed");
832e0dac50fSopenharmony_ci        return;
833e0dac50fSopenharmony_ci    }
834e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
835e0dac50fSopenharmony_ci    if (remote == nullptr) {
836e0dac50fSopenharmony_ci        WLOGFE("remote is null");
837e0dac50fSopenharmony_ci        return;
838e0dac50fSopenharmony_ci    }
839e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_ANIMATION_CALLBACK),
840e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
841e0dac50fSopenharmony_ci        WLOGFE("Send request error");
842e0dac50fSopenharmony_ci        return;
843e0dac50fSopenharmony_ci    }
844e0dac50fSopenharmony_ci    if (reply.ReadBool()) {
845e0dac50fSopenharmony_ci        sptr<IRemoteObject> finishCallbackObject = reply.ReadRemoteObject();
846e0dac50fSopenharmony_ci        finishCallback = iface_cast<RSIWindowAnimationFinishedCallback>(finishCallbackObject);
847e0dac50fSopenharmony_ci    } else {
848e0dac50fSopenharmony_ci        finishCallback = nullptr;
849e0dac50fSopenharmony_ci    }
850e0dac50fSopenharmony_ci    return;
851e0dac50fSopenharmony_ci}
852e0dac50fSopenharmony_ci
853e0dac50fSopenharmony_ciWMError WindowManagerProxy::UpdateAvoidAreaListener(uint32_t windowId, bool haveListener)
854e0dac50fSopenharmony_ci{
855e0dac50fSopenharmony_ci    MessageParcel data;
856e0dac50fSopenharmony_ci    MessageParcel reply;
857e0dac50fSopenharmony_ci    MessageOption option;
858e0dac50fSopenharmony_ci
859e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
860e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
861e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
862e0dac50fSopenharmony_ci    }
863e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
864e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
865e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
866e0dac50fSopenharmony_ci    }
867e0dac50fSopenharmony_ci    if (!data.WriteBool(haveListener)) {
868e0dac50fSopenharmony_ci        WLOGFE("Write avoid area listener failed");
869e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
870e0dac50fSopenharmony_ci    }
871e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
872e0dac50fSopenharmony_ci    if (remote == nullptr) {
873e0dac50fSopenharmony_ci        WLOGFE("remote is null");
874e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
875e0dac50fSopenharmony_ci    }
876e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_UPDATE_AVOIDAREA_LISTENER),
877e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
878e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
879e0dac50fSopenharmony_ci    }
880e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
881e0dac50fSopenharmony_ci}
882e0dac50fSopenharmony_ci
883e0dac50fSopenharmony_ciWMError WindowManagerProxy::UpdateRsTree(uint32_t windowId, bool isAdd)
884e0dac50fSopenharmony_ci{
885e0dac50fSopenharmony_ci    MessageParcel data;
886e0dac50fSopenharmony_ci    MessageParcel reply;
887e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
888e0dac50fSopenharmony_ci
889e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
890e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
891e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
892e0dac50fSopenharmony_ci    }
893e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
894e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
895e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
896e0dac50fSopenharmony_ci    }
897e0dac50fSopenharmony_ci    if (!data.WriteBool(isAdd)) {
898e0dac50fSopenharmony_ci        WLOGFE("Write avoid area listener failed");
899e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
900e0dac50fSopenharmony_ci    }
901e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
902e0dac50fSopenharmony_ci    if (remote == nullptr) {
903e0dac50fSopenharmony_ci        WLOGFE("remote is null");
904e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
905e0dac50fSopenharmony_ci    }
906e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_UPDATE_RS_TREE),
907e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
908e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
909e0dac50fSopenharmony_ci    }
910e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
911e0dac50fSopenharmony_ci}
912e0dac50fSopenharmony_ci
913e0dac50fSopenharmony_ciWMError WindowManagerProxy::BindDialogTarget(uint32_t& windowId, sptr<IRemoteObject> targetToken)
914e0dac50fSopenharmony_ci{
915e0dac50fSopenharmony_ci    MessageParcel data;
916e0dac50fSopenharmony_ci    MessageParcel reply;
917e0dac50fSopenharmony_ci    MessageOption option;
918e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
919e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
920e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
921e0dac50fSopenharmony_ci    }
922e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
923e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
924e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
925e0dac50fSopenharmony_ci    }
926e0dac50fSopenharmony_ci    if (targetToken != nullptr) {
927e0dac50fSopenharmony_ci        if (!data.WriteRemoteObject(targetToken)) {
928e0dac50fSopenharmony_ci            WLOGFE("Write targetToken failed");
929e0dac50fSopenharmony_ci            return WMError::WM_ERROR_IPC_FAILED;
930e0dac50fSopenharmony_ci        }
931e0dac50fSopenharmony_ci    }
932e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
933e0dac50fSopenharmony_ci    if (remote == nullptr) {
934e0dac50fSopenharmony_ci        WLOGFE("remote is null");
935e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
936e0dac50fSopenharmony_ci    }
937e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_BIND_DIALOG_TARGET),
938e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
939e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
940e0dac50fSopenharmony_ci    }
941e0dac50fSopenharmony_ci
942e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
943e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
944e0dac50fSopenharmony_ci}
945e0dac50fSopenharmony_ci
946e0dac50fSopenharmony_civoid WindowManagerProxy::SetAnchorAndScale(int32_t x, int32_t y, float scale)
947e0dac50fSopenharmony_ci{
948e0dac50fSopenharmony_ci    MessageParcel data;
949e0dac50fSopenharmony_ci    MessageParcel reply;
950e0dac50fSopenharmony_ci    MessageOption option;
951e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
952e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
953e0dac50fSopenharmony_ci        return;
954e0dac50fSopenharmony_ci    }
955e0dac50fSopenharmony_ci    if (!data.WriteInt32(x)) {
956e0dac50fSopenharmony_ci        WLOGFE("Write anchor x failed");
957e0dac50fSopenharmony_ci        return;
958e0dac50fSopenharmony_ci    }
959e0dac50fSopenharmony_ci    if (!data.WriteInt32(y)) {
960e0dac50fSopenharmony_ci        WLOGFE("Write anchor y failed");
961e0dac50fSopenharmony_ci        return;
962e0dac50fSopenharmony_ci    }
963e0dac50fSopenharmony_ci    if (!data.WriteFloat(scale)) {
964e0dac50fSopenharmony_ci        WLOGFE("Write scale failed");
965e0dac50fSopenharmony_ci        return;
966e0dac50fSopenharmony_ci    }
967e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
968e0dac50fSopenharmony_ci    if (remote == nullptr) {
969e0dac50fSopenharmony_ci        WLOGFE("remote is null");
970e0dac50fSopenharmony_ci        return;
971e0dac50fSopenharmony_ci    }
972e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_SET_ANCHOR_AND_SCALE),
973e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
974e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
975e0dac50fSopenharmony_ci    }
976e0dac50fSopenharmony_ci}
977e0dac50fSopenharmony_ci
978e0dac50fSopenharmony_civoid WindowManagerProxy::SetAnchorOffset(int32_t deltaX, int32_t deltaY)
979e0dac50fSopenharmony_ci{
980e0dac50fSopenharmony_ci    MessageParcel data;
981e0dac50fSopenharmony_ci    MessageParcel reply;
982e0dac50fSopenharmony_ci    MessageOption option;
983e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
984e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
985e0dac50fSopenharmony_ci        return;
986e0dac50fSopenharmony_ci    }
987e0dac50fSopenharmony_ci    if (!data.WriteInt32(deltaX)) {
988e0dac50fSopenharmony_ci        WLOGFE("Write anchor delatX failed");
989e0dac50fSopenharmony_ci        return;
990e0dac50fSopenharmony_ci    }
991e0dac50fSopenharmony_ci    if (!data.WriteInt32(deltaY)) {
992e0dac50fSopenharmony_ci        WLOGFE("Write anchor deltaY failed");
993e0dac50fSopenharmony_ci        return;
994e0dac50fSopenharmony_ci    }
995e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
996e0dac50fSopenharmony_ci    if (remote == nullptr) {
997e0dac50fSopenharmony_ci        WLOGFE("remote is null");
998e0dac50fSopenharmony_ci        return;
999e0dac50fSopenharmony_ci    }
1000e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_SET_ANCHOR_OFFSET),
1001e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1002e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1003e0dac50fSopenharmony_ci    }
1004e0dac50fSopenharmony_ci}
1005e0dac50fSopenharmony_ci
1006e0dac50fSopenharmony_civoid WindowManagerProxy::OffWindowZoom()
1007e0dac50fSopenharmony_ci{
1008e0dac50fSopenharmony_ci    MessageParcel data;
1009e0dac50fSopenharmony_ci    MessageParcel reply;
1010e0dac50fSopenharmony_ci    MessageOption option;
1011e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1012e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1013e0dac50fSopenharmony_ci        return;
1014e0dac50fSopenharmony_ci    }
1015e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1016e0dac50fSopenharmony_ci    if (remote == nullptr) {
1017e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1018e0dac50fSopenharmony_ci        return;
1019e0dac50fSopenharmony_ci    }
1020e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_OFF_WINDOW_ZOOM),
1021e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1022e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1023e0dac50fSopenharmony_ci    }
1024e0dac50fSopenharmony_ci}
1025e0dac50fSopenharmony_ci
1026e0dac50fSopenharmony_ci/** @note @window.hierarchy */
1027e0dac50fSopenharmony_ciWMError WindowManagerProxy::RaiseToAppTop(uint32_t windowId)
1028e0dac50fSopenharmony_ci{
1029e0dac50fSopenharmony_ci    MessageParcel data;
1030e0dac50fSopenharmony_ci    MessageParcel reply;
1031e0dac50fSopenharmony_ci    MessageOption option;
1032e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1033e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1034e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1035e0dac50fSopenharmony_ci    }
1036e0dac50fSopenharmony_ci
1037e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
1038e0dac50fSopenharmony_ci        WLOGFE("Write anchor delatX failed");
1039e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1040e0dac50fSopenharmony_ci    }
1041e0dac50fSopenharmony_ci
1042e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1043e0dac50fSopenharmony_ci    if (remote == nullptr) {
1044e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1045e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1046e0dac50fSopenharmony_ci    }
1047e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_RAISE_WINDOW_Z_ORDER),
1048e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1049e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1050e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1051e0dac50fSopenharmony_ci    }
1052e0dac50fSopenharmony_ci    return WMError::WM_OK;
1053e0dac50fSopenharmony_ci}
1054e0dac50fSopenharmony_ci
1055e0dac50fSopenharmony_cistd::shared_ptr<Media::PixelMap> WindowManagerProxy::GetSnapshot(int32_t windowId)
1056e0dac50fSopenharmony_ci{
1057e0dac50fSopenharmony_ci    MessageParcel data;
1058e0dac50fSopenharmony_ci    MessageParcel reply;
1059e0dac50fSopenharmony_ci    MessageOption option;
1060e0dac50fSopenharmony_ci
1061e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1062e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1063e0dac50fSopenharmony_ci        return nullptr;
1064e0dac50fSopenharmony_ci    }
1065e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
1066e0dac50fSopenharmony_ci        WLOGFE("Write windowId failed");
1067e0dac50fSopenharmony_ci        return nullptr;
1068e0dac50fSopenharmony_ci    }
1069e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1070e0dac50fSopenharmony_ci    if (remote == nullptr) {
1071e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1072e0dac50fSopenharmony_ci        return nullptr;
1073e0dac50fSopenharmony_ci    }
1074e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_SNAPSHOT),
1075e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1076e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1077e0dac50fSopenharmony_ci        return nullptr;
1078e0dac50fSopenharmony_ci    }
1079e0dac50fSopenharmony_ci
1080e0dac50fSopenharmony_ci    std::shared_ptr<Media::PixelMap> map(reply.ReadParcelable<Media::PixelMap>());
1081e0dac50fSopenharmony_ci    if (map == nullptr) {
1082e0dac50fSopenharmony_ci        WLOGFE("Read pixelMap is null");
1083e0dac50fSopenharmony_ci        return nullptr;
1084e0dac50fSopenharmony_ci    }
1085e0dac50fSopenharmony_ci    return map;
1086e0dac50fSopenharmony_ci}
1087e0dac50fSopenharmony_ci
1088e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetSnapshotByWindowId(int32_t persistentId, std::shared_ptr<Media::PixelMap>& pixelMap)
1089e0dac50fSopenharmony_ci{
1090e0dac50fSopenharmony_ci    pixelMap = GetSnapshot(persistentId);
1091e0dac50fSopenharmony_ci    if (pixelMap == nullptr) {
1092e0dac50fSopenharmony_ci        WLOGFE("Get snapshot is nullptr");
1093e0dac50fSopenharmony_ci        return WMError::WM_ERROR_NULLPTR;
1094e0dac50fSopenharmony_ci    }
1095e0dac50fSopenharmony_ci    return WMError::WM_OK;
1096e0dac50fSopenharmony_ci}
1097e0dac50fSopenharmony_ci
1098e0dac50fSopenharmony_ciWMError WindowManagerProxy::SetGestureNavigationEnabled(bool enable)
1099e0dac50fSopenharmony_ci{
1100e0dac50fSopenharmony_ci    MessageParcel data;
1101e0dac50fSopenharmony_ci    MessageParcel reply;
1102e0dac50fSopenharmony_ci    MessageOption option;
1103e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1104e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1105e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1106e0dac50fSopenharmony_ci    }
1107e0dac50fSopenharmony_ci
1108e0dac50fSopenharmony_ci    if (!data.WriteBool(enable)) {
1109e0dac50fSopenharmony_ci        WLOGFE("Write anchor delatX failed");
1110e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1111e0dac50fSopenharmony_ci    }
1112e0dac50fSopenharmony_ci
1113e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1114e0dac50fSopenharmony_ci    if (remote == nullptr) {
1115e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1116e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1117e0dac50fSopenharmony_ci    }
1118e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GESTURE_NAVIGATION_ENABLED),
1119e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1120e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1121e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1122e0dac50fSopenharmony_ci    }
1123e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
1124e0dac50fSopenharmony_ci    return static_cast<WMError>(ret);
1125e0dac50fSopenharmony_ci}
1126e0dac50fSopenharmony_ci
1127e0dac50fSopenharmony_civoid WindowManagerProxy::DispatchKeyEvent(uint32_t windowId, std::shared_ptr<MMI::KeyEvent> event)
1128e0dac50fSopenharmony_ci{
1129e0dac50fSopenharmony_ci    MessageParcel data;
1130e0dac50fSopenharmony_ci    MessageParcel reply;
1131e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
1132e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1133e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1134e0dac50fSopenharmony_ci        return;
1135e0dac50fSopenharmony_ci    }
1136e0dac50fSopenharmony_ci    if (!data.WriteUint32(windowId)) {
1137e0dac50fSopenharmony_ci        WLOGFE("Write anchor delatX failed");
1138e0dac50fSopenharmony_ci        return;
1139e0dac50fSopenharmony_ci    }
1140e0dac50fSopenharmony_ci    if (!event || !event->WriteToParcel(data)) {
1141e0dac50fSopenharmony_ci        WLOGFE("Write event faild");
1142e0dac50fSopenharmony_ci        return;
1143e0dac50fSopenharmony_ci    }
1144e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1145e0dac50fSopenharmony_ci    if (remote == nullptr) {
1146e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1147e0dac50fSopenharmony_ci        return;
1148e0dac50fSopenharmony_ci    }
1149e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_DISPATCH_KEY_EVENT),
1150e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1151e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1152e0dac50fSopenharmony_ci        return;
1153e0dac50fSopenharmony_ci    }
1154e0dac50fSopenharmony_ci}
1155e0dac50fSopenharmony_ci
1156e0dac50fSopenharmony_civoid WindowManagerProxy::NotifyDumpInfoResult(const std::vector<std::string>& info)
1157e0dac50fSopenharmony_ci{
1158e0dac50fSopenharmony_ci    MessageParcel data;
1159e0dac50fSopenharmony_ci    MessageParcel reply;
1160e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
1161e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1162e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken pfailed");
1163e0dac50fSopenharmony_ci        return;
1164e0dac50fSopenharmony_ci    }
1165e0dac50fSopenharmony_ci    if (!data.WriteStringVector(info)) {
1166e0dac50fSopenharmony_ci        WLOGFE("Write info failed");
1167e0dac50fSopenharmony_ci        return;
1168e0dac50fSopenharmony_ci    }
1169e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1170e0dac50fSopenharmony_ci    if (remote == nullptr) {
1171e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1172e0dac50fSopenharmony_ci        return;
1173e0dac50fSopenharmony_ci    }
1174e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_NOTIFY_DUMP_INFO_RESULT),
1175e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1176e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1177e0dac50fSopenharmony_ci        return;
1178e0dac50fSopenharmony_ci    }
1179e0dac50fSopenharmony_ci}
1180e0dac50fSopenharmony_ci
1181e0dac50fSopenharmony_ciWMError WindowManagerProxy::GetWindowAnimationTargets(std::vector<uint32_t> missionIds,
1182e0dac50fSopenharmony_ci    std::vector<sptr<RSWindowAnimationTarget>>& targets)
1183e0dac50fSopenharmony_ci{
1184e0dac50fSopenharmony_ci    MessageParcel data;
1185e0dac50fSopenharmony_ci    MessageParcel reply;
1186e0dac50fSopenharmony_ci    MessageOption option;
1187e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1188e0dac50fSopenharmony_ci        WLOGFE("write interfaceToken failed");
1189e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1190e0dac50fSopenharmony_ci    }
1191e0dac50fSopenharmony_ci    if (!data.WriteUInt32Vector(missionIds)) {
1192e0dac50fSopenharmony_ci        WLOGFE("Write missionIds failed");
1193e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1194e0dac50fSopenharmony_ci    }
1195e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1196e0dac50fSopenharmony_ci    if (remote == nullptr) {
1197e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1198e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1199e0dac50fSopenharmony_ci    }
1200e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_WINDOW_ANIMATION_TARGETS),
1201e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1202e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1203e0dac50fSopenharmony_ci    }
1204e0dac50fSopenharmony_ci    if (!MarshallingHelper::UnmarshallingVectorParcelableObj<RSWindowAnimationTarget>(reply, targets)) {
1205e0dac50fSopenharmony_ci        WLOGFE("read window animation targets failed");
1206e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
1207e0dac50fSopenharmony_ci    }
1208e0dac50fSopenharmony_ci    return static_cast<WMError>(reply.ReadInt32());
1209e0dac50fSopenharmony_ci}
1210e0dac50fSopenharmony_ci
1211e0dac50fSopenharmony_civoid WindowManagerProxy::SetMaximizeMode(MaximizeMode maximizeMode)
1212e0dac50fSopenharmony_ci{
1213e0dac50fSopenharmony_ci    MessageParcel data;
1214e0dac50fSopenharmony_ci    MessageOption option;
1215e0dac50fSopenharmony_ci    MessageParcel reply;
1216e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1217e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed!");
1218e0dac50fSopenharmony_ci        return;
1219e0dac50fSopenharmony_ci    }
1220e0dac50fSopenharmony_ci    if (!data.WriteInt32(static_cast<uint32_t>(maximizeMode))) {
1221e0dac50fSopenharmony_ci        WLOGFE("Write maximizeMode failed");
1222e0dac50fSopenharmony_ci        return;
1223e0dac50fSopenharmony_ci    }
1224e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1225e0dac50fSopenharmony_ci    if (remote == nullptr) {
1226e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1227e0dac50fSopenharmony_ci        return;
1228e0dac50fSopenharmony_ci    }
1229e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_SET_MAXIMIZE_MODE),
1230e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1231e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1232e0dac50fSopenharmony_ci    }
1233e0dac50fSopenharmony_ci}
1234e0dac50fSopenharmony_ci
1235e0dac50fSopenharmony_ciMaximizeMode WindowManagerProxy::GetMaximizeMode()
1236e0dac50fSopenharmony_ci{
1237e0dac50fSopenharmony_ci    MessageParcel data;
1238e0dac50fSopenharmony_ci    MessageParcel reply;
1239e0dac50fSopenharmony_ci    MessageOption option;
1240e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1241e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1242e0dac50fSopenharmony_ci        return MaximizeMode::MODE_FULL_FILL;
1243e0dac50fSopenharmony_ci    }
1244e0dac50fSopenharmony_ci
1245e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1246e0dac50fSopenharmony_ci    if (remote == nullptr) {
1247e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1248e0dac50fSopenharmony_ci        return MaximizeMode::MODE_FULL_FILL;
1249e0dac50fSopenharmony_ci    }
1250e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_MAXIMIZE_MODE),
1251e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1252e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1253e0dac50fSopenharmony_ci        return MaximizeMode::MODE_FULL_FILL;
1254e0dac50fSopenharmony_ci    }
1255e0dac50fSopenharmony_ci    int32_t ret = reply.ReadInt32();
1256e0dac50fSopenharmony_ci    return static_cast<MaximizeMode>(ret);
1257e0dac50fSopenharmony_ci}
1258e0dac50fSopenharmony_ci
1259e0dac50fSopenharmony_civoid WindowManagerProxy::GetFocusWindowInfo(FocusChangeInfo& focusInfo)
1260e0dac50fSopenharmony_ci{
1261e0dac50fSopenharmony_ci    MessageParcel data;
1262e0dac50fSopenharmony_ci    MessageParcel reply;
1263e0dac50fSopenharmony_ci    MessageOption option;
1264e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
1265e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
1266e0dac50fSopenharmony_ci        return;
1267e0dac50fSopenharmony_ci    }
1268e0dac50fSopenharmony_ci
1269e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
1270e0dac50fSopenharmony_ci    if (remote == nullptr) {
1271e0dac50fSopenharmony_ci        WLOGFE("remote is null");
1272e0dac50fSopenharmony_ci        return;
1273e0dac50fSopenharmony_ci    }
1274e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowManagerMessage::TRANS_ID_GET_FOCUS_WINDOW_INFO),
1275e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
1276e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
1277e0dac50fSopenharmony_ci        return;
1278e0dac50fSopenharmony_ci    }
1279e0dac50fSopenharmony_ci    sptr<FocusChangeInfo> info = reply.ReadParcelable<FocusChangeInfo>();
1280e0dac50fSopenharmony_ci    if (info != nullptr) {
1281e0dac50fSopenharmony_ci        focusInfo = *info;
1282e0dac50fSopenharmony_ci    }
1283e0dac50fSopenharmony_ci}
1284e0dac50fSopenharmony_ci} // namespace Rosen
1285e0dac50fSopenharmony_ci} // namespace OHOS
1286