Accessibility
webRios follows the accessibility settings already on your device. There is nothing to turn on in the app: change a setting in iOS Settings and the app responds, usually at once.
VoiceOver
Every control has a spoken name. Icon-only buttons, such as the data frame pager and the file browser’s search, are named for what they do: “Previous page”, not “chevron backward”.
Rows read their whole contents in one pass: a file’s name, size and date; a variable’s name, type and value; a plot’s title and time.
Console output says its kind first, so an error reads “Error: could not find function” rather than leaving severity to color.
Hearing what happened
When something you started finishes out of sight, VoiceOver tells you: a run’s first lines or its error (“Done, no output” or “Interrupted” otherwise) and how many plots it drew, a finished install, the outcome of a script run from Files. Errors go first, so they aren’t lost behind other speech. A completion list announces how many suggestions it has. Under VoiceOver or Switch Control it stays open until you choose; otherwise it closes after three seconds. A help page is announced when it loads.
Lists, plots and data
- Rows are buttons. History entries, Search in Files results, Code Outline items, snippets and Toolbar Buttons rows each read as one sentence and open with a double-tap, in VoiceOver, Voice Control and Full Keyboard Access. A History row reads, for example, “mean(x), succeeded, from Console, 2 minutes ago, 12 milliseconds”.
- Plots are named by their code. A plot reads as the line that drew it, such as “Plot 2 from plot(mtcars\(wt, mtcars\)mpg)”. Full-size plots offer VoiceOver’s zoom actions and Reset zoom, since VoiceOver keeps pinch and double-tap for itself.
- Data frames. Column headers read their name, type, sort and filter state. Cells name their row and column (“Mazda RX4, mpg, 21”) and offer Copy Value. The same goes for the CSV preview and the import wizard, and Compare Data Frames reads each change, such as “changed from q to Q”.
- Shortcuts are read as words. Custom Shortcuts rows read, for example, “Run Line/Selection, Command Return”, and say whether the shortcut is customized. The shortcut editor’s keys have names and show which one is selected.
- Help pages. Argument names read as “Argument na.rm”, and page and section titles are headings.
- Adjustable dividers. The split editor’s divider and the Editor’s output panel handle can be adjusted with a swipe up or down.
Quick actions
Anything behind a long press is also in VoiceOver’s Actions rotor; swipe up or down to choose.
On a variable in the Environment, the rotor offers Summary, Structure, Head, Print, Plot (for anything that is not a function), Inspect, Watch or Unwatch, and Delete.
On a file, it offers Open in Editor, Import into R… and Load into R where they apply, Run Script for .R files, Share, and Open in New Window on iPad. Rename and Delete come from the row’s swipe actions.
On a plot thumbnail, it offers Pin or Unpin, Export and, for an unpinned plot, Delete.
Larger text
The app follows Settings > Accessibility > Display & Text Size > Larger Text, accessibility sizes included. Buttons, labels, rows and settings pages grow with it, and panes grow with their text rather than clipping it. Titles don’t break inside a word. A sidebar title wraps between words, shrinks a little or moves under its icon; a 4-Pane Workspace header moves its buttons to a second row. A package name shrinks to 80% before it breaks.
Your R code is the exception, deliberately. The editor and console set code in a monospaced face at sizes you choose in Settings > Appearance > Fonts, from 12 pt to 30 pt, separately for each. Code is laid out in columns, and following the system size would reflow it into something harder to read. At large sizes R’s output width shrinks to fit the console, so output wraps between values, not mid-number, and the completion list grows with the text.
The data frame viewer’s grid grows with the system text size up to the third accessibility size, and the data import wizard stacks its options so every step fits at the largest sizes.
At the accessibility sizes, a Browse row keeps its download arrow beside the package name, and the install banner wraps rather than cutting off. Show me’s tip takes at most a quarter of the window and scrolls beyond that, and a checklist step half under its header fades rather than showing a sliver.
Increase Contrast
With Settings > Accessibility > Display & Text Size > Increase Contrast on, every text color is raised to WCAG AA, 4.5:1 against its background, and separators to 3:1.
This applies to any theme, custom and imported ones included. Only text colors change, so a theme still looks like itself.
The two Default themes already meet AA without it.
Reduce Motion
With Settings > Accessibility > Motion > Reduce Motion turned on, animations that would slide or spring instead cross-fade: new plots in the gallery, the editor’s inline panels, and the detached plot zoom.
Differentiate Without Color
With Settings > Accessibility > Display & Text Size > Differentiate Without Color turned on, console output that carries a severity gets a symbol as well as a color: an octagon for errors and anything R wrote to standard error, a triangle for warnings. Ordinary output and your input are left unmarked.
Themes and contrast
Both Default themes meet WCAG AA as shipped.
The other seven (Dracula, Solarized Light and Dark, Monokai, One Dark, GitHub Light and Nord) reproduce other editors’ palettes, and some put comments below AA. We haven’t “corrected” them: a Dracula that doesn’t look like Dracula isn’t Dracula. Increase Contrast gives full contrast and keeps the palette.
Anything missing?
If something does not work as described, or a control is not reachable the way you need, please get in touch. Accessibility problems are treated as bugs, not feature requests.