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_manager_agent_controller.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, "WindowManagerAgentController"};
24e0dac50fSopenharmony_ci}
25e0dac50fSopenharmony_ciWM_IMPLEMENT_SINGLE_INSTANCE(WindowManagerAgentController)
26e0dac50fSopenharmony_ci
27e0dac50fSopenharmony_ciWMError WindowManagerAgentController::RegisterWindowManagerAgent(const sptr<IWindowManagerAgent>& windowManagerAgent,
28e0dac50fSopenharmony_ci    WindowManagerAgentType type)
29e0dac50fSopenharmony_ci{
30e0dac50fSopenharmony_ci    return wmAgentContainer_.RegisterAgent(windowManagerAgent, type) ? WMError::WM_OK : WMError::WM_ERROR_NULLPTR;
31e0dac50fSopenharmony_ci}
32e0dac50fSopenharmony_ci
33e0dac50fSopenharmony_ciWMError WindowManagerAgentController::UnregisterWindowManagerAgent(const sptr<IWindowManagerAgent>& windowManagerAgent,
34e0dac50fSopenharmony_ci    WindowManagerAgentType type)
35e0dac50fSopenharmony_ci{
36e0dac50fSopenharmony_ci    return wmAgentContainer_.UnregisterAgent(windowManagerAgent, type) ? WMError::WM_OK : WMError::WM_ERROR_NULLPTR;
37e0dac50fSopenharmony_ci}
38e0dac50fSopenharmony_ci
39e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdateFocusChangeInfo(const sptr<FocusChangeInfo>& focusChangeInfo, bool focused)
40e0dac50fSopenharmony_ci{
41e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_FOCUS)) {
42e0dac50fSopenharmony_ci        agent->UpdateFocusChangeInfo(focusChangeInfo, focused);
43e0dac50fSopenharmony_ci    }
44e0dac50fSopenharmony_ci}
45e0dac50fSopenharmony_ci
46e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdateWindowModeTypeInfo(WindowModeType type)
47e0dac50fSopenharmony_ci{
48e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
49e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_MODE)) {
50e0dac50fSopenharmony_ci        agent->UpdateWindowModeTypeInfo(type);
51e0dac50fSopenharmony_ci    }
52e0dac50fSopenharmony_ci}
53e0dac50fSopenharmony_ci
54e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdateSystemBarRegionTints(DisplayId displayId, const SystemBarRegionTints& tints)
55e0dac50fSopenharmony_ci{
56e0dac50fSopenharmony_ci    WLOGFD("tints size: %{public}u", static_cast<uint32_t>(tints.size()));
57e0dac50fSopenharmony_ci    if (tints.empty()) {
58e0dac50fSopenharmony_ci        return;
59e0dac50fSopenharmony_ci    }
60e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
61e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_SYSTEM_BAR)) {
62e0dac50fSopenharmony_ci        agent->UpdateSystemBarRegionTints(displayId, tints);
63e0dac50fSopenharmony_ci    }
64e0dac50fSopenharmony_ci}
65e0dac50fSopenharmony_ci
66e0dac50fSopenharmony_civoid WindowManagerAgentController::NotifyAccessibilityWindowInfo(
67e0dac50fSopenharmony_ci    const std::vector<sptr<AccessibilityWindowInfo>>& infos, WindowUpdateType type)
68e0dac50fSopenharmony_ci{
69e0dac50fSopenharmony_ci    WLOGD("NotifyAccessibilityWindowInfo");
70e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
71e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_UPDATE)) {
72e0dac50fSopenharmony_ci        agent->NotifyAccessibilityWindowInfo(infos, type);
73e0dac50fSopenharmony_ci    }
74e0dac50fSopenharmony_ci}
75e0dac50fSopenharmony_ci
76e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdateWindowVisibilityInfo(
77e0dac50fSopenharmony_ci    const std::vector<sptr<WindowVisibilityInfo>>& windowVisibilityInfos)
78e0dac50fSopenharmony_ci{
79e0dac50fSopenharmony_ci    WLOGFD("Size:%{public}zu", windowVisibilityInfos.size());
80e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
81e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WINDOW_VISIBILITY)) {
82e0dac50fSopenharmony_ci        agent->UpdateWindowVisibilityInfo(windowVisibilityInfos);
83e0dac50fSopenharmony_ci    }
84e0dac50fSopenharmony_ci}
85e0dac50fSopenharmony_ci
86e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdateCameraFloatWindowStatus(uint32_t accessTokenId, bool isShowing)
87e0dac50fSopenharmony_ci{
88e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
89e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_CAMERA_FLOAT)) {
90e0dac50fSopenharmony_ci        agent->UpdateCameraFloatWindowStatus(accessTokenId, isShowing);
91e0dac50fSopenharmony_ci    }
92e0dac50fSopenharmony_ci}
93e0dac50fSopenharmony_ci
94e0dac50fSopenharmony_civoid WindowManagerAgentController::NotifyWaterMarkFlagChangedResult(bool showWaterMark)
95e0dac50fSopenharmony_ci{
96e0dac50fSopenharmony_ci    WLOGFD("NotifyWaterMarkFlagChanged with result:%{public}d", showWaterMark);
97e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
98e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_WATER_MARK_FLAG)) {
99e0dac50fSopenharmony_ci        agent->NotifyWaterMarkFlagChangedResult(showWaterMark);
100e0dac50fSopenharmony_ci    }
101e0dac50fSopenharmony_ci}
102e0dac50fSopenharmony_ci
103e0dac50fSopenharmony_civoid WindowManagerAgentController::NotifyGestureNavigationEnabledResult(bool enable)
104e0dac50fSopenharmony_ci{
105e0dac50fSopenharmony_ci    WLOGFD("NotifyGestureNavigationEnabledResult with result:%{public}d", enable);
106e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
107e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_GESTURE_NAVIGATION_ENABLED)) {
108e0dac50fSopenharmony_ci        agent->NotifyGestureNavigationEnabledResult(enable);
109e0dac50fSopenharmony_ci    }
110e0dac50fSopenharmony_ci}
111e0dac50fSopenharmony_ci
112e0dac50fSopenharmony_civoid WindowManagerAgentController::UpdatePiPWindowStateChanged(const std::string& bundleName, bool isForeground)
113e0dac50fSopenharmony_ci{
114e0dac50fSopenharmony_ci    TLOGD(WmsLogTag::WMS_PIP, "bundleName:%{public}s, state:%{public}d", bundleName.c_str(), isForeground);
115e0dac50fSopenharmony_ci    for (auto& agent : wmAgentContainer_.GetAgentsByType(
116e0dac50fSopenharmony_ci        WindowManagerAgentType::WINDOW_MANAGER_AGENT_TYPE_PIP)) {
117e0dac50fSopenharmony_ci        agent->UpdatePiPWindowStateChanged(bundleName, isForeground);
118e0dac50fSopenharmony_ci    }
119e0dac50fSopenharmony_ci}
120e0dac50fSopenharmony_ci} // namespace Rosen
121e0dac50fSopenharmony_ci} // namespace OHOS