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_proxy.h"
17e0dac50fSopenharmony_ci#include <ipc_types.h>
18e0dac50fSopenharmony_ci#include <key_event.h>
19e0dac50fSopenharmony_ci#include "pointer_event.h"
20e0dac50fSopenharmony_ci#include "message_option.h"
21e0dac50fSopenharmony_ci#include "window_manager_hilog.h"
22e0dac50fSopenharmony_ci#include "wm_common.h"
23e0dac50fSopenharmony_ci
24e0dac50fSopenharmony_cinamespace OHOS {
25e0dac50fSopenharmony_cinamespace Rosen {
26e0dac50fSopenharmony_cinamespace {
27e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowProxy"};
28e0dac50fSopenharmony_ci}
29e0dac50fSopenharmony_ci
30e0dac50fSopenharmony_ciWMError WindowProxy::UpdateWindowRect(const struct Rect& rect, bool decoStatus, WindowSizeChangeReason reason,
31e0dac50fSopenharmony_ci    const std::shared_ptr<RSTransaction>& rsTransaction)
32e0dac50fSopenharmony_ci{
33e0dac50fSopenharmony_ci    MessageParcel data;
34e0dac50fSopenharmony_ci    MessageParcel reply;
35e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
36e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
37e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
38e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
39e0dac50fSopenharmony_ci    }
40e0dac50fSopenharmony_ci    if (!(data.WriteInt32(rect.posX_) && data.WriteInt32(rect.posY_) &&
41e0dac50fSopenharmony_ci        data.WriteUint32(rect.width_) && data.WriteUint32(rect.height_))) {
42e0dac50fSopenharmony_ci        WLOGFE("Write WindowRect failed");
43e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
44e0dac50fSopenharmony_ci    }
45e0dac50fSopenharmony_ci    if (!data.WriteBool(decoStatus)) {
46e0dac50fSopenharmony_ci        WLOGFE("Write deco status failed");
47e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
48e0dac50fSopenharmony_ci    }
49e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(reason))) {
50e0dac50fSopenharmony_ci        WLOGFE("Write WindowSizeChangeReason failed");
51e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
52e0dac50fSopenharmony_ci    }
53e0dac50fSopenharmony_ci
54e0dac50fSopenharmony_ci    bool hasRSTransaction = rsTransaction != nullptr;
55e0dac50fSopenharmony_ci    if (!data.WriteBool(hasRSTransaction)) {
56e0dac50fSopenharmony_ci        WLOGFE("Write transaction sync Id failed");
57e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
58e0dac50fSopenharmony_ci    }
59e0dac50fSopenharmony_ci    if (hasRSTransaction) {
60e0dac50fSopenharmony_ci        if (!data.WriteParcelable(rsTransaction.get())) {
61e0dac50fSopenharmony_ci            WLOGFE("Write transaction sync Id failed");
62e0dac50fSopenharmony_ci            return WMError::WM_ERROR_IPC_FAILED;
63e0dac50fSopenharmony_ci        }
64e0dac50fSopenharmony_ci    }
65e0dac50fSopenharmony_ci
66e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
67e0dac50fSopenharmony_ci    if (remote == nullptr) {
68e0dac50fSopenharmony_ci        WLOGFE("remote is null");
69e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
70e0dac50fSopenharmony_ci    }
71e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_WINDOW_RECT),
72e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
73e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
74e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
75e0dac50fSopenharmony_ci    }
76e0dac50fSopenharmony_ci    return WMError::WM_OK;
77e0dac50fSopenharmony_ci}
78e0dac50fSopenharmony_ci
79e0dac50fSopenharmony_ciWMError WindowProxy::UpdateWindowMode(WindowMode mode)
80e0dac50fSopenharmony_ci{
81e0dac50fSopenharmony_ci    MessageParcel data;
82e0dac50fSopenharmony_ci    MessageParcel reply;
83e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
84e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
85e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
86e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
87e0dac50fSopenharmony_ci    }
88e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(mode))) {
89e0dac50fSopenharmony_ci        WLOGFE("Write WindowMode failed");
90e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
91e0dac50fSopenharmony_ci    }
92e0dac50fSopenharmony_ci
93e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
94e0dac50fSopenharmony_ci    if (remote == nullptr) {
95e0dac50fSopenharmony_ci        WLOGFE("remote is null");
96e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
97e0dac50fSopenharmony_ci    }
98e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_WINDOW_MODE),
99e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
100e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
101e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
102e0dac50fSopenharmony_ci    }
103e0dac50fSopenharmony_ci    return WMError::WM_OK;
104e0dac50fSopenharmony_ci}
105e0dac50fSopenharmony_ci
106e0dac50fSopenharmony_ciWMError WindowProxy::UpdateWindowModeSupportInfo(uint32_t modeSupportInfo)
107e0dac50fSopenharmony_ci{
108e0dac50fSopenharmony_ci    MessageParcel data;
109e0dac50fSopenharmony_ci    MessageParcel reply;
110e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
111e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
112e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
113e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
114e0dac50fSopenharmony_ci    }
115e0dac50fSopenharmony_ci    if (!data.WriteUint32(modeSupportInfo)) {
116e0dac50fSopenharmony_ci        WLOGFE("Write WindowMode failed");
117e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
118e0dac50fSopenharmony_ci    }
119e0dac50fSopenharmony_ci
120e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
121e0dac50fSopenharmony_ci    if (remote == nullptr) {
122e0dac50fSopenharmony_ci        WLOGFE("remote is null");
123e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
124e0dac50fSopenharmony_ci    }
125e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_MODE_SUPPORT_INFO),
126e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
127e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
128e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
129e0dac50fSopenharmony_ci    }
130e0dac50fSopenharmony_ci    return WMError::WM_OK;
131e0dac50fSopenharmony_ci}
132e0dac50fSopenharmony_ci
133e0dac50fSopenharmony_ciWMError WindowProxy::UpdateFocusStatus(bool focused)
134e0dac50fSopenharmony_ci{
135e0dac50fSopenharmony_ci    MessageParcel data;
136e0dac50fSopenharmony_ci    MessageParcel reply;
137e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
138e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
139e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
140e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
141e0dac50fSopenharmony_ci    }
142e0dac50fSopenharmony_ci    if (!data.WriteBool(focused)) {
143e0dac50fSopenharmony_ci        WLOGFE("Write Focus failed");
144e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
145e0dac50fSopenharmony_ci    }
146e0dac50fSopenharmony_ci
147e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
148e0dac50fSopenharmony_ci    if (remote == nullptr) {
149e0dac50fSopenharmony_ci        WLOGFE("remote is null");
150e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
151e0dac50fSopenharmony_ci    }
152e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_FOCUS_STATUS),
153e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
154e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
155e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
156e0dac50fSopenharmony_ci    }
157e0dac50fSopenharmony_ci    return WMError::WM_OK;
158e0dac50fSopenharmony_ci}
159e0dac50fSopenharmony_ci
160e0dac50fSopenharmony_ciWMError WindowProxy::UpdateAvoidArea(const sptr<AvoidArea>& avoidArea, AvoidAreaType type)
161e0dac50fSopenharmony_ci{
162e0dac50fSopenharmony_ci    MessageParcel data;
163e0dac50fSopenharmony_ci    MessageParcel reply;
164e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
165e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
166e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
167e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
168e0dac50fSopenharmony_ci    }
169e0dac50fSopenharmony_ci    if (!data.WriteStrongParcelable(avoidArea)) {
170e0dac50fSopenharmony_ci        WLOGFE("Write WindowRect failed");
171e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
172e0dac50fSopenharmony_ci    }
173e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(type))) {
174e0dac50fSopenharmony_ci        WLOGFE("Write AvoidAreaType failed");
175e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
176e0dac50fSopenharmony_ci    }
177e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
178e0dac50fSopenharmony_ci    if (remote == nullptr) {
179e0dac50fSopenharmony_ci        WLOGFE("remote is null");
180e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
181e0dac50fSopenharmony_ci    }
182e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_AVOID_AREA),
183e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
184e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
185e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
186e0dac50fSopenharmony_ci    }
187e0dac50fSopenharmony_ci    return WMError::WM_OK;
188e0dac50fSopenharmony_ci}
189e0dac50fSopenharmony_ci
190e0dac50fSopenharmony_ciWMError WindowProxy::UpdateWindowState(WindowState state)
191e0dac50fSopenharmony_ci{
192e0dac50fSopenharmony_ci    MessageParcel data;
193e0dac50fSopenharmony_ci    MessageParcel reply;
194e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
195e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
196e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
197e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
198e0dac50fSopenharmony_ci    }
199e0dac50fSopenharmony_ci
200e0dac50fSopenharmony_ci    if (!data.WriteUint32(static_cast<uint32_t>(state))) {
201e0dac50fSopenharmony_ci        WLOGFE("Write isStopped");
202e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
203e0dac50fSopenharmony_ci    }
204e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
205e0dac50fSopenharmony_ci    if (remote == nullptr) {
206e0dac50fSopenharmony_ci        WLOGFE("remote is null");
207e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
208e0dac50fSopenharmony_ci    }
209e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_WINDOW_STATE),
210e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
211e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
212e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
213e0dac50fSopenharmony_ci    }
214e0dac50fSopenharmony_ci    return WMError::WM_OK;
215e0dac50fSopenharmony_ci}
216e0dac50fSopenharmony_ci
217e0dac50fSopenharmony_ciWMError WindowProxy::UpdateWindowDragInfo(const PointInfo& point, DragEvent event)
218e0dac50fSopenharmony_ci{
219e0dac50fSopenharmony_ci    MessageParcel data;
220e0dac50fSopenharmony_ci    MessageParcel reply;
221e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
222e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
223e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
224e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
225e0dac50fSopenharmony_ci    }
226e0dac50fSopenharmony_ci    if (!(data.WriteInt32(point.x) and data.WriteInt32(point.y))) {
227e0dac50fSopenharmony_ci        WLOGFE("Write pos failed");
228e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
229e0dac50fSopenharmony_ci    }
230e0dac50fSopenharmony_ci    if (!data.WriteInt32(static_cast<uint32_t>(event))) {
231e0dac50fSopenharmony_ci        WLOGFE("Write event failed");
232e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
233e0dac50fSopenharmony_ci    }
234e0dac50fSopenharmony_ci
235e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
236e0dac50fSopenharmony_ci    if (remote == nullptr) {
237e0dac50fSopenharmony_ci        WLOGFE("remote is null");
238e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
239e0dac50fSopenharmony_ci    }
240e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_DRAG_EVENT),
241e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
242e0dac50fSopenharmony_ci        WLOGFE("SendRequest TRANS_ID_UPDATE_DRAG_EVENT failed");
243e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
244e0dac50fSopenharmony_ci    }
245e0dac50fSopenharmony_ci    return WMError::WM_OK;
246e0dac50fSopenharmony_ci}
247e0dac50fSopenharmony_ci
248e0dac50fSopenharmony_ciWMError WindowProxy::UpdateDisplayId(DisplayId from, DisplayId to)
249e0dac50fSopenharmony_ci{
250e0dac50fSopenharmony_ci    MessageParcel data;
251e0dac50fSopenharmony_ci    MessageParcel reply;
252e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
253e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
254e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
255e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
256e0dac50fSopenharmony_ci    }
257e0dac50fSopenharmony_ci    if (!(data.WriteUint64(from) and data.WriteUint64(to))) {
258e0dac50fSopenharmony_ci        WLOGFE("Write displayid failed");
259e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
260e0dac50fSopenharmony_ci    }
261e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
262e0dac50fSopenharmony_ci    if (remote == nullptr) {
263e0dac50fSopenharmony_ci        WLOGFE("remote is null");
264e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
265e0dac50fSopenharmony_ci    }
266e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_DISPLAY_ID),
267e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
268e0dac50fSopenharmony_ci        WLOGFE("SendRequest TRANS_ID_UPDATE_DISPLAY_ID failed");
269e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
270e0dac50fSopenharmony_ci    }
271e0dac50fSopenharmony_ci    return WMError::WM_OK;
272e0dac50fSopenharmony_ci}
273e0dac50fSopenharmony_ci
274e0dac50fSopenharmony_ciWMError WindowProxy::UpdateOccupiedAreaChangeInfo(const sptr<OccupiedAreaChangeInfo>& info,
275e0dac50fSopenharmony_ci    const std::shared_ptr<RSTransaction>& rsTransaction)
276e0dac50fSopenharmony_ci{
277e0dac50fSopenharmony_ci    MessageParcel data;
278e0dac50fSopenharmony_ci    MessageParcel reply;
279e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
280e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
281e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
282e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
283e0dac50fSopenharmony_ci    }
284e0dac50fSopenharmony_ci    if (!data.WriteParcelable(info)) {
285e0dac50fSopenharmony_ci        WLOGFE("Write OccupiedAreaChangeInfo failed");
286e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
287e0dac50fSopenharmony_ci    }
288e0dac50fSopenharmony_ci
289e0dac50fSopenharmony_ci    bool hasRSTransaction = rsTransaction != nullptr;
290e0dac50fSopenharmony_ci    if (!data.WriteBool(hasRSTransaction)) {
291e0dac50fSopenharmony_ci        WLOGFE("Write transaction sync Id failed");
292e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
293e0dac50fSopenharmony_ci    }
294e0dac50fSopenharmony_ci    if (hasRSTransaction) {
295e0dac50fSopenharmony_ci        if (!data.WriteParcelable(rsTransaction.get())) {
296e0dac50fSopenharmony_ci            WLOGFE("Write transaction sync Id failed");
297e0dac50fSopenharmony_ci            return WMError::WM_ERROR_IPC_FAILED;
298e0dac50fSopenharmony_ci        }
299e0dac50fSopenharmony_ci    }
300e0dac50fSopenharmony_ci
301e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
302e0dac50fSopenharmony_ci    if (remote == nullptr) {
303e0dac50fSopenharmony_ci        WLOGFE("remote is null");
304e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
305e0dac50fSopenharmony_ci    }
306e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_OCCUPIED_AREA),
307e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
308e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
309e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
310e0dac50fSopenharmony_ci    }
311e0dac50fSopenharmony_ci    return WMError::WM_OK;
312e0dac50fSopenharmony_ci}
313e0dac50fSopenharmony_ci
314e0dac50fSopenharmony_ciWMError WindowProxy::UpdateOccupiedAreaAndRect(const sptr<OccupiedAreaChangeInfo>& info, const Rect& rect,
315e0dac50fSopenharmony_ci    const std::shared_ptr<RSTransaction>& rsTransaction)
316e0dac50fSopenharmony_ci{
317e0dac50fSopenharmony_ci    MessageParcel data;
318e0dac50fSopenharmony_ci    MessageParcel reply;
319e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
320e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
321e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
322e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
323e0dac50fSopenharmony_ci    }
324e0dac50fSopenharmony_ci    if (!data.WriteParcelable(info)) {
325e0dac50fSopenharmony_ci        WLOGFE("Write OccupiedAreaChangeInfo failed");
326e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
327e0dac50fSopenharmony_ci    }
328e0dac50fSopenharmony_ci
329e0dac50fSopenharmony_ci    if (!(data.WriteInt32(rect.posX_) && data.WriteInt32(rect.posY_) &&
330e0dac50fSopenharmony_ci        data.WriteUint32(rect.width_) && data.WriteUint32(rect.height_))) {
331e0dac50fSopenharmony_ci        WLOGFE("Write WindowRect failed");
332e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
333e0dac50fSopenharmony_ci    }
334e0dac50fSopenharmony_ci
335e0dac50fSopenharmony_ci    bool hasRSTransaction = rsTransaction != nullptr;
336e0dac50fSopenharmony_ci    if (!data.WriteBool(hasRSTransaction)) {
337e0dac50fSopenharmony_ci        WLOGFE("Write transaction sync Id failed");
338e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
339e0dac50fSopenharmony_ci    }
340e0dac50fSopenharmony_ci    if (hasRSTransaction) {
341e0dac50fSopenharmony_ci        if (!data.WriteParcelable(rsTransaction.get())) {
342e0dac50fSopenharmony_ci            WLOGFE("Write transaction sync Id failed");
343e0dac50fSopenharmony_ci            return WMError::WM_ERROR_IPC_FAILED;
344e0dac50fSopenharmony_ci        }
345e0dac50fSopenharmony_ci    }
346e0dac50fSopenharmony_ci
347e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
348e0dac50fSopenharmony_ci    if (remote == nullptr) {
349e0dac50fSopenharmony_ci        WLOGFE("remote is null");
350e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
351e0dac50fSopenharmony_ci    }
352e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_OCCUPIED_AREA_AND_RECT),
353e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
354e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
355e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
356e0dac50fSopenharmony_ci    }
357e0dac50fSopenharmony_ci    return WMError::WM_OK;
358e0dac50fSopenharmony_ci}
359e0dac50fSopenharmony_ci
360e0dac50fSopenharmony_ciWMError WindowProxy::UpdateActiveStatus(bool isActive)
361e0dac50fSopenharmony_ci{
362e0dac50fSopenharmony_ci    MessageParcel data;
363e0dac50fSopenharmony_ci    MessageParcel reply;
364e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
365e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
366e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
367e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
368e0dac50fSopenharmony_ci    }
369e0dac50fSopenharmony_ci    if (!data.WriteBool(isActive)) {
370e0dac50fSopenharmony_ci        WLOGFE("Write Focus failed");
371e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
372e0dac50fSopenharmony_ci    }
373e0dac50fSopenharmony_ci
374e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
375e0dac50fSopenharmony_ci    if (remote == nullptr) {
376e0dac50fSopenharmony_ci        WLOGFE("remote is null");
377e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
378e0dac50fSopenharmony_ci    }
379e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_ACTIVE_STATUS),
380e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
381e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
382e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
383e0dac50fSopenharmony_ci    }
384e0dac50fSopenharmony_ci    return WMError::WM_OK;
385e0dac50fSopenharmony_ci}
386e0dac50fSopenharmony_ci
387e0dac50fSopenharmony_cisptr<WindowProperty> WindowProxy::GetWindowProperty()
388e0dac50fSopenharmony_ci{
389e0dac50fSopenharmony_ci    MessageParcel data;
390e0dac50fSopenharmony_ci    MessageParcel reply;
391e0dac50fSopenharmony_ci    MessageOption option;
392e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
393e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
394e0dac50fSopenharmony_ci        return nullptr;
395e0dac50fSopenharmony_ci    }
396e0dac50fSopenharmony_ci    uint32_t requestCode = static_cast<uint32_t>(WindowMessage::TRANS_ID_GET_WINDOW_PROPERTY);
397e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
398e0dac50fSopenharmony_ci    if (remote == nullptr) {
399e0dac50fSopenharmony_ci        WLOGFE("remote is null");
400e0dac50fSopenharmony_ci        return nullptr;
401e0dac50fSopenharmony_ci    }
402e0dac50fSopenharmony_ci    if (remote->SendRequest(requestCode, data, reply, option) != ERR_NONE) {
403e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
404e0dac50fSopenharmony_ci        return nullptr;
405e0dac50fSopenharmony_ci    }
406e0dac50fSopenharmony_ci    sptr<WindowProperty> property = reply.ReadParcelable<WindowProperty>();
407e0dac50fSopenharmony_ci    return property;
408e0dac50fSopenharmony_ci}
409e0dac50fSopenharmony_ci
410e0dac50fSopenharmony_ciWMError WindowProxy::NotifyTouchOutside()
411e0dac50fSopenharmony_ci{
412e0dac50fSopenharmony_ci    MessageParcel data;
413e0dac50fSopenharmony_ci    MessageParcel reply;
414e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
415e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
416e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
417e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
418e0dac50fSopenharmony_ci    }
419e0dac50fSopenharmony_ci
420e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
421e0dac50fSopenharmony_ci    if (remote == nullptr) {
422e0dac50fSopenharmony_ci        WLOGFE("remote is null");
423e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
424e0dac50fSopenharmony_ci    }
425e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_OUTSIDE_PRESSED),
426e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
427e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
428e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
429e0dac50fSopenharmony_ci    }
430e0dac50fSopenharmony_ci    return WMError::WM_OK;
431e0dac50fSopenharmony_ci}
432e0dac50fSopenharmony_ci
433e0dac50fSopenharmony_ciWMError WindowProxy::NotifyScreenshot()
434e0dac50fSopenharmony_ci{
435e0dac50fSopenharmony_ci    MessageParcel data;
436e0dac50fSopenharmony_ci    MessageParcel reply;
437e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
438e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
439e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
440e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
441e0dac50fSopenharmony_ci    }
442e0dac50fSopenharmony_ci
443e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
444e0dac50fSopenharmony_ci    if (remote == nullptr) {
445e0dac50fSopenharmony_ci        WLOGFE("remote is null");
446e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
447e0dac50fSopenharmony_ci    }
448e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_SCREEN_SHOT),
449e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
450e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
451e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
452e0dac50fSopenharmony_ci    }
453e0dac50fSopenharmony_ci    return WMError::WM_OK;
454e0dac50fSopenharmony_ci}
455e0dac50fSopenharmony_ci
456e0dac50fSopenharmony_ciWMError WindowProxy::DumpInfo(const std::vector<std::string>& params)
457e0dac50fSopenharmony_ci{
458e0dac50fSopenharmony_ci    MessageParcel data;
459e0dac50fSopenharmony_ci    MessageParcel reply;
460e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
461e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
462e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
463e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
464e0dac50fSopenharmony_ci    }
465e0dac50fSopenharmony_ci    if (!data.WriteStringVector(params)) {
466e0dac50fSopenharmony_ci        WLOGFE("Write params failed");
467e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
468e0dac50fSopenharmony_ci    }
469e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
470e0dac50fSopenharmony_ci    if (remote == nullptr) {
471e0dac50fSopenharmony_ci        WLOGFE("remote is null");
472e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
473e0dac50fSopenharmony_ci    }
474e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_DUMP_INFO),
475e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
476e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
477e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
478e0dac50fSopenharmony_ci    }
479e0dac50fSopenharmony_ci    return WMError::WM_OK;
480e0dac50fSopenharmony_ci}
481e0dac50fSopenharmony_ci
482e0dac50fSopenharmony_ciWMError WindowProxy::UpdateZoomTransform(const Transform& trans, bool isDisplayZoomOn)
483e0dac50fSopenharmony_ci{
484e0dac50fSopenharmony_ci    MessageParcel data;
485e0dac50fSopenharmony_ci    MessageParcel reply;
486e0dac50fSopenharmony_ci    MessageOption option;
487e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
488e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
489e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
490e0dac50fSopenharmony_ci    }
491e0dac50fSopenharmony_ci    if (!trans.Marshalling(data)) {
492e0dac50fSopenharmony_ci        WLOGFE("Write params failed");
493e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
494e0dac50fSopenharmony_ci    }
495e0dac50fSopenharmony_ci    if (!data.WriteBool(isDisplayZoomOn)) {
496e0dac50fSopenharmony_ci        WLOGFE("Write params failed");
497e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
498e0dac50fSopenharmony_ci    }
499e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
500e0dac50fSopenharmony_ci    if (remote == nullptr) {
501e0dac50fSopenharmony_ci        WLOGFE("remote is null");
502e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
503e0dac50fSopenharmony_ci    }
504e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_UPDATE_ZOOM_TRANSFORM),
505e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
506e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
507e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
508e0dac50fSopenharmony_ci    }
509e0dac50fSopenharmony_ci    return WMError::WM_OK;
510e0dac50fSopenharmony_ci}
511e0dac50fSopenharmony_ci
512e0dac50fSopenharmony_ciWMError WindowProxy::NotifyDestroy(void)
513e0dac50fSopenharmony_ci{
514e0dac50fSopenharmony_ci    MessageParcel data;
515e0dac50fSopenharmony_ci    MessageParcel replay;
516e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
517e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
518e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
519e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
520e0dac50fSopenharmony_ci    }
521e0dac50fSopenharmony_ci
522e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
523e0dac50fSopenharmony_ci    if (remote == nullptr) {
524e0dac50fSopenharmony_ci        WLOGFE("remote is null");
525e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
526e0dac50fSopenharmony_ci    }
527e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_DESTROY),
528e0dac50fSopenharmony_ci        data, replay, option) != ERR_NONE) {
529e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
530e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
531e0dac50fSopenharmony_ci    }
532e0dac50fSopenharmony_ci    return WMError::WM_OK;
533e0dac50fSopenharmony_ci}
534e0dac50fSopenharmony_ci
535e0dac50fSopenharmony_ciWMError WindowProxy::NotifyForeground(void)
536e0dac50fSopenharmony_ci{
537e0dac50fSopenharmony_ci    MessageParcel data;
538e0dac50fSopenharmony_ci    MessageParcel replay;
539e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
540e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
541e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
542e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
543e0dac50fSopenharmony_ci    }
544e0dac50fSopenharmony_ci
545e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
546e0dac50fSopenharmony_ci    if (remote == nullptr) {
547e0dac50fSopenharmony_ci        WLOGFE("remote is null");
548e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
549e0dac50fSopenharmony_ci    }
550e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_FOREGROUND),
551e0dac50fSopenharmony_ci        data, replay, option) != ERR_NONE) {
552e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
553e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
554e0dac50fSopenharmony_ci    }
555e0dac50fSopenharmony_ci    return WMError::WM_OK;
556e0dac50fSopenharmony_ci}
557e0dac50fSopenharmony_ci
558e0dac50fSopenharmony_ciWMError WindowProxy::NotifyBackground(void)
559e0dac50fSopenharmony_ci{
560e0dac50fSopenharmony_ci    MessageParcel data;
561e0dac50fSopenharmony_ci    MessageParcel replay;
562e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
563e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
564e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
565e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
566e0dac50fSopenharmony_ci    }
567e0dac50fSopenharmony_ci
568e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
569e0dac50fSopenharmony_ci    if (remote == nullptr) {
570e0dac50fSopenharmony_ci        WLOGFE("remote is null");
571e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
572e0dac50fSopenharmony_ci    }
573e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_BACKGROUND),
574e0dac50fSopenharmony_ci        data, replay, option) != ERR_NONE) {
575e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
576e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
577e0dac50fSopenharmony_ci    }
578e0dac50fSopenharmony_ci    return WMError::WM_OK;
579e0dac50fSopenharmony_ci}
580e0dac50fSopenharmony_ci
581e0dac50fSopenharmony_ciWMError WindowProxy::NotifyWindowClientPointUp(const std::shared_ptr<MMI::PointerEvent>& pointerEvent)
582e0dac50fSopenharmony_ci{
583e0dac50fSopenharmony_ci    if (!pointerEvent) {
584e0dac50fSopenharmony_ci        WLOGFE("pointerEvent is nullptr");
585e0dac50fSopenharmony_ci        return WMError::WM_ERROR_NULLPTR;
586e0dac50fSopenharmony_ci    }
587e0dac50fSopenharmony_ci    MessageParcel data;
588e0dac50fSopenharmony_ci    MessageParcel reply;
589e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
590e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
591e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
592e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
593e0dac50fSopenharmony_ci    }
594e0dac50fSopenharmony_ci    if (!pointerEvent->WriteToParcel(data)) {
595e0dac50fSopenharmony_ci        WLOGFE("Failed to write point event");
596e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
597e0dac50fSopenharmony_ci    }
598e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
599e0dac50fSopenharmony_ci    if (remote == nullptr) {
600e0dac50fSopenharmony_ci        WLOGFE("remote is null");
601e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
602e0dac50fSopenharmony_ci    }
603e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_CLIENT_POINT_UP),
604e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
605e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
606e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
607e0dac50fSopenharmony_ci    }
608e0dac50fSopenharmony_ci    return WMError::WM_OK;
609e0dac50fSopenharmony_ci}
610e0dac50fSopenharmony_ci
611e0dac50fSopenharmony_ciWMError WindowProxy::RestoreSplitWindowMode(uint32_t mode)
612e0dac50fSopenharmony_ci{
613e0dac50fSopenharmony_ci    MessageParcel data;
614e0dac50fSopenharmony_ci    MessageParcel reply;
615e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
616e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
617e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
618e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
619e0dac50fSopenharmony_ci    }
620e0dac50fSopenharmony_ci    if (!data.WriteUint32(mode)) {
621e0dac50fSopenharmony_ci        WLOGFE("mode failed");
622e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
623e0dac50fSopenharmony_ci    }
624e0dac50fSopenharmony_ci    uint32_t requestCode = static_cast<uint32_t>(WindowMessage::TRANS_ID_RESTORE_SPLIT_WINDOW_MODE);
625e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
626e0dac50fSopenharmony_ci    if (remote == nullptr) {
627e0dac50fSopenharmony_ci        WLOGFE("remote is null");
628e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
629e0dac50fSopenharmony_ci    }
630e0dac50fSopenharmony_ci    if (remote->SendRequest(requestCode, data, reply, option) != ERR_NONE) {
631e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
632e0dac50fSopenharmony_ci        return WMError::WM_ERROR_IPC_FAILED;
633e0dac50fSopenharmony_ci    }
634e0dac50fSopenharmony_ci    return WMError::WM_OK;
635e0dac50fSopenharmony_ci}
636e0dac50fSopenharmony_ci
637e0dac50fSopenharmony_civoid WindowProxy::ConsumeKeyEvent(std::shared_ptr<MMI::KeyEvent> event)
638e0dac50fSopenharmony_ci{
639e0dac50fSopenharmony_ci    MessageParcel data;
640e0dac50fSopenharmony_ci    MessageParcel reply;
641e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
642e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
643e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
644e0dac50fSopenharmony_ci        return;
645e0dac50fSopenharmony_ci    }
646e0dac50fSopenharmony_ci    if (!event->WriteToParcel(data)) {
647e0dac50fSopenharmony_ci        WLOGFE("Write point event failed");
648e0dac50fSopenharmony_ci        return;
649e0dac50fSopenharmony_ci    }
650e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
651e0dac50fSopenharmony_ci    if (remote == nullptr) {
652e0dac50fSopenharmony_ci        WLOGFE("remote is null");
653e0dac50fSopenharmony_ci        return;
654e0dac50fSopenharmony_ci    }
655e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_CONSUME_KEY_EVENT),
656e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
657e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
658e0dac50fSopenharmony_ci        return;
659e0dac50fSopenharmony_ci    }
660e0dac50fSopenharmony_ci}
661e0dac50fSopenharmony_ci
662e0dac50fSopenharmony_civoid WindowProxy::NotifyForegroundInteractiveStatus(bool interactive)
663e0dac50fSopenharmony_ci{
664e0dac50fSopenharmony_ci    MessageParcel data;
665e0dac50fSopenharmony_ci    MessageParcel reply;
666e0dac50fSopenharmony_ci    MessageOption option(MessageOption::TF_ASYNC);
667e0dac50fSopenharmony_ci    if (!data.WriteInterfaceToken(GetDescriptor())) {
668e0dac50fSopenharmony_ci        WLOGFE("WriteInterfaceToken failed");
669e0dac50fSopenharmony_ci        return;
670e0dac50fSopenharmony_ci    }
671e0dac50fSopenharmony_ci    if (!data.WriteBool(interactive)) {
672e0dac50fSopenharmony_ci        WLOGFE("Write Focus failed");
673e0dac50fSopenharmony_ci        return;
674e0dac50fSopenharmony_ci    }
675e0dac50fSopenharmony_ci
676e0dac50fSopenharmony_ci    sptr<IRemoteObject> remote = Remote();
677e0dac50fSopenharmony_ci    if (remote == nullptr) {
678e0dac50fSopenharmony_ci        WLOGFE("remote is null");
679e0dac50fSopenharmony_ci        return;
680e0dac50fSopenharmony_ci    }
681e0dac50fSopenharmony_ci    if (remote->SendRequest(static_cast<uint32_t>(WindowMessage::TRANS_ID_NOTIFY_FOREGROUND_INTERACTIVE_STATUS),
682e0dac50fSopenharmony_ci        data, reply, option) != ERR_NONE) {
683e0dac50fSopenharmony_ci        WLOGFE("SendRequest failed");
684e0dac50fSopenharmony_ci    }
685e0dac50fSopenharmony_ci}
686e0dac50fSopenharmony_ci
687e0dac50fSopenharmony_ci} // namespace Rosen
688e0dac50fSopenharmony_ci} // namespace OHOS
689e0dac50fSopenharmony_ci
690