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 "core/accessibility/hidumper/accessibility_hidumper.h" 31 #include "core/accessibility/utils/accessibility_manager_utils.h" 32 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" 33 34 #include "js_third_accessibility_hover_ng.h" 35 36 namespace OHOS::NWeb { 37 class NWebAccessibilityNodeInfo; 38 } // namespace OHOS::NWeb::NWebAccessibilityNodeInfo 39 40 namespace OHOS::Ace::NG { 41 class TransitionalNodeInfo; 42 } 43 44 namespace OHOS::Accessibility { 45 class AccessibilitySystemAbilityClient; 46 } 47 48 namespace OHOS::Ace::Framework { 49 50 struct SearchParameter { 51 int64_t nodeId; 52 std::string text; 53 int32_t mode; 54 int64_t uiExtensionOffset; 55 }; 56 57 using CheckAndGetEmbedFunc = std::function<int64_t(const RefPtr<NG::FrameNode>& node)>; 58 struct CommonProperty { 59 int32_t innerWindowId = -1; 60 int32_t windowId = 0; 61 int32_t windowLeft = 0; 62 int32_t windowTop = 0; 63 std::vector<std::string> pagePaths; 64 std::vector<RefPtr<NG::FrameNode>> pageNodes; 65 bool isReduceMode = false; 66 bool checkEmbedNode = true; 67 CheckAndGetEmbedFunc checkGetFunc = nullptr; 68 RotateTransform rotateTransform; 69 float_t scaleX = 1.0f; 70 float_t scaleY = 1.0f; 71 }; 72 73 struct FillEventInfoParam { 74 int64_t elementId = 0; 75 int64_t stackNodeId = 0; 76 uint32_t windowId = 0; 77 }; 78 79 struct AccessibilityActionParam { 80 RefPtr<NG::AccessibilityProperty> accessibilityProperty; 81 std::string setTextArgument = ""; 82 int32_t setSelectionStart = -1; 83 int32_t setSelectionEnd = -1; 84 bool setSelectionDir = false; 85 int32_t setCursorIndex = -1; 86 TextMoveUnit moveUnit = TextMoveUnit::STEP_CHARACTER; 87 AccessibilityScrollType scrollType = AccessibilityScrollType::SCROLL_DEFAULT; 88 int32_t spanId = -1; 89 }; 90 91 struct ActionParam { 92 Accessibility::ActionType action; 93 std::map<std::string, std::string> actionArguments; 94 }; 95 96 struct AccessibilityFocusInfo { 97 int64_t currentFocusNodeId; 98 int64_t currentFocusVirtualNodeParentId; 99 100 explicit AccessibilityFocusInfo(int64_t nodeId = -1, int64_t parentId = -1) currentFocusNodeIdAccessibilityFocusInfo101 : currentFocusNodeId(nodeId), currentFocusVirtualNodeParentId(parentId) {} 102 }; 103 104 struct GetInfoByNodeId { 105 std::string componentType; 106 int32_t pageId = -1; 107 int32_t nodeInstanceId = -1; 108 }; 109 110 enum class SearchSurfaceIdRet : int32_t { 111 SEARCH_SUCCESS = 0, 112 NO_MATCH_NODE, 113 TIMEOUT, 114 }; 115 116 enum class SearchSurfaceIdType : int32_t { 117 SEARCH_ALL = 0, 118 SEARCH_HEAD, 119 SEARCH_TAIL, 120 }; 121 122 class JsAccessibilityManager : public AccessibilityNodeManager, 123 public AccessibilityHoverManagerForThirdNG { 124 DECLARE_ACE_TYPE(JsAccessibilityManager, AccessibilityNodeManager); 125 126 public: 127 JsAccessibilityManager() = default; 128 ~JsAccessibilityManager() override; 129 130 // JsAccessibilityManager overrides functions. 131 void InitializeCallback() override; 132 void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) override; 133 void UpdateVirtualNodeFocus() override; 134 void SetCardViewParams(const std::string& key, bool focus) override; 135 void HandleComponentPostBinding() override; 136 void RegisterSubWindowInteractionOperation(int windowId) override; 137 void SetPipelineContext(const RefPtr<PipelineBase>& context) override; 138 void UpdateElementInfosTreeId(std::list<Accessibility::AccessibilityElementInfo>& infos, bool checkEmbed = false); 139 void UpdateElementInfoTreeId(Accessibility::AccessibilityElementInfo& info); 140 static bool IsTagInEmbedComponent(const std::string& tag); 141 142 void UpdateViewScale(); 143 GetScaleX()144 float GetScaleX() const 145 { 146 return scaleX_; 147 } 148 GetScaleY()149 float GetScaleY() const 150 { 151 return scaleY_; 152 } 153 GetWindowId()154 uint32_t GetWindowId() const 155 { 156 return windowId_; 157 } 158 SetWindowId(uint32_t windowId)159 void SetWindowId(uint32_t windowId) 160 { 161 windowId_ = windowId; 162 } 163 SaveLast(const int64_t elementId,const RefPtr<NG::FrameNode> & node)164 void SaveLast(const int64_t elementId, const RefPtr<NG::FrameNode>& node) 165 { 166 lastElementId_ = elementId; 167 lastFrameNode_ = node; 168 } 169 SetReentrantLimit(const bool reentrantLimit)170 void SetReentrantLimit(const bool reentrantLimit) 171 { 172 reentrantLimit_ = reentrantLimit; 173 } 174 IsReentrantLimit()175 bool IsReentrantLimit() const 176 { 177 return reentrantLimit_; 178 } 179 SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode> & currentFocusNode)180 void SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode>& currentFocusNode) 181 { 182 if (currentFocusNode->IsAccessibilityVirtualNode()) { 183 auto oldGeometryNode = currentFocusNode->GetGeometryNode(); 184 CHECK_NULL_VOID(oldGeometryNode); 185 oldGeometrySize_ = oldGeometryNode->GetFrameSize(); 186 } 187 } 188 189 bool SubscribeToastObserver(); 190 bool UnsubscribeToastObserver(); 191 bool SubscribeStateObserver(uint32_t eventType); 192 bool UnsubscribeStateObserver(uint32_t eventType); 193 int RegisterInteractionOperation(int windowId); 194 void DeregisterInteractionOperation(); 195 196 bool IsSendAccessibilityEvent(const AccessibilityEvent& accessibilityEvent); 197 bool IsSendAccessibilityEventForUEA( 198 const AccessibilityEvent& accessibilityEvent, const std::string& componentType, const int32_t pageId); 199 bool IsSendAccessibilityEventForHost( 200 const AccessibilityEvent& accessibilityEvent, const std::string& componentType, const int32_t pageId); 201 void GetComponentTypeAndPageIdByNodeId( 202 const int64_t nodeId, 203 const RefPtr<PipelineBase>& context, 204 GetInfoByNodeId& infoOfNode); 205 bool CachePageEventByController( 206 const AccessibilityEvent& accessibilityEvent, 207 const std::string& componentType, 208 int32_t pageId, 209 int32_t containerId); 210 211 void SendCacheAccessibilityEvent(int32_t instanceId); 212 void SendCacheAccessibilityEventForHost(const int32_t pageId); 213 214 void AddFrameNodeToUecStatusVec(const RefPtr<NG::FrameNode>& node) override; 215 void AddFrameNodeToDefaultFocusList(const RefPtr<NG::FrameNode>& node, bool isFocus) override; 216 void AddDefaultFocusNode(const RefPtr<NG::FrameNode>& defaultFocusNode); 217 void EraseDefaultFocusNode(const RefPtr<NG::FrameNode>& defaultFocusNode); 218 GetDefaultFocusList()219 std::list<WeakPtr<NG::FrameNode>>& GetDefaultFocusList() 220 { 221 return defaultFocusList_; 222 } 223 224 void RegisterUIExtGetPageModeCallback(RefPtr<NG::UIExtensionManager>& uiExtManager) override; 225 void UpdateFrameNodeState(int32_t nodeId) override; 226 227 void ReleaseCacheEvent(); UpdatePageMode(const std::string & pageMode)228 void UpdatePageMode(const std::string& pageMode) override 229 { 230 pageMode_ = std::make_optional(pageMode); 231 } 232 233 bool SendAccessibilitySyncEvent( 234 const AccessibilityEvent& accessibilityEvent, Accessibility::AccessibilityEventInfo eventInfo); 235 bool TransferAccessibilityAsyncEvent( 236 const Accessibility::AccessibilityEventInfo& eventInfo, 237 int64_t uiExtensionOffset) override; 238 void SendExtensionAccessibilityEvent( 239 const Accessibility::AccessibilityEventInfo& eventInfo, 240 int64_t uiExtensionOffset) override; 241 void SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 242 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId); 243 void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam ¶m, 244 const int32_t requestId, AccessibilityElementOperatorCallback &callback, const int32_t windowId); 245 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 246 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 247 void SearchDefaultFocusByWindowId(const int32_t windowId, int32_t pageId, const int32_t requestId, 248 Accessibility::AccessibilityElementOperatorCallback& callback); 249 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 250 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 251 bool ShouldSkipAccessibilityStateChange(const RefPtr<PipelineBase>& pipelineRef); 252 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 253 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 254 bool IsUpdateWindowSceneInfo(const RefPtr<NG::FrameNode>& node, NG::WindowSceneInfo& windowSceneInfo); 255 void UpdateElementInfoInnerWindowId(Accessibility::AccessibilityElementInfo& info, const int64_t& elementId); 256 void ExecuteAction(const int64_t accessibilityId, const ActionParam& param, const int32_t requestId, 257 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId); 258 bool ClearCurrentFocus(); 259 void UpdateNodeChildIds(const RefPtr<AccessibilityNode>& node); 260 void SendActionEvent(const Accessibility::ActionType& action, int64_t nodeId); 261 void SearchElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 262 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 263 const int64_t uiExtensionOffset = 0) override; 264 bool FindUIExtensionAccessibilityElement(const RefPtr<NG::FrameNode>& checkNode, const std::string &customId, 265 const CommonProperty& commonProperty, std::list<AccessibilityElementInfo> &infos, 266 const RefPtr<PipelineBase>& context); 267 bool SetAccessibilityCustomId(RefPtr<NG::FrameNode> checkNode, const std::string &customId, 268 CommonProperty &commonProperty, std::list<AccessibilityElementInfo> &infos, 269 const RefPtr<PipelineBase>& context); 270 void SearchElementInfoByCustomIdNG(const int64_t elementId, const std::string &customId, 271 std::list<AccessibilityElementInfo> &infos, std::list<AccessibilityElementInfo> &treeInfos, 272 const RefPtr<PipelineBase>& context); 273 void SearchDefaultFocusByWindowIdNG(const int32_t pageId, 274 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context); 275 void SearchElementInfosByTextNG(int64_t elementId, const std::string& text, 276 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 277 const int64_t uiExtensionOffset = 0) override; 278 void FindFocusedElementInfoNG(int64_t elementId, int32_t focusType, Accessibility::AccessibilityElementInfo& info, 279 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override; 280 void FocusMoveSearchNG(int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info, 281 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override; 282 bool ExecuteExtensionActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 283 int32_t action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset) override; 284 int32_t GetTransformDegreeRelativeToWindow(const RefPtr<NG::FrameNode>& node, bool excludeSelf = false) override; 285 AccessibilityParentRectInfo GetTransformRectInfoRelativeToWindow( 286 const RefPtr<NG::FrameNode>& node, const RefPtr<PipelineBase>& context) override; 287 #ifdef WEB_SUPPORTED 288 void SendWebAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent, 289 const RefPtr<NG::WebPattern>& webPattern) override; 290 void SearchWebElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 291 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId, 292 const RefPtr<NG::WebPattern>& webPattern); 293 void SearchWebElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 294 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 295 const RefPtr<NG::WebPattern>& webPattern); 296 void FindWebFocusedElementInfo(const int64_t elementId, const int32_t focusType, 297 const int32_t requestId, Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 298 const RefPtr<NG::WebPattern>& webPattern); 299 void FindWebFocusedElementInfoNG(int64_t elementId, int32_t focusType, 300 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 301 const RefPtr<NG::WebPattern>& webPattern); 302 void WebFocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 303 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 304 const RefPtr<NG::WebPattern>& webPattern); 305 void WebFocusMoveSearchByComponent(AccessibilityElementInfo& nodeInfo, const RefPtr<NG::WebPattern>& webPattern, 306 const int32_t direction, RefPtr<PipelineBase> context); 307 void WebFocusMoveSearchNG(int64_t elementId, int32_t direction, 308 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 309 const RefPtr<NG::WebPattern>& webPattern); 310 void ExecuteWebAction(const int64_t elementId, const ActionParam& param, const int32_t requestId, 311 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId, 312 const RefPtr<NG::WebPattern>& webPattern); 313 bool ExecuteWebActionNG(int64_t elementId, Accessibility::ActionType action, 314 const std::map<std::string, std::string>& actionArguments, const RefPtr<NG::WebPattern>& webPattern); 315 316 bool DeregisterWebInteractionOperationAsChildTree(int32_t treeID, 317 const WeakPtr<NG::WebPattern>& webPattern) override; 318 bool RegisterWebInteractionOperationAsChildTree(int64_t accessibilityId, 319 const WeakPtr<NG::WebPattern>& webPattern) override; 320 void GetWebCursorPosition(const int64_t elementId, const int32_t requestId, 321 AccessibilityElementOperatorCallback& callback, const RefPtr<NG::WebPattern>& webPattern); 322 #endif //WEB_SUPPORTED 323 void GetResultOfFocusMoveSearchNG( 324 int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info); 325 326 std::string GetPagePath(); 327 328 void RegisterAccessibilityChildTreeCallback( 329 int64_t elementId, const std::shared_ptr<AccessibilityChildTreeCallback> &callback) override; 330 331 void DeregisterAccessibilityChildTreeCallback(int64_t elementId) override; 332 333 void RegisterAccessibilitySAObserverCallback( 334 int64_t elementId, const std::shared_ptr<AccessibilitySAObserverCallback> &callback) override; 335 336 void DeregisterAccessibilitySAObserverCallback(int64_t elementId) override; 337 338 void RegisterInteractionOperationAsChildTree(uint32_t parentWindowId, int32_t parentTreeId, 339 int64_t parentElementId) override; 340 void SetAccessibilityGetParentRectHandler(std::function<void(int32_t &, int32_t &)> &&callback) override; 341 void SetAccessibilityGetParentRectHandler( 342 std::function<void(AccessibilityParentRectInfo &)> &&callback) override; 343 void DeregisterInteractionOperationAsChildTree() override; 344 void SendEventToAccessibilityWithNode(const AccessibilityEvent& accessibilityEvent, 345 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context) override; 346 347 bool RegisterInteractionOperationAsChildTree(const Registration& registration) override; 348 bool DeregisterInteractionOperationAsChildTree(uint32_t windowId, int32_t treeId) override; 349 350 void TransferThirdProviderHoverEvent( 351 const WeakPtr<NG::FrameNode>& hostNode, const NG::PointF& point, SourceType source, 352 NG::AccessibilityHoverEventType eventType, TimeStamp time) override; 353 354 void DumpAccessibilityPropertyNG(const AccessibilityElementInfo& nodeInfo); 355 void DumpCommonPropertyNG(const AccessibilityElementInfo& nodeInfo, int32_t treeId); 356 bool OnDumpChildInfoForThird( 357 int64_t hostElementId, 358 const std::vector<std::string>& params, 359 std::vector<std::string>& info) override; 360 void ProcessParameters( 361 ActionType op, const std::vector<std::string>& params, std::map<std::string, std::string>& paramsMap); 362 bool CheckDumpHandleEventParams(const std::vector<std::string> ¶ms); 363 bool CheckGetActionIdAndOp( 364 const std::vector<std::string>& params, 365 int64_t& actionAccessibilityId, 366 ActionType& actionOp); 367 bool DumpProcessEventParameters( 368 AccessibilityEvent& event, const std::vector<std::string>& params); 369 bool GetDumpInfoArgument(const std::vector<std::string>& params, DumpInfoArgument& argument); 370 bool DumpInfoParams(const std::vector<std::string>& params, DumpInfoArgument& argument); 371 bool HandleNodeModeParam(const std::string& param, DumpInfoArgument& argument); 372 void FireAccessibilityEventCallback(uint32_t eventId, int64_t parameter) override; 373 AccessibilityWindowInfo GenerateWindowInfo(const RefPtr<NG::FrameNode>& node, 374 const RefPtr<PipelineBase>& context) override; 375 void UpdateWindowInfo(AccessibilityWindowInfo& window, const RefPtr<PipelineBase>& context) override; 376 377 AccessibilityWorkMode GenerateAccessibilityWorkMode() override; 378 void UpdateAccessibilityNextFocusIdMap(int32_t containerId, 379 const std::string& nextFocusInspectorKey, 380 int64_t preAccessibilityId) override; 381 382 AccessibilityParentRectInfo GetUECAccessibilityParentRectInfo() const; 383 void UpdateUECAccessibilityParentRectInfo(const AccessibilityParentRectInfo& info); 384 void RegisterUIExtBusinessConsumeCallback(); 385 void RegisterGetParentRectHandler(); 386 387 bool IsScreenReaderEnabled() override; 388 WeakPtr<NG::WebPattern> GetWebPatternBySurfaceId(const std::string& surfaceId) override; 389 void SetWebPatternBySurfaceId(const std::string& surfaceId, WeakPtr<NG::WebPattern> pattern) override; 390 void RemoveWebPatternBySurfaceId(const std::string& surfaceId) override; 391 void SearchAccessibilityNodeBySpecificProperty(const int64_t elementId, 392 const SpecificPropertyParam ¶m, const int32_t requestId, 393 AccessibilityElementOperatorCallback &callback, const int32_t windowId); 394 void UpdateAccessibilityNodeRect(const RefPtr<NG::FrameNode>& frameNode) override; 395 void OnAccessbibilityDetachFromMainTree(const RefPtr<NG::FrameNode>& frameNode) override; 396 397 void SetFocusMoveResultWithNode( 398 const WeakPtr<NG::FrameNode>& hostNode, 399 AccessibilityElementOperatorCallback& callback, 400 const int32_t requestId); 401 402 void ReleasePageEvent( 403 const RefPtr<NG::FrameNode>& node, 404 bool deleteController = true, 405 bool releaseAll = false) override; 406 407 void AddToPageEventController(const RefPtr<NG::FrameNode>& node) override; 408 bool DeleteFromPageEventController(const RefPtr<NG::FrameNode>& node) override; 409 bool CheckPageEventCached(const RefPtr<NG::FrameNode>& node, bool onlyCurrentPage) override; 410 411 bool CheckAccessibilityVisible(const RefPtr<NG::FrameNode>& node) override; 412 413 void AddHoverTransparentCallback(const RefPtr<NG::FrameNode>& node) override; 414 bool CheckHoverTransparentCallbackListEmpty(int32_t containerId) override; 415 416 int64_t CheckAndGetEmbedFrameNode(const RefPtr<NG::FrameNode>& node); 417 void ChooseDumpEvent(const std::vector<std::string>& params, 418 DumpInfoArgument& argument, uint32_t windowId, bool hasJson); SetIsIgnoreAllAction(bool isIgnoreAllAction)419 void SetIsIgnoreAllAction(bool isIgnoreAllAction) 420 { 421 isIgnoreAllAction_ = isIgnoreAllAction; 422 } 423 GetIsIgnoreAllAction()424 bool GetIsIgnoreAllAction() const 425 { 426 return isIgnoreAllAction_; 427 } 428 protected: 429 void OnDumpInfoNG(const std::vector<std::string>& params, uint32_t windowId, bool hasJson = false) override; 430 void DumpHandleEvent(const std::vector<std::string>& params) override; 431 void DumpProperty(const std::vector<std::string>& params) override; 432 void DumpTree(int32_t depth, int64_t nodeID, bool isDumpSimplify = false) override; 433 private: 434 static constexpr int32_t INVALID_PARENT_ID = -2100000; 435 mutable std::mutex webPatternMapMutex_; 436 std::unordered_map<std::string, WeakPtr<NG::WebPattern>> webPatternMap_; 437 438 class JsInteractionOperation : public Accessibility::AccessibilityElementOperator { 439 public: JsInteractionOperation(int32_t windowId)440 explicit JsInteractionOperation(int32_t windowId) : windowId_(windowId) {} 441 virtual ~JsInteractionOperation() = default; 442 // Accessibility override. 443 RetError SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 444 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override; 445 void HandleSearchElementInfoCallback(AccessibilityElementOperatorCallback& callback, int32_t requestId); 446 void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam ¶m, 447 const int32_t requestId, AccessibilityElementOperatorCallback &callback) override; 448 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 449 Accessibility::AccessibilityElementOperatorCallback& callback) override; 450 void SearchDefaultFocusByWindowId(const int32_t windowId, const int32_t requestId, 451 Accessibility::AccessibilityElementOperatorCallback &callback, const int32_t pageId) override; 452 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 453 Accessibility::AccessibilityElementOperatorCallback& callback) override; 454 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 455 Accessibility::AccessibilityElementOperatorCallback& callback) override; 456 void ExecuteAction(const int64_t elementId, const int32_t action, 457 const std::map<std::string, std::string>& actionArguments, const int32_t requestId, 458 Accessibility::AccessibilityElementOperatorCallback& callback) override; 459 void ClearFocus() override; 460 void OutsideTouch() override; 461 void GetCursorPosition(const int64_t elementId, const int32_t requestId, 462 Accessibility::AccessibilityElementOperatorCallback &callback) override; 463 void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override; 464 void SetBelongTreeId(const int32_t treeId) override; 465 SetHandler(const WeakPtr<JsAccessibilityManager> & js)466 void SetHandler(const WeakPtr<JsAccessibilityManager>& js) 467 { 468 js_ = js; 469 } 470 GetHandler()471 const WeakPtr<JsAccessibilityManager>& GetHandler() const 472 { 473 return js_; 474 } 475 476 private: 477 WeakPtr<JsAccessibilityManager> js_; 478 uint32_t windowId_ = 0; 479 }; 480 #ifdef WEB_SUPPORTED 481 482 class WebInteractionOperation : public Accessibility::AccessibilityElementOperator { 483 public: WebInteractionOperation(int32_t windowId)484 explicit WebInteractionOperation(int32_t windowId) : windowId_(windowId) {} 485 virtual ~WebInteractionOperation() = default; 486 // Accessibility override. 487 RetError SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId, 488 Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override; 489 void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam ¶m, 490 const int32_t requestId, AccessibilityElementOperatorCallback &callback) override; 491 void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId, 492 Accessibility::AccessibilityElementOperatorCallback& callback) override; 493 void SearchDefaultFocusByWindowId(const int32_t windowId, const int32_t requestId, 494 Accessibility::AccessibilityElementOperatorCallback &callback, const int32_t pageId) override; 495 void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId, 496 Accessibility::AccessibilityElementOperatorCallback& callback) override; 497 void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId, 498 Accessibility::AccessibilityElementOperatorCallback& callback) override; 499 void ExecuteAction(const int64_t elementId, const int32_t action, 500 const std::map<std::string, std::string>& actionArguments, const int32_t requestId, 501 Accessibility::AccessibilityElementOperatorCallback& callback) override; 502 void ClearFocus() override; 503 void OutsideTouch() override; 504 void GetCursorPosition(const int64_t elementId, const int32_t requestId, 505 Accessibility::AccessibilityElementOperatorCallback &callback) override; 506 void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override; 507 void SetBelongTreeId(const int32_t treeId) override; 508 SetHandler(const WeakPtr<JsAccessibilityManager> & js)509 void SetHandler(const WeakPtr<JsAccessibilityManager>& js) 510 { 511 js_ = js; 512 } 513 GetHandler()514 const WeakPtr<JsAccessibilityManager>& GetHandler() const 515 { 516 return js_; 517 } 518 SetWebPattern(const WeakPtr<NG::WebPattern> & webPattern)519 void SetWebPattern(const WeakPtr<NG::WebPattern>& webPattern) 520 { 521 webPattern_ = webPattern; 522 } 523 GetWebPattern()524 const WeakPtr<NG::WebPattern>& GetWebPattern() const 525 { 526 return webPattern_; 527 } 528 529 private: 530 WeakPtr<JsAccessibilityManager> js_; 531 uint32_t windowId_ = 0; 532 WeakPtr<NG::WebPattern> webPattern_; 533 }; 534 #endif // WEB_SUPPORTED 535 536 class ToastAccessibilityConfigObserver : public AccessibilityConfig::AccessibilityConfigObserver { 537 public: 538 ToastAccessibilityConfigObserver() = default; 539 void OnConfigChanged( 540 const AccessibilityConfig::CONFIG_ID id, const AccessibilityConfig::ConfigValue& value) override; 541 }; 542 543 class JsAccessibilityStateObserver : public Accessibility::AccessibilityStateObserver { 544 public: 545 void OnStateChanged(const bool state) override; SetAccessibilityManager(const WeakPtr<JsAccessibilityManager> & accessibilityManager)546 void SetAccessibilityManager(const WeakPtr<JsAccessibilityManager>& accessibilityManager) 547 { 548 accessibilityManager_ = accessibilityManager; 549 } 550 SetPipeline(const WeakPtr<PipelineBase> & pipeline)551 void SetPipeline(const WeakPtr<PipelineBase>& pipeline) 552 { 553 pipeline_ = pipeline; 554 } 555 SetEventType(uint32_t eventType)556 void SetEventType(uint32_t eventType) 557 { 558 eventType_ = eventType; 559 } 560 561 private: 562 // Do not upgrade accessibilityManager_ on async thread, destructor might cause freeze 563 WeakPtr<JsAccessibilityManager> accessibilityManager_; 564 WeakPtr<PipelineBase> pipeline_; 565 uint32_t eventType_; 566 }; 567 568 bool AccessibilityActionEvent(const Accessibility::ActionType& action, 569 const std::map<std::string, std::string>& actionArguments, const RefPtr<AccessibilityNode>& node, 570 const RefPtr<PipelineContext>& context); 571 bool RequestAccessibilityFocus(const RefPtr<AccessibilityNode>& node); 572 573 bool ClearAccessibilityFocus(const RefPtr<AccessibilityNode>& node); 574 575 void AddFocusableNode(std::list<RefPtr<AccessibilityNode>>& nodeList, const RefPtr<AccessibilityNode>& node); 576 bool CanAccessibilityFocused(const RefPtr<AccessibilityNode>& node); 577 RefPtr<AccessibilityNode> FindNodeInRelativeDirection( 578 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction); 579 RefPtr<AccessibilityNode> FindNodeInAbsoluteDirection( 580 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction); 581 RefPtr<AccessibilityNode> GetNextFocusableNode( 582 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node); 583 RefPtr<AccessibilityNode> GetPreviousFocusableNode( 584 const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node); 585 586 bool ExecuteActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 587 Accessibility::ActionType action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset); 588 bool ConvertActionTypeToBoolen( 589 Accessibility::ActionType action, 590 RefPtr<NG::FrameNode>& frameNode, 591 int64_t elementId, 592 RefPtr<NG::PipelineContext>& context, 593 const std::map<std::string, std::string>& actionArguments); 594 595 void SetSearchElementInfoByAccessibilityIdResult(Accessibility::AccessibilityElementOperatorCallback& callback, 596 std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId, bool checkEmbed = false); 597 598 void SetSearchElementInfoByCustomIdResult(Accessibility::AccessibilityElementOperatorCallback& callback, 599 std::list<AccessibilityElementInfo> &infos, const std::list<AccessibilityElementInfo> &treeInfos, 600 const int32_t requestId); 601 602 void SetSearchElementInfoByTextResult(Accessibility::AccessibilityElementOperatorCallback& callback, 603 std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId); 604 605 void SetSearchDefaultFocusByWindowIdResult(Accessibility::AccessibilityElementOperatorCallback& callback, 606 std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId); 607 608 void SetFindFocusedElementInfoResult(Accessibility::AccessibilityElementOperatorCallback& callback, 609 Accessibility::AccessibilityElementInfo& info, const int32_t requestId); 610 611 void SetFocusMoveSearchResult(Accessibility::AccessibilityElementOperatorCallback& callback, 612 Accessibility::AccessibilityElementInfo& info, const int32_t requestId); 613 614 void SetExecuteActionResult( 615 Accessibility::AccessibilityElementOperatorCallback& callback, const bool succeeded, const int32_t requestId); 616 617 void SearchExtensionElementInfoByAccessibilityIdNG(const SearchParameter& searchParam, 618 const RefPtr<NG::FrameNode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 619 const RefPtr<PipelineBase>& context, const RefPtr<NG::PipelineContext>& ngPipeline); 620 void SearchElementInfosByTextNG(const SearchParameter& searchParam, const RefPtr<NG::FrameNode>& node, 621 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 622 const RefPtr<NG::PipelineContext>& ngPipeline); 623 std::list<Accessibility::AccessibilityElementInfo> SearchElementInfosByTextNG( 624 int64_t elementId, const std::string& text, const RefPtr<NG::FrameNode>& node, int64_t offset); 625 void FindFocusedExtensionElementInfoNG(const SearchParameter& searchParam, 626 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 627 const RefPtr<NG::FrameNode>& root); 628 void FocusExtensionElementMoveSearchNG(const SearchParameter& searchParam, 629 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 630 const RefPtr<NG::FrameNode>& root, RefPtr<NG::FrameNode>& outputExtensionNode); 631 void TransferExecuteAction(int64_t elementId, RefPtr<NG::FrameNode>& node, 632 const std::map<std::string, std::string>& actionArguments, 633 Accessibility::ActionType& action, int64_t uiExtensionOffset); 634 RefPtr<NG::FrameNode> FindNodeFromRootByExtensionId(const RefPtr<NG::FrameNode>& root, const int64_t uiExtensionId); 635 bool RegisterThirdProviderInteractionOperationAsChildTree(const Registration& registration); 636 637 void DumpProperty(const RefPtr<AccessibilityNode>& node); 638 void DumpPropertyInfo(const RefPtr<NG::FrameNode>& frameNode, AccessibilityElementInfo& nodeInfo); 639 void DumpPropertyNG(int64_t nodeID); 640 void DumpHoverTestNG(uint32_t windowId, int64_t nodeID, int32_t x, int32_t y, bool verbose); 641 RefPtr<NG::PipelineContext> FindPipelineByElementId(const int64_t elementId, RefPtr<NG::FrameNode>& node); 642 RefPtr<NG::FrameNode> FindNodeFromPipeline(const WeakPtr<PipelineBase>& context, const int64_t elementId); 643 RefPtr<PipelineBase> GetPipelineByWindowId(const int32_t windowId); 644 645 RefPtr<NG::PipelineContext> GetPipelineByWindowId(uint32_t windowId); 646 void DumpTreeNG(bool useWindowId, uint32_t windowId, int64_t rootId, bool isDumpSimplify = false); 647 void DumpTreeNG(const RefPtr<NG::FrameNode>& parent, int32_t depth, 648 int64_t nodeID, const CommonProperty& commonProperty, bool isDumpSimplify = false); 649 void DumpTreeNodeSafeAreaInfoNg(const RefPtr<NG::FrameNode>& node); 650 void DumpPadding(const std::unique_ptr<NG::PaddingProperty>& padding, std::string label); 651 void DumpBorder(const std::unique_ptr<NG::BorderWidthProperty>& border, std::string label); 652 void DumpTreeNodeCommonInfoNg(const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty); 653 void DumpTreeNodeSimplifyInfoNG( 654 const RefPtr<NG::FrameNode>& node, int32_t depth, const CommonProperty& commonProperty, int32_t childSize); 655 void DumpTreeAccessibilityNodeNG(const RefPtr<NG::UINode>& uiNodeParent, 656 int32_t depth, int64_t nodeID, const CommonProperty& commonProperty); 657 bool CheckDumpInfoParams(const std::vector<std::string> ¶ms); 658 void DumpSendEventTest(int64_t nodeId, int32_t eventId, const std::vector<std::string>& params); 659 void DumpInjectActionTest(const std::vector<std::string>& params); 660 void DumpEmbedSearchTest(const std::vector<std::string>& params); 661 void DumpEmbedHoverTestNG(const std::vector<std::string>& params, uint32_t windowId); 662 void DumpSetCheckListTest(const std::vector<std::string>& params); 663 void DumpGetCheckListTest(const std::vector<std::string>& params); 664 void DumpSpecificPropertySearchTest(const std::vector<std::string>& params, uint32_t windowId); 665 666 void GenerateCommonProperty(const RefPtr<PipelineBase>& context, CommonProperty& output, 667 const RefPtr<PipelineBase>& mainContext, const RefPtr<NG::FrameNode>& node = nullptr); 668 void GenerateCommonPropertyForWeb(const RefPtr<PipelineBase>& context, CommonProperty& output, 669 const RefPtr<PipelineBase>& mainContext, const RefPtr<NG::FrameNode>& node); 670 671 void FindText(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 672 const RefPtr<NG::PipelineContext>& context, 673 const CommonProperty& commonProperty, const SearchParameter& searchParam); 674 675 void FindTextByTextHint(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos, 676 const RefPtr<NG::PipelineContext>& context, 677 const CommonProperty& commonProperty, const SearchParameter& searchParam); 678 679 void UpdateAccessibilityElementInfo( 680 const RefPtr<NG::FrameNode>& node, Accessibility::AccessibilityElementInfo& nodeInfo); 681 682 void UpdateAccessibilityVisible( 683 const RefPtr<NG::FrameNode>& node, AccessibilityElementInfo& nodeInfo); 684 685 void UpdateVirtualNodeInfo(std::list<Accessibility::AccessibilityElementInfo>& infos, 686 Accessibility::AccessibilityElementInfo& nodeInfo, 687 const RefPtr<NG::UINode>& uiVirtualNode, const CommonProperty& commonProperty, 688 const RefPtr<NG::PipelineContext>& ngPipeline); 689 690 void UpdateVirtualNodeChildAccessibilityElementInfo( 691 const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty, 692 Accessibility::AccessibilityElementInfo& nodeParentInfo, Accessibility::AccessibilityElementInfo& nodeInfo, 693 const RefPtr<NG::PipelineContext>& ngPipeline); 694 695 void UpdateVirtualNodeAccessibilityElementInfo( 696 const RefPtr<NG::FrameNode>& parent, const RefPtr<NG::FrameNode>& node, 697 const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo, 698 const RefPtr<NG::PipelineContext>& ngPipeline); 699 700 void UpdateAccessibilityElementInfo( 701 const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty, 702 Accessibility::AccessibilityElementInfo& nodeInfo, const RefPtr<NG::PipelineContext>& ngPipeline); 703 704 void UpdateCacheInfoNG(std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<NG::FrameNode>& node, 705 CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline, 706 const SearchParameter& searchParam); 707 void UpdateEventWhiteList(const std::vector<uint32_t>& eventList); 708 #ifdef WEB_SUPPORTED 709 710 void WebSetScreenRect(const std::shared_ptr<NG::TransitionalNodeInfo>& node, const CommonProperty& commonProperty, 711 AccessibilityElementInfo& nodeInfo); 712 713 void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NG::TransitionalNodeInfo>& node, 714 Accessibility::AccessibilityElementInfo& nodeInfo, int32_t treeId); 715 716 void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NG::TransitionalNodeInfo>& node, 717 const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo, 718 const RefPtr<NG::WebPattern>& webPattern); 719 720 void UpdateWebCacheInfo(std::list<Accessibility::AccessibilityElementInfo>& infos, int64_t nodeId, 721 const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline, 722 const SearchParameter& searchParam, const RefPtr<NG::WebPattern>& webPattern); 723 bool GetChildrenFromEmbedNode(AccessibilityElementInfo& nodeInfo, int64_t nodeId, std::list<int64_t>& children, 724 std::unordered_map<int64_t, AccessibilityElementInfo>& allEmbedNodeTreeInfosMap); 725 void PushElementsIntoInfos(AccessibilityElementInfo& nodeInfo, std::list<AccessibilityElementInfo>& infos, 726 const RefPtr<NG::WebPattern>& webPattern, std::list<int64_t>& children, 727 std::unordered_map<int64_t, AccessibilityElementInfo>& allEmbedNodeTreeInfosMap); 728 729 int64_t GetWebAccessibilityIdBySurfaceId(const std::string& surfaceId); 730 #endif //WEB_SUPPORTED 731 void NotifyChildTreeOnRegister(int32_t treeId); 732 733 void NotifyChildTreeOnDeregister(); 734 735 void SendUecOnTreeEvent(int64_t splitElementId); 736 737 void NotifySetChildTreeIdAndWinId(int64_t elementId, const int32_t treeId, const int32_t childWindowId); 738 739 bool CheckIsChildElement( 740 int64_t &elementId, 741 const std::vector<std::string>& params, 742 std::vector<std::string>& info, 743 DumpMode mode, 744 int64_t &rootId); 745 746 bool NeedRegisterChildTree(uint32_t parentWindowId, int32_t parentTreeId, int64_t parentElementId); 747 748 void FillEventInfoWithNode( 749 const RefPtr<NG::FrameNode>& node, 750 Accessibility::AccessibilityEventInfo& eventInfo, 751 const RefPtr<NG::PipelineContext>& context, 752 int64_t elementId); 753 754 void NotifyAccessibilitySAStateChange(bool state); 755 void DumpTreeNodeInfoInJson( 756 const RefPtr<NG::FrameNode>& node, int32_t depth, const CommonProperty& commonProperty, int32_t childSize); 757 void CreateNodeInfoJson(const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty, 758 std::unique_ptr<JsonValue>& json, int32_t childSize); 759 bool IsEventIgnoredByWorkMode(const AccessibilityEvent& accessibilityEvent); 760 void SendEventToAccessibilityWithNodeInner(const AccessibilityEvent& accessibilityEvent, 761 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context); 762 void SendAccessibilityAsyncEventInner(const AccessibilityEvent& accessibilityEvent); 763 int64_t GetDelayTimeBeforeSendEvent(const AccessibilityEvent& accessibilityEvent, const RefPtr<AceType>& node); 764 void UpdateChildrenNodeInCache(std::list<AccessibilityElementInfo>& infos, 765 const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline, 766 const SearchParameter& searchParam, std::list<RefPtr<NG::FrameNode>>& children); 767 768 void RegisterDynamicRenderGetParentRectHandler(); 769 770 void GetCurrentWindowPages( 771 const RefPtr<NG::PipelineContext>& ngPipeline, 772 std::vector<RefPtr<NG::FrameNode>>& pageNodes, 773 std::vector<std::string>& pagePaths); 774 const std::string GetPagePathInPageNodes( 775 int32_t pageId, 776 const std::vector<RefPtr<NG::FrameNode>>& pageNodes, 777 const std::vector<std::string> pagePaths); 778 779 bool CheckPageEventValidInCache(int32_t containerId); 780 bool CheckPageEventByPageInCache(int32_t containerId, int32_t pageId); 781 void ReleaseAllCacheAccessibilityEvent(int32_t containerId); 782 void ReleaseCacheAccessibilityEvent(int32_t containerId, int32_t pageId); 783 void ReleaseAccessibilityEventList( 784 const std::list<std::pair<int32_t, AccessibilityEvent>>& eventList); 785 786 SearchSurfaceIdRet SearchElementInfoBySurfaceId( 787 const std::string& surfaceId, const int32_t windowId, 788 const SearchSurfaceIdType searchType, std::list<AccessibilityElementInfo>& infos); 789 790 bool CheckWhiteList(const uint32_t& eventType); 791 792 std::string callbackKey_; 793 uint32_t windowId_ = 0; 794 std::unordered_map<uint32_t, std::shared_ptr<JsAccessibilityStateObserver>> stateObserver_; 795 std::shared_ptr<ToastAccessibilityConfigObserver> toastObserver_ = nullptr; 796 float scaleX_ = 1.0f; 797 float scaleY_ = 1.0f; 798 int64_t currentFocusNodeId_ = -1; 799 bool isScreenReaderEnabled_ = false; 800 int64_t currentFocusVirtualNodeParentId_ = -1; 801 bool isScreenReaderEnabledInitialized_ = false; 802 803 int64_t lastElementId_ = -1; 804 WeakPtr<NG::FrameNode> lastFrameNode_; 805 NG::SizeF oldGeometrySize_; 806 mutable std::mutex childTreeCallbackMapMutex_; 807 std::unordered_map<int64_t, std::shared_ptr<AccessibilityChildTreeCallback>> childTreeCallbackMap_; 808 mutable std::mutex componentSACallbackMutex_; 809 std::unordered_map<int64_t, std::shared_ptr<AccessibilitySAObserverCallback>> componentSACallbackMap_; 810 int64_t parentElementId_ = INVALID_PARENT_ID; 811 uint32_t parentWindowId_ = 0; 812 int32_t parentTreeId_ = 0; 813 uint32_t parentWebWindowId_ = 0; 814 std::function<void(int32_t&, int32_t&)> getParentRectHandler_; 815 std::function<void(AccessibilityParentRectInfo&)> getParentRectHandlerNew_; 816 bool isUseJson_ = false; 817 bool reentrantLimit_ = false; 818 std::optional<std::string> pageMode_ = std::nullopt; 819 std::queue<AccessibilityEvent> eventQueue_; 820 std::vector<AccessibilityEvent> cacheEventVec_; 821 std::list<WeakPtr<NG::FrameNode>> defaultFocusList_; 822 std::vector<std::pair<WeakPtr<NG::FrameNode>, bool>> extensionComponentStatusVec_; 823 std::unordered_map<int32_t, std::optional<AccessibilityEvent>> pageIdEventMap_; 824 std::map<int32_t, std::map<std::string, int64_t>> nextFocusMapWithSubWindow_; 825 mutable std::mutex nextFocusMapWithSubWindowMutex_; 826 std::vector<uint32_t> eventWhiteList_; 827 828 AccessibilityParentRectInfo uecRectInfo_; 829 NG::PageEventController pageController_; 830 NG::HoverTransparentCallbackController hoverTransparentCallbackController_; 831 832 bool isIgnoreAllAction_ = false; 833 }; 834 835 } // namespace OHOS::Ace::Framework 836 837 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H 838