Designing Accessible
Android Applications
(information provided till Kitkat)
Nov, 2013
Sample Project
http://goo.gl/m3LUx
...
Agenda

WHAT

WHY

HOW

is Accessibility? do we care?

to implement it?

is provided in
Framework?

to test it?

Google Co...
What is Accessibility.
Mostly used for people with special needs.

Hearing

Visual

Visual

motion

Google Confidential an...
Why make your apps accessible?

Reach!
Approximate number of people with special needs

Google Confidential and Proprietar...
Why make your apps accessible?

Reach!
Approximate number of people with special needs

~1 billion users out of 7 billion
...
Why make your apps accessible?
Empowering users!
We don’t use all the senses every time..

Google Confidential and Proprie...
How?
Feedback in many ways
sight (visual)
hear (audio)
touch (haptic)
taste
smell
No taste and smell feedback in apps yet ...
What framework provides
● User interactions and system events generate
AccessibilityEvents and send them to services
● Acc...
What framework provides - Accessibility Services

TalkBack (Froyo and above)
Provides spoken, auditory, and haptic feedbac...
What framework provides
Donut (1.6) through Honeycomb (3.x)
● Spoken feedback through TextToSpeech APIs
● Power button end...
What framework provides
JellyBean (4.1)
● Supports Accessibility focus
○ Services can place this focus on
any view
○ Indic...
What framework provides
JellyBean (4.1)
● Many actions available
○
○
○
○
○

Move input focus
Click on views
Scroll within ...
Features in Jelly Bean
Gestures
● Services can respond to userdrawn gestures
○ Perform accessibility actions
○ Invoke glob...
Features in Jelly Bean
Updated in Kitkat
Gestures
● Quick shortcuts available in
Global Context Menu

Google Confidential ...
Features in Jelly Bean
Magnification
● Available in Android 4.2
● Multiple zoom modes
○ Triple-tap to toggle
○ Triple-tap ...
Features in Kitkat
Global Captioning Preferences
● Available in Android 4.4
○

Open caption settings menu from
your applic...
Features in Kitkat
Global Captioning Preferences
● Use Videoview API in your
applications and use
addSubtitleSource() meth...
Chrome Browser

● Follow same accessibility
guidelines as desktop web
○
○

Provide alt text
Use ARIA

● Similar to ChromeV...
Just Speak

Accessibility Service to perform major
tasks via speech command.
Beta version is released
More info: http://ey...
(demo)

Google Confidential and Proprietary
What framework provides
Android applications and sensors
●
●
●
●
●

SMS, Video chats, Videos with Captions
Location aware,...
What framework provides
Google Play
● Paid apps in many Countries
● DCB

Developer Console
● Countries and currencies
● St...
What framework provides
Developer Console
● Auto Translate feature
● Purchase professional
translations or rely on autotra...
What framework provides
Design recommendations
●
●
●
●

Navigation should be easy
Use recommended touch target sizes
Alter...
(demo)

Google Confidential and Proprietary
Code changes for Accessibility
Labeling content
● Controls without text need android:contentDescription
● Android Lint too...
<ImageView android:id="@+id/rounded_corner"
android:contentDescription="@null"
... />
<ImageView android:id="@+id/search_b...
Code changes for Accessibility
Supporting D-Pad navigation
● Prior to Android 4.0, app needs to be accessible via DPad
○ I...
<LinearLayout android:orientation="horizontal"
... >
<EditText android:id="@+id/edit"
android:focusable=”true”
android:nex...
Code changes for Accessibility
Supporting scaled text
● Android supports large fonts for low-vision use
● Text sizes shoul...
(demo)

Google Confidential and Proprietary
Logical grouping and ordering
● View hierarchy order and on-screen positioning
determine grouping for accessibility focus ...
Logical grouping and ordering

Google Confidential and Proprietary
<LinearLayout>
….
<FolderIcon android:id="@+id/folder"
android:focusable="true"
android:contentDescription="@string/folder...
Custom-drawn views
● Use or extend existing classes and interfaces when
possible
● Android 4.1 added support for Accessibi...
Custom-drawn views
Use ExploreByTouchHelper.
Wraps AccessibilityNodeProviderCompat.
You need to implement 5 Abstract metho...
Custom-drawn views
Delegate handling of certain events
Implement support for Explore by Touch
Expose information to access...
Testing and Debugging for Accessibility
For all Android apps
○
○
○
○

Create checklist of what should be tested for
Access...
Testing and Debugging for
Accessibility
For all Android apps
● Enable verbose logging for
Accessibility in: Accessibility
...
Summary
Must do:
● Use built-in Android components
○
○
○
○
○
○

Label controls
Make controls focusable
Ensure traversal or...
Summary
Good to have:
● Augment audio-only prompts
○ Visual cues
○ Haptic feedback

● Evaluate sensors
● Follow UI guideli...
Thanks and Questions?
Send feedback to:
soniash@google.com
soniash@gmail.com
G+ soniash
@sonia1sh
Google Confidential and ...
Upcoming SlideShare
Loading in …5
×

Android accessibility till_kitkat_nov2013_andevcon

913 views

Published on

Slides for my talk in Andevcon 2013 which has information about Accessibility features till Kitkat version.

Published in: Technology, Design
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
913
On SlideShare
0
From Embeds
0
Number of Embeds
81
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Android accessibility till_kitkat_nov2013_andevcon

  1. 1. Designing Accessible Android Applications (information provided till Kitkat) Nov, 2013 Sample Project http://goo.gl/m3LUx Google Confidential and Proprietary
  2. 2. Agenda WHAT WHY HOW is Accessibility? do we care? to implement it? is provided in Framework? to test it? Google Confidential and Proprietary
  3. 3. What is Accessibility. Mostly used for people with special needs. Hearing Visual Visual motion Google Confidential and Proprietary
  4. 4. Why make your apps accessible? Reach! Approximate number of people with special needs Google Confidential and Proprietary
  5. 5. Why make your apps accessible? Reach! Approximate number of people with special needs ~1 billion users out of 7 billion Google Confidential and Proprietary
  6. 6. Why make your apps accessible? Empowering users! We don’t use all the senses every time.. Google Confidential and Proprietary
  7. 7. How? Feedback in many ways sight (visual) hear (audio) touch (haptic) taste smell No taste and smell feedback in apps yet ! Google Confidential and Proprietary
  8. 8. What framework provides ● User interactions and system events generate AccessibilityEvents and send them to services ● AccessibilityServices like TalkBack and BrailleBack respond to these events and provide feedback to the user Google Confidential and Proprietary
  9. 9. What framework provides - Accessibility Services TalkBack (Froyo and above) Provides spoken, auditory, and haptic feedback Allows for random access and linear access of content BrailleBack (Jelly Bean and above) Allows users to access content on virtual braille display Supports navigation and text input from a braille keyboard Google Confidential and Proprietary
  10. 10. What framework provides Donut (1.6) through Honeycomb (3.x) ● Spoken feedback through TextToSpeech APIs ● Power button ends call ● Modify your device's display and sound options ○ ○ ○ Large text Change speed at which text is spoken Disable screen rotation Ice Cream Sandwich (4.0) ● Touch exploration for devices without D-Pad ● Services can inspect view hierarchy Google Confidential and Proprietary
  11. 11. What framework provides JellyBean (4.1) ● Supports Accessibility focus ○ Services can place this focus on any view ○ Indicated on-screen via yellow rectangle ● Supports Braille I/O devices via BrailleBack service Google Confidential and Proprietary
  12. 12. What framework provides JellyBean (4.1) ● Many actions available ○ ○ ○ ○ ○ Move input focus Click on views Scroll within views Navigate text by words, etc. Perform global actions Google Confidential and Proprietary
  13. 13. Features in Jelly Bean Gestures ● Services can respond to userdrawn gestures ○ Perform accessibility actions ○ Invoke global actions (Home, Back, etc.) ● Deterministic access to screen content Google Confidential and Proprietary
  14. 14. Features in Jelly Bean Updated in Kitkat Gestures ● Quick shortcuts available in Global Context Menu Google Confidential and Proprietary
  15. 15. Features in Jelly Bean Magnification ● Available in Android 4.2 ● Multiple zoom modes ○ Triple-tap to toggle ○ Triple-tap and hold for momentary zoom Google Confidential and Proprietary
  16. 16. Features in Kitkat Global Captioning Preferences ● Available in Android 4.4 ○ Open caption settings menu from your application. Settings.ACTION_CAPTIONING_SETTINGS Google Confidential and Proprietary
  17. 17. Features in Kitkat Global Captioning Preferences ● Use Videoview API in your applications and use addSubtitleSource() method. ● Captioning Manager API available. Google Confidential and Proprietary
  18. 18. Chrome Browser ● Follow same accessibility guidelines as desktop web ○ ○ Provide alt text Use ARIA ● Similar to ChromeVox used in desktop Chrome Google Confidential and Proprietary
  19. 19. Just Speak Accessibility Service to perform major tasks via speech command. Beta version is released More info: http://eyes-free.blogspot.com/ Google Confidential and Proprietary
  20. 20. (demo) Google Confidential and Proprietary
  21. 21. What framework provides Android applications and sensors ● ● ● ● ● SMS, Video chats, Videos with Captions Location aware, GPS, Maps, Places Proximity Motion, Accelerometer, Velocity tracker, Light sensor Environmental and Position sensors Sensor batching available to reduce power consumption (Introduced in Kitkat). Read the Android Developer Guide for Sensors Google Confidential and Proprietary
  22. 22. What framework provides Google Play ● Paid apps in many Countries ● DCB Developer Console ● Countries and currencies ● Statistics Google Confidential and Proprietary
  23. 23. What framework provides Developer Console ● Auto Translate feature ● Purchase professional translations or rely on autotranslate. Global accessibility ● i18n and l10n ● Read the Android Developer Guide for Localization Google Confidential and Proprietary
  24. 24. What framework provides Design recommendations ● ● ● ● Navigation should be easy Use recommended touch target sizes Alternatives to time-out controls Label UI elements meaningfully ○ Minimize Chatter ○ Provide feedback Read the Android Design Guide for Accessibility Google Confidential and Proprietary
  25. 25. (demo) Google Confidential and Proprietary
  26. 26. Code changes for Accessibility Labeling content ● Controls without text need android:contentDescription ● Android Lint tool warns when images are missing descriptions ● Purely decorative Views should set android: contentDescription="@null" ● Use setContentDescription() to update a View's description ○ Don't override getContentDescription() ● EditTexts should use android:hint Google Confidential and Proprietary
  27. 27. <ImageView android:id="@+id/rounded_corner" android:contentDescription="@null" ... /> <ImageView android:id="@+id/search_button" android:focusable=”true” android:contentDescription="@string/search" ... /> <EditText android:id="@+id/search_field" android:hint="@string/search_hint" ... /> Google Confidential and Proprietary
  28. 28. Code changes for Accessibility Supporting D-Pad navigation ● Prior to Android 4.0, app needs to be accessible via DPad ○ Includes arrow keys on USB and Bluetooth keyboards ○ This is easy to test in the emulator! ● May need to manually specify that clickable items (e.g. ImageViews) are focusable using android:focusable=" true" ● Make important text focusable ● Control order using android:nextFocusDown Google Confidential and Proprietary
  29. 29. <LinearLayout android:orientation="horizontal" ... > <EditText android:id="@+id/edit" android:focusable=”true” android:nextFocusDown=”@+id/text” ... /> <TextView android:id="@+id/text" android:focusable=”true” android:text="@string/terms_of_service" android:nextFocusUp=”@id/edit” ... /> </LinearLayout> Google Confidential and Proprietary
  30. 30. Code changes for Accessibility Supporting scaled text ● Android supports large fonts for low-vision use ● Text sizes should be in sp "scaled pixels" instead of dips ● Always test your app for text cropping, wrapping, etc. ○ You should be doing this for i18n anyway! <TextView android:id="@+id/intro_text" android:textSize="14sp" .... /> Google Confidential and Proprietary
  31. 31. (demo) Google Confidential and Proprietary
  32. 32. Logical grouping and ordering ● View hierarchy order and on-screen positioning determine grouping for accessibility focus and ordering of spoken feedback ● Group non-focusable items (e.g. TextViews) in a focusable container to have them read as a single item ● Set content description on a container to override automatic grouping and ordering of contained items Google Confidential and Proprietary
  33. 33. Logical grouping and ordering Google Confidential and Proprietary
  34. 34. <LinearLayout> …. <FolderIcon android:id="@+id/folder" android:focusable="true" android:contentDescription="@string/folder_google" ...> <ImageView android:id="@+id/preview_background" android:contentDescription="@null" ... /> <BubbleTextView android:id="@+id/folder_icon_name" android:text="@string/google" ... /> </FolderIcon> …. </LinearLayout> Google Confidential and Proprietary
  35. 35. Custom-drawn views ● Use or extend existing classes and interfaces when possible ● Android 4.1 added support for AccessibilityNodeProviders Google Confidential and Proprietary
  36. 36. Custom-drawn views Use ExploreByTouchHelper. Wraps AccessibilityNodeProviderCompat. You need to implement 5 Abstract methods. Detail here: http://developer.android. com/reference/android/support/v4/widget/ExploreByTouch Helper.html Google Confidential and Proprietary
  37. 37. Custom-drawn views Delegate handling of certain events Implement support for Explore by Touch Expose information to accessibility services Provide support for user interaction Test, ensure feature parity More details in this I/O talk: https://developers.google.com/events/io/sessions/258451203 Google Confidential and Proprietary
  38. 38. Testing and Debugging for Accessibility For all Android apps ○ ○ ○ ○ Create checklist of what should be tested for Accessibility Check with real simulation Test on all supported platforms Test on screens and densities Screens: small, normal, large, xlarge Densities: (low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)) Google Confidential and Proprietary
  39. 39. Testing and Debugging for Accessibility For all Android apps ● Enable verbose logging for Accessibility in: Accessibility > TalkBack > Settings > Developer settings ● Android Lint tool Google Confidential and Proprietary
  40. 40. Summary Must do: ● Use built-in Android components ○ ○ ○ ○ ○ ○ Label controls Make controls focusable Ensure traversal order is correct Specify text in sp Logically group UI elements Add captions to videos ● Fix custom components ○ Use ExploreByTouchHelper ● Test and Fix Google Confidential and Proprietary
  41. 41. Summary Good to have: ● Augment audio-only prompts ○ Visual cues ○ Haptic feedback ● Evaluate sensors ● Follow UI guidelines ● Reach globally Read the Android Developer Guide for Accessibility Google Confidential and Proprietary
  42. 42. Thanks and Questions? Send feedback to: soniash@google.com soniash@gmail.com G+ soniash @sonia1sh Google Confidential and Proprietary

×