• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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_COMPONENTS_NG_PROPERTIES_ACCESSIBILITY_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_COMPONENTS_NG_PROPERTIES_ACCESSIBILITY_PROPERTY_H
18 
19 #include <cstdint>
20 #include <string>
21 #include <unordered_set>
22 
23 #include "accessibility_property_function.h"
24 #include "base/memory/ace_type.h"
25 #include "interfaces/native/native_type.h"
26 #include "core/accessibility/accessibility_utils.h"
27 #include "core/components_ng/base/inspector_filter.h"
28 #include "core/components_ng/base/ui_node.h"
29 
30 namespace OHOS::Accessibility {
31 class ExtraElementInfo;
32 }
33 
34 namespace OHOS::Ace::NG {
35 struct WindowSceneInfo {
36     int32_t left = 0;
37     int32_t top = 0;
38     int32_t innerWindowId = -1;
39     float_t scaleX = 1.0f;
40     float_t scaleY = 1.0f;
41 };
42 using ActionNoParam = std::function<void()>;
43 using ActionSetTextImpl = std::function<void(const std::string&)>;
44 using ActionScrollForwardImpl = ActionNoParam;
45 using ActionScrollForwardWithParamImpl = std::function<void(AccessibilityScrollType scrollType)>;;
46 using ActionScrollBackwardImpl = ActionNoParam;
47 using ActionScrollBackwardWithParamImpl = std::function<void(AccessibilityScrollType scrollType)>;;
48 using ActionSetSelectionImpl = std::function<void(int32_t start, int32_t end, bool isForward)>;
49 using ActionCopyImpl = ActionNoParam;
50 using ActionCutImpl = ActionNoParam;
51 using ActionPasteImpl = ActionNoParam;
52 using ActionSelectImpl = ActionNoParam;
53 using ActionClearSelectionImpl = ActionNoParam;
54 using ActionMoveTextImpl = std::function<void(int32_t moveUnit, bool forward)>;
55 using ActionSetCursorIndexImpl = std::function<void(int32_t index)>;
56 using ActionExecSubComponentImpl = std::function<bool(int32_t spanId)>;
57 using ActionGetCursorIndexImpl = std::function<int32_t(void)>;
58 using ActionClickImpl = ActionNoParam;
59 using ActionLongClickImpl = ActionNoParam;
60 using ActionsImpl = std::function<void((uint32_t actionType))>;
61 using GetRelatedElementInfoImpl = std::function<void(Accessibility::ExtraElementInfo& extraElementInfo)>;
62 using OnAccessibilityFocusCallbackImpl = std::function<void((bool isFocus))>;
63 
64 using GetWindowScenePositionImpl = std::function<void((WindowSceneInfo& windowSceneInfo))>;
65 
66 using OnAccessibilityHoverConsumeCheckImpl = std::function<bool(const NG::PointF& point)>;
67 
68 class FrameNode;
69 using AccessibilityHoverTestPath = std::vector<RefPtr<FrameNode>>;
70 
71 class ACE_FORCE_EXPORT AccessibilityProperty : public virtual AceType,
72     public AccessibilityPropertyInnerFunction, public AccessibilityPropertyInterfaceFunction {
73     DECLARE_ACE_TYPE(AccessibilityProperty, AceType);
74 
75 public:
76     AccessibilityProperty() = default;
77 
78     ~AccessibilityProperty() override = default;
79 
80     virtual std::string GetText() const;
81 
82     virtual std::string GetGroupText(bool forceGetChildren = false) const;
83 
84     virtual std::string GetGroupPreferAccessibilityText(bool forceGetChildren = false) const;
85 
SetText(const std::string & text)86     virtual void SetText(const std::string& text)
87     {
88         propText_ = text;
89     }
90 
IsCheckable()91     virtual bool IsCheckable() const
92     {
93         return false;
94     }
95 
IsChecked()96     virtual bool IsChecked() const
97     {
98         return false;
99     }
100 
IsSelected()101     virtual bool IsSelected() const
102     {
103         return false;
104     }
105 
IsPassword()106     virtual bool IsPassword() const
107     {
108         return false;
109     }
110 
IsEditable()111     virtual bool IsEditable() const
112     {
113         return false;
114     }
115 
IsMultiLine()116     virtual bool IsMultiLine() const
117     {
118         return false;
119     }
120 
IsDeletable()121     virtual bool IsDeletable() const
122     {
123         return false;
124     }
125 
IsHint()126     virtual bool IsHint() const
127     {
128         return false;
129     }
130 
IsScrollable()131     virtual bool IsScrollable() const
132     {
133         return false;
134     }
135 
GetCurrentIndex()136     virtual int32_t GetCurrentIndex() const
137     {
138         return -1;
139     }
140 
GetBeginIndex()141     virtual int32_t GetBeginIndex() const
142     {
143         return -1;
144     }
145 
GetEndIndex()146     virtual int32_t GetEndIndex() const
147     {
148         return -1;
149     }
150 
ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)151     virtual void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
152     {
153         json->PutFixedAttr("scrollable", IsScrollable(), filter, FIXED_ATTR_SCROLLABLE);
154         json->PutExtAttr("accessibilityLevel", GetAccessibilityLevel().c_str(), filter);
155         json->PutExtAttr("accessibilityGroup", IsAccessibilityGroup(), filter);
156         json->PutExtAttr("accessibilityVirtualNode", HasAccessibilityVirtualNode(), filter);
157         json->PutExtAttr("accessibilityText", GetAccessibilityText().c_str(), filter);
158         json->PutExtAttr("accessibilityTextHint", GetTextType().c_str(), filter);
159         json->PutExtAttr("accessibilityDescription", GetAccessibilityDescription().c_str(), filter);
160     }
161 
FromJson(const std::unique_ptr<JsonValue> & json)162     virtual void FromJson(const std::unique_ptr<JsonValue>& json) {}
163 
HasRange()164     virtual bool HasRange() const
165     {
166         return false;
167     }
168 
HasSubComponent()169     virtual bool HasSubComponent() const
170     {
171         return false;
172     }
173 
GetSubComponentInfo(std::vector<SubComponentInfo> & subComponentInfos)174     virtual void GetSubComponentInfo(std::vector<SubComponentInfo>& subComponentInfos) const {}
175 
GetAccessibilityValue()176     virtual AccessibilityValue GetAccessibilityValue() const
177     {
178         return AccessibilityValue();
179     }
180 
SetHost(const WeakPtr<FrameNode> & host)181     void SetHost(const WeakPtr<FrameNode>& host)
182     {
183         host_ = host;
184     }
185 
GetHintText()186     virtual std::string GetHintText() const
187     {
188         return "";
189     }
190 
GetTextLengthLimit()191     virtual int32_t GetTextLengthLimit() const
192     {
193         return -1;
194     }
195 
GetCollectionInfo()196     virtual AceCollectionInfo GetCollectionInfo() const
197     {
198         return AceCollectionInfo();
199     }
200 
GetCollectionItemInfo()201     virtual AceCollectionItemInfo GetCollectionItemInfo() const
202     {
203         return AceCollectionItemInfo();
204     }
205 
GetErrorText()206     virtual std::string GetErrorText() const
207     {
208         return "";
209     }
210 
GetTextSelectionStart()211     virtual int32_t GetTextSelectionStart() const
212     {
213         return 0;
214     }
215 
GetTextSelectionEnd()216     virtual int32_t GetTextSelectionEnd() const
217     {
218         return 0;
219     }
220 
GetTextInputType()221     virtual AceTextCategory GetTextInputType() const
222     {
223         return AceTextCategory::INPUT_TYPE_DEFAULT;
224     }
225 
GetCollectionItemCounts()226     virtual int32_t GetCollectionItemCounts() const
227     {
228         return 0;
229     }
230 
GetContentInvalid()231     virtual bool GetContentInvalid() const
232     {
233         return true;
234     }
235 
236     virtual float GetScrollOffSet() const;
237 
AddSupportAction(AceAction action)238     void AddSupportAction(AceAction action)
239     {
240         supportActions_ |= (1UL << static_cast<uint32_t>(action));
241     }
242 
243     std::unordered_set<AceAction> GetSupportAction() const;
244 
245     void ResetSupportAction();
246 
SetActionSetText(const ActionSetTextImpl & actionSetTextImpl)247     void SetActionSetText(const ActionSetTextImpl& actionSetTextImpl)
248     {
249         actionSetTextImpl_ = actionSetTextImpl;
250     }
251 
ActActionSetText(const std::string & text)252     bool ActActionSetText(const std::string& text)
253     {
254         if (actionSetTextImpl_) {
255             actionSetTextImpl_(text);
256             return true;
257         }
258         return false;
259     }
260 
SetActionSetSelection(const ActionSetSelectionImpl & actionSetSelection)261     void SetActionSetSelection(const ActionSetSelectionImpl& actionSetSelection)
262     {
263         actionSetSelectionImpl_ = actionSetSelection;
264     }
265 
266     bool ActActionSetSelection(int32_t start, int32_t end, bool isForward = false)
267     {
268         if (actionSetSelectionImpl_) {
269             actionSetSelectionImpl_(start, end, isForward);
270             return true;
271         }
272         return false;
273     }
274 
SetActionSetIndex(const ActionSetCursorIndexImpl & actionSetCursorIndexImpl)275     void SetActionSetIndex(const ActionSetCursorIndexImpl& actionSetCursorIndexImpl)
276     {
277         actionSetCursorIndexImpl_ = actionSetCursorIndexImpl;
278     }
279 
ActActionSetIndex(int32_t index)280     bool ActActionSetIndex(int32_t index)
281     {
282         if (actionSetCursorIndexImpl_) {
283             actionSetCursorIndexImpl_(index);
284             return true;
285         }
286         return false;
287     }
288 
SetActionExecSubComponent(const ActionExecSubComponentImpl & actionExecSubComponentImpl)289     void SetActionExecSubComponent(const ActionExecSubComponentImpl& actionExecSubComponentImpl)
290     {
291         actionExecSubComponentImpl_ = actionExecSubComponentImpl;
292     }
293 
ActActionExecSubComponent(int32_t spanId)294     bool ActActionExecSubComponent(int32_t spanId)
295     {
296         if (actionExecSubComponentImpl_) {
297             return actionExecSubComponentImpl_(spanId);
298         }
299         return false;
300     }
301 
SetActionGetIndex(const ActionGetCursorIndexImpl & actionGetCursorIndexImpl)302     void SetActionGetIndex(const ActionGetCursorIndexImpl& actionGetCursorIndexImpl)
303     {
304         actionGetCursorIndexImpl_ = actionGetCursorIndexImpl;
305     }
306 
ActActionGetIndex()307     int32_t ActActionGetIndex()
308     {
309         if (actionGetCursorIndexImpl_) {
310             return actionGetCursorIndexImpl_();
311         }
312         return -1;
313     }
314 
SetActionMoveText(const ActionMoveTextImpl & actionMoveText)315     void SetActionMoveText(const ActionMoveTextImpl& actionMoveText)
316     {
317         actionMoveTextImpl_ = actionMoveText;
318     }
319 
ActActionMoveText(int32_t moveUnit,bool forward)320     bool ActActionMoveText(int32_t moveUnit, bool forward)
321     {
322         if (actionMoveTextImpl_) {
323             actionMoveTextImpl_(moveUnit, forward);
324             return true;
325         }
326         return false;
327     }
328 
SetActionScrollForward(const ActionScrollForwardImpl & actionScrollForwardImpl)329     void SetActionScrollForward(const ActionScrollForwardImpl& actionScrollForwardImpl)
330     {
331         actionScrollForwardImpl_ = actionScrollForwardImpl;
332     }
333 
SetActionScrollForward(const ActionScrollForwardWithParamImpl & actionScrollForwardImpl)334     void SetActionScrollForward(const ActionScrollForwardWithParamImpl& actionScrollForwardImpl)
335     {
336         actionScrollForwardWithParamImpl_ = actionScrollForwardImpl;
337     }
338 
339     bool ActActionScrollForward(AccessibilityScrollType scrollType = AccessibilityScrollType::SCROLL_DEFAULT)
340     {
341         if (actionScrollForwardWithParamImpl_ == nullptr) {
342             scrollType = AccessibilityScrollType::SCROLL_DEFAULT;
343         }
344 
345         if ((scrollType == AccessibilityScrollType::SCROLL_DEFAULT) && (actionScrollForwardImpl_)) {
346             actionScrollForwardImpl_();
347             return true;
348         }
349 
350         if (actionScrollForwardWithParamImpl_) {
351             actionScrollForwardWithParamImpl_(scrollType);
352             return true;
353         }
354         return false;
355     }
356 
SetActionScrollBackward(const ActionScrollBackwardImpl & actionScrollBackwardImpl)357     void SetActionScrollBackward(const ActionScrollBackwardImpl& actionScrollBackwardImpl)
358     {
359         actionScrollBackwardImpl_ = actionScrollBackwardImpl;
360     }
361 
SetActionScrollBackward(const ActionScrollBackwardWithParamImpl & actionScrollBackwardImpl)362     void SetActionScrollBackward(const ActionScrollBackwardWithParamImpl& actionScrollBackwardImpl)
363     {
364         actionScrollBackwardWithParamImpl_ = actionScrollBackwardImpl;
365     }
366 
367     bool ActActionScrollBackward(AccessibilityScrollType scrollType = AccessibilityScrollType::SCROLL_DEFAULT)
368     {
369         if (actionScrollBackwardWithParamImpl_ == nullptr) {
370             scrollType = AccessibilityScrollType::SCROLL_DEFAULT;
371         }
372 
373         if ((scrollType == AccessibilityScrollType::SCROLL_DEFAULT) && (actionScrollBackwardImpl_)) {
374             actionScrollBackwardImpl_();
375             return true;
376         }
377 
378         if (actionScrollBackwardWithParamImpl_) {
379             actionScrollBackwardWithParamImpl_(scrollType);
380             return true;
381         }
382         return false;
383     }
384 
SetActionCopy(const ActionCopyImpl & actionCopyImpl)385     void SetActionCopy(const ActionCopyImpl& actionCopyImpl)
386     {
387         actionCopyImpl_ = actionCopyImpl;
388     }
389 
390     bool ActActionCopy();
391 
392     void SetActionCut(const ActionCutImpl& actionCutImpl);
393 
394     bool ActActionCut();
395 
396     void SetActionPaste(const ActionPasteImpl& actionPasteImpl);
397 
398     bool ActActionPaste();
399 
400     void SetActionLongClick(const ActionLongClickImpl& actionLongClickImpl);
401 
402     bool ActActionLongClick();
403 
404     void SetActionClick(const ActionClickImpl& actionClickImpl);
405 
406     bool ActActionClick();
407 
408     void SetActionSelect(const ActionSelectImpl& actionSelectImpl);
409 
410     bool ActActionSelect();
411 
412     void SetActionClearSelection(const ActionClearSelectionImpl& actionClearSelectionImpl);
413 
414     bool ActActionClearSelection();
415 
416     void SetOnAccessibilityFocusCallback(const OnAccessibilityFocusCallbackImpl& onAccessibilityFocusCallbackImpl);
417 
418     void ResetUserOnAccessibilityFocusCallback();
419 
420     void SetUserOnAccessibilityFocusCallback(
421         const OnAccessibilityFocusCallbackImpl& onUserAccessibilityFocusCallbackImpl);
422 
423     void OnAccessibilityFocusCallback(bool isFocus);
424 
425     void SetGetWindowScenePosition(const GetWindowScenePositionImpl& getWindowScenePositionImpl);
426 
427     void GetWindowScenePosition(WindowSceneInfo& windowSceneInfo);
428 
429     bool GetAccessibilityFocusState() const;
430 
431     void SetAccessibilityFocusState(bool state);
432 
433     void SetAccessibilityGroup(bool accessibilityGroup);
434 
435     void SetAccessibilityTextPreferred(bool accessibilityTextPreferred);
436 
437     void SetChildTreeId(int32_t childTreeId);
438 
439     void SetChildWindowId(int32_t childWindowId);
440 
441     void SetAccessibilityText(const std::string& text);
442 
443     void SetAccessibilityNextFocusInspectorKey(const std::string& accessibilityNextFocusInspectorKey);
444 
445     void SetAccessibilityTextWithEvent(const std::string& text);
446 
447     void SetAccessibilityTextHint(const std::string& text);
448 
449     void SetAccessibilityDescription(const std::string& accessibilityDescription);
450 
451     void SetAccessibilityDescriptionWithEvent(const std::string& accessibilityDescription);
452 
453     void OnAccessibilityDetachFromMainTree();
454 
455     bool IsMatchAccessibilityResponseRegion(bool isAccessibilityVirtualNode);
456 
457     bool IsAccessibilityCompInResponseRegion(const RectF& rect, const RectF& origRect);
458 
459     static NG::RectF UpdateHoverTestRect(const RefPtr<FrameNode>& node);
460 
461     NG::RectT<int32_t> GetAccessibilityResponseRegionRect(bool isAccessibilityVirtualNode);
462 
463     bool IsAccessibilityGroup() const;
464 
465     bool IsAccessibilityTextPreferred() const;
466 
467     void NotifyComponentChangeEvent(AccessibilityEventType eventType);
468 
469     void UpdateAccessibilityNextFocusIdMap(const std::string& nextFocusInspectorKey);
470 
471     int32_t GetChildTreeId() const;
472 
473     int32_t GetChildWindowId() const;
474 
475     void SaveAccessibilityVirtualNode(const RefPtr<UINode>& node);
476 
477     const RefPtr<UINode>& GetAccessibilityVirtualNode() const;
478 
479     bool HasAccessibilityVirtualNode() const;
480 
GetAccessibilityText()481     virtual std::string GetAccessibilityText() const
482     {
483         return accessibilityText_.value_or("");
484     }
485 
GetAccessibilityNextFocusInspectorKey()486     virtual std::string GetAccessibilityNextFocusInspectorKey() const
487     {
488         return accessibilityNextFocusInspectorKey_.value_or("");
489     }
490 
491     std::string GetAccessibilityDescription() const;
492 
493     std::string GetTextType() const;
494 
495     // true means self and descendants will consume hover, do not search brothers
496     // false means self and descendants no need to be hovered, should search brothers
SetAccessibilityHoverConsume(const OnAccessibilityHoverConsumeCheckImpl & accessibilityHoverConsumeCheckImpl)497     void SetAccessibilityHoverConsume(const OnAccessibilityHoverConsumeCheckImpl& accessibilityHoverConsumeCheckImpl)
498     {
499         accessibilityHoverConsumeCheckImpl_ = accessibilityHoverConsumeCheckImpl;
500     }
501 
IsAccessibilityHoverConsume(const NG::PointF & point)502     bool IsAccessibilityHoverConsume(const NG::PointF& point) const
503     {
504         if (!accessibilityHoverConsumeCheckImpl_) {
505             return true;
506         }
507 
508         return accessibilityHoverConsumeCheckImpl_(point);
509     }
510 
511     class Level {
512     public:
513         inline static const std::string AUTO = "auto";
514         inline static const std::string YES_STR = "yes";
515         inline static const std::string NO_STR = "no";
516         inline static const std::string NO_HIDE_DESCENDANTS = "no-hide-descendants";
517     };
518 
GetAccessibilityLevel()519     virtual std::string GetAccessibilityLevel() const
520     {
521         if (!accessibilityLevel_.has_value()) {
522             return Level::AUTO;
523         }
524         return accessibilityLevel_.value();
525     }
526 
527     void SetAccessibilityLevel(const std::string& accessibilityLevel);
528 
529     struct HoverTestDebugTraceInfo {
530         std::vector<std::unique_ptr<JsonValue>> trace;
531     };
532 
533     /*
534     * Get path from root to node which hit the hoverPoint.
535     * return: path contains nodes whose border cover the hoverPoint.
536     */
537     static AccessibilityHoverTestPath HoverTest(
538         const PointF& point,
539         const RefPtr<FrameNode>& root,
540         std::unique_ptr<HoverTestDebugTraceInfo>& debugInfo
541     );
542 
543     /*
544     * Judge whether a node can be accessibility focused.
545     * return: if node is accessibility focusable, return true.
546     * param: {node} should be not-null
547     */
548     static bool IsAccessibilityFocusable(const RefPtr<FrameNode>& node);
549 
550     /*
551     * param: {node}, {info} should be not-null
552     */
553     static bool IsAccessibilityFocusableDebug(const RefPtr<FrameNode>& node, std::unique_ptr<JsonValue>& info);
554 
555     /*
556     * Judge whether a node's tag is default accessibility focusable.
557     * return: if a node's tag is default accessibility focusable, return true.
558     * param: {tag} should be not-null
559     */
560     static bool IsAccessibilityFocusableTag(const std::string &tag);
561 
562     static bool IsTagInSubTreeComponent(const std::string& tag);
563 
564     static bool IsTagInModalDialog(const RefPtr<FrameNode>& node);
565 
566     static bool HitAccessibilityHoverPriority(const RefPtr<FrameNode>& node);
567 
GetExtraElementInfo(Accessibility::ExtraElementInfo & extraElementInfo)568     virtual void GetExtraElementInfo(Accessibility::ExtraElementInfo& extraElementInfo) {}
569 
570     void SetRelatedElementInfoCallback(const GetRelatedElementInfoImpl& getRelatedElementInfoImpl);
571 
572     void GetAllExtraElementInfo(Accessibility::ExtraElementInfo& extraElementInfo);
573 
574     void SetAccessibilityActions(uint32_t actions);
575     void ResetAccessibilityActions();
576     bool HasAccessibilityActions();
577     uint32_t GetAccessibilityActions() const;
578 
579     void SetAccessibilityRole(const std::string& role);
580     void ResetAccessibilityRole();
581     bool HasAccessibilityRole();
582     std::string GetAccessibilityRole() const;
583     void SetAccessibilityCustomRole(const std::string& role);
584     void ResetAccessibilityCustomRole();
585     bool HasAccessibilityCustomRole();
586     std::string GetAccessibilityCustomRole() const;
587 
588     void SetAccessibilitySamePage(const std::string& pageMode);
589     bool HasAccessibilitySamePage();
590     std::string GetAccessibilitySamePage();
591 
592     void SetActions(const ActionsImpl& actionsImpl);
593     bool ActionsDefined(uint32_t action);
594 
595     void SetUserDisabled(const bool& isDisabled);
596     bool HasUserDisabled();
597     bool IsUserDisabled();
598 
599     void SetUserSelected(const bool& isSelected);
600     bool HasUserSelected();
601     bool IsUserSelected();
602     void ResetUserSelected();
603 
604     void SetUserCheckedType(const int32_t& checkedType);
605     bool HasUserCheckedType();
606     int32_t GetUserCheckedType();
607     void ResetUserCheckedType();
608 
609     void SetUserMinValue(const int32_t& minValue);
610     bool HasUserMinValue();
611     int32_t GetUserMinValue();
612 
613     void SetUserMaxValue(const int32_t& maxValue);
614     bool HasUserMaxValue();
615     int32_t GetUserMaxValue();
616 
617     void SetUserCurrentValue(const int32_t& currentValue);
618     bool HasUserCurrentValue();
619     int32_t GetUserCurrentValue();
620 
621     void SetUserRangeMinValue(const int32_t rangeMinValue);
622     bool HasUserRangeMinValue() const;
623     int32_t GetUserRangeMinValue() const;
624 
625     void SetUserRangeMaxValue(const int32_t rangeMaxValue);
626     bool HasUserRangeMaxValue() const;
627     int32_t GetUserRangeMaxValue() const;
628 
629     void SetUserRangeCurrentValue(const int32_t rangeCurrentValue);
630     bool HasUserRangeCurrentValue() const;
631     int32_t GetUserRangeCurrentValue() const;
632 
633     void SetUserTextValue(const std::string& textValue);
634     bool HasUserTextValue();
635     std::string GetUserTextValue();
636 
637     void SetUserCheckable(const bool& checkable);
638     bool HasUserCheckable();
639     bool IsUserCheckable();
640     void ResetUserCheckable();
641 
642     virtual bool IsAccessibilityHoverPriority() const;
643     void SetAccessibilityHoverPriority(bool hoverPriority);
644 
645     void SetUserScrollTriggerable(const bool& triggerable);
646     bool HasUserScrollTriggerable();
647     bool IsUserScrollTriggerable();
648     void ResetUserScrollTriggerable();
649     void SetFocusDrawLevel(int32_t drawLevel);
650     int32_t GetFocusDrawLevel();
651 
652 
653     void SetAccessibilityZIndex(const int32_t& accessibilityZIndex);
654     int32_t GetAccessibilityZIndex() const;
655 
656 private:
657     // node should be not-null
658     static bool HoverTestRecursive(
659         const PointF& parentPoint,
660         const RefPtr<FrameNode>& node,
661         AccessibilityHoverTestPath& path,
662         std::unique_ptr<HoverTestDebugTraceInfo>& debugInfo,
663         bool& ancestorGroupFlag
664     );
665 
666     struct RecursiveParam {
667         bool hitTarget;
668         bool ancestorGroupFlag;
669     };
670 
671     static bool ProcessHoverTestRecursive(const PointF& noOffsetPoint, const RefPtr<FrameNode>& node,
672         AccessibilityHoverTestPath& path, std::unique_ptr<HoverTestDebugTraceInfo>& debugInfo,
673         RecursiveParam recursiveParam);
674 
675     static std::unique_ptr<JsonValue> CreateNodeSearchInfo(const RefPtr<FrameNode>& node, const PointF& parentPoint,
676         bool& ancestorGroupFlag);
677 
678     /*
679     * Get whether node and its children should be searched.
680     * return: first: node itself should be searched.
681     *         second: children of node should be searched.
682     * param: {node} should be not-null
683     */
684     static std::tuple<bool, bool, bool> GetSearchStrategy(const RefPtr<FrameNode>& node, bool& ancestorGroupFlag);
685 
686     void GetGroupTextRecursive(bool forceGetChildren, std::string& text, bool preferAccessibilityText) const;
687 
688     bool HasAccessibilityTextOrDescription() const;
689 
690     bool HasAction() const;
691 
692     static bool CheckHoverConsumeByAccessibility(const RefPtr<FrameNode>& node);
693 
694     static bool CheckHoverConsumeByComponent(const RefPtr<FrameNode>& node, const NG::PointF& point);
695 
696     // the interface supports multithreading
697     void SetAccessibilityGroupMultiThread();
698 
699     // the interface supports multithreading
700     void SetAccessibilityTextWithEventMultiThread();
701 
702     // the interface supports multithreading
703     void SetAccessibilityDescriptionWithEventMultiThread();
704 
705     // the interface supports multithreading
706     void SetAccessibilityLevelMultiThread(const std::string& backupLevel);
707 
708     // the interface supports multithreading
709     void NotifyComponentChangeEventMultiThread(AccessibilityEventType eventType);
710 
711 protected:
SetSpecificSupportAction()712     virtual void SetSpecificSupportAction() {}
713     std::optional<std::string> propText_;
714     WeakPtr<FrameNode> host_;
715     uint64_t supportActions_ = 0;
716     ActionSetTextImpl actionSetTextImpl_;
717     ActionSetSelectionImpl actionSetSelectionImpl_;
718     ActionMoveTextImpl actionMoveTextImpl_;
719     ActionScrollForwardImpl actionScrollForwardImpl_;
720     ActionScrollForwardWithParamImpl actionScrollForwardWithParamImpl_;
721     ActionScrollBackwardImpl actionScrollBackwardImpl_;
722     ActionScrollBackwardWithParamImpl actionScrollBackwardWithParamImpl_;
723     ActionCopyImpl actionCopyImpl_;
724     ActionCutImpl actionCutImpl_;
725     ActionPasteImpl actionPasteImpl_;
726     ActionSelectImpl actionSelectImpl_;
727     ActionClearSelectionImpl actionClearSelectionImpl_;
728     ActionSetCursorIndexImpl actionSetCursorIndexImpl_;
729     ActionExecSubComponentImpl actionExecSubComponentImpl_;
730     ActionGetCursorIndexImpl actionGetCursorIndexImpl_;
731     ActionClickImpl actionClickImpl_;
732     ActionLongClickImpl actionLongClickImpl_;
733     ActionsImpl actionsImpl_;
734     GetRelatedElementInfoImpl getRelatedElementInfoImpl_;
735     OnAccessibilityFocusCallbackImpl onAccessibilityFocusCallbackImpl_;
736     OnAccessibilityFocusCallbackImpl onUserAccessibilityFocusCallbackImpl_;
737     GetWindowScenePositionImpl getWindowScenePositionImpl_;
738     OnAccessibilityHoverConsumeCheckImpl accessibilityHoverConsumeCheckImpl_;
739 
740     bool isAccessibilityFocused_ = false;
741     bool accessibilityGroup_ = false;
742     bool accessibilityTextPreferred_ = false;
743     bool accessibilityHoverPriority_ = false;
744     int32_t childTreeId_ = -1;
745     int32_t childWindowId_ = 0;
746     RefPtr<UINode> accessibilityVirtualNode_;
747     std::optional<std::string> accessibilityText_;
748     std::optional<std::string> accessibilityDescription_;
749     std::optional<std::string> accessibilityLevel_;
750     std::optional<std::string> textTypeHint_;
751     std::optional<std::string> accessibilityNextFocusInspectorKey_;
752     std::optional<uint32_t> accessibilityActions_;
753     std::optional<std::string> accessibilityRole_;
754     std::optional<std::string> accessibilityCustomRole_;
755     std::optional<std::string> accessibilityUseSamePage_;
756     ACE_DISALLOW_COPY_AND_MOVE(AccessibilityProperty);
757 
758     std::optional<bool> isDisabled_;
759     std::optional<bool> isSelected_;
760     std::optional<int32_t> checkedType_;
761     std::optional<bool> isUserCheckable_;
762     std::optional<bool> isUserScrollTriggerable_ = true;
763 
764     std::optional<int32_t> minValue_;
765     std::optional<int32_t> maxValue_;
766     std::optional<int32_t> currentValue_;
767     std::optional<int32_t> rangeMinValue_;
768     std::optional<int32_t> rangeMaxValue_;
769     std::optional<int32_t> rangeCurrentValue_;
770     std::optional<std::string> textValue_;
771     FocusDrawLevel focusDrawLevel_ = FocusDrawLevel::SELF;
772 
773     // used to modify the hierarchical relation ship between sibling nodes the same level in barrierfree tree
774     // only affects the barrierfree tree presentation, does not affect the zindex in barrierfree hover
775     int32_t accessibilityZIndex_ = -1;
776 };
777 } // namespace OHOS::Ace::NG
778 
779 #endif
780