1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 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#ifndef WINDOW_EXTENSION_CONNECTION_H
17e0dac50fSopenharmony_ci#define WINDOW_EXTENSION_CONNECTION_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <string>
20e0dac50fSopenharmony_ci#include <element_name.h>
21e0dac50fSopenharmony_ci#include <i_input_event_consumer.h>
22e0dac50fSopenharmony_ci#include <input_manager.h>
23e0dac50fSopenharmony_ci#include <key_event.h>
24e0dac50fSopenharmony_ci#include <pointer_event.h>
25e0dac50fSopenharmony_ci#include <memory>
26e0dac50fSopenharmony_ci
27e0dac50fSopenharmony_ci#include "wm_common.h"
28e0dac50fSopenharmony_ci
29e0dac50fSopenharmony_cinamespace OHOS {
30e0dac50fSopenharmony_cinamespace Rosen {
31e0dac50fSopenharmony_cinamespace {
32e0dac50fSopenharmony_ciconst std::string RECT_FORM_KEY_POS_X = "ext_pos_x";
33e0dac50fSopenharmony_ciconst std::string RECT_FORM_KEY_POS_Y = "ext_pos_y";
34e0dac50fSopenharmony_ciconst std::string RECT_FORM_KEY_HEIGHT = "ext_pos_heigh";
35e0dac50fSopenharmony_ciconst std::string RECT_FORM_KEY_WIDTH = "ext_pos_width";
36e0dac50fSopenharmony_ciconst std::string WINDOW_ID = "ext_window_id";
37e0dac50fSopenharmony_ci}
38e0dac50fSopenharmony_ci
39e0dac50fSopenharmony_ciclass RSSurfaceNode;
40e0dac50fSopenharmony_ciclass ExtensionSession;
41e0dac50fSopenharmony_ci/**
42e0dac50fSopenharmony_ci * @class IWindowExtensionCallback
43e0dac50fSopenharmony_ci *
44e0dac50fSopenharmony_ci * @brief Callback of window extension.
45e0dac50fSopenharmony_ci */
46e0dac50fSopenharmony_ciclass IWindowExtensionCallback : virtual public RefBase {
47e0dac50fSopenharmony_cipublic:
48e0dac50fSopenharmony_ci    /**
49e0dac50fSopenharmony_ci     * @brief Window ready to connect.
50e0dac50fSopenharmony_ci     *
51e0dac50fSopenharmony_ci     * @param rsSurfaceNode Surface node from RS.
52e0dac50fSopenharmony_ci     */
53e0dac50fSopenharmony_ci    virtual void OnWindowReady(const std::shared_ptr<RSSurfaceNode>& rsSurfaceNode) = 0;
54e0dac50fSopenharmony_ci    /**
55e0dac50fSopenharmony_ci     * @brief Callback when window extension disconnected.
56e0dac50fSopenharmony_ci     */
57e0dac50fSopenharmony_ci    virtual void OnExtensionDisconnected() = 0;
58e0dac50fSopenharmony_ci    /**
59e0dac50fSopenharmony_ci     * @brief Callback when receive key event.
60e0dac50fSopenharmony_ci     *
61e0dac50fSopenharmony_ci     * @param event Keyboard event.
62e0dac50fSopenharmony_ci     */
63e0dac50fSopenharmony_ci    virtual void OnKeyEvent(const std::shared_ptr<MMI::KeyEvent>& event) = 0;
64e0dac50fSopenharmony_ci    /**
65e0dac50fSopenharmony_ci     * @brief Callback when receive pointer event.
66e0dac50fSopenharmony_ci     *
67e0dac50fSopenharmony_ci     * @param event Pointer event.
68e0dac50fSopenharmony_ci     */
69e0dac50fSopenharmony_ci    virtual void OnPointerEvent(const std::shared_ptr<MMI::PointerEvent>& event) = 0;
70e0dac50fSopenharmony_ci    /**
71e0dac50fSopenharmony_ci     * @brief Callback when press back button.
72e0dac50fSopenharmony_ci     */
73e0dac50fSopenharmony_ci    virtual void OnBackPress() = 0;
74e0dac50fSopenharmony_ci};
75e0dac50fSopenharmony_ci
76e0dac50fSopenharmony_ci/**
77e0dac50fSopenharmony_ci * @class WindowExtensionConnection
78e0dac50fSopenharmony_ci *
79e0dac50fSopenharmony_ci * @brief Connection for window extension.
80e0dac50fSopenharmony_ci */
81e0dac50fSopenharmony_ciclass WindowExtensionConnection : public RefBase {
82e0dac50fSopenharmony_cipublic:
83e0dac50fSopenharmony_ci    /**
84e0dac50fSopenharmony_ci     * @brief Constructor for WindowExtensionConnection.
85e0dac50fSopenharmony_ci     */
86e0dac50fSopenharmony_ci    WindowExtensionConnection();
87e0dac50fSopenharmony_ci    /**
88e0dac50fSopenharmony_ci     * @brief Deconstructor for WindowExtensionConnection.
89e0dac50fSopenharmony_ci     */
90e0dac50fSopenharmony_ci    ~WindowExtensionConnection();
91e0dac50fSopenharmony_ci    /**
92e0dac50fSopenharmony_ci     * @brief Deconstructor for WindowExtensionConnection.
93e0dac50fSopenharmony_ci     *
94e0dac50fSopenharmony_ci     * @param element Element name.
95e0dac50fSopenharmony_ci     * @param rect Rect of window extension.
96e0dac50fSopenharmony_ci     * @param uid User id.
97e0dac50fSopenharmony_ci     * @param windowId Window id.
98e0dac50fSopenharmony_ci     * @param callback Callback for window extension.
99e0dac50fSopenharmony_ci     * @return ERR_OK means connect success, others means connect failed.
100e0dac50fSopenharmony_ci     */
101e0dac50fSopenharmony_ci    int ConnectExtension(const AppExecFwk::ElementName& element, const Rect& rect,
102e0dac50fSopenharmony_ci        uint32_t uid, uint32_t windowId, const sptr<IWindowExtensionCallback>& callback) const;
103e0dac50fSopenharmony_ci    /**
104e0dac50fSopenharmony_ci     * @brief Deconstructor for WindowExtensionConnection.
105e0dac50fSopenharmony_ci     *
106e0dac50fSopenharmony_ci     * @param element Element name.
107e0dac50fSopenharmony_ci     * @param rect Rect of window extension.
108e0dac50fSopenharmony_ci     * @param uid User id.
109e0dac50fSopenharmony_ci     * @param windowId Window id.
110e0dac50fSopenharmony_ci     * @param callback Callback for window extension.
111e0dac50fSopenharmony_ci     * @param extensionSession session for extension
112e0dac50fSopenharmony_ci     * @return ERR_OK means connect success, others means connect failed.
113e0dac50fSopenharmony_ci     */
114e0dac50fSopenharmony_ci    int ConnectExtension(const AppExecFwk::ElementName& element, const Rect& rect,
115e0dac50fSopenharmony_ci        uint32_t uid, uint32_t windowId, const sptr<IWindowExtensionCallback>& callback,
116e0dac50fSopenharmony_ci        const sptr<ExtensionSession>& extensionSession) const;
117e0dac50fSopenharmony_ci    /**
118e0dac50fSopenharmony_ci     * @brief Disconnect window extension.
119e0dac50fSopenharmony_ci     */
120e0dac50fSopenharmony_ci    void DisconnectExtension() const;
121e0dac50fSopenharmony_ci    /**
122e0dac50fSopenharmony_ci     * @brief Show window extension.
123e0dac50fSopenharmony_ci     */
124e0dac50fSopenharmony_ci    void Show() const;
125e0dac50fSopenharmony_ci    /**
126e0dac50fSopenharmony_ci     * @brief Hide window extension.
127e0dac50fSopenharmony_ci     */
128e0dac50fSopenharmony_ci    void Hide() const;
129e0dac50fSopenharmony_ci    /**
130e0dac50fSopenharmony_ci     * @brief Request focus of window extension.
131e0dac50fSopenharmony_ci     */
132e0dac50fSopenharmony_ci    void RequestFocus() const;
133e0dac50fSopenharmony_ci    /**
134e0dac50fSopenharmony_ci     * @brief Set bounds of window extension.
135e0dac50fSopenharmony_ci     *
136e0dac50fSopenharmony_ci     * @param rect Window extension rect.
137e0dac50fSopenharmony_ci     */
138e0dac50fSopenharmony_ci    void SetBounds(const Rect& rect) const;
139e0dac50fSopenharmony_ciprivate:
140e0dac50fSopenharmony_ci    class Impl;
141e0dac50fSopenharmony_ci    sptr<Impl> pImpl_;
142e0dac50fSopenharmony_ci};
143e0dac50fSopenharmony_ci} // namespace Rosen
144e0dac50fSopenharmony_ci} // namespace OHOS
145e0dac50fSopenharmony_ci#endif // WINDOW_EXTENSION_CONNECTION_H