1 /* 2 * Copyright (c) 2021-2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 18 19 #include "base/geometry/ng/point_t.h" 20 #include "base/memory/ace_type.h" 21 #include "core/accessibility/accessibility_node.h" 22 #include "core/accessibility/accessibility_constants.h" 23 #include "core/accessibility/accessibility_provider.h" 24 #include "core/accessibility/accessibility_utils.h" 25 #include "core/pipeline/base/base_composed_component.h" 26 27 namespace OHOS::Accessibility { 28 class AccessibilityElementInfo; 29 class AccessibilityEventInfo; 30 class AccessibilityElementOperator; 31 } // namespace OHOS::Accessibility 32 33 namespace OHOS::Ace::NG { 34 class WebPattern; 35 } // namespace OHOS::Ace::NG 36 37 namespace OHOS::Ace { 38 39 struct AccessibilityEvent { 40 int64_t nodeId = 0; 41 int64_t stackNodeId = -1; 42 uint32_t windowId = 0; 43 WindowsContentChangeTypes windowContentChangeTypes = CONTENT_CHANGE_TYPE_INVALID; 44 WindowUpdateType windowChangeTypes = WINDOW_UPDATE_INVALID; 45 std::string eventType; 46 std::string componentType; 47 std::string beforeText; 48 std::string latestContent; 49 std::string textAnnouncedForAccessibility; 50 double currentItemIndex = 0.0; 51 double itemCount = 0.0; 52 AccessibilityEventType type = AccessibilityEventType::UNKNOWN; 53 }; 54 55 enum class OperatorType { 56 UNDEFINE = 1, 57 JS_UIEXTENSION, 58 JS_WEB, 59 JS_THIRD_PROVIDER, 60 }; 61 62 struct Registration { 63 uint32_t windowId = 0; 64 uint32_t parentWindowId = 0; 65 int32_t parentTreeId = 0; 66 int64_t elementId = 0; 67 OperatorType operatorType = OperatorType::UNDEFINE; 68 WeakPtr<NG::FrameNode> hostNode; 69 WeakPtr<AccessibilityProvider> accessibilityProvider; 70 }; 71 72 enum class AccessibilityVersion { 73 JS_VERSION = 1, 74 JS_DECLARATIVE_VERSION, 75 }; 76 77 enum class AccessibilityCallbackEventId : uint32_t { 78 ON_LOAD_PAGE = 0, 79 ON_SHOW = 1, 80 ON_HIDE = 2, 81 ON_SEND_ELEMENT_INFO_CHANGE = 3, 82 }; 83 84 struct AccessibilityCallbackEvent { 85 AccessibilityCallbackEventId eventId; 86 int64_t parameter; AccessibilityCallbackEventAccessibilityCallbackEvent87 AccessibilityCallbackEvent(AccessibilityCallbackEventId id, int64_t para) : eventId(id), parameter(para) {} 88 bool operator < (const AccessibilityCallbackEvent& other) const 89 { 90 return std::tie(eventId, parameter) < std::tie(other.eventId, other.parameter); 91 } 92 }; 93 94 class AccessibilitySAObserverCallback { 95 public: AccessibilitySAObserverCallback(int64_t accessibilityId)96 explicit AccessibilitySAObserverCallback(int64_t accessibilityId) : accessibilityId_(accessibilityId) 97 {} 98 virtual ~AccessibilitySAObserverCallback() = default; 99 virtual bool OnState(bool state) = 0; 100 GetAccessibilityId()101 int64_t GetAccessibilityId() const 102 { 103 return accessibilityId_; 104 } 105 private: 106 int64_t accessibilityId_ = -1; 107 }; 108 109 class AccessibilityChildTreeCallback { 110 public: AccessibilityChildTreeCallback(int64_t accessibilityId)111 explicit AccessibilityChildTreeCallback(int64_t accessibilityId) : accessibilityId_(accessibilityId) 112 {} 113 virtual ~AccessibilityChildTreeCallback() = default; 114 virtual bool OnRegister(uint32_t windowId, int32_t treeId) = 0; 115 virtual bool OnDeregister() = 0; 116 virtual bool OnSetChildTree(int32_t childWindowId, int32_t childTreeId) = 0; 117 virtual bool OnDumpChildInfo(const std::vector<std::string>& params, std::vector<std::string>& info) = 0; 118 virtual void OnClearRegisterFlag() = 0; GetChildTreeId()119 int32_t GetChildTreeId() const 120 { 121 return childTreeId_; 122 } SetChildTreeId(int32_t childTreeId)123 void SetChildTreeId(int32_t childTreeId) 124 { 125 childTreeId_ = childTreeId; 126 } GetAccessibilityId()127 int64_t GetAccessibilityId() const 128 { 129 return accessibilityId_; 130 } 131 132 private: 133 int32_t childTreeId_ = 0; 134 int64_t accessibilityId_ = -1; 135 }; 136 137 using VisibleRatioCallback = std::function<void(bool, double)>; 138 class AccessibilityManager : public AceType { 139 DECLARE_ACE_TYPE(AccessibilityManager, AceType); 140 141 public: 142 AccessibilityManager() = default; 143 ~AccessibilityManager() override = default; 144 145 virtual void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) = 0; SendWebAccessibilityAsyncEvent(const AccessibilityEvent & accessibilityEvent,const RefPtr<NG::WebPattern> & webPattern)146 virtual void SendWebAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent, 147 const RefPtr<NG::WebPattern>& webPattern) {} 148 virtual void UpdateVirtualNodeFocus() = 0; 149 virtual int64_t GenerateNextAccessibilityId() = 0; 150 virtual RefPtr<AccessibilityNode> CreateSpecializedNode( 151 const std::string& tag, int32_t nodeId, int32_t parentNodeId) = 0; 152 virtual RefPtr<AccessibilityNode> CreateAccessibilityNode( 153 const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) = 0; 154 virtual RefPtr<AccessibilityNode> GetAccessibilityNodeById(NodeId nodeId) const = 0; 155 virtual std::string GetInspectorNodeById(NodeId nodeId) const = 0; 156 virtual void RemoveAccessibilityNodes(RefPtr<AccessibilityNode>& node) = 0; 157 virtual void RemoveAccessibilityNodeById(NodeId nodeId) = 0; 158 virtual void ClearPageAccessibilityNodes(int32_t pageId) = 0; 159 virtual void SetRootNodeId(int32_t nodeId) = 0; 160 virtual void TrySaveTargetAndIdNode( 161 const std::string& id, const std::string& target, const RefPtr<AccessibilityNode>& node) = 0; 162 virtual void HandleComponentPostBinding() = 0; 163 virtual void OnDumpInfo(const std::vector<std::string>& params) = 0; 164 virtual void OnDumpInfoNG(const std::vector<std::string>& params, uint32_t windowId) = 0; 165 virtual void SetCardViewPosition(int id, float offsetX, float offsetY) = 0; 166 virtual void SetCardViewParams(const std::string& key, bool focus) = 0; 167 virtual void SetSupportAction(uint32_t action, bool isEnable) = 0; 168 virtual void ClearNodeRectInfo(RefPtr<AccessibilityNode>& node, bool isPopDialog) = 0; 169 virtual void AddComposedElement(const std::string& key, const RefPtr<ComposedElement>& node) = 0; 170 virtual void RemoveComposedElementById(const std::string& key) = 0; 171 virtual WeakPtr<ComposedElement> GetComposedElementFromPage(NodeId nodeId) = 0; 172 virtual void TriggerVisibleChangeEvent() = 0; 173 virtual void AddVisibleChangeNode(NodeId nodeId, double ratio, VisibleRatioCallback callback) = 0; 174 virtual void RemoveVisibleChangeNode(NodeId nodeId) = 0; 175 virtual bool IsVisibleChangeNodeExists(NodeId nodeId) = 0; 176 virtual void UpdateEventTarget(NodeId id, BaseEventInfo& info) = 0; 177 virtual void SetWindowPos(int32_t left, int32_t top, int32_t windowId) = 0; 178 #ifdef WINDOW_SCENE_SUPPORTED 179 virtual void SearchElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 180 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 181 int64_t uiExtensionOffset) = 0; 182 virtual void SearchElementInfosByTextNG(int64_t elementId, const std::string& text, 183 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 184 const int64_t uiExtensionOffset = 0) = 0; 185 virtual void FindFocusedElementInfoNG(int64_t elementId, int32_t focusType, 186 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 187 const int64_t uiExtensionOffset = 0) = 0; 188 virtual void FocusMoveSearchNG(int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info, 189 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) = 0; 190 virtual bool ExecuteExtensionActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 191 int32_t action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset) = 0; TransferAccessibilityAsyncEvent(const Accessibility::AccessibilityEventInfo & eventInfo,int64_t uiExtensionOffset)192 virtual bool TransferAccessibilityAsyncEvent( 193 const Accessibility::AccessibilityEventInfo& eventInfo, int64_t uiExtensionOffset) 194 { 195 return false; 196 } SendExtensionAccessibilityEvent(const Accessibility::AccessibilityEventInfo & eventInfo,int64_t uiExtensionOffset)197 virtual void SendExtensionAccessibilityEvent( 198 const Accessibility::AccessibilityEventInfo& eventInfo, int64_t uiExtensionOffset) {} 199 #endif 200 #ifdef WEB_SUPPORTED RegisterWebInteractionOperationAsChildTree(int64_t accessibilityId,const WeakPtr<NG::WebPattern> & webPattern)201 virtual bool RegisterWebInteractionOperationAsChildTree(int64_t accessibilityId, 202 const WeakPtr<NG::WebPattern>& webPattern) 203 { 204 return false; 205 } DeregisterWebInteractionOperationAsChildTree(int32_t treeId)206 virtual bool DeregisterWebInteractionOperationAsChildTree(int32_t treeId) 207 { 208 return false; 209 } 210 #endif SetVersion(AccessibilityVersion version)211 void SetVersion(AccessibilityVersion version) 212 { 213 version_ = version; 214 } GetVersion()215 AccessibilityVersion GetVersion() 216 { 217 return version_; 218 } 219 RegisterAccessibilityChildTreeCallback(int64_t elementId,const std::shared_ptr<AccessibilityChildTreeCallback> & callback)220 virtual void RegisterAccessibilityChildTreeCallback( 221 int64_t elementId, const std::shared_ptr<AccessibilityChildTreeCallback> &callback) {}; 222 DeregisterAccessibilityChildTreeCallback(int64_t elementId)223 virtual void DeregisterAccessibilityChildTreeCallback(int64_t elementId) {}; 224 RegisterInteractionOperationAsChildTree(uint32_t parentWindowId,int32_t parentTreeId,int64_t parentElementId)225 virtual void RegisterInteractionOperationAsChildTree( 226 uint32_t parentWindowId, int32_t parentTreeId, int64_t parentElementId) {}; SetAccessibilityGetParentRectHandler(std::function<void (int32_t &,int32_t &)> && callback)227 virtual void SetAccessibilityGetParentRectHandler(std::function<void(int32_t &, int32_t &)> &&callback) {}; DeregisterInteractionOperationAsChildTree()228 virtual void DeregisterInteractionOperationAsChildTree() {}; SendEventToAccessibilityWithNode(const AccessibilityEvent & accessibilityEvent,const RefPtr<AceType> & node,const RefPtr<PipelineBase> & context)229 virtual void SendEventToAccessibilityWithNode(const AccessibilityEvent& accessibilityEvent, 230 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context) {}; 231 RegisterAccessibilitySAObserverCallback(int64_t elementId,const std::shared_ptr<AccessibilitySAObserverCallback> & callback)232 virtual void RegisterAccessibilitySAObserverCallback( 233 int64_t elementId, const std::shared_ptr<AccessibilitySAObserverCallback> &callback) {}; 234 DeregisterAccessibilitySAObserverCallback(int64_t elementId)235 virtual void DeregisterAccessibilitySAObserverCallback(int64_t elementId) {}; 236 RegisterInteractionOperationAsChildTree(const Registration & registration)237 virtual bool RegisterInteractionOperationAsChildTree( 238 const Registration& registration) { return false; }; DeregisterInteractionOperationAsChildTree(uint32_t windowId,int32_t treeId)239 virtual bool DeregisterInteractionOperationAsChildTree( 240 uint32_t windowId, int32_t treeId) { return false; }; 241 TransferThirdProviderHoverEvent(const WeakPtr<NG::FrameNode> & hostNode,const NG::PointF & point,SourceType source,NG::AccessibilityHoverEventType eventType,TimeStamp time)242 virtual void TransferThirdProviderHoverEvent( 243 const WeakPtr<NG::FrameNode>& hostNode, const NG::PointF &point, SourceType source, 244 NG::AccessibilityHoverEventType eventType, TimeStamp time) {}; 245 OnDumpChildInfoForThird(int64_t hostElementId,const std::vector<std::string> & params,std::vector<std::string> & info)246 virtual bool OnDumpChildInfoForThird( 247 int64_t hostElementId, const std::vector<std::string> ¶ms, std::vector<std::string> &info) 248 { 249 return false; 250 } 251 FireAccessibilityEventCallback(uint32_t eventId,int64_t parameter)252 virtual void FireAccessibilityEventCallback(uint32_t eventId, int64_t parameter) {} 253 IsRegister()254 bool IsRegister() 255 { 256 return isReg_; 257 } 258 Register(bool state)259 void Register(bool state) 260 { 261 isReg_ = state; 262 } 263 GetTreeId()264 int32_t GetTreeId() const 265 { 266 return treeId_; 267 } 268 SetUiextensionId(int64_t uiExtensionId)269 void SetUiextensionId(int64_t uiExtensionId) 270 { 271 uiExtensionId_ = uiExtensionId; 272 } 273 GetUiextensionId()274 int64_t GetUiextensionId() const 275 { 276 return uiExtensionId_; 277 } 278 279 protected: 280 int32_t treeId_ = 0; 281 282 private: 283 AccessibilityVersion version_ = AccessibilityVersion::JS_VERSION; 284 bool isReg_ = false; 285 int64_t uiExtensionId_ = 0; 286 }; 287 288 } // namespace OHOS::Ace 289 290 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 291