Post on 18-May-2015
description
Google Confidential and Proprietary
Designing AccessibleAndroid Applications(information provided till Kitkat)
Nov, 2013
Sample Projecthttp://goo.gl/m3LUx
Google Confidential and Proprietary
Agenda
WHAT WHY HOW
is Accessibility? do we care? to implement it?
is provided in Framework?
to test it?
Google Confidential and Proprietary
What is Accessibility. Mostly used for people with special needs.
Visual
motion
Hearing
Visual
Google Confidential and Proprietary
Why make your apps accessible?
Reach!
Approximate number of people with special needs
Google Confidential and Proprietary
Why make your apps accessible?
Reach!
Approximate number of people with special needs
~1 billion users out of 7 billion
Google Confidential and Proprietary
Why make your apps accessible?
Empowering users!We don’t use all the senses every time..
Google Confidential and Proprietary
How?
Feedback in many ways
sight (visual)hear (audio)touch (haptic) tastesmell
No taste and smell feedback in apps yet !
Google Confidential and Proprietary
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
What framework provides - Accessibility Services
TalkBack (Froyo and above)Provides spoken, auditory, and haptic feedbackAllows for random access and linear access of content
BrailleBack (Jelly Bean and above)Allows users to access content on virtual braille displaySupports navigation and text input from a braille keyboard
Google Confidential and Proprietary
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
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
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
Features in Jelly Bean
Gestures
● Services can respond to user-drawn gestures○ Perform accessibility actions○ Invoke global actions (Home,
Back, etc.)
● Deterministic access to screen content
Google Confidential and Proprietary
Features in Jelly BeanUpdated in Kitkat
Gestures
● Quick shortcuts available in Global Context Menu
Google Confidential and Proprietary
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
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
Features in Kitkat
Global Captioning Preferences
● Use Videoview API in your applications and use addSubtitleSource() method.
● Captioning Manager API available.
Google Confidential and Proprietary
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
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
(demo)
Google Confidential and Proprietary
What framework providesAndroid 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
What framework provides
Google Play● Paid apps in many Countries● DCB
Developer Console● Countries and currencies ● Statistics
Google Confidential and Proprietary
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
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
(demo)
Google Confidential and Proprietary
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
<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
Code changes for Accessibility
Supporting D-Pad navigation
● Prior to Android 4.0, app needs to be accessible via D-Pad○ 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
<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
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
(demo)
Google Confidential and Proprietary
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
Logical grouping and ordering
Google Confidential and Proprietary
<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
Custom-drawn views
● Use or extend existing classes and interfaces when possible
● Android 4.1 added support for AccessibilityNodeProviders
Google Confidential and Proprietary
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/ExploreByTouchHelper.html
Google Confidential and Proprietary
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
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, xlargeDensities: (low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi))
Google Confidential and Proprietary
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
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
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
Thanks and Questions?Send feedback to:soniash@google.comsoniash@gmail.com G+ soniash@sonia1sh