1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef WINDOW_EXTENSION_CONNECTION_H 17 #define WINDOW_EXTENSION_CONNECTION_H 18 19 #include <string> 20 #include <element_name.h> 21 #include <i_input_event_consumer.h> 22 #include <input_manager.h> 23 #include <key_event.h> 24 #include <pointer_event.h> 25 #include <memory> 26 27 #include "wm_common.h" 28 29 namespace OHOS { 30 namespace Rosen { 31 namespace { 32 const std::string RECT_FORM_KEY_POS_X = "ext_pos_x"; 33 const std::string RECT_FORM_KEY_POS_Y = "ext_pos_y"; 34 const std::string RECT_FORM_KEY_HEIGHT = "ext_pos_heigh"; 35 const std::string RECT_FORM_KEY_WIDTH = "ext_pos_width"; 36 const std::string WINDOW_ID = "ext_window_id"; 37 } 38 39 class RSSurfaceNode; 40 class ExtensionSession; 41 /** 42 * @class IWindowExtensionCallback 43 * 44 * @brief Callback of window extension. 45 */ 46 class IWindowExtensionCallback : virtual public RefBase { 47 public: 48 /** 49 * @brief Window ready to connect. 50 * 51 * @param rsSurfaceNode Surface node from RS. 52 */ 53 virtual void OnWindowReady(const std::shared_ptr<RSSurfaceNode>& rsSurfaceNode) = 0; 54 /** 55 * @brief Callback when window extension disconnected. 56 */ 57 virtual void OnExtensionDisconnected() = 0; 58 /** 59 * @brief Callback when receive key event. 60 * 61 * @param event Keyboard event. 62 */ 63 virtual void OnKeyEvent(const std::shared_ptr<MMI::KeyEvent>& event) = 0; 64 /** 65 * @brief Callback when receive pointer event. 66 * 67 * @param event Pointer event. 68 */ 69 virtual void OnPointerEvent(const std::shared_ptr<MMI::PointerEvent>& event) = 0; 70 /** 71 * @brief Callback when press back button. 72 */ 73 virtual void OnBackPress() = 0; 74 }; 75 76 /** 77 * @class WindowExtensionConnection 78 * 79 * @brief Connection for window extension. 80 */ 81 class WindowExtensionConnection : public RefBase { 82 public: 83 /** 84 * @brief Constructor for WindowExtensionConnection. 85 */ 86 WindowExtensionConnection(); 87 /** 88 * @brief Deconstructor for WindowExtensionConnection. 89 */ 90 ~WindowExtensionConnection(); 91 /** 92 * @brief Deconstructor for WindowExtensionConnection. 93 * 94 * @param element Element name. 95 * @param rect Rect of window extension. 96 * @param uid User id. 97 * @param windowId Window id. 98 * @param callback Callback for window extension. 99 * @return ERR_OK means connect success, others means connect failed. 100 */ 101 int ConnectExtension(const AppExecFwk::ElementName& element, const Rect& rect, 102 uint32_t uid, uint32_t windowId, const sptr<IWindowExtensionCallback>& callback) const; 103 /** 104 * @brief Deconstructor for WindowExtensionConnection. 105 * 106 * @param element Element name. 107 * @param rect Rect of window extension. 108 * @param uid User id. 109 * @param windowId Window id. 110 * @param callback Callback for window extension. 111 * @param extensionSession session for extension 112 * @return ERR_OK means connect success, others means connect failed. 113 */ 114 int ConnectExtension(const AppExecFwk::ElementName& element, const Rect& rect, 115 uint32_t uid, uint32_t windowId, const sptr<IWindowExtensionCallback>& callback, 116 const sptr<ExtensionSession>& extensionSession) const; 117 /** 118 * @brief Disconnect window extension. 119 */ 120 void DisconnectExtension() const; 121 /** 122 * @brief Show window extension. 123 */ 124 void Show() const; 125 /** 126 * @brief Hide window extension. 127 */ 128 void Hide() const; 129 /** 130 * @brief Request focus of window extension. 131 */ 132 void RequestFocus() const; 133 /** 134 * @brief Set bounds of window extension. 135 * 136 * @param rect Window extension rect. 137 */ 138 void SetBounds(const Rect& rect) const; 139 private: 140 class Impl; 141 sptr<Impl> pImpl_; 142 }; 143 } // namespace Rosen 144 } // namespace OHOS 145 #endif // WINDOW_EXTENSION_CONNECTION_H