Fuchsia 无障碍功能框架

概览

每种现代操作系统都会实现不同的框架来支持辅助技术(例如 Windows 上的 IAccessible、OS X 上的 NSAccessibility、Linux 上的 ATK、Android 上的 AccessibilityNodeInfo)。具体的无障碍功能(如屏幕阅读器)则基于这些框架构建而成。这些框架通常负责通过语义树了解给定时间屏幕上显示的内容,并提供 API 来协调设备的输入和输出,以便无障碍服务可以实现不同的界面导航模式。Chromium 公开文档中对此进行了详细介绍。

无障碍功能的部分示例包括:屏幕阅读器、开关访问权限控制、盲文设备、放大功能、高对比度模式、色彩校正、动作减少、字幕等。

Fuchsia 的无障碍功能框架主要在无障碍功能管理器中实现。它支持以下无障碍功能:

无障碍管理器

无障碍管理器具有以下责任:

  • 管理无障碍设置
  • 实现 semantics API
  • Scenic(fuchsia 图形渲染程序和触摸处理程序)集成以修改显示内容,以支持放大等无障碍功能
  • 了解风景和客户端之间的关系(例如 Flutter)
  • 根据无障碍服务需要调解输入和输出(例如轻触、音频)
  • 调解对无障碍功能所需的系统服务(例如 TTS)的访问

无障碍功能管理器是 Fuchsia 平台的一部分,可在任何带屏幕的 Fuchsia 产品上运行。它与 Scenic 紧密集成。

无障碍功能管理器代码位于 /src/ui/a11y/bin/a11y_manager/ 中。

设置

无障碍设置将通过 SetUI 进行管理,SetUI 负责在本地存储设置,并在设置发生更改时通知无障碍管理器。这通过 fuchsia.settings.accessibility API 完成。无障碍功能管理器负责将相关更改(例如风景秀丽、flutter/chromium 运行时)通知给其他系统组件。

如需了解详情,请参阅无障碍设置

语义树数据

Fuchsia 界面由 View(由 Views 绘制的表面)组成。视图位于视图树内。每个视图都有一个负责视图内容的客户端,通常是 Flutter 或 Chromium。每个客户端都知道如何提供与用户当前可查看或与之互动的元素相对应的语义树。这通常是当前图形渲染树的简化版本,其中包含对用户在语义上有意义的元素,但去掉了缓冲区空间和边界框等内容。

该 API 可以在 fuchsia.accessibility.semantics 中找到。借助此 API,运行时可以向无障碍功能管理器注册以提供语义更新,然后调用 Update、Delete 和 Commit 方法以发送有关其语义的信息。无障碍功能管理器负责实现语义 API 的服务器端。

如需了解详情,请参阅无障碍功能语义

无障碍视图

无障碍功能管理器拥有 Fuchsia 视图树中的视图。此视图允许无障碍功能拦截手势、更改图形、注入输入和参与焦点更改。

如需了解详情,请参阅无障碍功能视图

输入和输出

触摸和键盘事件

启用相关无障碍功能后,无障碍功能管理器可与场景配合使用,以拦截用户输入事件,并实现手势 arena 来处理用户手势。

如需了解详情,请参阅无障碍功能输入

焦点管理

无障碍功能管理器有一个“无障碍功能焦点”的概念,即哪个语义节点当前处于活动状态。无障碍功能管理器是相应节点具有无障碍功能焦点的可信来源。如需了解详情,请参阅无障碍功能焦点

亮点

无障碍功能管理器与场景配合使用,在当前聚焦的节点周围绘制“突出显示”。如需了解详情,请参阅无障碍功能亮点

文字转语音

无障碍管理器将为无障碍服务提供用于触发语音事件的 API。

如需了解详情,请参阅 TTS

测试无障碍功能框架

无障碍功能测试位于 src/ui/a11y/lib/testing/ 中。