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