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> &params);
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