• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &params);
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