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