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