Autor: Joseph Lee
Revisión: julio de 2021
Nota: llamado originalmente Windows 10 App Essentials, el complemento se renombró como Windows App Essentials en 2021 con la presentación de Windows 11. Algunas partes de este documento harán referencia al nombre original del complemento o Windows 10.
Introducción
Dar soporte a nuevas tecnologías puede ser un reto divertido, especialmente si hablamos de la nueva versión de un sistema operativo que cambia el modo que tiene la gente de realizar ciertas tareas y presenta nuevas formas de mantenerse al día. Este reto es aún mayor cuando se centra en dar soporte a los lectores de pantalla para que funcionen en nuevos sistemas operativos tales como Windows 10 y 11, que traen nuevas formas de interactuar con el ordenador, un nuevo conjunto de aplicaciones y tecnologías, y mejoras y retos de accesibilidad. NVDA viene con un soporte sólido para Windows 10 (dicho soporte puede variar en versiones más recientes), incluyendo Microsoft Edge, el nuevo menú de inicio, navegación en aplicaciones universales y mucho más, todo hecho posible gracias a la colaboración entre los usuarios, Microsoft, NV Access y otros. Parte de este soporte se da gracias al complemento que encontraremos en este artículo.
En Complementos de NVDA vistos por dentro: Windows App Essentials, veremos cómo se creó este complemento, cómo funciona, su desarrollo, y algunas recomendaciones de su autor (yo) relacionadas con prácticas de accesibilidad. También estudiaremos cómo funciona UI Automation a alto nivel, cómo algunas funciones empiezan en forma de complemento y acaban integradas en NVDA, y mucho más.
Para descargar este complemento, visita la sección correspondiente, que encontrarás en el menú superior de nuestra web. El código fuente puede encontrarse en https://github.com/josephsl/wintenApps. Ya que Windows (10 y posterior, más aún Windows 11) y las aplicaciones universales pertenecen al mundo de UI Automation, es esencial que sepas algunas cosas sobre UIA, que se tratan más adelante.
Descargo de responsabilidad: a pesar del texto del artículo y los conocimientos que contiene, yo (Joseph Lee, el creador del complemento) no trabajo para NV Access ni Microsoft.
Nota: algunas de las funciones descritas pueden cambiar según progresen el desarrollo de NVDA y Windows. En la revisión de julio de 2021, se han documentado las funciones de NVDA 2021.1 y las compilaciones de Windows Insider Preview más recientes con propósitos de referencia. Además, al referirse a versiones de Windows (en concreto, las actualizaciones de Windows 10), se usa el identificador de la versión (aamm) en lugar de la etiqueta de mercado a menos que se especifique (por ejemplo, versión 1709 en vez de actualización Fall Creators, o 20H2 en vez de 2009). Para tener en cuenta a Windows 11, las versiones se indicarán como «Windows versión AAMM/AAhN». Por ejemplo, Windows 10 21H1 para la actualización de mayo de 2021 de Windows 10 o Windows 11 21H2 para la primera versión de Windows 11.
Derechos de copia: Microsoft Windows, Windows 10, Windows API, UI Automation, Microsoft Edge, Universal Windows Platform (UWP) y otras tecnologías relacionadas tienen copyright de Microsoft Corporation. NVDA tiene copyright de NV Access. El complemento Windows App Essentials tiene copyright 2015-2021 de Joseph Lee y otros colaboradores, y está liberado bajo la GPL versión 2.
Versiones de Windows y Windows App Essentials
La primera versión de Windows fue la 1.01, publicada en 1985. Con el tiempo, Microsoft liberó versiones familiares de Windows como 95, 2000, XP, Vista, 7, 8, 10, 11, y demás. Cada versión supuso años de desarrollo – cinco años para Windows Vista, tres años para Windows 7, y casi dos años para la versión inicial de Windows 11 (21H2).
Lo que yo denominaría Windows moderno comenzó con la llegada de Windows 10 y la presentación de Windows como servicio (WaaS), donde las actualizaciones principales se desarrollan durante varios meses en colaboración con los Windows Insiders. Por ejemplo, Microsoft estuvo aproximadamente cinco meses (desde junio hasta octubre de 2015) desarrollando Windows 10 1511 (actualización de noviembre). Internamente, el desarrollo de una versión de Windows dura más tiempo (hasta un año o más), con Microsoft realizando comprobaciones de calidad y los comentarios de los Windows Insiders decidiendo qué características generales llegarán al público general. Esta práctica continúa en Windows 11, y también lo hace mi trabajo de defender la accesibilidad, especialmente cuando hay que asegurarse de que las aplicaciones universales de terceros son usables para muchos, dando soporte a funciones como la entrada moderna y demás.
Originalmente, Windows App Essentials sólo soportaba Windows 10, de ahí su nombre original (Windows 10 app essentials). Esto se convirtió en un problema en junio de 2021, cuando Microsoft presentó Windows 11. A pesar de que se llama Windows 11, todavía funciona con tecnologías de Windows 10, como evidencia la versión del sistema, que es 10.0, igual que la de las versiones de Windows 10. Como resultado, la necesidad de expandir el complemento para soportar Windows 11 y versiones futuras de Windows se volvió de alta prioridad, y como parte de este cambio, el «10» se eliminó del nombre del complemento en junio de 2021. Para reconocer sus orígenes y dado que la versión del sistema de Windows es 10.0 desde la 10 en adelante en todas sus liberaciones (a menos que esto cambie), partes del complemento y de este artículo interno harán referencia a Windows 10 App Essentials (WintenApps para abreviar) donde el contexto importe.
Windows 10
Windows 10 es la «última» gran versión de Windows… o así se promocionaba hasta que llegó Windows 11 en 2021. Nos presentó una forma completamente nueva de mantener un seguimiento de los cambios a través del programa Windows Insider y Windows como servicio (WAAS, un término fantástico para hablar de entrega continua), un nuevo marco de trabajo de desarrollo de aplicaciones, estrategias de unificación en términos de experiencia de usuario a través de dispositivos y un nuevo explorador web. Además, destacan el regreso del viejo estilo del menú inicio, los escritorios virtuales, el centro de actividades para centralizar las notificaciones, una nueva forma de ejecutar utilidades de consola de Linux, y mejoras en Narrador, el lector de pantalla incorporado.
Windows 10 hizo su vuelo inaugural en octubre de 2014. Antes de eso, era conocido como Windows Technical Preview, y tras varias semanas, su nombre cambió al de programa Windows Insider. Entre octubre de 2014 y julio de 2015, cuando se liberó la versión 1507 (compilación 10240), más de cinco millones de usuarios se convirtieron en insiders, probando nuevas compilaciones y aplicaciones, enviando retroalimentación, etc.
Llamo a la beta de octubre de 2014 (compilación 9841) vuelo inaugural por varias razones. En primer lugar, es la primera vez donde Microsoft mostró interés en las opiniones de los usuarios. Aunque existieron betas para versiones anteriores de Windows, como Windows 7 y 8.1, Windows 10 es el primer intento de Microsoft de conectar con los usuarios y tomar los comentarios en serio. En segundo lugar, la compilación 9841 (la primera compilación para insiders) marcó el comienzo de Windows como un servicio, un enfoque completamente diferente para mejorar Windows en el que Microsoft quería ofrecer dos cosas: entrega continua y bucle de realimentación, y una configuración unificada que funcione bien con la mayoría de dispositivos. Hubo contratiempos, como las preocupaciones que se generaron en privacidad debido a la telemetría y pérdida de datos en la actualización de 2018, pero en la mayoría de los casos Windows 10 fue recibido positivamente.
Hay otra razón más personal para llamar a la compilación de octubre de 2014 el vuelo inaugural: yo fui uno de los primeros insiders, y debido a mis trabajos con NVDA, decidí que los usuarios de lectores de pantalla debíamos ser tratados con respeto. Esto incluía enviar retroalimentación relacionada con la accesibilidad, conseguir que otros usuarios de lectores de pantalla subieran a bordo del programa Windows Insider, y liberar versiones de desarrollo de NVDA que resolvieran problemas importantes para los Windows insiders. Esto culminó con la publicación del complemento Windows 10 App Essentials en noviembre de 2015 (justo a tiempo de que se liberara la versión 1511 / compilación 10586) que traía soporte para el centro de Windows Insider (actualmente centro de comentarios) y otras soluciones, que se tradujeron en una experiencia magnífica para los usuarios de NVDA al usar Windows 10 y diversas aplicaciones universales.
Windows 11
Windows 11 se describe como la siguiente generación de Windows. Introdujo retoques en la interfaz de usuario, un panel de experiencia combinado donde los usuarios pueden seleccionar emojis e historial del portapapeles, una tienda reformada, soporte de aplicaciones Android distribuidas por la tienda de aplicaciones de Amazon, y otros retoques imperceptibles del sistema. A pesar de su nombre, la versión interna del sistema de Windows 11 es 10.0.
El desarrollo de Windows 11 se podría describir mejor como una reacción ante los cambios del ecosistema de Windows en 2020. Primero, Microsoft anunció en diciembre de 2019 que los insiders de Windows del anillo rápido (ahora canal de desarrollo) recibirían compilaciones que no iban a tener relación con futuras versiones de Windows. Seis meses después, los Windows Insiders fueron notificados de que el modelo de «anillo de Insider» estaba siendo sustituido por «canales Insider» que aclaraban la calidad de una compilación de Windows. Por ejemplo, la gente suscrita al anillo lento fue redirigida al canal beta, donde se publicaba con antelación la siguiente compilación de actualización de características para pruebas.
Al mismo tiempo, Microsoft estaba trabajando en Windows 10 X, un sistema operativo diseñado para dispositivos con pantalla dual. Windows 10 X se diseñó para ser «seguro por defecto», lo que significaba que dejaría atrás componentes heredados que pudieran comprometer la seguridad del sistema operativo, como la ejecución local de aplicaciones de escritorio clásicas. Al minimizar las aplicaciones clásicas de escritorio en Windows 10 X, tanto yo como otras personas nos preguntamos cómo iban a funcionar dichas aplicaciones en este entorno (en mi caso, lectores de pantalla). Microsoft puntualizó que habría un contenedor para ejecutar estas aplicaciones con seguridad. Pero en 2021, estaba claro que Windows 10 X no estaba listo para el mundo (diseñado originalmente para dispositivos con dos pantallas, después se convirtió en un entorno para pantalla única), y el mundo era un lugar diferente a 2019, cuando Windows 10 X se anunció por primera vez.
Más importante aún, la pandemia de Covid-19 (la enfermedad del coronavirus de 2019) trajo cambios a las vidas de millones de personas. Las escuelas pasaron a la enseñanza remota, y los negocios aceleraron la adopción del trabajo híbrido y remoto. Respondiendo a la pandemia y su impacto, junto con el estado de Windows 10 X, Microsoft suspendió el desarrollo de Windows 10 X a principios de 2021 y lo redefinió como Sun Valley, un proyecto para mejorar la interfaz de usuario y retoques relacionados. Esto culminó en que Sun Valley se revelara como Windows 11.
La primera compilación de prueba Insider de Windows 11 (22000.51) se publicó el 28 de junio de 2021. La mayor diferencia de la época de Windows 10 es cómo se presentaba y codificaba la interfaz de usuario. Por ejemplo, se reorganizó la aplicación Configuración, y muchos controles del explorador de archivos y elementos de la Shell, como los botones de la barra de tareas, son controles UIA. Al igual que con las viejas compilaciones de prueba de Insider de Windows 10, se encontraron regresiones de accesibilidad, siendo la más importante la incapacidad de activar elementos con teclas de atajo en el menú rápido (Windows+X).
Al igual que con la primera compilación de prueba de Windows 10 Insider (9841), la compilación 22000 es personal. Aunque me decepcionó que el equipo principal de desarrollo del complemento no fuera compatible con Windows 11, Windows 11 Preview arrancó bien como máquina virtual. Al menos esto me trajo un punto de partida para dar soporte a la interfaz de usuario de Windows 11 a través de Windows App Essentials, que se ha vuelto más fácil, ya que he aprendido mucho durante la era de Windows 10. En los días siguientes a la disponibilidad de la primera compilación de prueba, se han liberado muchas versiones de desarrollo del complemento, y en el momento de redacción de este apartado (julio de 2021), Windows 11 es usable con NVDA.
Propósitos de Windows App Essentials
El complemento Windows App Essentials se ha construido sobre cuatro pilares:
- Soporte de nuevas características: una forma de asegurarse de que los usuarios de lectores de pantalla eran tratados con respeto era adaptando características de Windows según aparecían a través de este complemento, particularmente en Windows 10. Entre ellas se incluyen un soporte para la antigua aplicación del centro de comentarios, y el panel de emojis en Windows 10 creators update.
- Características esenciales y verbalización: hasta principios del 2017, NVDA no verbalizaba información importante, como el estado de la instalación de actualizaciones en Windows Update en la aplicación de configuración. Esto está a punto de cambiar (mira las notas del evento de cambio en región activa para más detalles).
- Solución de problemas de accesibilidad y UI Automation: cada día se añaden nuevas funciones y se solucionan fallos en diversas aplicaciones universales y en el propio Windows. Al mismo tiempo, hay al menos una aplicación donde la accesibilidad, particularmente la de UI Automation, se rompe, especialmente durante el desarrollo de Windows 11. Parte del código del complemento se destina a solucionar implementaciones defectuosas de UIA.
- Demostración de compromiso y promoción de la accesibilidad: algunos defensores de la accesibilidad, incluyéndome a mí, hemos subrayado recientemente que la accesibilidad es importante en los diseños de aplicaciones, y que los desarrolladores deberían tomarse los comentarios de accesibilidad en serio. A través de características y solución de errores, el complemento ofrece una forma de demostrar este compromiso y promoción.
Existe un quinto pilar que ha emergido en los últimos años: proporcionar una base de pruebas para potenciales características de NVDA que traten con Windows y las aplicaciones. Recientemente, algunas partes de este complemento se han transferido al lector de pantalla NVDA, incluyendo el soporte para el panel de emojis, sonidos de sugerencias, detección de diálogo y otras.
Contenidos del complemento
El complemento Windows App Essentials está formado por una extensión global y módulos de aplicación para diversas aplicaciones universales que vienen con Windows 10 y posterior. Los objetos de Windows (abreviados como WinAppObjs), la porción de extensión global de este complemento, ofrecen soluciones como clases de superposición para controles que se encuentran frecuentemente en Windows y las aplicaciones universales, junto con rastreo de eventos UIA y registro. Hasta 2018, la extensión global también era responsable de la función de actualización del complemento, y se documenta aquí con motivos de completitud.
En cuanto a los módulos de aplicación, se han incluido para ofrecer solución de errores o mejorar la experiencia de usuario. Por ejemplo, el módulo de aplicación para la aplicación de configuración (systemsettings) permite a NVDA anunciar el progreso de descarga e instalación en Windows Update, y el módulo de aplicación para el teclado moderno (windowsinternal_composableshell_experiences_textinput_inputapp) proporciona soporte para más funciones modernas de entrada, tales como el dictado mejorado y el historial del portapapeles. Conoceremos estos módulos de aplicación con detalle en las siguientes secciones.
Nota relacionada con la paridad de características en el lector de pantalla NVDA
Como se ha dicho antes, algunas características discutidas en este artículo (tales como la reproducción de un sonido de sugerencias y el manejador de evento de notificación de UIA) se han integrado en las últimas versiones de NVDA. Voy a señalar algunas de ellas y explicar cómo se han integrado, incluyendo la planificación involucrada y algunos consejos para modificar las características del complemento para que encajen bien en el código base de NVDA.
Información sobre la función de actualización del complemento
Este artículo hará referencia en ocasiones a una función de actualización del complemento, que se ha ido en 2019. La información relacionada con esta característica se mantiene con propósitos de referencia. Ahora se usa un complemento llamado «Add-on Updater» para actualizar Windows App Essentials y otros complementos.
Nota especial sobre el soporte de actualización de características de Windows 10 y posterior
El complemento Windows App Essentials soporta una actualización de características de Windows dada (versión) durante al menos un año. Además, viene con soporte para las funciones disponibles en las compilaciones de Windows Insider Preview (WIP), incluyendo funciones que pueden no aparecer en las siguientes actualizaciones de características.
Introducción a UI Automation
Antes de pasar a explicar cómo funciona el complemento, es útil entender cómo es UIA y por qué es importante. Sólo entonces el resto del artículo tiene sentido, ya que Windows (10 y posterior) y las aplicaciones universales se apoyan en UIA (existen excepciones, como aplicaciones de escritorio (convertidas (Windows 10) o instaladores (Windows 11) para su distribución en la tienda Microsoft).
UI Automation (UIA), publicada en 2007, es una api de accesibilidad basada en el modelo de componentes y objetos (COM) que permite a las ayudas técnicas y otros programas comunicarse con los demás transmitiendo información de accesibilidad sobre un control. En algunos ámbitos, esta api reemplaza a Microsoft Active Accessibility (MSAA), a veces llamada IAccessible, y que se publicó en los años 90. Siendo una api basada en COM, permite a los programas y objetos exponer información esencial sin importar el lenguaje de programación que se use, ya que cada objeto expone rutinas documentadas que cualquier otro programa puede usar.
En el mundo UIA, un objeto en pantalla se denomina «elemento». Como en cualquier api de accesibilidad, UIA expone varios elementos a las ayudas técnicas, llamadas «clientes», siendo el programa que ofrece estos elementos un «servidor». Estos elementos se organizan en un árbol de interfaz, con la Shell de Windows (Escritorio) como raíz, y con el árbol podado y nuevas hojas brotando constantemente cada vez que las aplicaciones se inician y se cierran, los elementos son creados y destruidos, los controles se muestran y se ocultan en la pantalla y así sucesivamente.
Aunque UIA se ha diseñado para reemplazar a MSAA debido a la información de accesibilidad modernizada que puede recuperarse, los fabricantes de lectores de pantalla como NV Access publican solución de errores para implementaciones UIA pobres o defectuosas. Un caso conocido se encuentra en los problemas de UIA en versiones antiguas de Microsoft Office, tales como problemas de etiquetado en algunos cuadros combinados. Ciertas áreas en Windows y las aplicaciones universales todavía tienen problemas con UIA, tales como etiquetas de controles defectuosas o mal aplicadas, etiquetas genéricas de interfaz o de XAML (lenguaje de marcas extensible para aplicaciones), eventos que se esperan y que nunca llegan a dispararse, y así sucesivamente. Esta es una de las razones para crear el complemento Windows App Essentials: ofrecer soluciones para problemas como estos.
ID de automatización y otras interfaces y propiedades
Una pieza clave de información que UIA expone (o intenta exponer) es el ID de automatización, una cadena que identifica unívocamente un elemento. Por ejemplo, algunos campos de búsqueda exponen «SearchEditBox» como ID de automatización, que permite a lectores de pantalla como NVDA detectar estos controles. Aunque la mayoría de los controles exponen identificadores de automatización únicos, algunos utilizan identificadores genéricos o generados automáticamente (como por ejemplo el historial de actualizaciones en la aplicación de configuración).
Otra información útil expuesta por los elementos UIA es la siguiente:
- Nombre de clase: el nombre de la clase para este control, una cadena que identifica la clase de este elemento (no debe confundirse con el ID de automatización, que identifica unívocamente un elemento).
- Marco de trabajo: el marco de trabajo subyacente usado para crear un control dado, por ejemplo XAML, Direct UI y otros.
- Tipo de control localizado: un texto con el tipo de rol que debería ser verbalizado por los lectores de pantalla en diferentes idiomas.
- Controlador para: una lista (array) de controles que este elemento manipula cuando realiza acciones tales como sugerencias de búsqueda (se explica más abajo).
- Propiedades ARIA: un mapa de propiedades ARIA tales como descripción del rol, situadas mayoritariamente en elementos de Microsoft Edge.
Eventos UIA
Además de los eventos estándar esperados de las apis de accesibilidad, tales como manipulación de foco y cambios en las propiedades de un objeto (como nombre y estado), UIA viene con algunos eventos interesantes, incluyendo controlador para (Controller for), cambios en región viva (live región changed), notificación y muchos otros. Por razones de rendimiento, NVDA ignora ciertos eventos como cambio de estructura y algunos más. Más adelante en este artículo se explica cómo trabajan NVDA y Windows App Essentials con ciertos eventos UIA.
Solución de fallos y características añadidas relacionadas con UIA
El complemento Windows App Essentials incluye los siguientes extras, parches y soluciones para problemas de UIA y controles:
- Sugerencias de búsqueda: NVDA ahora reproduce un sonido para indicar la aparición de sugerencias de búsqueda, incorporado en NVDA 2017.3. Más detalles sobre esto más adelante.
- Verbalización de cambio de regiones vivas en diversas aplicaciones. En la parte de extensión global se incluye una forma de definir y rastrear este evento.
- Sugerencias flotantes como el panel de emojis en Windows 10 1709 (actualización Fall Creators) y sugerencias del teclado hardware en la versión 1803 (actualización de abril de 2018). Esto se ha incorporado en la versión 2018.3 de NVDA, pero se necesita el complemento para dar apoyo a algunos cambios más recientes.
- Soporte para el evento de notificación de UIA introducido en Windows 10 1709. Esto pasó a formar parte de NVDA en la versión 2018.2, y se redefinió en 2019.2 para interrumpir a los usuarios cuando hay notificaciones importantes pendientes.
- Se ofrecen etiquetas más significativas para ciertos controles, como el historial de actualizaciones en configuración / actualización y seguridad / Windows Update, sensibles a los cambios en las compilaciones Insider Preview.
- verbalización de consejos en aplicaciones universales, parte de NVDA 2019.3.
- Reconocimiento de diálogos proporcionados por XAML y diversos marcos de trabajo. En NVDA 2018.3, el propio NVDA se encarga de esto en la mayoría de situaciones.
Conoceremos varios controles y soluciones a lo largo de este artículo.
Objetos de aplicación de Windows
El complemento Windows App Essentials viene con Objetos de aplicación de Windows (antes Objetos de Windows 10 o WinTenObjs para abreviar), una extensión global que contiene definiciones de controles comunes que se encuentran en Windows y diversas aplicaciones universales. Aquí se incluyen el manejo de sugerencias de búsqueda, consejos de aplicaciones universales y así sucesivamente. También incluye procedimientos de manejo adicionales para UIA, y las características de configuración y actualización del complemento (esta última se eliminó en 2019).
Estructura del código fuente
El archivo con la extensión global principal se aloja en winappObjs.py y se presenta así:
- Cabecera típica de cualquier complemento con información de derechos de copia, autor, etc.
- Constantes UIA no incluidas en NVDA, incluyendo identificadores de propiedades tales como los del evento controlador para (controller for). La mayoría ya forman parte de NVDA.
- Clases que definen diversos controles de Windows y las aplicaciones universales, incluyendo sugerencias de búsqueda, selectores en bucle y así sucesivamente.
- La clase real de la extensión global, formada por un buscador de clases de superposición y procedimientos de rastreo para diversos eventos UIA (sólo disponibles si NVDA se reinicia con el registro de depuración habilitado).
Inicio y apagado
Al arrancar, junto con una comprobación del uso de una versión compatible de Windows (10 y posterior, no todas las actualizaciones de características se soportan), el complemento activa el rastreo de eventos UIA ausentes. Por ejemplo, hasta mayo de 2017, el controlador para evento (un evento producido por un control que depende de otro control, como un campo de texto con sugerencias de búsqueda) no estaba disponible en el lector de pantalla NVDA, pero la verbalización de sugerencias de búsqueda se hizo posible cuando este complemento añadió este evento.
Hasta 2019, el complemento era también responsable de extender la interfaz UIA, añadiendo diálogos de opciones y buscando actualizaciones. Eto tomaba la mayoría de procedimientos de inicio y apagado, que se suprimieron cuando se eliminó la función de búsqueda de actualizaciones del complemento.
Características y objetos de aplicación de Windows destacables
Sonidos para indicar la aparición de sugerencias de búsqueda
En algunos cuadros de edición, como el de búsqueda del menú inicio, aparecerá una lista de sugerencias mientras se escribe texto. En implementaciones más nuevas, se lanza el evento controlador para de UIA si esto ocurre, con los distintos lectores de pantalla reaccionando de forma diferente. Por ejemplo, al escribir texto en el cuadro de búsqueda del menú inicio mientras se usa el narrador, este reproducirá un sonido indicando la aparición de sugerencias, mientras que las versiones viejas de NVDA verbalizarán la sugerencia superior.
Ya que sentía que lo mejor era notificar a los usuarios cuando las sugerencias aparecen y desaparecen (y en algunos aspectos seguir los pasos del narrador), he implementado código para manejar las sugerencias de búsqueda. Este código se divide en cuatro componentes:
- Una o más clases usadas para identificar cuadros de edición que lanzan el evento de UIA controlador para, y formas de identificarlas. El motivo por el que se usan clases para el mismo objeto tiene que ver con la compatibilidad, ya que las versiones antiguas de NVDA no vienen con una clase para los cuadros de búsqueda. Estas clases incluyen dos eventos relacionados con el evento controlador para:
event_suggestionsOpened
: llamado cuando aparecen sugerencias. Algunos controles, especialmente el cuadro de búsqueda incrustado de Cortana que sale al abrir una nueva pestaña de conjuntos, no disparan este evento adecuadamente.event_suggestionsClosed
: llamado cuando desaparecen las sugerencias. Hay controles que no lanzan estos eventos, como la barra de direcciones de Microsoft Edge.
- Una clase que representa los elementos de sugerencia en sí.
- Un conjunto de sonidos para indicar la aparición y desaparición de sugerencias.
- Una capa de compatibilidad para versiones de NVDA antiguas y futuras, tal y como se ha resaltado arriba.
Además, en algunos casos, es útil verbalizar cuántas sugerencias han aparecido, y por ello se ha añadido un procedimiento para hacerlo. Con esto añadido, el cuadro completo es el siguiente:
- El usuario escribe texto en un cuadro de búsqueda.
- NVDA recibirá el evento controlador para y buscará la lista de sugerencias. Si dicha lista se encuentra, NVDA reproducirá el sonido de sugerencias llamando al evento suggestionsOpened.
- Si se encuentran sugerencias, NVDA verbalizará la sugerencia superior o la cantidad de sugerencias. Lo primero se hace en el menú inicio, mientras que lo último se hace en los demás cuadros de búsqueda.
- Se pueden usar las flechas arriba y abajo para moverse por las sugerencias, y pulsar intro para seleccionar o escape para cerrar la lista de sugerencias. Al cerrar la lista de sugerencias, NVDA reproducirá el sonido de desaparición de sugerencias.
Desde NVDA 2017.3, la verbalización de sugerencias de búsqueda (y no el total) es parte del lector de pantalla.
Ten en cuenta que los procedimientos descritos más arriba se hicieron de una vez cuando se quisieron detectar todos los campos de búsqueda. Sin embargo, se descubrió que algunas aplicaciones necesitaban correcciones específicas, por lo que en junio de 2019 se decidió transferir el manejo de algunos campos de búsqueda a los módulos de aplicación. Este caso concretamente es el que se aplica a la barra de direcciones del antiguo Microsoft Edge (versión EdgeHTML), donde el manejador de evento de sugerencias de búsqueda cerradas de la extensión global no se aplicaba si Edge estaba en uso. El manejo de campos de búsqueda extraños que apareció en una o dos aplicaciones (como el campo de búsqueda de la aplicación Personas en versiones antiguas de la aplicación) fue eliminado.
Verbalizando notificaciones
Windows 10 1709 (actualización Fall Creators) introduce un nuevo evento para permitir a las aplicaciones enviar texto que sea verbalizado por clientes UIA como NVDA. Una de las tareas de Objetos de aplicación de Windows es capturarlo y verbalizar notificaciones en versiones de NVDA que no lo soporten de forma nativa.
Como NVDA no soporta el nuevo evento de notificación de forma nativa, se incluye una solución con este complemento para permitir a NVDA detectar y procesar notificaciones. Esto se hace extendiendo el subsistema de soporte UIA a través de un módulo interno que tiene prioridad sobre los procedimientos de NVDA. Entre otras cosas, este subsistema extendido incluye definiciones para el manejador del evento de notificación de UIA, y tiene en cuenta si se está ejecutando NVDA 2018.1.x en Windows 10 1709 y versiones posteriores.
El manejador de eventos de notificación recibe cinco argumentos clave:
- Remitente: el elemento UIA que ha lanzado el evento.
- Tipo de notificación: el tipo de notificación.
- Procesado de notificación: cómo debería NVDA procesar la notificación entrante.
- Cadena a mostrar: texto de la notificación.
- ID de actividad: el identificador único de la notificación.
Desde octubre de 2018, NVDA verbaliza notificaciones para todas las aplicaciones (especialmente la aplicación activa), excepto una o dos donde esto daría problemas, por lo que el complemento ya no está implicado en el anuncio de muchas notificaciones salvo aquellas que podrían causar problemas.
Rastreo de eventos UIA en controles
La extensión global Objetos de aplicación de Windows tiene también la capacidad de rastrear eventos UIA para controles y registrar información sobre ellos, ejecutando la función uiaDebugLogging
, que recibe el objeto y el nombre del evento. Esta función registra lo siguiente si NVDA se ha iniciado con el registro de depuración habilitado o se le ha indicado que monitorice eventos específicos y / o eventos de aplicaciones concretas:
- Qué es realmente el objeto.
- Nombre del objeto.
- Nombre del evento que se registra.
- Aplicación donde puede encontrarse el control (específicamente, el módulo de aplicación).
- ID de automatización si es posible.
- Nombre de clase UIA.
- Para el evento controlador para, la lista de objetos de la que depende el control dado.
- Para el evento de consejo abierto, el motor de interfaz gráfica que proporciona el elemento.
- Para el evento de estado del elemento, el nuevo texto de estado del elemento.
- Para el evento de cambio de estado, el estado actual del elemento.
En caso de que haya eventos de notificación, NVDA registra los parámetros del evento desde el mismo método manejador del evento.
Selectores en bucle
Un selector en bucle es un control similar a un cuadro combinado, donde la selección está en bucle y se repite. Se emplea en lugares como Reloj y alarmas, Configuración / Actualización y seguridad / Windows Update / Horas activas y así sucesivamente.
En versiones antiguas de Windows 10 y las aplicaciones universales, al cambiar los valores del selector, no se disparaba el evento UIA elemento seleccionado. Para solucionar esto, el complemento examinará los estados para cada elemento y verbalizará si un elemento tiene el estado seleccionado. Este no es el caso para implementaciones más nuevas, pero se conservan los procedimientos para garantizar compatibilidad hacia atrás. Esto se ha mejorado en NVDA 2019.1, y desde junio de 2019, el complemento ya no vigila esta situación porque NVDA la soporta de forma nativa.
Eventos de cambio de región viva
Algunos controles son regiones vivas, o lo que es lo mismo: un control cuyo contenido denota texto vivo, como el progreso de algo, alertas y demás. Debido a implementaciones defectuosas del evento de cambio de región viva, las versiones más antiguas de NVDA no soportan este evento de forma nativa, pero en NVDA 2017.3 y versiones posteriores se incluye una implementación trivial donde NVDA verbalizará el texto de la región viva, como el nombre del objeto.
Objetos de aplicación de Windows va un paso más allá registrando instancias de este evento y ofreciendo soluciones para casos específicos. Aquí se incluye la verbalización correcta de texto para las alertas en Edge (mira más abajo), la prevención de verbalizaciones repetidas en algunas aplicaciones, etc.
Reconocimiento de diversos diálogos
Algunas ventanas son realmente diálogos, aunque no se identifiquen como tales. Estas incluyen los diálogos emergentes para desinstalar aplicaciones, diversos diálogos que se encuentran en la aplicación de configuración y demás.
En versiones antiguas del complemento, NVDA habría consultado una lista de nombres de clases conocidas de diálogos con la esperanza de detectar alguno. En las nuevas versiones, especialmente si se ejecutan en Windows 10 versión 1809 o posterior, la propiedad UIA IsDialog se usa para detectar elementos de diálogo. Una vez se reconocen los diálogos, NVDA leerá su contenido automáticamente tan pronto como aparezcan. Esto se ha simplificado en NVDA 2018.3, ya que el propio NVDA dará lo mejor de sí mismo para reconocer más diálogos, incluyendo aquellos marcados como diálogos mediante UIA en Windows 10 1809. Sin embargo, existen ventanas que son realmente diálogos, por lo que el complemento todavía incorpora una lista de clases de diálogo conocidas para que NVDA las consulte.
Eventos de arrastrar y soltar
Algunos controles permiten arrastrar y soltar elementos usando atajos de teclado. Esto se usa al reordenar los mosaicos del menú Inicio, desplazar elementos en el centro de actividades, y reordenar escritorios virtuales en Windows 11. Esto se hace pulsando las teclas alt+shift+flechas izquierda y derecha.
Los controles enumerados más arriba elevan eventos UIA de arrastrar y soltar, equivalentes a los eventos de arrastrar y soltar del ratón. Se definen hasta seis eventos UIA para notificar a clientes UIA como NVDA cuando la operación de arrastrar o soltar comienza, está en curso, o se han arrastrado o soltado los elementos. De estos, NVDA escucha los siguientes eventos para anunciar la nueva ubicación del elemento recién arrastrado:
- Drag complete: elevado por el propio elemento cuando se arrastra a algún sitio.
- Drop target dropped: un contenedor, tal como una lista, notifica a los clientes UIA si se está arrastrando un elemento en su interior a una nueva posición.
Módulos de aplicación para aplicaciones universales
Además de la extensión global Objetos de aplicación de Windows, el complemento viene con módulos de aplicación diseñados para proporcionar soporte extra para diversas aplicaciones universales que vienen con Windows 10 y posterior. Estos módulos incluyen mejoras y/o solución de problemas, principalmente divididas en cinco categorías:
- Añadir funciones extra.
- Dar soporte a nuevas tecnologías.
- Verbalizar (o, más recientemente, suprimir verbalización sobrante de) información en diversas situaciones.
- Solución a problemas de UIA.
- Respuesta a cambios en aplicaciones, y en al menos cuatro ocasiones, añadir algunos alias para aplicaciones con el nombre del ejecutable cambiado.
Los módulos, mejoras y soluciones aplicadas son:
- Calculadora: verbaliza la pantalla de manera selectiva.
- Calendario: suprime el anunciado del estado de sólo lectura en múltiples controles.
- Cortana / Menú inicio / Windows Search (Cortana clásico): suprime la verbalización doble del elemento de sugerencia de resultado en algunos casos, permanece en silencio cuando el usuario dicta a Cortana, y procesa malas implementaciones de UIA.
- Cortana/conversaciones (nuevo Cortana): se anuncian las respuestas de Cortana.
- Correo: órdenes de navegación de tablas en la lista de mensajes, elimina la verbalización de sólo lectura en el contenido del correo, alias de aplicación para hxmail.exe y hxoutlook.exe (el más reciente para actualizaciones publicadas después de mayo del 2017).
- Mapas: reproduce coordenadas de eventos para elementos en el mapa, se suprime la verbalización repetida en el cambio de regiones vivas, alias para dar soporte a versiones viejas y nuevas de la aplicación (el alias viejo, maps_windows, ya no está).
- Tienda de Microsoft: verbaliza información necesaria cuando se dispara el evento de cambio de región viva en algunos controles, alias para soportar versiones antiguas y nuevas de la tienda (el alias antiguo, winstore_mobile, ya no está).
- Teclado moderno / host de entrada de texto: soporte para el panel de emojis, el dictado, las sugerencias de entrada por hardware y pegar elementos desde el portapapeles (versión 1809), IME moderno, parte de NVDA desde la versión 2018.3.
- El tiempo: usa las flechas arriba o abajo para leer la información meteorológica.
- Personas: se anuncia la primera sugerencia al buscar un contacto.
- Configuración: verbaliza de forma selectiva diversa información de estado, proporciona etiquetas correctas para ciertos controles.
Añadiendo funciones útiles en aplicaciones
Los siguientes módulos de aplicación añaden funcionalidad específica de NVDA y / o órdenes utilizadas exclusivamente para mejorar la experiencia de usuario al utilizar aplicaciones:
- Mapas (maps.py): al usar navegación de objetos para examinar un mapa, se reproducirá un tono para indicar dónde se ubican las cosas en el mapa. Esto se hace definiendo un manejador personalizado para
event_becomeNavigatorObject
que tomará las coordenadas del objeto (en píxeles) y reproducirá un tono, emulando esencialmente los pitidos de coordenadas del ratón de NVDA. El módulo de aplicación también permite a los usuarios oír nuevas ubicaciones al usar la vista de calle para navegar por el mapa, y esto se ha realizado a través de manejadores para el evento de región viva cambiada. - Correo (hxmail.py): al tener el foco en la lista de mensajes, se pueden usar órdenes de navegación de tablas (ctrl+alt+flechas) para revisar los encabezados del mensaje. Esto es posible gracias a dos cosas: los encabezados son objetos hijo del elemento del mensaje, y por esto, se puede emplear la clase
NVDAObjects.behaviors.RowWithFakeNavigation
para añadir esta funcionalidad. - El tiempo (Microsoft_msn_weather.py): este módulo de aplicación, aportado por Derek Riemer, permite a los usuarios pulsar las flechas arriba y abajo para leer información meteorológica, llamando a las órdenes correspondientes de movimiento del cursor de revisión para moverse por línea.
Una nota sobre el teclado moderno
Teclado moderno, en ocasiones llamado Composable Shell (windowsinternal_composableshell_experiences_textinput_inputapp.py), y hoy en día llamado host de entrada de texto, es el nombre de la aplicación que proporciona diversas características, incluyendo el panel de emojis, el dictado, las sugerencias de entrada por hardware, el listado de elementos que pueden pegarse desde el portapapeles en la nube y muchas más funciones relacionadas con la entrada. No se trata exactamente de una aplicación, sino que está más enfocado hacia una capa flotante, similar a los teclados en pantalla que se muestran en dispositivos táctiles. Para potenciarlos, hay un teclado táctil rediseñado donde se usa el panel táctil basado en XAML (con su propio proceso).
En Windows 10 Insider Preview compilación 16215 y posteriores, se da la posibilidad a los usuarios de explorar y seleccionar emojis para insertar en un cuadro de edición. Esto se hace pulsando Windows+punto (.) o Windows+punto y coma (;). Se mostrará un panel flotante con emojis y categorías de emojis. A partir de ahí se pueden usar las flechas para desplazarse entre los emojis, o tab y shift+tab para saltar por las categorías. En la compilación 16226, se pueden teclear descripciones de emojis para acotar el emoji deseado.
En la compilación 17666 y posteriores, se ha rediseñado este panel. En vez de usar el tabulador para moverse entre categorías, ahora se pulsa el tabulador para moverse entre las categorías y la cuadrícula de emojis. En el caso de la categoría personas, el tabulador te hará moverte a la lista de tonos de piel, en la que puedes usar las flechas para seleccionar un tono de piel, y luego pulsar tabulador para moverte a la cuadrícula de emojis.
La compilación 18305 y posteriores trajeron otro cambio de diseño a este panel. Además de seleccionar emojis, también hay otras dos categorías principales llamadas kaomoji («caracteres faciales» en japonés) y símbolos. Al pulsar tabulador, se alcanzará la lista de categorías con tres elementos: emoji, kaomoji y símbolos. Al igual que con las categorías de emojis, al pulsar intro se alternará el panel entre estos modos.
La compilación 18963 renombró el teclado moderno como host de entrada de texto, y además trae una versión refinada del editor de métodos de entrada (IME) para ciertos idiomas. En idiomas como el japonés, se usa el IME moderno alojado en el host de entrada de texto.
La compilación 20206 trajo un teclado moderno rediseñado. Se han combinado el panel de emojis y el historial del portapapeles, junto con la búsqueda de gifs (imágenes animadas). En vez del evento element selected, se usa el evento de notificación para anunciar el emoji o el elemento del portapapeles seleccionado. No será hasta la compilación 21296 cuando el panel de emojis rediseñado se vuelve usable, y como las cosas pueden cambiar, el soporte para el panel de emojis rediseñado no forma parte del lector de pantalla NVDA en este momento (se proporciona soporte mediante este complemento).
Cuando este panel se abre, el panel de emojis dispara un evento de apertura de menú (explorador de archivos en la compilación 18305 y posteriores), un evento que NVDA no detecta por razones de rendimiento. Según se van seleccionando elementos, se dispara un evento de elemento seleccionado (evento de notificación en la compilación 21296 y posteriores), al que NVDA responde recorriendo el panel como si fuera un árbol hasta ubicar el elemento seleccionado. La verbalización real de caracteres emoji depende de los sintetizadores; actualmente, Espeak NG y las voces recientes de Sapi 5 y OneCore (Sapi Mobile) vienen con definiciones de caracteres emoji, expandidas para cubrir otros sintetizadores en NVDA 2018.4
De manera similar al panel de emojis (o panel de entrada expandido en la compilación 18305 y posteriores), en la compilación 17025 y posteriores, el teclado moderno también puede proporcionar sugerencias de entrada. Esto se hace marcando una nueva opción en Configuración / Dispositivos / Escritura, y que se activa también al pulsar flecha arriba mientras se escribe (sólo se soporta la distribución de teclado en inglés de Estados Unidos). Al igual que en el panel de emojis, aparece una ventana flotante, y en este caso se pueden pulsar flechas izquierda y derecha para navegar entre sugerencias y pulsar intro para aceptar el elemento ofrecido.
El mecanismo anterior para seleccionar sugerencias de entrada también se emplea al pegar elementos desde el portapapeles en la nube. En la compilación 17666 y posteriores, se pueden copiar textos y pequeñas imágenes al portapapeles para pegarlos más tarde. Windows conservará un historial de elementos copiados al portapapeles. Al pulsar Windows+v, se mostrará una lista de elementos del portapapeles, y en ella se pueden pulsar flechas izquierda y derecha para seleccionar el elemento deseado.
En NVDA 2018.3, el soporte para estas características (teclado moderno) más la ventana de dictado (parte también del teclado moderno) forma parte del propio NVDA, llegando el soporte de IME moderno en NVDA 2020.4. No obstante, el complemento es necesario todavía para soportar los nuevos diseños de panel (explicados más arriba), en particular el panel de emojis rediseñado en la compilación 21296.
Qué verbalizar, qué callar
En ocasiones es útil hacer que los usuarios sepan qué está pasando anunciando información de diversos estados, mientras que otras veces es igualmente importante no anunciar mensajes extra. El primero era el caso para la mayoría de los siguientes módulos de aplicación en el pasado, pero desde mediados de 2017 se está evolucionando precisamente hacia lo contrario.
Los módulos de aplicación (y para uno en particular, más de un módulo de aplicación) en cuestión son:
- Calculadora (calculator.py): mientras se introducen cálculos, se anuncia la expresión introducida mediante el manejador de evento de cambio de nombre. Como esto puede interferir con la verbalización de caracteres introducidos en NVDA, sólo se verbalizará el contenido de la pantalla de la calculadora cuando aparezcan los resultados reales o cuando se limpie.
- Personas (peopleapp.py): NVDA anunciará la primera sugerencia al buscar un contacto. A diferencia de otros campos de búsqueda, no hay un controlador para evento. Sin embargo, la sugerencia lanza un evento de elemento seleccionado.
- Cortana (searchui.py) / nuevo menú Inicio y experiencia de búsqueda en Windows (searchapp.py en Windows 10, searchhost.py en Windows 11): Cortana clásico usa eventos de cambio de nombre e identificadores de automatización específicos para transmitir mensajes de texto. El evento de cambio de nombre también se emplea cuando Cortana intenta entender el texto dictado por un usuario, lo que en las versiones antiguas del complemento se traducía en que NVDA podía verbalizar galimatías. Esto se resolvió en versiones posteriores del complemento. En versiones recientes de Windows 10, debido al cambio de diseño de Windows Search (que también implica renombrar el ejecutable de Windows Search a searchapp), se anuncia el contenido del cuadro de búsqueda en lugar de los detalles del resultado, o si se anuncian los resultados, lo hacen dos veces.
- Conversaciones de Cortana (cortana.py): similar al Cortana clásico, se anuncian las respuestas de Cortana.
- Configuración (systemsettings.py): NVDA verbalizará mensajes tales como las notificaciones de Windows Update, y esto se hace mediante el evento de región viva cambiada (evento de cambio de nombre en versiones del complemento más antiguas).
- Tienda de Microsoft (winstore_app.py): al igual que en la aplicación de configuración, se verbalizan mensajes de estado, en esta ocasión relacionados con la descarga de productos como aplicaciones o contenido multimedia.
Cazando problemas de implementación de UIA
Como se ha explicado arriba, algunos controles vienen con implementaciones UIA malas o defectuosas, y las aplicaciones universales no son una excepción (al menos para los módulos de aplicación que vienen en el complemento). Por este motivo, los siguientes módulos de aplicación (y en dos casos, la extensión global Objetos de aplicación de Windows) incluyen soluciones para diversos problemas de UIA:
- Calendario (hxcalendarappimm.py) y Correo (hxoutlook.py): algunos cuadros de edición, como el título de la cita y otros, se muestran como de sólo lectura cuando en realidad no lo son, y eliminando este estado del conjunto de estados para estos controles resolvía este problema.
- Cortana: algunas sugerencias de búsqueda exponen el mismo texto en su nombre y descripción, lo que resulta en repeticiones del texto con el resultado de la sugerencia. Esto fue corregido comparando nombre y descripción, y anulando la descripción (obj.description=None). Este truco ya no se puede aplicar por el cambio de diseño de Windows Search en la versión 1903. Además, al abrir la versión de Conjuntos del cuadro de búsqueda de Cortana (compilaciones 17666 y 17692), se dispara el controlador de evento equivocado, que evita que NVDA anuncie las sugerencias. Esto se ha corregido.
- Mapas: a pesar de que no hay cambios en la aplicación, el control con el título del mapa dispara el evento de región viva cambiada, por lo que NVDA incluye una forma de suprimir repeticiones.
- Configuración y tienda: para algunos controles (como por ejemplo al descargar contenido de la tienda), un control de estado específico dispara el evento de región viva cambiada. Por desgracia, su texto es genérico (por ejemplo, «descargando algo por ciento», en lugar de verbalizar el producto que se está descargando), por lo que NVDA ubicará información como los nombres de producto cuando esto pase para hacer más fácil el seguimiento. También, en la aplicación de configuración, algunos controles en versiones más antiguas de la aplicación no tienen etiqueta, por lo que se pide a NVDA que busque etiquetas viajando por los objetos hermano (siguiente / anterior), y en el caso de ciertas instalaciones de la versión 1809 de Windows 10, la etiqueta correcta es el nombre del primer hijo.
Un cuento sobre los nombres de ejecutables y módulos de aplicación
Uno de los efectos colaterales de la entrega continua es la aparición de cambios no previstos con antelación. Este efecto es más notable cuando una solución para una aplicación se rompe simplemente porque el nombre del ejecutable o la aplicación ha cambiado. Además, algunas aplicaciones vinieron con un ejecutable cuyo nombre rompía los nombres de módulo de Python y los procedimientos de importación.
Los problemas específicos que se encontraron fueron:
- Correo y calendario, mapas, teclado moderno, menú Inicio, búsqueda de Windows y tienda: los nombres de los ejecutables han cambiado a lo largo del desarrollo de Windows 10 y posterior. Por ejemplo, en mayo de 2017, las soluciones para la aplicación de correo se rompieron cuando Microsoft cambió el nombre de hxmail a hxoutlook, y en julio de 2019, el teclado moderno se renombró a textinputhost. Windows 11 no es la excepción, al traer con él un ejecutable renombrado de Windows Search (searchhost). Por este motivo, es común la creación de alias (un módulo de aplicación que importa todo lo de otro módulo).
- MSN El tiempo, tienda, teclado moderno y otros: algunos nombres de ejecutable tienen un punto (.) a la mitad, que rompe los procedimientos de importación de módulos. Esto se soluciona reemplazando puntos por guiones bajos (_). Por ejemplo, para Tienda, el auténtico nombre del ejecutable es winstore.app.exe, mientras que su módulo de aplicación se llama winstore_app.py. Esta solución ya forma parte de las últimas versiones de NVDA.
Unas pocas notas
Rendimiento de UIA
En la página de GitHub de NVDA se crearon bastantes incidencias relacionadas con problemas de rendimiento de UIA. Aquí se incluyen incidencias de los primeros días en los que se daba soporte a Edge en las que se decía que la navegación por el documento era lenta (resueltas en NVDA 2017.2), problemas en la vista de lista del explorador de archivos mientras se usaba un programa que consumía mucha CPU (GoldWave, por ejemplo, resuelto en NVDA 2018.4) y así sucesivamente. Mientras que algunos son específicos de NVDA, otros pueden reproducirse mientras se usa el narrador, por lo que NV Access y Microsoft están colaborando activamente para identificar y escribir correcciones para problemas de rendimiento e implementación de controles (como los que se han listado arriba).
Narrador es la nueva referencia en lectura de pantalla en Windows 10 (y posterior) y las aplicaciones universales
Hasta hace unos pocos años, cualquier lector de pantalla que quisiera dar soporte a una aplicación o añadir nuevas funciones utilizaba Jaws for Windows como guía. Ese ya no es el caso para Windows 10 (y posterior) y las aplicaciones universales, ya que Narrador proporciona un punto de referencia útil (al menos una implementación base a la que otros fabricantes de lectores de pantalla deberían responder) al leer texto en pantalla, un conjunto de características para dar soporte a las aplicaciones universales, e investigar problemas de UIA. Algunas de las características expuestas arriba, como la notificación de sugerencias de búsqueda, estuvieron inspiradas en la forma que tiene Narrador de manejar diversos eventos de UIA, y gracias a que Narrador lee lo que hay que leer, NVDA viene con soluciones para implementaciones UIA defectuosas para hacer frente a algunos problemas.
Desarrollo y pruebas del complemento
El complemento emplea ciclos de desarrollo iterativos donde se refinan las funciones continuamente. Los refinamientos pueden ser dirigidos por los comentarios de los usuarios, cambios en las compilaciones de Windows Insider y las aplicaciones, o cambios en NVDA que requieren que el complemento soporte nuevas y antiguas rutas de código. Como el complemento emplea un modelo de entrega continua (se pueden liberar versiones estables en cualquier momento), una versión estable puede contener funciones en diversos estados de desarrollo.
Como parte del desarrollo y las pruebas del complemento, una actividad que realizo es mantenerme al día con los cambios en las compilaciones Insider Preview, concretamente los cambios en el canal de desarrollo (anteriormente conocido como anillo rápido de Windows Insider). Siempre que se publican nuevas compilaciones, analizo las nuevas funciones descritas en las notas de versión y veo si hay presentes cambios visibles para el usuario. Si es así, pruebo las nuevas características y veo cómo de usables son mientras se usan Narrador y NVDA. Si descubro que algo no funciona con NVDA, realizo procedimientos de depuración como analizar los eventos UIA para hacerme una idea de cómo puede soportar NVDA mejor esa función. Hago esto repetidamente hasta que NVDA soporta la nueva característica bien. Ejemplos de funciones que han seguido esta ruta incluyen el panel de emojis, cambios en la interfaz de la aplicación Configuración, e informar de la operación de reordenar escritorios virtuales. Ten en cuenta que incluso si una compilación no viene con cambios espectaculares, aún la uso para buscar pequeños cambios y correcciones.
Ya que Windows incorpora aplicaciones que pueden cambiar sin previo aviso, las aplicaciones pueden convertirse en otra fuente de desarrollo de funciones. Para soportar los cambios en aplicaciones, anoto las diferencias entre versiones de la aplicación y elaboro un plan para soportar las versiones antiguas y las nuevas. Esto se vuelve importante si los ejecutables se renombran, en cuyo caso se emplean alias de aplicaciones para soportar versiones nuevas y antiguas. Los ejemplos incluyen correo y calendario, el teclado moderno y Cortana.
Además de los cambios en Windows y las aplicaciones, los cambios a NVDA, tales como incorporar soporte para una nueva característica de Windows (escenario 1) o los cambios en aplicaciones (escenario 2) pueden contribuir a los cambios de funciones. Como se describe más abajo, algunas funciones del complemento se volvieron parte de NVDA. Si NV Access y los colaboradores planean incorporar funciones de este complemento, asumo que se han integrado y edito el código fuente del complemento para soportar las rutas de código antiguas (no integrado) y nuevas (integrado). Estas se apoyan en la presencia de atributos de módulo específicos y me esfuerzo para emular las características del complemento en revisión. Una vez que se libera una versión de NVDA con nuevas características, el complemento elimina el soporte para las versiones antiguas que no han integrado estas características. Esta ruta se tomó para incorporar características como el panel de emojis, sugerencias de búsqueda, soporte para la calculadora y manejo del evento de notificación.
De vez en cuándo, estos cambios se liberan en versiones de desarrollo. Esto se hace para poder recopilar comentarios de evaluadores con la esperanza de refinar los cambios. Al menos una vez al mes, los cambios en versiones de desarrollo se envían a una rama usada para preparar versiones estables del complemento, y se etiqueta la versión estable unos días después en cuanto se integran los últimos cambios, como las traducciones. Después, el ciclo se repite.
Cambios en 2021
Un gran cambio en 2021 es el desarrollo basado en hitos. Aún sigue siendo un proceso de desarrollo iterativo, pero he decidido usar un ciclo de desarrollo trimestral para aislar funciones de larga duración y centrarme en otras prioridades. Este es el resultado de cambios en mi vida que reducirá mis compromisos con el desarrollo de complementos – reducir el foco en el mantenimiento de complementos en favor de planificación temprana y desarrollo inicial, centrarme en otras prioridades, y refinar el complemento cuando tenga tiempo.
El proceso de desarrollo trimestral deriva de los hitos de desarrollo de Windows. Como parte del desarrollo de Windows, Microsoft divide las fases del desarrollo en semestres. Cada semestre de desarrollo se nombra en función de un elemento químico, concretamente nombrado así por los elementos en la tabla periódica. Esto se hace con Microsoft Azure, pero recientemente se ha adoptado también en el desarrollo de Windows, y se ha diseñado para establecer hitos para funciones de larga duración. Cuando se acerca el fin de un semestre, Microsoft selecciona funciones que formarán parte de la siguiente versión (ya sea una compilación completa o un paquete de características) y crea una rama de mantenimiento de estas funciones, siendo el resto enviado al siguiente semestre de desarrollo para futuros refinamientos.
El ciclo trimestral de desarrollo de Windows App Essentials (adoptado por primera vez en junio de 2021) se nombra después de los semestres de desarrollo de Windows, dividido en dos cuartos o mitades. Por ejemplo, en agosto de 2021, el ciclo de desarrollo más reciente en Microsoft es «níquel», y el ciclo interno de desarrollo de Windows App Essentials es «níquel1», cuyo fin está programado para septiembre. Cada trimestre se dedica a una o más características de larga duración o temas. Por ejemplo, «níquel1» se dedica a refinar el soporte para Windows 11 y preparar el módulo para la refactorización de controlTypes de NVDA 2021.2. Tiendo a hacer un sprint de código pronto y refinarlo según pasa el tiempo. En agosto de 2021, los cambios de NVDA 2021.2 se alojan en una rama «prerelease» dedicada, que pasará a formar parte de «Níquel1» en cuanto se libere la beta 1 de NVDA 2021.2 y refinada posteriormente. La evaluación de funciones del complemento, así como la eliminación de rutas de código redundante, es el tema más plausible para «Níquel2», que se ejecutará entre septiembre y diciembre de 2021, pero en agosto de 2021 está bajo en mis prioridades en comparación con asuntos más inmediatos, como la escuela de posgrado.
Entre las liberaciones por hitos, se usa una rama dedicada para traer cambios clave del siguiente trimestre. Estos adquieren el nombre de un compuesto químico o una aleación que involucra el elemento que constituye la base de la rama con el cambio que se trae. Por ejemplo, una rama llamada «alnico» (una aleación de aluminio, níquel y cobalto) se usa para llevar cambios clave desde «níquel2» a la rama «níquel1». Sirven no sólo como ramas de mantenimiento, sino también para introducir funciones que serán parte de la siguiente versión basada en hito, siempre que no implique reescrituras masivas, como la necesidad de versiones de Windows o NVDA más recientes. Eventualmente, las ramas «aleación» se fusionan con las ramas de hitos como «níquel1».
El principal objetivo del desarrollo por hitos / proceso trimestral es recordarme las prioridades de la vida. En el pasado, era capaz de dedicar más tiempo al desarrollo y mantenimiento de complementos. Según ha pasado el tiempo, se ha vuelto más importante pensar en asuntos personales inmediatos, como centrarme más en la educación superior. Además, he estado buscando una forma de reinventar los ciclos de desarrollo de complementos, por lo que en junio de 2021 decidí pasar el desarrollo de versiones estables más de una entrega continua a versiones trimestrales con cambios periódicos, similar a como funciones recientes, como noticias e intereses (parte de los widgets de Windows 11) se han desarrollado (desarrollo continuo, seguido de cambios llevados a versiones estables). Este cambio debería tener un impacto mínimo en las versiones de desarrollo, que se publican continuamente según cambia el código del complemento. En general, el desarrollo por hitos es todavía un proceso iterativo, al igual que en versiones anteriores.
Integración de características de este complemento en el lector de pantalla NVDA
Como se ha explicado arriba, algunas funciones del complemento se están (o se han) integrando en NVDA. Aquí se incluyen la notificación de sugerencias de búsqueda, soporte del teclado moderno, rastreo y verbalización del evento de región viva cambiada y así sucesivamente. Como se ha descrito anteriormente, estos cambios pueden proceder de Windows, las aplicaciones, y otras fuentes, como el interior de NVDA.
Normalmente, cuando se integra la función de un complemento en NVDA, sigue el típico ciclo de incidencia-prototipo-revisión-pruebas-documentación. Para ilustrarlo, vayamos por los pasos implicados en la integración de sugerencias de búsqueda en NVDA:
- Incidencia: se creó una incidencia relacionada con las sugerencias de búsqueda en 2016.
- Prototipo: se incluyó el soporte para sugerencias de búsqueda en el complemento.
- Revisión: mientras el prototipo se transformaba en una solicitud de cambios de NVDA, NV Access y yo iniciamos una fase de revisión donde se discutieron detalles de implementación y se escribieron casos de prueba.
- Prueba: en 2017, se estrenó la función de sugerencias de búsqueda en la versión next de desarrollo de NVDA. Esto dio como resultado retroalimentación de los usuarios relacionada con el soporte Braille, sonidos y otros. Después de varias semanas, esta característica se puso a disposición de los usuarios de la versión de desarrollo master, y por tanto estuvo lista para NVDA 2017.3.
- Documentación: la característica de sugerencias de búsqueda se documentó en la guía de usuario. La exposición de esta función en este artículo es un caso especial del paso de documentación.
Después de que el soporte de sugerencias de búsqueda se integrara en NVDA, edité el complemento para asumir que esta función siempre estaba disponible.
Debido a los cambios del proceso de liberación en 2018, las pruebas se hacen mediante solicitudes de cambio.
Además, cuando se considera que se puede incluir en NVDA alguna función de un complemento, modifico el código fuente del complemento para que cumpla las pautas del código fuente de NVDA, como el estilo de comentarios, cabecera de copyright y así sucesivamente.
Cómo dar retroalimentación a los desarrolladores de aplicaciones
La retroalimentación dirige a Windows y las aplicaciones universales. Una de las razones para crear el programa Windows Insider, como han indicado Microsoft y otros, es recopilar comentarios de millones de usuarios, con la esperanza de hacer Windows mejor a largo plazo. Por tanto, enviar retroalimentación sobre Windows y las aplicaciones universales preinstaladas, así como de las aplicaciones de terceros, es crucial en la era del desarrollo dirigido por comentarios.
Aquí hay algunos consejos que se pueden poner en práctica a la hora de enviar comentarios a los desarrolladores de aplicaciones:
- Compromiso: ten la disposición para comprometerte a usar y probar la aplicación en cuestión.
- Documenta: si algo pasa, documenta qué ha pasado, pasos para reproducirlo, y posibles soluciones.
- Envía: envía tu retroalimentación a los desarrolladores (centro de comentarios, contacto con desarrolladores de aplicaciones universales de terceros, fabricantes de lectores de pantalla, etc.).
- Seguimiento: seguimiento con los desarrolladores para ver si tienen preguntas para ti o para saber qué ocurre con tu retroalimentación.
Buenas prácticas de accesibilidad para aplicaciones universales
Como Windows insider, colaborador de un lector de pantalla y autor de un complemento para Windows 10 y posterior y las aplicaciones universales, me he encontrado numerosos ejemplos donde las aplicaciones eran inaccesibles al principio, o su usabilidad se veía ensombrecida por problemas al trabajar con los controles, la navegación y así sucesivamente.
Aquí hay algunos consejos que espero sirvan para hacer las aplicaciones universales verdaderamente accesibles y usables:
- Escucha la retroalimentación, especialmente los comentarios que vengan de usuarios con discapacidad, como por ejemplo usuarios de lectores de pantalla.
- No pongas la accesibilidad como un pensamiento de último momento, ni como algo que quieras dejar para trabajar en el futuro (digamos, versión 3). La investigación proactiva de la accesibilidad y sus problemas es algo que los desarrolladores de aplicaciones deberían aprender según las desarrollan.
- Haz pruebas con lectores de pantalla y otras ayudas técnicas: una forma de validar problemas de accesibilidad reportados por usuarios con discapacidad es usar las ayudas técnicas en la vida real. Usa las herramientas ofrecidas por los lectores de pantalla, como la consola Python de NVDA, el modo desarrollador en Narrador, etc. para localizar dónde se encuentra la raíz del problema.
- Intenta usar teclados y otros métodos de entrada ofrecidos por diversas ayudas técnicas: la pantalla táctil no es el único método de entrada usado en las aplicaciones universales. Muchos usuarios de lectores de pantalla usan un teclado para interactuar con aplicaciones, y otros usan gestos en sus pantallas táctiles ofrecidos por los lectores de pantalla para navegar por la aplicación y reaccionar a los cambios. Intenta usarlos para asegurarte de que las funciones de la aplicación funcionan como se espera al utilizar teclados y otros métodos de entrada.
- Usa etiquetas útiles: en caso de que el lector de pantalla te informe de que tu control no tiene etiqueta, asegúrate de ofrecerla. Un buen caso histórico es el centro de seguridad de Windows Defender, donde no había etiquetas para diversos botones en 2016, y que se solucionó en 2017 con la actualización Creators. Además, evita etiquetas XAML genéricas, como clase.otraclase.algo (especialmente en listas y elementos de lista), ya que no proporcionan un cuadro preciso que permita conocer al usuario su ubicación. Un caso clásico es la aplicación del centro de comentarios, donde las etiquetas genéricas para listas estaban presentes en las versiones más antiguas, problema que se ha solucionado en las actualizaciones más recientes.
- Lanza eventos UIA apropiados: los lectores de pantalla escuchan los eventos UIA para detectar qué está ocurriendo con las aplicaciones. Por ejemplo, si existe la necesidad de verbalizar sugerencias, debería dispararse el evento controlador para. Un ejemplo es la tienda, donde las antiguas versiones no disparaban el evento controlador para cuando aparecían las sugerencias de contenido. Las versiones más recientes ya lanzan este evento.
Conclusión
Con la introducción de Windows 10 y la plataforma Windows Universal ha emergido una nueva forma de conectar a usuarios y desarrolladores: desarrollo dirigido por retroalimentación. Esto permite a los usuarios enviar retroalimentación relacionada con características y fallos, incluyendo los de accesibilidad. Aunque la accesibilidad de Windows y las aplicaciones universales era irregular al principio, esta situación está mejorando, dirigida por el compromiso de Microsoft hacia la accesibilidad, la retroalimentación continuada, y la colaboración entre Microsoft y los fabricantes de ayudas técnicas. Esta tendencia continúa en Windows 11.
Ya centrándonos en NVDA, lo que hizo posible la usabilidad de Windows 10 y posterior no fueron solamente los cambios introducidos en Windows y las aplicaciones universales, sino también la investigación proactiva para asegurarse de que los usuarios de NVDA disfrutan de una experiencia fantástica con Windows. El complemento Windows App Essentials es parte de ese trabajo, como se ha expuesto en este artículo al hablar sobre las soluciones de UIA, el soporte mejorado de aplicaciones, controles y demás. Sin embargo, hay límites que el complemento no puede superar, y las otras piezas del puzle deben ponerlas los desarrolladores (especialmente los desarrolladores UWP de aplicaciones de terceros) para establecer la accesibilidad como un pilar en sus desarrollos, y los usuarios que envían retroalimentación sobre accesibilidad. Aunque algunas funciones del complemento se están integrando en NVDA, hay algunas áreas donde el complemento es necesario (especialmente al introducir funciones nuevas en las compilaciones de Windows Insider Preview), y mientras no llegue el día en que la accesibilidad esté en todas partes en el ecosistema de Windows y las aplicaciones universales, el complemento seguirá aquí.
Referencias
- Windows 10 (Wikipedia): https://en.wikipedia.org/wiki/Windows_10
- Windows 11 (Wikipedia): https://en.wikipedia.org/wiki/Windows_11
- Windows Insider Program (Microsoft): https://insider.windows.com/
- Descripción de Windows como servicio (Microsoft Docs): https://docs.microsoft.com/en-us/windows/deployment/update/waas-overview
- Qué es una aplicación de la plataforma de Windows universal (UWP) (desarrollador de aplicaciones Microsoft UWP): https://docs.microsoft.com/en-us/windows/uwp/get-started/whats-a-uwp
- Descripción de UI Automation (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee684076(v=vs.85).aspx
- Descripción de MSAA (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/dd373592(v=vs.85).aspx
- UI Automation y Active Accessibility (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671585(v=vs.85).aspx
- Descripción de Component Object Model (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ms680573(v=vs.85).aspx
- La interfaz IUIAutomationElement (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671425(v=vs.85).aspx
- cachedAutomationId (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671434(v=vs.85).aspx
- Descripción de las propiedades de UI Automation (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671594(v=vs.85).aspx
- Descripción de los eventos de UI Automation (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671221(v=vs.85).aspx
- Identificadores de eventos en UI Automation (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/ee671223(v=vs.85).aspx
- Accesibilidad de sugerencias automáticas, parte de los requisitos de textos accesibles (Microsoft Docs): https://docs.microsoft.com/en-us/windows/uwp/accessibility/accessible-text-requirements
- IUIAutomationNotificationEventHandler::HandleNotificationEvent (MSDN): https://msdn.microsoft.com/en-us/library/windows/desktop/mt814955(v=vs.85).aspx