SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Designing Accessible
Android Applications
(information provided till Kitkat)
Nov, 2013
Sample Project
http://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.

Hearing

Visual

Visual

motion

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)
taste
smell
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 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
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 userdrawn gestures
○ Perform accessibility actions
○ Invoke global actions (Home,
Back, etc.)

● Deterministic access to
screen content

Google Confidential and Proprietary
Features in Jelly Bean
Updated 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 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
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 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
<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/ExploreByTouch
Helper.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, xlarge
Densities: (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.com
soniash@gmail.com
G+ soniash
@sonia1sh
Google Confidential and Proprietary

Mais conteúdo relacionado

Semelhante a Android accessibility till_kitkat_nov2013_andevcon

Making money with android applications
Making money with android applicationsMaking money with android applications
Making money with android applications
sonia1sh
 
Google Integration in Android Apps - Mooscon 2013 Cebit
Google Integration in Android Apps - Mooscon 2013 CebitGoogle Integration in Android Apps - Mooscon 2013 Cebit
Google Integration in Android Apps - Mooscon 2013 Cebit
Friedger Müffke
 

Semelhante a Android accessibility till_kitkat_nov2013_andevcon (20)

Android Made Simple
Android Made SimpleAndroid Made Simple
Android Made Simple
 
GDCS - Introduction to Google Products and Technologies.pptx
GDCS - Introduction to Google Products and Technologies.pptxGDCS - Introduction to Google Products and Technologies.pptx
GDCS - Introduction to Google Products and Technologies.pptx
 
Making money with android applications
Making money with android applicationsMaking money with android applications
Making money with android applications
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet Haase
 
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
 
Android Presentation By Ashok Kumar Pachauri
Android Presentation By Ashok Kumar PachauriAndroid Presentation By Ashok Kumar Pachauri
Android Presentation By Ashok Kumar Pachauri
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopJava Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
 
Introduction to Cloud Computing and Google Cloud Platform.
Introduction to Cloud Computing and Google Cloud Platform.Introduction to Cloud Computing and Google Cloud Platform.
Introduction to Cloud Computing and Google Cloud Platform.
 
Getting started with cloud
Getting started with cloudGetting started with cloud
Getting started with cloud
 
A Kickstart to Google Cloud
A Kickstart to Google CloudA Kickstart to Google Cloud
A Kickstart to Google Cloud
 
Mobile Accessibility
Mobile AccessibilityMobile Accessibility
Mobile Accessibility
 
Android App Development - 01 Introduction
Android App Development - 01 IntroductionAndroid App Development - 01 Introduction
Android App Development - 01 Introduction
 
Google Integration in Android Apps - Mooscon 2013 Cebit
Google Integration in Android Apps - Mooscon 2013 CebitGoogle Integration in Android Apps - Mooscon 2013 Cebit
Google Integration in Android Apps - Mooscon 2013 Cebit
 
Android Presentation By Ashok Kumar Pachauri
Android Presentation By Ashok Kumar PachauriAndroid Presentation By Ashok Kumar Pachauri
Android Presentation By Ashok Kumar Pachauri
 
YouTube Mobile Webapp: On the edge of Html5
YouTube Mobile Webapp: On the edge of Html5YouTube Mobile Webapp: On the edge of Html5
YouTube Mobile Webapp: On the edge of Html5
 
Easy path to machine learning (2022)
Easy path to machine learning (2022)Easy path to machine learning (2022)
Easy path to machine learning (2022)
 
Delegating user tasks in applications
Delegating user tasks in applicationsDelegating user tasks in applications
Delegating user tasks in applications
 
Android Intro
Android IntroAndroid Intro
Android Intro
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
 
Android studio 4.0 new features preview
Android studio 4.0 new features previewAndroid studio 4.0 new features preview
Android studio 4.0 new features preview
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Android accessibility till_kitkat_nov2013_andevcon

  • 1. Designing Accessible Android Applications (information provided till Kitkat) Nov, 2013 Sample Project http://goo.gl/m3LUx Google Confidential and Proprietary
  • 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. What is Accessibility. Mostly used for people with special needs. Hearing Visual Visual motion Google Confidential and Proprietary
  • 4. Why make your apps accessible? Reach! Approximate number of people with special needs Google Confidential and Proprietary
  • 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. Why make your apps accessible? Empowering users! We don’t use all the senses every time.. Google Confidential and Proprietary
  • 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. 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. 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. 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. 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. 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. 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. Features in Jelly Bean Updated in Kitkat Gestures ● Quick shortcuts available in Global Context Menu Google Confidential and Proprietary
  • 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. 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. 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. 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. 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
  • 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. What framework provides Google Play ● Paid apps in many Countries ● DCB Developer Console ● Countries and currencies ● Statistics Google Confidential and Proprietary
  • 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. 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
  • 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. <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. 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. <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. 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
  • 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. Logical grouping and ordering Google Confidential and Proprietary
  • 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. Custom-drawn views ● Use or extend existing classes and interfaces when possible ● Android 4.1 added support for AccessibilityNodeProviders Google Confidential and Proprietary
  • 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. 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. 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. 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. 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. 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. Thanks and Questions? Send feedback to: soniash@google.com soniash@gmail.com G+ soniash @sonia1sh Google Confidential and Proprietary