Hi all,
this is to share some thoughts about writing a screenreader friendly SAPUI5 application.
One reason for us to switch from WDJ and WDA to SAPUI5 was the promise that SAPUI5 would support accessibility. But our experience was really bad, and our blind testers using JAWS clearly gave us the feedback: "unusable". One reason might be that we are currently stuck with SAPUI5 version 1.28.xx. For administrative reasons we are not able to update our software every three months, so the experimental releases are no choice for us. I know that 1.36 is out now and in the release-planning this was marked as a new stable release, but I did not find any official statement about this yet. But this is only a side note.
One of the problems our blind users have is the low signal to noise ratio and this wont change with 1.36. SAPUI5 uses aria labelling everywhere. Most of the time this is fine, but consider the "My Paystubs" application. This is a master-detail application. On the left you have list with all the paystubs with information for period, pay-date, amount, currency. And the screenreader just reads out all these words over and over again ("listitem period xxx pay-date yyy amount zzz currency dollar listitem period xx2 pay-date yyy2 amount zzz2 currency dollar ...."). The same holds true for all other controls you might not even visually see, e.g. every toolbar, footer and so on is labelled and the screenreader outputs non-relevant information.
It would really be helpful to tell the SAPUI5 library to just render a "content-only" version of the controls. A lot of the magic of SAPUI5 is about nice layouts, responsive design, styling and so on which is not of relevance for blind users. Since it is not possible to switch the library into a "content-only"-mode, I implemented my own controls with their own renderers. They just render pure HTML5, and that is just fine for fast navigation with a screenreader.
What I did loose was some of the other magic the SAPUI5 controls provide, e.g. the dynamic loading of data for lists and tables. The code is so deeply buried within the controls, that it is not possible to e.g. just take sap.m.List and replace its renderer. This does not work, which is a pitty. So coming back to the title of this discussion: I think there is room for improvement in the SAPUI5 libs. A better separation of behavior (e.g. dynamic loading, processing events) and rendering would really be helpful. Although the current architecture does not allow for a global drop-in replacement of the rendering, it would surely help in replacing the rendering for specific controls.
If you have experience with optimizing applications for screenreaders, please join the discussion.
Bernhard