语义

概览

本文档介绍了 Cloud Storage 的语义 API 和 在 Fuchsia 上实现了无障碍功能。这是无障碍管理器的一部分 从 Fuchsia 上的客户端视图中收集有关界面元素的信息,并使其 屏幕阅读器等无障碍服务提供的信息。

背景

  • Flutter 语义文档
  • Chromium AXNode 实现

  • 视图 - 与视图的特定区域相对应的景观视图 屏幕上。这由界面框架绘制。

  • 界面框架 - 在本文档中,“界面框架”指代有点什么 用于在 Fuchsia 上绘制用户可见视图。通常是 Flutter 或 Chromium 视图。

设计

语义树

语义树是与界面元素对应的节点的无环图。在 语义树表示当前可用的 界面。这是无障碍框架中广泛使用的概念,例如 Chrome、Windows、iOS、Flutter 等

在 Fuchsia 上,用户界面可能由多个风景视图和 无障碍功能框架会跟踪每个页面上每个视图的 屏幕。下图显示了一个包含多个语义树的示例界面。

此图仅从风景的角度展示了 Fuchsia 界面的层次结构。顶部是风景区管理的众多景观。每个视图都与一个显示某些界面(包括 Flutter 和 Chromium 运行时)的运行时相关联。每个 Flutter 和 Chromium 运行时在自身内维护着一个将提供给无障碍管理器的语义层次结构。

在内部,Flutter 和 Chromium 都能够生成语义树 所呈现的界面Fuchsia 无障碍设施 框架为运行时提供 API 可以将其语义树公开给操作系统。

语义 API

语义 API 可在 fuchsia.accessibility.semantics 中找到。 此 API 允许界面框架向无障碍管理器注册, 提供语义更新,然后调用 UpdateSemanticNodes, DeleteSemanticNodes 和 CommitUpdates 方法,用于发送 语义信息。

语义树更新序列

由于语义树可能非常大(例如,在复杂的网站上), 语义树的更改可能会被界面划分为多次调用 框架。无障碍功能管理器会存储这些更新,直到界面框架 调用“Commit”然后更改其本地树并执行验证。这个 可让无障碍管理器获得一致的 日期视图)查看可在本地访问的语义。

界面框架协定

在 Fuchsia 上启动视图的任何人都需要向 SemanticsManager 协议并提供 SemanticListener。通常情况下,视图所有者 使用 flutter 或 chromium 等界面框架来创建视图。通过 框架的 Fuchsia 集成负责实现特定于 Fuchsia 的 。框架集成还提供了 ViewRef 是一个内核对象, 对视图进行唯一标识。

SemanticsManager 协议如下所示:

[Discoverable]
protocol SemanticsManager {
   RegisterViewForSemantics(fuchsia.ui.views.ViewRef view_ref,
                            SemanticListener listener,
                            request<SemanticTree> semantic_tree_request);
};

语义监听器允许无障碍管理器启用或停用 语义更新和执行点击测试等操作。实际上, 由 Flutter 和 Chromium 界面框架集成处理,这些集成 美景。

界面框架实现应保持此 FIDL 连接 视图的生命周期。

如果界面框架发出的更新无效,无障碍功能管理器将 关闭频道。如果提交更新,则更新会被视为无效 才能生成结构良好的无环树。部分示例包括 或缺少根节点。

界面框架负责为其重新建立注册 视图(如果错误可恢复)或崩溃/重启(如果不可恢复)。护理 必须用在界面框架实现中,以避免重复尝试 与无效的语义树连接起来。

点击测试

点击测试是将屏幕上的位置转换为特定 语义节点。为了在 Fuchsia 上顺利进行测试,框架必须解决两个 题目

  • 查找与相应营业地点对应的视图
  • 在视图内的该位置找到节点

无障碍管理器从景观网站接收指针事件(有关详情,请参阅 无障碍功能输入文档)。Anthos 会为每个指针添加注解 事件,其中包含与 KOID(内核对象 ID)相关联的 viewRef 容器视图这样,屏幕阅读器就可以将触摸操作映射到 并将触摸路由到正确的 SemanticListener 点击测试匹配测试操作如下所述。

语义监听器操作

界面框架提供的语义监听器允许 框架在客户端视图中执行操作。这些方法可以 框架和框架的信息(例如,使用点击测试来确定 或在客户端视图中执行更改(针对 (使用默认操作点击按钮)。以下是 支持的监听器操作(请参阅“操作” enum):

  • 点击测试 - 使用视图局部 (x,y) 坐标和 同时返回位于该位置的节点的 ID, (可选)从树的根目录到该节点的路径。
  • 默认操作 - 将节点 ID 作为输入。点按逻辑等效于 也可以点击某个按钮
  • 在屏幕上显示 - 将节点 ID 作为输入。滚动界面以显示 进入视图。客户视图负责确定 执行此操作。
  • 增加/减少 - 调整滑块的当前值。

树导航和订购

无障碍功能框架提供了基本实用程序,用于在视图的 来提取语义树。这使得 支持线性导航。这种导航操作发生在 深度优先顺序。

调用方可以为下一个/上一个函数提供一个过滤器函数, 循环访问特定类型的所有节点(例如标头、链接、 等)。此属性还可用于跳过无法描述的节点根据 指定指标