1 /* 2 * Copyright (c) 2022-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_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H 18 19 #include <unordered_map> 20 #include <unordered_set> 21 #include <vector> 22 23 #include "accessibility_config.h" 24 #include "accessibility_element_operator.h" 25 #include "accessibility_event_info.h" 26 #include "accessibility_state_event.h" 27 28 #include "core/accessibility/accessibility_manager.h" 29 #include "core/accessibility/accessibility_utils.h" 30 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" 31 32 #include "js_third_accessibility_hover_ng.h" 33 34 namespace OHOS::NWeb { 35 class NWebAccessibilityNodeInfo; 36 } // namespace OHOS::NWeb::NWebAccessibilityNodeInfo 37 38 namespace OHOS::Ace::Framework { 39 40 struct SearchParameter { 41 int64_t nodeId; 42 std::string text; 43 int32_t mode; 44 int64_t uiExtensionOffset; 45 }; 46 47 struct CommonProperty { 48 int32_t innerWindowId = -1; 49 int32_t windowId = 0; 50 int32_t windowLeft = 0; 51 int32_t windowTop = 0; 52 int32_t pageId = 0; 53 std::string pagePath; 54 }; 55 56 struct ActionTable { 57 AceAction aceAction; 58 ActionType action; 59 }; 60 61 struct ActionStrTable { 62 ActionType action; 63 std::string actionStr; 64 }; 65 66 struct FillEventInfoParam { 67 int64_t elementId = 0; 68 int64_t stackNodeId = 0; 69 uint32_t windowId = 0; 70 }; 71 72 struct AccessibilityActionParam { 73 RefPtr<NG::AccessibilityProperty> accessibilityProperty; 74 std::string setTextArgument = ""; 75 int32_t setSelectionStart = -1; 76 int32_t setSelectionEnd = -1; 77 bool setSelectionDir = false; 78 int32_t setCursorIndex = -1; 79 TextMoveUnit moveUnit = TextMoveUnit::STEP_CHARACTER; 80 AccessibilityScrollType scrollType = AccessibilityScrollType::SCROLL_DEFAULT; 81 int32_t spanId = -1; 82 }; 83 84 struct ActionParam { 85 Accessibility::ActionType action; 86 std::map<std::string, std::string> actionArguments; 87 }; 88 89 class JsAccessibilityManager : public AccessibilityNodeManager, 90 public AccessibilityHoverManagerForThirdNG { 91 DECLARE_ACE_TYPE(JsAccessibilityManager, AccessibilityNodeManager); 92 93 public: 94 JsAccessibilityManager() = default; 95 ~JsAccessibilityManager() override; 96 97 // JsAccessibilityManager overrides functions. 98 void InitializeCallback() override; 99 void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) override; 100 void UpdateVirtualNodeFocus() override; 101 void SetCardViewParams(const std::string& key, bool focus) override; 102 void HandleComponentPostBinding() override; 103 void RegisterSubWindowInteractionOperation(int windowId) override; 104 void SetPipelineContext(const RefPtr<PipelineBase>& context) override; 105 void UpdateElementInfosTreeId(std::list<Accessibility::AccessibilityElementInfo>& infos); 106 void UpdateElementInfoTreeId(Accessibility::AccessibilityElementInfo& info); 107 108 void UpdateViewScale(); 109 GetScaleX()110 float GetScaleX() const 111 { 112 return scaleX_; 113 } 114 GetScaleY()115 float GetScaleY() const 116 { 117 return scaleY_; 118 } 119 GetWindowId()120 uint32_t GetWindowId() const 121 { 122 return windowId_; 123 } 124 SetWindowId(uint32_t windowId)125 void SetWindowId(uint32_t windowId) 126 { 127 windowId_ = windowId; 128 } 129 SaveLast(const int64_t elementId,const RefPtr<NG::FrameNode> & node)130 void SaveLast(const int64_t elementId, const RefPtr<NG::FrameNode>& node) 131 { 132 lastElementId_ = elementId; 133 lastFrameNode_ = node; 134 } 135 SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode> & currentFocusNode)136 void SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode>& currentFocusNode) 137 { 138 if (currentFocusNode->IsAccessibilityVirtualNode()) { 139 auto oldGeometryNode = currentFocusNode->GetGeometryNode(); 140 CHECK_NULL_VOID(oldGeometryNode); 141 oldGeometrySize_ = oldGeometryNode->GetFrameSize(); 142 } 143 } 144 145 bool SubscribeToastObserver(); 146 bool UnsubscribeToastObserver(); 147 bool SubscribeStateObserver(int eventType); 148 bool UnsubscribeStateObserver(int eventType); 149 int RegisterInteractionOperation(int windowId); 150 void DeregisterInteractionOperation(); 151 bool SendAccessibilitySyncEvent( 152 const AccessibilityEvent& accessibilityEvent, Accessibility::AccessibilityEventInfo eventInfo); 153 bool TransferAccessibilityAsyncEvent( 154 const Accessibility::AccessibilityEventInfo& eventInfo, 155 int64_t uiExtensionOffset) override; 156 void SendExtensionAccessibilityEvent( 157 const Accessibility::AccessibilityEventInfo& eventInfo, 158 int64_t uiExtensionOffset) override; 159 void SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 160 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId); 161 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 162 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 163 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 164 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 165 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 166 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 167 void UpdateElementInfoInnerWindowId(Accessibility::AccessibilityElementInfo& info, const int64_t& elementId); 168 bool IsUpdateWindowSceneInfo(const RefPtr<NG::FrameNode>& node, NG::WindowSceneInfo& windowSceneInfo); 169 void ExecuteAction(const int64_t accessibilityId, const ActionParam& param, const int32_t requestId, 170 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 171 bool ClearCurrentFocus(); 172 void UpdateNodeChildIds(const RefPtr<AccessibilityNode>& node); 173 void SendActionEvent(const Accessibility::ActionType& action, int64_t nodeId); 174 void SearchElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 175 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 176 const int64_t uiExtensionOffset = 0) override; 177 void SearchElementInfosByTextNG(int64_t elementId, const std::string& text, 178 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 179 const int64_t uiExtensionOffset = 0) override; 180 void FindFocusedElementInfoNG(int64_t elementId, int32_t focusType, Accessibility::AccessibilityElementInfo& info, 181 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override; 182 void FocusMoveSearchNG(int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info, 183 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override; 184 bool ExecuteExtensionActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 185 int32_t action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset) override; 186 #ifdef WEB_SUPPORTED 187 void SendWebAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent, 188 const RefPtr<NG::WebPattern>& webPattern) override; 189 void SearchWebElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 190 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId, 191 const RefPtr<NG::WebPattern>& webPattern); 192 void SearchWebElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 193 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 194 const RefPtr<NG::WebPattern>& webPattern); 195 void FindWebFocusedElementInfo(const int64_t elementId, const int32_t focusType, 196 const int32_t requestId, Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 197 const RefPtr<NG::WebPattern>& webPattern); 198 void FindWebFocusedElementInfoNG(int64_t elementId, int32_t focusType, 199 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 200 const RefPtr<NG::WebPattern>& webPattern); 201 void WebFocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 202 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 203 const RefPtr<NG::WebPattern>& webPattern); 204 void WebFocusMoveSearchNG(int64_t elementId, int32_t direction, 205 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 206 const RefPtr<NG::WebPattern>& webPattern); 207 void ExecuteWebAction(const int64_t elementId, const ActionParam& param, const int32_t requestId, 208 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 209 const RefPtr<NG::WebPattern>& webPattern); 210 bool ExecuteWebActionNG(int64_t elementId, Accessibility::ActionType action, 211 const std::map<std::string, std::string>& actionArguments, const RefPtr<NG::WebPattern>& webPattern); 212 213 bool DeregisterWebInteractionOperationAsChildTree(int32_t treeID) override; 214 bool RegisterWebInteractionOperationAsChildTree(int64_t accessibilityId, 215 const WeakPtr<NG::WebPattern>& webPattern) override; 216 void GetWebCursorPosition(const int64_t elementId, const int32_t requestId, 217 AccessibilityElementOperatorCallback& callback, const RefPtr<NG::WebPattern>& webPattern); 218 #endif //WEB_SUPPORTED 219 void GetResultOfFocusMoveSearchNG( 220 int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info); 221 222 std::string GetPagePath(); 223 224 void RegisterAccessibilityChildTreeCallback( 225 int64_t elementId, const std::shared_ptr<AccessibilityChildTreeCallback> &callback) override; 226 227 void DeregisterAccessibilityChildTreeCallback(int64_t elementId) override; 228 229 void RegisterAccessibilitySAObserverCallback( 230 int64_t elementId, const std::shared_ptr<AccessibilitySAObserverCallback> &callback) override; 231 232 void DeregisterAccessibilitySAObserverCallback(int64_t elementId) override; 233 234 void RegisterInteractionOperationAsChildTree(uint32_t parentWindowId, int32_t parentTreeId, 235 int64_t parentElementId) override; 236 void SetAccessibilityGetParentRectHandler(std::function<void(int32_t &, int32_t &)> &&callback) override; 237 void SetAccessibilityGetParentRectHandler( 238 std::function<void(AccessibilityParentRectInfo &)> &&callback) override; 239 void DeregisterInteractionOperationAsChildTree() override; 240 void SendEventToAccessibilityWithNode(const AccessibilityEvent& accessibilityEvent, 241 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context) override; 242 243 bool RegisterInteractionOperationAsChildTree(const Registration& registration) override; 244 bool DeregisterInteractionOperationAsChildTree(uint32_t windowId, int32_t treeId) override; 245 246 void TransferThirdProviderHoverEvent( 247 const WeakPtr<NG::FrameNode>& hostNode, const NG::PointF& point, SourceType source, 248 NG::AccessibilityHoverEventType eventType, TimeStamp time) override; 249 250 void DumpAccessibilityPropertyNG(const AccessibilityElementInfo& nodeInfo); 251 void DumpCommonPropertyNG(const AccessibilityElementInfo& nodeInfo, int32_t treeId); 252 bool OnDumpChildInfoForThird( 253 int64_t hostElementId, 254 const std::vector<std::string>& params, 255 std::vector<std::string>& info) override; 256 257 void FireAccessibilityEventCallback(uint32_t eventId, int64_t parameter) override; 258 bool IsScreenReaderEnabled() override; 259 260 AccessibilityWindowInfo GenerateWindowInfo(const RefPtr<NG::FrameNode>& node, 261 const RefPtr<PipelineBase>& context) override; 262 263 void UpdateWindowInfo(AccessibilityWindowInfo& window, const RefPtr<PipelineBase>& context) override; 264 AccessibilityParentRectInfo GetUECAccessibilityParentRectInfo() const; 265 void UpdateUECAccessibilityParentRectInfo(const AccessibilityParentRectInfo& info); 266 void RegisterUIExtBusinessConsumeCallback(); 267 void RegisterGetParentRectHandler(); 268 269 void SetFocusMoveResultWithNode( 270 const WeakPtr<NG::FrameNode>& hostNode, 271 AccessibilityElementOperatorCallback& callback, 272 const int32_t requestId); 273 274 AccessibilityWorkMode GenerateAccessibilityWorkMode() override; 275 276 protected: 277 void OnDumpInfoNG(const std::vector<std::string>& params, uint32_t windowId) override; 278 void DumpHandleEvent(const std::vector<std::string>& params) override; 279 void DumpProperty(const std::vector<std::string>& params) override; 280 void DumpTree(int32_t depth, int64_t nodeID, bool isDumpSimplify = false) override; 281 282 private: 283 static constexpr int32_t INVALID_PARENT_ID = -2100000; 284 285 class JsInteractionOperation : public Accessibility::AccessibilityElementOperator { 286 public: JsInteractionOperation(int32_t windowId)287 explicit JsInteractionOperation(int32_t windowId) : windowId_(windowId) {} 288 virtual ~JsInteractionOperation() = default; 289 // Accessibility override. 290 void SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 291 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override; 292 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 293 Accessibility::AccessibilityElementOperatorCallback& callback) override; 294 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 295 Accessibility::AccessibilityElementOperatorCallback& callback) override; 296 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 297 Accessibility::AccessibilityElementOperatorCallback& callback) override; 298 void ExecuteAction(const int64_t elementId, const int32_t action, 299 const std::map<std::string, std::string>& actionArguments, const int32_t requestId, 300 Accessibility::AccessibilityElementOperatorCallback& callback) override; 301 void ClearFocus() override; 302 void OutsideTouch() override; 303 void GetCursorPosition(const int64_t elementId, const int32_t requestId, 304 Accessibility::AccessibilityElementOperatorCallback &callback) override; 305 void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override; 306 void SetBelongTreeId(const int32_t treeId) override; 307 SetHandler(const WeakPtr<JsAccessibilityManager> & js)308 void SetHandler(const WeakPtr<JsAccessibilityManager>& js) 309 { 310 js_ = js; 311 } 312 GetHandler()313 const WeakPtr<JsAccessibilityManager>& GetHandler() const 314 { 315 return js_; 316 } 317 318 private: 319 WeakPtr<JsAccessibilityManager> js_; 320 uint32_t windowId_ = 0; 321 }; 322 #ifdef WEB_SUPPORTED 323 324 class WebInteractionOperation : public Accessibility::AccessibilityElementOperator { 325 public: WebInteractionOperation(int32_t windowId)326 explicit WebInteractionOperation(int32_t windowId) : windowId_(windowId) {} 327 virtual ~WebInteractionOperation() = default; 328 // Accessibility override. 329 void SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 330 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override; 331 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 332 Accessibility::AccessibilityElementOperatorCallback& callback) override; 333 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 334 Accessibility::AccessibilityElementOperatorCallback& callback) override; 335 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 336 Accessibility::AccessibilityElementOperatorCallback& callback) override; 337 void ExecuteAction(const int64_t elementId, const int32_t action, 338 const std::map<std::string, std::string>& actionArguments, const int32_t requestId, 339 Accessibility::AccessibilityElementOperatorCallback& callback) override; 340 void ClearFocus() override; 341 void OutsideTouch() override; 342 void GetCursorPosition(const int64_t elementId, const int32_t requestId, 343 Accessibility::AccessibilityElementOperatorCallback &callback) override; 344 void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override; 345 void SetBelongTreeId(const int32_t treeId) override; 346 SetHandler(const WeakPtr<JsAccessibilityManager> & js)347 void SetHandler(const WeakPtr<JsAccessibilityManager>& js) 348 { 349 js_ = js; 350 } 351 GetHandler()352 const WeakPtr<JsAccessibilityManager>& GetHandler() const 353 { 354 return js_; 355 } 356 SetWebPattern(const WeakPtr<NG::WebPattern> & webPattern)357 void SetWebPattern(const WeakPtr<NG::WebPattern>& webPattern) 358 { 359 webPattern_ = webPattern; 360 } 361 GetWebPattern()362 const WeakPtr<NG::WebPattern>& GetWebPattern() const 363 { 364 return webPattern_; 365 } 366 367 private: 368 WeakPtr<JsAccessibilityManager> js_; 369 uint32_t windowId_ = 0; 370 WeakPtr<NG::WebPattern> webPattern_; 371 }; 372 #endif // WEB_SUPPORTED 373 374 class ToastAccessibilityConfigObserver : public AccessibilityConfig::AccessibilityConfigObserver { 375 public: 376 ToastAccessibilityConfigObserver() = default; 377 void OnConfigChanged( 378 const AccessibilityConfig::CONFIG_ID id, const AccessibilityConfig::ConfigValue& value) override; 379 }; 380 381 class JsAccessibilityStateObserver : public Accessibility::AccessibilityStateObserver { 382 public: 383 void OnStateChanged(const bool state) override; SetAccessibilityManager(const WeakPtr<JsAccessibilityManager> & accessibilityManager)384 void SetAccessibilityManager(const WeakPtr<JsAccessibilityManager>& accessibilityManager) 385 { 386 accessibilityManager_ = accessibilityManager; 387 } 388 SetPipeline(const WeakPtr<PipelineBase> & pipeline)389 void SetPipeline(const WeakPtr<PipelineBase>& pipeline) 390 { 391 pipeline_ = pipeline; 392 } 393 394 private: 395 // Do not upgrade accessibilityManager_ on async thread, destructor might cause freeze 396 WeakPtr<JsAccessibilityManager> accessibilityManager_; 397 WeakPtr<PipelineBase> pipeline_; 398 }; 399 400 bool AccessibilityActionEvent(const Accessibility::ActionType& action, 401 const std::map<std::string, std::string>& actionArguments, const RefPtr<AccessibilityNode>& node, 402 const RefPtr<PipelineContext>& context); 403 bool RequestAccessibilityFocus(const RefPtr<AccessibilityNode>& node); 404 405 bool ClearAccessibilityFocus(const RefPtr<AccessibilityNode>& node); 406 407 void AddFocusableNode(std::list<RefPtr<AccessibilityNode>>& nodeList, const RefPtr<AccessibilityNode>& node); 408 bool CanAccessibilityFocused(const RefPtr<AccessibilityNode>& node); 409 RefPtr<AccessibilityNode> FindNodeInRelativeDirection( 410 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction); 411 RefPtr<AccessibilityNode> FindNodeInAbsoluteDirection( 412 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction); 413 RefPtr<AccessibilityNode> GetNextFocusableNode( 414 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node); 415 RefPtr<AccessibilityNode> GetPreviousFocusableNode( 416 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node); 417 418 bool ExecuteActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 419 Accessibility::ActionType action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset); 420 bool ConvertActionTypeToBoolen(Accessibility::ActionType action, RefPtr<NG::FrameNode>& frameNode, 421 int64_t elementId, RefPtr<NG::PipelineContext>& context); 422 void SetSearchElementInfoByAccessibilityIdResult(Accessibility::AccessibilityElementOperatorCallback& callback, 423 std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId); 424 425 void SetSearchElementInfoByTextResult(Accessibility::AccessibilityElementOperatorCallback& callback, 426 std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId); 427 428 void SetFindFocusedElementInfoResult(Accessibility::AccessibilityElementOperatorCallback& callback, 429 Accessibility::AccessibilityElementInfo& info, const int32_t requestId); 430 431 void SetFocusMoveSearchResult(Accessibility::AccessibilityElementOperatorCallback& callback, 432 Accessibility::AccessibilityElementInfo& info, const int32_t requestId); 433 434 void SetExecuteActionResult( 435 Accessibility::AccessibilityElementOperatorCallback& callback, const bool succeeded, const int32_t requestId); 436 437 void SearchExtensionElementInfoByAccessibilityIdNG(const SearchParameter& searchParam, 438 const RefPtr<NG::FrameNode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 439 const RefPtr<PipelineBase>& context, const RefPtr<NG::PipelineContext>& ngPipeline); 440 void SearchElementInfosByTextNG(const SearchParameter& searchParam, const RefPtr<NG::FrameNode>& node, 441 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 442 const RefPtr<NG::PipelineContext>& ngPipeline); 443 std::list<Accessibility::AccessibilityElementInfo> SearchElementInfosByTextNG( 444 int64_t elementId, const std::string& text, const RefPtr<NG::FrameNode>& node, int64_t offset); 445 void FindFocusedExtensionElementInfoNG(const SearchParameter& searchParam, 446 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 447 const RefPtr<NG::FrameNode>& root); 448 void FocusExtensionElementMoveSearchNG(const SearchParameter& searchParam, 449 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 450 const RefPtr<NG::FrameNode>& root, RefPtr<NG::FrameNode>& outputExtensionNode); 451 void TransferExecuteAction(int64_t elementId, RefPtr<NG::FrameNode>& node, 452 const std::map<std::string, std::string>& actionArguments, 453 Accessibility::ActionType& action, int64_t uiExtensionOffset); 454 RefPtr<NG::FrameNode> FindNodeFromRootByExtensionId(const RefPtr<NG::FrameNode>& root, const int64_t uiExtensionId); 455 bool RegisterThirdProviderInteractionOperationAsChildTree(const Registration& registration); 456 457 void DumpProperty(const RefPtr<AccessibilityNode>& node); 458 void DumpPropertyNG(int64_t nodeID); 459 void DumpHoverTestNG(uint32_t windowId, int64_t nodeID, int32_t x, int32_t y, bool verbose); 460 RefPtr<NG::PipelineContext> FindPipelineByElementId(const int64_t elementId, RefPtr<NG::FrameNode>& node); 461 RefPtr<NG::FrameNode> FindNodeFromPipeline(const WeakPtr<PipelineBase>& context, const int64_t elementId); 462 RefPtr<PipelineBase> GetPipelineByWindowId(const int32_t windowId); 463 void ProcessParameters(Accessibility::ActionType op, const std::vector<std::string>& params, 464 std::map<std::string, std::string>& paramsMap); 465 466 RefPtr<NG::PipelineContext> GetPipelineByWindowId(uint32_t windowId); 467 void DumpTreeNG(bool useWindowId, uint32_t windowId, int64_t rootId, bool isDumpSimplify = false); 468 void DumpTreeNG(const RefPtr<NG::FrameNode>& parent, int32_t depth, 469 int64_t nodeID, const CommonProperty& commonProperty, bool isDumpSimplify = false); 470 void DumpTreeNodeSafeAreaInfoNg(const RefPtr<NG::FrameNode>& node); 471 void DumpPadding(const std::unique_ptr<NG::PaddingProperty>& padding, std::string label); 472 void DumpBorder(const std::unique_ptr<NG::BorderWidthProperty>& border, std::string label); 473 void DumpTreeNodeCommonInfoNg(const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty); 474 void DumpTreeNodeSimplifyInfoNG( 475 const RefPtr<NG::FrameNode>& node, int32_t depth, const CommonProperty& commonProperty, int32_t childSize); 476 void DumpTreeAccessibilityNodeNG(const RefPtr<NG::UINode>& uiNodeParent, 477 int32_t depth, int64_t nodeID, const CommonProperty& commonProperty); 478 bool CheckDumpInfoParams(const std::vector<std::string> ¶ms); 479 480 void GenerateCommonProperty(const RefPtr<PipelineBase>& context, CommonProperty& output, 481 const RefPtr<PipelineBase>& mainContext, const RefPtr<NG::FrameNode>& node = nullptr); 482 483 void FindText(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 484 const RefPtr<NG::PipelineContext>& context, 485 const CommonProperty& commonProperty, const SearchParameter& searchParam); 486 487 void FindTextByTextHint(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 488 const RefPtr<NG::PipelineContext>& context, 489 const CommonProperty& commonProperty, const SearchParameter& searchParam); 490 491 void UpdateAccessibilityElementInfo( 492 const RefPtr<NG::FrameNode>& node, Accessibility::AccessibilityElementInfo& nodeInfo); 493 494 void UpdateAccessibilityVisible( 495 const RefPtr<NG::FrameNode>& node, Accessibility::AccessibilityElementInfo& nodeInfo); 496 497 void UpdateVirtualNodeInfo(std::list<Accessibility::AccessibilityElementInfo>& infos, 498 Accessibility::AccessibilityElementInfo& nodeInfo, 499 const RefPtr<NG::UINode>& uiVirtualNode, const CommonProperty& commonProperty, 500 const RefPtr<NG::PipelineContext>& ngPipeline); 501 502 void UpdateVirtualNodeChildAccessibilityElementInfo( 503 const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty, 504 Accessibility::AccessibilityElementInfo& nodeParentInfo, Accessibility::AccessibilityElementInfo& nodeInfo, 505 const RefPtr<NG::PipelineContext>& ngPipeline); 506 507 void UpdateVirtualNodeAccessibilityElementInfo( 508 const RefPtr<NG::FrameNode>& parent, const RefPtr<NG::FrameNode>& node, 509 const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo, 510 const RefPtr<NG::PipelineContext>& ngPipeline); 511 512 void UpdateAccessibilityElementInfo( 513 const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty, 514 Accessibility::AccessibilityElementInfo& nodeInfo, const RefPtr<NG::PipelineContext>& ngPipeline); 515 516 void UpdateCacheInfoNG(std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<NG::FrameNode>& node, 517 const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline, 518 const SearchParameter& searchParam); 519 #ifdef WEB_SUPPORTED 520 521 void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NWeb::NWebAccessibilityNodeInfo>& node, 522 Accessibility::AccessibilityElementInfo& nodeInfo, int32_t treeId); 523 524 void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NWeb::NWebAccessibilityNodeInfo>& node, 525 const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo, 526 const RefPtr<NG::WebPattern>& webPattern); 527 528 void UpdateWebCacheInfo(std::list<Accessibility::AccessibilityElementInfo>& infos, int64_t nodeId, 529 const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline, 530 const SearchParameter& searchParam, const RefPtr<NG::WebPattern>& webPattern); 531 #endif //WEB_SUPPORTED 532 void NotifyChildTreeOnRegister(int32_t treeId); 533 534 void NotifyChildTreeOnDeregister(); 535 536 void SendUecOnTreeEvent(int64_t splitElementId); 537 538 void NotifySetChildTreeIdAndWinId(int64_t elementId, const int32_t treeId, const int32_t childWindowId); 539 540 bool CheckIsChildElement( 541 int64_t &elementId, const std::vector<std::string>& params, std::vector<std::string>& info); 542 543 bool NeedRegisterChildTree(uint32_t parentWindowId, int32_t parentTreeId, int64_t parentElementId); 544 545 void FillEventInfoWithNode( 546 const RefPtr<NG::FrameNode>& node, 547 Accessibility::AccessibilityEventInfo& eventInfo, 548 const RefPtr<NG::PipelineContext>& context, 549 int64_t elementId); 550 551 void NotifyAccessibilitySAStateChange(bool state); 552 553 void SendEventToAccessibilityWithNodeInner(const AccessibilityEvent& accessibilityEvent, 554 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context); 555 void SendAccessibilityAsyncEventInner(const AccessibilityEvent& accessibilityEvent); 556 int64_t GetDelayTimeBeforeSendEvent(const AccessibilityEvent& accessibilityEvent, const RefPtr<AceType>& node); 557 std::string callbackKey_; 558 uint32_t windowId_ = 0; 559 std::shared_ptr<JsAccessibilityStateObserver> stateObserver_ = nullptr; 560 std::shared_ptr<ToastAccessibilityConfigObserver> toastObserver_ = nullptr; 561 float scaleX_ = 1.0f; 562 float scaleY_ = 1.0f; 563 int64_t currentFocusNodeId_ = -1; 564 565 int64_t lastElementId_ = -1; 566 WeakPtr<NG::FrameNode> lastFrameNode_; 567 NG::SizeF oldGeometrySize_; 568 mutable std::mutex childTreeCallbackMapMutex_; 569 std::unordered_map<int64_t, std::shared_ptr<AccessibilityChildTreeCallback>> childTreeCallbackMap_; 570 mutable std::mutex componentSACallbackMutex_; 571 std::unordered_map<int64_t, std::shared_ptr<AccessibilitySAObserverCallback>> componentSACallbackMap_; 572 int64_t parentElementId_ = INVALID_PARENT_ID; 573 uint32_t parentWindowId_ = 0; 574 int32_t parentTreeId_ = 0; 575 uint32_t parentWebWindowId_ = 0; 576 std::function<void(int32_t&, int32_t&)> getParentRectHandler_; 577 std::function<void(AccessibilityParentRectInfo&)> getParentRectHandlerNew_; 578 579 AccessibilityParentRectInfo uecRectInfo_; 580 }; 581 582 } // namespace OHOS::Ace::Framework 583 584 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H 585