1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2024 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#ifndef INTERFACES_INNERKITS_WINDOW_SCENE_H
17e0dac50fSopenharmony_ci#define INTERFACES_INNERKITS_WINDOW_SCENE_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <mutex>
20e0dac50fSopenharmony_ci
21e0dac50fSopenharmony_ci#include "window.h"
22e0dac50fSopenharmony_ci#include "window_option.h"
23e0dac50fSopenharmony_ci#include "wm_common.h"
24e0dac50fSopenharmony_ci
25e0dac50fSopenharmony_cinamespace OHOS::AppExecFwk {
26e0dac50fSopenharmony_ciclass Configuration;
27e0dac50fSopenharmony_ci}
28e0dac50fSopenharmony_ci
29e0dac50fSopenharmony_cinamespace OHOS {
30e0dac50fSopenharmony_cinamespace Rosen {
31e0dac50fSopenharmony_ciclass WindowScene : public RefBase {
32e0dac50fSopenharmony_cipublic:
33e0dac50fSopenharmony_ci    /**
34e0dac50fSopenharmony_ci     * Default constructor used to create an empty WindowScene instance.
35e0dac50fSopenharmony_ci     */
36e0dac50fSopenharmony_ci    WindowScene() = default;
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ci    /**
39e0dac50fSopenharmony_ci     * Default deconstructor used to deconstruct.
40e0dac50fSopenharmony_ci     *
41e0dac50fSopenharmony_ci     */
42e0dac50fSopenharmony_ci    ~WindowScene();
43e0dac50fSopenharmony_ci
44e0dac50fSopenharmony_ci    /**
45e0dac50fSopenharmony_ci     * Init a WindowScene instance based on the parameters displayId, context, listener and option.
46e0dac50fSopenharmony_ci     *
47e0dac50fSopenharmony_ci     * @param displayId the id of current display
48e0dac50fSopenharmony_ci     * @param context current ability context
49e0dac50fSopenharmony_ci     * @param listener the life cycle listener of the window
50e0dac50fSopenharmony_ci     * @param option the settings for window, such as WindowType, width, height, etc
51e0dac50fSopenharmony_ci     * @return the error code of window
52e0dac50fSopenharmony_ci     */
53e0dac50fSopenharmony_ci    WMError Init(DisplayId displayId, const std::shared_ptr<AbilityRuntime::Context>& context,
54e0dac50fSopenharmony_ci        sptr<IWindowLifeCycle>& listener, sptr<WindowOption> option = nullptr);
55e0dac50fSopenharmony_ci
56e0dac50fSopenharmony_ci    /**
57e0dac50fSopenharmony_ci     * Init a WindowScene instance based on the parameters displayId, context, listener and option.
58e0dac50fSopenharmony_ci     *
59e0dac50fSopenharmony_ci     * @param displayId the id of current display
60e0dac50fSopenharmony_ci     * @param context current ability context
61e0dac50fSopenharmony_ci     * @param listener the life cycle listener of the window
62e0dac50fSopenharmony_ci     * @param option the settings for window, such as WindowType, width, height, etc
63e0dac50fSopenharmony_ci     * @param iSession session token of window session
64e0dac50fSopenharmony_ci     * @param identityToken identity token of sceneSession
65e0dac50fSopenharmony_ci     * @return the error code of window
66e0dac50fSopenharmony_ci     */
67e0dac50fSopenharmony_ci    WMError Init(DisplayId displayId, const std::shared_ptr<AbilityRuntime::Context>& context,
68e0dac50fSopenharmony_ci        sptr<IWindowLifeCycle>& listener, sptr<WindowOption> option, const sptr<IRemoteObject>& iSession,
69e0dac50fSopenharmony_ci        const std::string& identityToken = "");
70e0dac50fSopenharmony_ci
71e0dac50fSopenharmony_ci    /**
72e0dac50fSopenharmony_ci     * Create a window instance based on the parameters windowName and option.
73e0dac50fSopenharmony_ci     *
74e0dac50fSopenharmony_ci     * @param windowName the id of this window
75e0dac50fSopenharmony_ci     * @param option the settings for window, such as WindowType, width, height, etc.
76e0dac50fSopenharmony_ci     * @return the shared pointer of window
77e0dac50fSopenharmony_ci     */
78e0dac50fSopenharmony_ci    sptr<Window> CreateWindow(const std::string& windowName, sptr<WindowOption>& option) const;
79e0dac50fSopenharmony_ci
80e0dac50fSopenharmony_ci    /**
81e0dac50fSopenharmony_ci     * Get shared pointer of main window.
82e0dac50fSopenharmony_ci     * Locks mainWindowMutex_
83e0dac50fSopenharmony_ci     *
84e0dac50fSopenharmony_ci     * @return the shared pointer of window
85e0dac50fSopenharmony_ci     */
86e0dac50fSopenharmony_ci    sptr<Window> GetMainWindow() const;
87e0dac50fSopenharmony_ci
88e0dac50fSopenharmony_ci    /**
89e0dac50fSopenharmony_ci     * Get a set of sub window.
90e0dac50fSopenharmony_ci     *
91e0dac50fSopenharmony_ci     * @return a set of sub window
92e0dac50fSopenharmony_ci     */
93e0dac50fSopenharmony_ci    std::vector<sptr<Window>> GetSubWindow();
94e0dac50fSopenharmony_ci
95e0dac50fSopenharmony_ci    /**
96e0dac50fSopenharmony_ci     * window go foreground.
97e0dac50fSopenharmony_ci     *
98e0dac50fSopenharmony_ci     * @param reason the reason of window to go to foreground, default 0.
99e0dac50fSopenharmony_ci     * @return the error code of window
100e0dac50fSopenharmony_ci     */
101e0dac50fSopenharmony_ci    WMError GoForeground(uint32_t reason = 0);
102e0dac50fSopenharmony_ci
103e0dac50fSopenharmony_ci    /**
104e0dac50fSopenharmony_ci     * Window go background.
105e0dac50fSopenharmony_ci     *
106e0dac50fSopenharmony_ci     * @param reason the reason of window to go to background, default 0.
107e0dac50fSopenharmony_ci     * @return the error code of window
108e0dac50fSopenharmony_ci     */
109e0dac50fSopenharmony_ci    WMError GoBackground(uint32_t reason = 0);
110e0dac50fSopenharmony_ci
111e0dac50fSopenharmony_ci    /**
112e0dac50fSopenharmony_ci     * Window go distroy.
113e0dac50fSopenharmony_ci     *
114e0dac50fSopenharmony_ci     * @return the error code of window
115e0dac50fSopenharmony_ci     */
116e0dac50fSopenharmony_ci    WMError GoDestroy();
117e0dac50fSopenharmony_ci
118e0dac50fSopenharmony_ci    /**
119e0dac50fSopenharmony_ci     * Window handle new want.
120e0dac50fSopenharmony_ci     *
121e0dac50fSopenharmony_ci     * @param want ability want.
122e0dac50fSopenharmony_ci     * @return the error code of window
123e0dac50fSopenharmony_ci     */
124e0dac50fSopenharmony_ci    WMError OnNewWant(const AAFwk::Want& want);
125e0dac50fSopenharmony_ci
126e0dac50fSopenharmony_ci    /**
127e0dac50fSopenharmony_ci     * Request to get the focus.
128e0dac50fSopenharmony_ci     *
129e0dac50fSopenharmony_ci     * @return the error code of window
130e0dac50fSopenharmony_ci     */
131e0dac50fSopenharmony_ci    WMError RequestFocus() const;
132e0dac50fSopenharmony_ci
133e0dac50fSopenharmony_ci    /**
134e0dac50fSopenharmony_ci     * Update ability configuration.
135e0dac50fSopenharmony_ci     *
136e0dac50fSopenharmony_ci     * @param configuration the configuration of ability
137e0dac50fSopenharmony_ci     */
138e0dac50fSopenharmony_ci    void UpdateConfiguration(const std::shared_ptr<AppExecFwk::Configuration>& configuration);
139e0dac50fSopenharmony_ci
140e0dac50fSopenharmony_ci    /**
141e0dac50fSopenharmony_ci     * Set main window system bar property
142e0dac50fSopenharmony_ci     *
143e0dac50fSopenharmony_ci     * @param type the type of window
144e0dac50fSopenharmony_ci     * @param property the property of system bar
145e0dac50fSopenharmony_ci     * @return the error code of window
146e0dac50fSopenharmony_ci     */
147e0dac50fSopenharmony_ci    WMError SetSystemBarProperty(WindowType type, const SystemBarProperty& property) const;
148e0dac50fSopenharmony_ci
149e0dac50fSopenharmony_ci    /**
150e0dac50fSopenharmony_ci     * Get content info of main window.
151e0dac50fSopenharmony_ci     *
152e0dac50fSopenharmony_ci     * @return content info of main window
153e0dac50fSopenharmony_ci     */
154e0dac50fSopenharmony_ci    std::string GetContentInfo(BackupAndRestoreType type = BackupAndRestoreType::CONTINUATION) const;
155e0dac50fSopenharmony_ci
156e0dac50fSopenharmony_ci    /**
157e0dac50fSopenharmony_ci     * @brief Handle and notify memory.
158e0dac50fSopenharmony_ci     *
159e0dac50fSopenharmony_ci     * @param level memory level
160e0dac50fSopenharmony_ci     * @return the error code of window
161e0dac50fSopenharmony_ci     */
162e0dac50fSopenharmony_ci    WMError NotifyMemoryLevel(int32_t level);
163e0dac50fSopenharmony_ci
164e0dac50fSopenharmony_cipublic:
165e0dac50fSopenharmony_ci    static const DisplayId DEFAULT_DISPLAY_ID = 0;
166e0dac50fSopenharmony_ci
167e0dac50fSopenharmony_ciprivate:
168e0dac50fSopenharmony_ci    void OnLastStrongRef(const void *) override;
169e0dac50fSopenharmony_ci
170e0dac50fSopenharmony_ciprivate:
171e0dac50fSopenharmony_ci    mutable std::mutex mainWindowMutex_;
172e0dac50fSopenharmony_ci    sptr<Window> mainWindow_ = nullptr;
173e0dac50fSopenharmony_ci    // Above guarded by mainWindowMutex_
174e0dac50fSopenharmony_ci
175e0dac50fSopenharmony_ci    uint32_t mainWindowId_ = 0;
176e0dac50fSopenharmony_ci};
177e0dac50fSopenharmony_ci
178e0dac50fSopenharmony_ci} // namespace Rosen
179e0dac50fSopenharmony_ci} // namespace OHOS
180e0dac50fSopenharmony_ci#endif // INTERFACES_INNERKITS_WINDOW_SCENE_H
181