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 "window_agent.h" 17e0dac50fSopenharmony_ci#include "window_manager_hilog.h" 18e0dac50fSopenharmony_ci#include "wm_common.h" 19e0dac50fSopenharmony_ci 20e0dac50fSopenharmony_cinamespace OHOS { 21e0dac50fSopenharmony_cinamespace Rosen { 22e0dac50fSopenharmony_cinamespace { 23e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowAgent"}; 24e0dac50fSopenharmony_ci} 25e0dac50fSopenharmony_ci 26e0dac50fSopenharmony_ciWindowAgent::WindowAgent(sptr<WindowImpl>& windowImpl) 27e0dac50fSopenharmony_ci{ 28e0dac50fSopenharmony_ci window_ = windowImpl; 29e0dac50fSopenharmony_ci} 30e0dac50fSopenharmony_ci 31e0dac50fSopenharmony_ciWMError WindowAgent::UpdateWindowRect(const struct Rect& rect, bool decoStatus, WindowSizeChangeReason reason, 32e0dac50fSopenharmony_ci const std::shared_ptr<RSTransaction>& rsTransaction) 33e0dac50fSopenharmony_ci{ 34e0dac50fSopenharmony_ci if (window_ == nullptr) { 35e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 36e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 37e0dac50fSopenharmony_ci } 38e0dac50fSopenharmony_ci window_->UpdateRect(rect, decoStatus, reason, rsTransaction); 39e0dac50fSopenharmony_ci return WMError::WM_OK; 40e0dac50fSopenharmony_ci} 41e0dac50fSopenharmony_ci 42e0dac50fSopenharmony_ciWMError WindowAgent::UpdateWindowMode(WindowMode mode) 43e0dac50fSopenharmony_ci{ 44e0dac50fSopenharmony_ci if (window_ == nullptr) { 45e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 46e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 47e0dac50fSopenharmony_ci } 48e0dac50fSopenharmony_ci window_->UpdateMode(mode); 49e0dac50fSopenharmony_ci return WMError::WM_OK; 50e0dac50fSopenharmony_ci} 51e0dac50fSopenharmony_ci 52e0dac50fSopenharmony_ciWMError WindowAgent::UpdateWindowModeSupportInfo(uint32_t modeSupportInfo) 53e0dac50fSopenharmony_ci{ 54e0dac50fSopenharmony_ci if (window_ == nullptr) { 55e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 56e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 57e0dac50fSopenharmony_ci } 58e0dac50fSopenharmony_ci window_->UpdateModeSupportInfo(modeSupportInfo); 59e0dac50fSopenharmony_ci return WMError::WM_OK; 60e0dac50fSopenharmony_ci} 61e0dac50fSopenharmony_ci 62e0dac50fSopenharmony_ciWMError WindowAgent::UpdateFocusStatus(bool focused) 63e0dac50fSopenharmony_ci{ 64e0dac50fSopenharmony_ci if (window_ == nullptr) { 65e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 66e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 67e0dac50fSopenharmony_ci } 68e0dac50fSopenharmony_ci window_->UpdateFocusStatus(focused); 69e0dac50fSopenharmony_ci return WMError::WM_OK; 70e0dac50fSopenharmony_ci} 71e0dac50fSopenharmony_ci 72e0dac50fSopenharmony_ciWMError WindowAgent::UpdateAvoidArea(const sptr<AvoidArea>& avoidArea, AvoidAreaType type) 73e0dac50fSopenharmony_ci{ 74e0dac50fSopenharmony_ci if (window_ == nullptr || avoidArea == nullptr) { 75e0dac50fSopenharmony_ci WLOGFE("window_ or avoidArea is nullptr."); 76e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 77e0dac50fSopenharmony_ci } 78e0dac50fSopenharmony_ci window_->UpdateAvoidArea(avoidArea, type); 79e0dac50fSopenharmony_ci return WMError::WM_OK; 80e0dac50fSopenharmony_ci} 81e0dac50fSopenharmony_ci 82e0dac50fSopenharmony_ciWMError WindowAgent::UpdateWindowState(WindowState state) 83e0dac50fSopenharmony_ci{ 84e0dac50fSopenharmony_ci if (window_ == nullptr) { 85e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 86e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 87e0dac50fSopenharmony_ci } 88e0dac50fSopenharmony_ci window_->UpdateWindowState(state); 89e0dac50fSopenharmony_ci return WMError::WM_OK; 90e0dac50fSopenharmony_ci} 91e0dac50fSopenharmony_ci 92e0dac50fSopenharmony_ciWMError WindowAgent::UpdateWindowDragInfo(const PointInfo& point, DragEvent event) 93e0dac50fSopenharmony_ci{ 94e0dac50fSopenharmony_ci if (window_ == nullptr) { 95e0dac50fSopenharmony_ci WLOGFE("window is null"); 96e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 97e0dac50fSopenharmony_ci } 98e0dac50fSopenharmony_ci window_->UpdateDragEvent(point, event); 99e0dac50fSopenharmony_ci return WMError::WM_OK; 100e0dac50fSopenharmony_ci} 101e0dac50fSopenharmony_ci 102e0dac50fSopenharmony_ciWMError WindowAgent::UpdateDisplayId(DisplayId from, DisplayId to) 103e0dac50fSopenharmony_ci{ 104e0dac50fSopenharmony_ci if (window_ == nullptr) { 105e0dac50fSopenharmony_ci WLOGFE("window is null"); 106e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 107e0dac50fSopenharmony_ci } 108e0dac50fSopenharmony_ci window_->UpdateDisplayId(from, to); 109e0dac50fSopenharmony_ci return WMError::WM_OK; 110e0dac50fSopenharmony_ci} 111e0dac50fSopenharmony_ci 112e0dac50fSopenharmony_ciWMError WindowAgent::UpdateOccupiedAreaChangeInfo(const sptr<OccupiedAreaChangeInfo>& info, 113e0dac50fSopenharmony_ci const std::shared_ptr<RSTransaction>& rsTransaction) 114e0dac50fSopenharmony_ci{ 115e0dac50fSopenharmony_ci if (window_ == nullptr) { 116e0dac50fSopenharmony_ci WLOGFE("window is null"); 117e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 118e0dac50fSopenharmony_ci } 119e0dac50fSopenharmony_ci window_->UpdateOccupiedAreaChangeInfo(info, rsTransaction); 120e0dac50fSopenharmony_ci return WMError::WM_OK; 121e0dac50fSopenharmony_ci} 122e0dac50fSopenharmony_ci 123e0dac50fSopenharmony_ciWMError WindowAgent::UpdateOccupiedAreaAndRect(const sptr<OccupiedAreaChangeInfo>& info, const Rect& rect, 124e0dac50fSopenharmony_ci const std::shared_ptr<RSTransaction>& rsTransaction) 125e0dac50fSopenharmony_ci{ 126e0dac50fSopenharmony_ci if (window_ == nullptr) { 127e0dac50fSopenharmony_ci WLOGFE("window is null"); 128e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 129e0dac50fSopenharmony_ci } 130e0dac50fSopenharmony_ci auto property = window_->GetWindowProperty(); 131e0dac50fSopenharmony_ci if (property) { 132e0dac50fSopenharmony_ci window_->UpdateRect(rect, property->GetDecoStatus(), WindowSizeChangeReason::UNDEFINED); 133e0dac50fSopenharmony_ci } 134e0dac50fSopenharmony_ci window_->UpdateOccupiedAreaChangeInfo(info, rsTransaction); 135e0dac50fSopenharmony_ci return WMError::WM_OK; 136e0dac50fSopenharmony_ci} 137e0dac50fSopenharmony_ci 138e0dac50fSopenharmony_ciWMError WindowAgent::UpdateActiveStatus(bool isActive) 139e0dac50fSopenharmony_ci{ 140e0dac50fSopenharmony_ci if (window_ == nullptr) { 141e0dac50fSopenharmony_ci WLOGFE("window is null"); 142e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 143e0dac50fSopenharmony_ci } 144e0dac50fSopenharmony_ci window_->UpdateActiveStatus(isActive); 145e0dac50fSopenharmony_ci return WMError::WM_OK; 146e0dac50fSopenharmony_ci} 147e0dac50fSopenharmony_ci 148e0dac50fSopenharmony_cisptr<WindowProperty> WindowAgent::GetWindowProperty() 149e0dac50fSopenharmony_ci{ 150e0dac50fSopenharmony_ci if (window_ == nullptr) { 151e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 152e0dac50fSopenharmony_ci return nullptr; 153e0dac50fSopenharmony_ci } 154e0dac50fSopenharmony_ci return window_->GetWindowProperty(); 155e0dac50fSopenharmony_ci} 156e0dac50fSopenharmony_ci 157e0dac50fSopenharmony_ciWMError WindowAgent::RestoreSplitWindowMode(uint32_t mode) 158e0dac50fSopenharmony_ci{ 159e0dac50fSopenharmony_ci if (window_ == nullptr) { 160e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 161e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 162e0dac50fSopenharmony_ci } 163e0dac50fSopenharmony_ci window_->RestoreSplitWindowMode(mode); 164e0dac50fSopenharmony_ci return WMError::WM_OK; 165e0dac50fSopenharmony_ci} 166e0dac50fSopenharmony_ci 167e0dac50fSopenharmony_ciWMError WindowAgent::NotifyTouchOutside() 168e0dac50fSopenharmony_ci{ 169e0dac50fSopenharmony_ci if (window_ == nullptr) { 170e0dac50fSopenharmony_ci WLOGI("window is null"); 171e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 172e0dac50fSopenharmony_ci } 173e0dac50fSopenharmony_ci WLOGFD("called"); 174e0dac50fSopenharmony_ci window_->NotifyTouchOutside(); 175e0dac50fSopenharmony_ci return WMError::WM_OK; 176e0dac50fSopenharmony_ci} 177e0dac50fSopenharmony_ci 178e0dac50fSopenharmony_ciWMError WindowAgent::NotifyScreenshot() 179e0dac50fSopenharmony_ci{ 180e0dac50fSopenharmony_ci if (window_ == nullptr) { 181e0dac50fSopenharmony_ci WLOGFE("notify screenshot failed: window is null."); 182e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 183e0dac50fSopenharmony_ci } 184e0dac50fSopenharmony_ci WLOGFD("called"); 185e0dac50fSopenharmony_ci window_->NotifyScreenshot(); 186e0dac50fSopenharmony_ci return WMError::WM_OK; 187e0dac50fSopenharmony_ci} 188e0dac50fSopenharmony_ci 189e0dac50fSopenharmony_ciWMError WindowAgent::DumpInfo(const std::vector<std::string>& params) 190e0dac50fSopenharmony_ci{ 191e0dac50fSopenharmony_ci if (window_ == nullptr) { 192e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 193e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 194e0dac50fSopenharmony_ci } 195e0dac50fSopenharmony_ci std::vector<std::string> info; 196e0dac50fSopenharmony_ci window_->DumpInfo(params, info); 197e0dac50fSopenharmony_ci return WMError::WM_OK; 198e0dac50fSopenharmony_ci} 199e0dac50fSopenharmony_ci 200e0dac50fSopenharmony_ciWMError WindowAgent::UpdateZoomTransform(const Transform& trans, bool isDisplayZoomOn) 201e0dac50fSopenharmony_ci{ 202e0dac50fSopenharmony_ci if (window_ == nullptr) { 203e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 204e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 205e0dac50fSopenharmony_ci } 206e0dac50fSopenharmony_ci window_->UpdateZoomTransform(trans, isDisplayZoomOn); 207e0dac50fSopenharmony_ci return WMError::WM_OK; 208e0dac50fSopenharmony_ci} 209e0dac50fSopenharmony_ci 210e0dac50fSopenharmony_ciWMError WindowAgent::NotifyDestroy(void) 211e0dac50fSopenharmony_ci{ 212e0dac50fSopenharmony_ci if (window_ == nullptr) { 213e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 214e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 215e0dac50fSopenharmony_ci } 216e0dac50fSopenharmony_ci window_->NotifyDestroy(); 217e0dac50fSopenharmony_ci return WMError::WM_OK; 218e0dac50fSopenharmony_ci} 219e0dac50fSopenharmony_ci 220e0dac50fSopenharmony_ciWMError WindowAgent::NotifyForeground(void) 221e0dac50fSopenharmony_ci{ 222e0dac50fSopenharmony_ci if (window_ == nullptr) { 223e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 224e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 225e0dac50fSopenharmony_ci } 226e0dac50fSopenharmony_ci window_->NotifyForeground(); 227e0dac50fSopenharmony_ci return WMError::WM_OK; 228e0dac50fSopenharmony_ci} 229e0dac50fSopenharmony_ci 230e0dac50fSopenharmony_ciWMError WindowAgent::NotifyBackground(void) 231e0dac50fSopenharmony_ci{ 232e0dac50fSopenharmony_ci if (window_ == nullptr) { 233e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 234e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 235e0dac50fSopenharmony_ci } 236e0dac50fSopenharmony_ci window_->NotifyBackground(); 237e0dac50fSopenharmony_ci return WMError::WM_OK; 238e0dac50fSopenharmony_ci} 239e0dac50fSopenharmony_ci 240e0dac50fSopenharmony_ciWMError WindowAgent::NotifyWindowClientPointUp(const std::shared_ptr<MMI::PointerEvent>& pointerEvent) 241e0dac50fSopenharmony_ci{ 242e0dac50fSopenharmony_ci if (window_ == nullptr) { 243e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 244e0dac50fSopenharmony_ci return WMError::WM_ERROR_NULLPTR; 245e0dac50fSopenharmony_ci } 246e0dac50fSopenharmony_ci window_->ConsumePointerEvent(pointerEvent); 247e0dac50fSopenharmony_ci return WMError::WM_OK; 248e0dac50fSopenharmony_ci} 249e0dac50fSopenharmony_ci 250e0dac50fSopenharmony_civoid WindowAgent::ConsumeKeyEvent(std::shared_ptr<MMI::KeyEvent> event) 251e0dac50fSopenharmony_ci{ 252e0dac50fSopenharmony_ci if (window_ == nullptr) { 253e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 254e0dac50fSopenharmony_ci return; 255e0dac50fSopenharmony_ci } 256e0dac50fSopenharmony_ci window_->ConsumeKeyEvent(event); 257e0dac50fSopenharmony_ci} 258e0dac50fSopenharmony_ci 259e0dac50fSopenharmony_civoid WindowAgent::NotifyForegroundInteractiveStatus(bool interactive) 260e0dac50fSopenharmony_ci{ 261e0dac50fSopenharmony_ci if (window_ == nullptr) { 262e0dac50fSopenharmony_ci WLOGFE("window_ is nullptr"); 263e0dac50fSopenharmony_ci return; 264e0dac50fSopenharmony_ci } 265e0dac50fSopenharmony_ci window_->NotifyForegroundInteractiveStatus(interactive); 266e0dac50fSopenharmony_ci} 267e0dac50fSopenharmony_ci 268e0dac50fSopenharmony_ci} // namespace Rosen 269e0dac50fSopenharmony_ci} // namespace OHOS 270