1 /* 2 * Copyright (c) 2021-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_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 18 19 #include "base/memory/ace_type.h" 20 #include "core/accessibility/accessibility_node.h" 21 #include "core/accessibility/accessibility_utils.h" 22 #include "core/pipeline/base/base_composed_component.h" 23 24 namespace OHOS::Accessibility { 25 class AccessibilityElementInfo; 26 class AccessibilityEventInfo; 27 } // namespace OHOS::Accessibility 28 29 namespace OHOS::Ace { 30 31 struct AccessibilityEvent { 32 int64_t nodeId = 0; 33 uint32_t windowId = 0; 34 WindowsContentChangeTypes windowContentChangeTypes = CONTENT_CHANGE_TYPE_INVALID; 35 WindowUpdateType windowChangeTypes = WINDOW_UPDATE_INVALID; 36 std::string eventType; 37 std::string componentType; 38 std::string beforeText; 39 std::string latestContent; 40 double currentItemIndex = 0.0; 41 double itemCount = 0.0; 42 AccessibilityEventType type = AccessibilityEventType::UNKNOWN; 43 }; 44 45 enum class AccessibilityVersion { 46 JS_VERSION = 1, 47 JS_DECLARATIVE_VERSION, 48 }; 49 50 using VisibleRatioCallback = std::function<void(bool, double)>; 51 class AccessibilityManager : public AceType { 52 DECLARE_ACE_TYPE(AccessibilityManager, AceType); 53 54 public: 55 AccessibilityManager() = default; 56 ~AccessibilityManager() override = default; 57 58 virtual void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) = 0; 59 virtual int64_t GenerateNextAccessibilityId() = 0; 60 virtual RefPtr<AccessibilityNode> CreateSpecializedNode( 61 const std::string& tag, int32_t nodeId, int32_t parentNodeId) = 0; 62 virtual RefPtr<AccessibilityNode> CreateAccessibilityNode( 63 const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) = 0; 64 virtual RefPtr<AccessibilityNode> GetAccessibilityNodeById(NodeId nodeId) const = 0; 65 virtual std::string GetInspectorNodeById(NodeId nodeId) const = 0; 66 virtual void RemoveAccessibilityNodes(RefPtr<AccessibilityNode>& node) = 0; 67 virtual void RemoveAccessibilityNodeById(NodeId nodeId) = 0; 68 virtual void ClearPageAccessibilityNodes(int32_t pageId) = 0; 69 virtual void SetRootNodeId(int32_t nodeId) = 0; 70 virtual void TrySaveTargetAndIdNode( 71 const std::string& id, const std::string& target, const RefPtr<AccessibilityNode>& node) = 0; 72 virtual void HandleComponentPostBinding() = 0; 73 virtual void OnDumpInfo(const std::vector<std::string>& params) = 0; 74 virtual void SetCardViewPosition(int id, float offsetX, float offsetY) = 0; 75 virtual void SetCardViewParams(const std::string& key, bool focus) = 0; 76 virtual void SetSupportAction(uint32_t action, bool isEnable) = 0; 77 virtual void ClearNodeRectInfo(RefPtr<AccessibilityNode>& node, bool isPopDialog) = 0; 78 virtual void AddComposedElement(const std::string& key, const RefPtr<ComposedElement>& node) = 0; 79 virtual void RemoveComposedElementById(const std::string& key) = 0; 80 virtual WeakPtr<ComposedElement> GetComposedElementFromPage(NodeId nodeId) = 0; 81 virtual void TriggerVisibleChangeEvent() = 0; 82 virtual void AddVisibleChangeNode(NodeId nodeId, double ratio, VisibleRatioCallback callback) = 0; 83 virtual void RemoveVisibleChangeNode(NodeId nodeId) = 0; 84 virtual bool IsVisibleChangeNodeExists(NodeId nodeId) = 0; 85 virtual void UpdateEventTarget(NodeId id, BaseEventInfo& info) = 0; 86 virtual void SetWindowPos(int32_t left, int32_t top, int32_t windowId) = 0; 87 #ifdef WINDOW_SCENE_SUPPORTED 88 virtual void SearchElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode, 89 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 90 int64_t uiExtensionOffset) = 0; 91 virtual void SearchElementInfosByTextNG(int64_t elementId, const std::string& text, 92 std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context, 93 const int64_t uiExtensionOffset = 0) = 0; 94 virtual void FindFocusedElementInfoNG(int64_t elementId, int32_t focusType, 95 Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context, 96 const int64_t uiExtensionOffset = 0) = 0; 97 virtual void FocusMoveSearchNG(int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info, 98 const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) = 0; 99 virtual bool ExecuteExtensionActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments, 100 int32_t action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset) = 0; TransferAccessibilityAsyncEvent(const Accessibility::AccessibilityEventInfo & eventInfo,int64_t uiExtensionOffset)101 virtual bool TransferAccessibilityAsyncEvent( 102 const Accessibility::AccessibilityEventInfo& eventInfo, int64_t uiExtensionOffset) 103 { 104 return false; 105 } SendExtensionAccessibilityEvent(const Accessibility::AccessibilityEventInfo & eventInfo,int64_t uiExtensionOffset)106 virtual void SendExtensionAccessibilityEvent( 107 const Accessibility::AccessibilityEventInfo& eventInfo, int64_t uiExtensionOffset) {} 108 #endif SetVersion(AccessibilityVersion version)109 void SetVersion(AccessibilityVersion version) 110 { 111 version_ = version; 112 } GetVersion()113 AccessibilityVersion GetVersion() 114 { 115 return version_; 116 } 117 118 private: 119 AccessibilityVersion version_ = AccessibilityVersion::JS_VERSION; 120 }; 121 122 } // namespace OHOS::Ace 123 124 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H 125