Enchanted Hills Camp for the Blind and Visually Impaired – Lighthouse SF

Intuit sets aside a week every year to give employees a chance to work with local non-profit organizations. This year, we gathered a small group to visit the Enchanted Hills Camp in Napa to help them prepare for this summer’s campers. It’s a fantastic organization and we loved our time there.

Here are some photographs from the event:

Powered by flickr embed.

Notes from Web4All 2017 Day 1

Web4All 2017 kicks off with several talks about the Gig Economy, Remote employment, and the current employment opportunities for people with disabilities in Australia and around the world. Continue Reading Notes from Web4All 2017 Day 1

 

Web4All 2017 Day 1 Notes

The Australian Human Rights Commission has begun a study on employment discrimination for the older workers and those with a disability.

While about a quarter of the population is older, they make up just 16 per cent of the workforce. Australians with a disability make up 15 per cent of the working age population, but only 10 per cent of them have jobs.

The inquiry will seek to identify the barriers that prevent people from working, and in consultation with employers, affected individuals and other stakeholders establish strategies to overcome these barriers.

Willing to Work

The Australian government has historically had a higher unemployment rate for PWD than other countries.

Web Accessibility National Transition Strategy was influenced by the work done in European countries. Unfortunately, the tools were not accessible when it launched. So people with disabilities had trouble accessing the participation forms.

Web Accessibility National Transition Strategy PDF version
Continue Reading Notes from Web4All 2017 Day 1

Future Accessibility for Financial Services for Seniors and Persons with Disabilities

This short presentation was an introduction to a panel discussion on how financial institutions can use new technology to provide accessible solutions. It was part of this event: G3ict Hosts International Briefing: Inclusive Financial Services for Seniors and Persons with Disabilities, Paris, France

Continue Reading Future Accessibility for Financial Services for Seniors and Persons with Disabilities

Android Accessibility – The Missing Manual

This presentation was created for the Bangalore Accessibility Week at Intuit, October 2015. It’s a collection of hard to discover information on making an Android application accessible.

Testing

DevicesTesting is done both on actual devices and with automation, such as Calabases and Android Lint. Intuit’s product development also relies heavily on user testing, including users with disabilities.

Intuit also has a mobile device library that allows anyone within Intuit to check out a mobile device for testing. This has significantly lowered equipment cost and makes it much easier to test applications on an assortment of phones. This can be important as phone manufacturers may break accessibility, such as the Samsung keyboard.

Android Lint

Android lint allows you to run accessibility tests within your development environment. It’s easy to find and fix the issues.

AccessibilityChecks

This session, Improve your Android App’s Accessibility, from Google IO 2015 introduces AccessibilityChecks and teases the upcoming testing app.

TalkBack

TalkBack is the built in screen reader for Android devices. ChromeVox is the screen reader used in Chrome and on ChromeOS

Turn on TalkBack

This video shows how to enable TalkBack and how to use it as a developer. It also shows how to use the context menu for reading the entire screen and turning of TalkBack temporarily.

Two Fingered Gestures

It is easy to use custom gestures with Android. If the app depends on a single finger gesture, TalkBack will pass the same gesture with two fingers. This is very helpful with signatures and swipe navigation.

Android Accessibility Shortcut

Android provides a convenient shortcut for enabling TalkBack on a device. This short video shows how to use it.

Programming

accessibilityLiveRegion

Place this declaration on the container that includes data that changes dynamically. The new content will be announced when it appears.

android:accessibilityliveregion="polite"

This short video shows how a live-region’s content is announced whenever it is changed by deselecting a row within the table. This is an HTML page with aria-live=“assertive”

AccessibilityAction

  • Swipes and other hard to discover actions
  • Actions are activated from the Local Context Menu
  • While this could be used to provide hints for actions, I haven’t found the documentation/examples on how this is accomplished.
Create AccessibilityAction
/**
 * @param actionId The id for this action. This should either be one of
 * the standard actions or a specific action for your app. In that case it
 * is required to use a resource identifier.
 */
 public AccessibilityAction(int id, CharSequence label)
 new AccessibilityAction(R.id.dismiss, getString(R.string.dismiss));
 new AccessibilityAction(ACTION_CLICK, getString(R.string.play_song));
// Constants for all the standard actions with default label:
 AccessibilityAction.ACTION_CLICK
Handling a Custom Action
eventView.setAccessibilityDelegate(new AccessibilityDelegate {
 @Override
 public onInitializeAccessibilityNodeInfo(
        View host, AccessibilityNodeInfo info) {
   super.onInitializeAccessibilityNodeInfo(host, info);
   info.addAction(new AccessibilityAction(R.id.dismiss,
 }
 @Override
   getString(R.string.dismiss)));
     public boolean performAccessibilityAction(
            View host, int action, Bundle args) {
      if (action == R.id.dismiss) {} // Logic for action
     }
 });

android:importantForAccessibility

diagram of UI layers within Android and setting noHideDescendants on unused layers. Use Auto on current layer

If you are using a stacked interface, where the hidden layers are still receiving focus, you can use importantForAccessibility to define the layers that are not important. Hamburger menus would be the most common use for this technique.

Set the visible layer to “auto”, which lets Android manage it’s functionality. Set the “hidden” layers to “noHideDesendants”, which should remove the layer and its children from the Accessibility API. Switch these values when you hide/show layers.

android:importantForAccessibility = "auto"
android:importantForAccessibility = "yes"
android:importantForAccessibility = "no"
android:importantForAccessibility = "noHideDescendants"

ListPopupWindow

diagram of a modal layer within Android. Use <a href=setModal(true) to make sure it acts like a modal view”>

For popups, such as a set of options A better option, however, may be to use a ListPopupWindow or PopupWindow if you’re attempting to display information in a modal context. Just be sure to setModal(true) to ensure the contents of that window, and only the contents of that window are focusable with TalkBack.

Forms

Forms are critical for a great user experience and we need to make sure our users understand what each input represents.

Form Labels

Which is correct for your app?

  • android:hint
  • android:labelFor
  • android:contentDescription

android:hint

The hint is like the HTML “placeholder” attribute. It is a visible label within the input and is surfaced to the Accessibility API when the input first receives focus. However, the hint is ignored when the input has a value. SSB Bart published a great article on this topic:
Android Accessibility Properties and TalkBack

Android form using android:hint, but no visual label

  • This create a placeholder text string within an input
  • This was the preferred method but is a hack
  • The hint is removed when a user adds a value to the input
  • Still a valid method of adding a label to an input

labelFor

The strongest method for adding a label to an input is the “labelFor” method. If your app has a visual text label, add “labelFor” to this text view and point it to the form input. The user will always know what the form input represents.
Android app using visual labels

<TextView
 android:layout_height="match_parent"
 android:labelFor="@+id/edit_item_name"
 android:text="Invoice amount"/>
<EditText
 android:id="@+id/edit_item_name"
 android:layout_height="wrap_content"
 android:hint="Invoice Amount"/>

contentDescription

ContentDescription is much like HTML’s “aria-label”. It’s an invisible text string that is surfaced directly to the Accessibility API. Android documentation specifically warns against using the contentDescription directly on the input.

Note: For EditText fields, provide an android:hint attribute instead of a content description, to help users understand what content is expected when the text field is empty. When the field is filled, TalkBack reads the entered content to the user, instead of the hint text.
Making Applications Accessible – Android Developer Portal

  • Invisible description for TalkBack
  • Should not be used directly on an input
  • You can use it on an input’s container and combine with labelFor

textinputlayout

It is possible to use “contentDescription” and “labelFor” to include a hidden label for your application. For instance, this pattern works with the recently introduced “textinputLayout” for Material Design layouts. This same pattern should work with a basic container around a form input.
Material design for form inputs include the android:hint as a visual label.

<textinputlayout
 android:labelfor="@id/signupemail"
 android:contentdescription="Email"
 android:accessibilityliveregion="polite">
  <edittext
   android:id="@id/signupemail"
   android:hint="Email"
   android:seterror="Create a valid email address"
    …/>
</textinputlayout> 

This is the pattern suggested for Material Design in Marshmallow. It has some bugs with Android support, but these should be solved soon. More information: Accessible Android Inputs with Material Design

Checking for TalkBack

AccessibilityManager am = (AccessibilityManager)
         getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();

You can check to see if the user has talkBack enabled and then make modifications to your application. For instance, this could be used to add continue and back buttons to a swipe-based navigation interface.

More Android Documentation

Girls Who Code Summer Camp at Intuit

Intuit sponsored an intensive 7-week camp for Girls Who Code during the summer of 2015. This is a fantastic opportunity for young girls to learn the basics of computer programming and move beyond to product design and development. It culminated with the young engineers presenting their final projects, which were quite impressive.

I had the opportunity to do an hour long presentation on accessibility and we did a follow up session at the Usability Labs to experience the world with limited senses. These sessions had a big impact on the girls and how they perceive their role in developing inclusive products
Continue Reading Girls Who Code Summer Camp at Intuit