SlideShare una empresa de Scribd logo
1 de 87
Developing Accessible
Android Applications
Renato Iwashima
Sr. UI Engineer - Android Accessibility at LinkedIn
87.6%
Worldwide Android Market Share Q2 2016
(Share in Unit Shipments)
http://www.idc.com/prodserv/smartphone-os-market-share.jsp
It’s not easy to find Android apps
that are accessible.
Topics
1. Accessibility features and services of Android
2. General recommendations
3. Common problems
4. Accessibility API
5. Custom Views
6. Tools
How do people with
disabilities interact with
Android?
Hearing
1. Mono audio
2. Closed Captions
3. Haptic Feedback
Motor/Mobility
1. Switch Access
2. External Keyboard
3. Directional Pad
4. Voice Access
Vision
1. Color & Contrast
2. Invert Colors
3. Text Size
4. Display Size
5. Screen magnification
6. Screen reader
How can I improve the
accessibility of my Android
app?
Hearing
Audio/Video should provide optional captioning
Never convey meaningful information with sound alone
Make background sound / video easy to disable
Motor and Cognitive
Avoid complex gestures
Provide alternatives to custom gestures
Keep touch targets above 48x48 dp
Favor simple and hierarchical interfaces
Avoid screen clutter - favor navigation
Test your app with a Switch device, External Keyboard or D-Pad
Colors and Fonts
Always use scalable pixels for font sizes (‘sp’)
Never convey meaningful information with color alone
Texts should have a minimum color contrast ratio of 4.5 to 1
https://webaim.org/resources/contrastchecker/
Attention to what happens to your layout when fonts are increased
Avoid images with text
Label all meaningful images with content descriptions
Provide equal experiences
Vision
What are the most common
accessibility problems on
Android apps?
Poor Color Contrast
Poor Color Contrast
https://webaim.org/resources/contrastchecker/
Small Touch Targets
24
24
48
48
Unlabeled Content
Unlabeled
?
Unlabeled Unlabeled
Show Keyboard Upload a photo Add a sticker
contentDescription
Use android:contentDescription or setContentDescription() to provide
descriptions for components that lack visual text.
ImageView
ImageButton
Yes
?
Enter “Yes” if you agree.
Yes
Enter “Yes” if you agree:
labelFor
<TextView
android:labelFor="@+id/edit_text_email"
android:text="Email"
... />
<EditText
android:id="@+id/edit_text_email"
android:hint="someone@company.com"
... />
Use android:labelFor to provide labels for input controls.
hint
android:hint
Creates a placeholder text within the input
Hint is not persistent when a value is added
It usually has color contrast problems
Still a valid method to add labels for TextInputLayout
TextInputLayout
<android.support.design.widget.TextInputLayout
android:labelFor="@+id/email_edit_text"
android:hint="Email"
android:accessibilityLiveRegion="polite"
android:errorEnabled="true"
...>
<android.support.design.widget.TextInputEditText
android:id="@id/email_edit_text"
android:inputType="textEmailAddress"
.../>
</android.support.design.widget.TextInputLayout>
TextInputLayout
Pay attention to the color contrast of the hint and error messages
Make sure error messages are announced
Improper Descriptions
Gradient Background
Image
?
Use android:importantForAccessibility and set it to no to make it irrelevant
for accessibility.
<ImageView
android:importantForAccessibility="no"
android:layout_width="wrap_content”
android:layout_height="wrap_content"
android:src="@drawable/background_image"/>
API 16+
Decorative views
ConnectIgnore
?
ConnectIgnore
ConnectIgnore
ConnectIgnore
ConnectIgnore
ConnectIgnore
Connect with John SmithIgnore John Smith
Connect with Rebecca WilliamsIgnore Rebecca Wiliams
Skip button, Button
?
Skip, Button
No support for focus navigation
Focus navigation
Use android:focusable or setFocusable(boolean) to control if a view should
receive focus.
Use requestFocus() to request the focus for the view.
API 1+
Focus navigation
Focus should follow natural reading order (Left to right, top to bottom).
Android will usually handle this for you. On rare occasions, you can modify it by
using:
android:nextFocusDown
android:nextFocusLeft
android:nextFocusRight
android:nextFocusUp
Focus Navigation
≠
Accessibility Focus
Focus Navigation
Focus on views that require user input.
(e.g. Buttons, Links, Check Boxes, Edit Texts, …)
Accessibility Focus
Focus for screen readers. Focus on all meaningful views
of the screen, including views that require no user input.
(e.g. non clickable text views)
Accessibility Traversal
Focus management modifies focus order but it does not modify the
accessibility focus order. If needed, use:
android:accessibilityTraversalAfter (Other view first)
android:accessibilityTraversalBefore (This view first)
API 22+
Missing Name, Role, Value or State
Invitations Connections
?
Friends
Invitations,
Button
Connections,
Button
Friends,
Tab,
2 of 3,
Selected
You can set an accessibility delegate to any view to provide more information
about the view for the accessibility service.
view.setAccessibilityDelegate(new AccessibilityDelegate() {
// a11y methods
// onInitializeAccessibilityEvent()
// onInitializeAccessibilityNodeInfo()
// ...
});
Accessibility Delegate
When you properly
follow these
recommendations,
you app is pretty
much accessible.
How about Custom views?
Aways best to use the default widgets
since they come accessible by default.
For this reason, avoid creating custom
views if not needed.
But if absolutely needed...
Understanding how accessibility
services interact with the app
Accessibility
Service
Application
Accessibility
Node Info
Accessibility
Node Info
Accessibility
Node Info
Accessibility Event
Get Info
Accessibility Node Info
System Accessibility Event
Accessibility Events
Accessibility Event
Event sent by the topmost view in the view tree to an accessibility service
when something notable happens in the user interface.
TYPE_VIEW_CLICKED
TYPE_VIEW_LONG_CLICKED
TYPE_VIEW_FOCUSED
TYPE_VIEW_TEXT_CHANGED
TYPE_VIEW_SCROLLED
Responsible for sending the event to accessibility services.
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
sendAccessibilityEvent
Adds information about the accessibility event such as the state of the view.
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
event.setChecked(true);
}
onInitializeAccessibilityEvent
Sets the spoken text prompt of the AccessibilityEvent for your view:
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(event);
event.getText().add(“This is what the a11y service will speak.”);
}
onPopulateAccessibilityEvent
announceForAccessibility
Convenience method for sending an AccessibilityEvent with
TYPE_ANNOUNCEMENT
For example, announcing a new notification.
public void showNotification() {
// ... some code to show notification on screen
announceForAccessibility("One new notification");
}
Accessibility Live Region
Convenience attribute that automatically notifies the user about changes to the
view’s content description or text (or children).
Example:
<TextView
android:id="@+id/error_message_box"
android:accessibilityLiveRegion="polite"
android:layout_width="wrap_content”
android:layout_height="wrap_content" />
Accessibility Live Region
None: Disable change notifications (Default for most views).
Polite: User should be notified for changes.
Assertive: Interrupts ongoing speech and notify the user immediately.
Accessibility Node Info
Accessibility
Service
Application
Accessibility
Node Info
Accessibility
Node Info
Accessibility
Node Info
Accessibility Event
Get Info
Accessibility Node Info
System Accessibility Event
Accessibility Node Info
After obtaining an event, accessibility services can get a more detailed
information about the view that generated the event.
It’s a snapshot of a View state.
Provides info about:
Content
State
Accessibility Action
Defines actions that can be performed on a view:
Standard actions
Custom actions
Override standard actions
Actions can be reached via the Local Context Menu.
Accessibility Action
// register action
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
AccessibilityAction action = new AccessibilityAction(R.id.action_custom,
getString(R.string.action_custom));
info.addAction(action);
}
// implement what will happen once the action is triggered
public boolean performAccessibilityAction(View host, int action, Bundle args) {
if (action == R.id.action_custom) {
// do something
}
return true;
}
Can I create virtual views?
View
Virtual Views
Explore By Touch Helper
Implement 5 methods which answers the following questions:
1. Which virtual view is selected when I touch on this X and Y coordinate?
2. Which virtual views are currently visible?
3. Add something to the Accessibility Event when an event happens to this
given virtual view? (Spoken Text)
4. Add something to the Accessibility Node Info when an accessibility service
requests for more info to this given virtual view? (Bounds, Spoken Text, State,
Actions)
5. What should happen if this given action is performed? (Click, Custom Actions)
Explore By Touch Helper
1. protected int getVirtualViewAt(float x, float y);
2. protected void getVisibleVirtualViews(List<Integer> virtualViewIds);
3. protected void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event);
4. protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat
node);
5. protected boolean onPerformActionForVirtualView(int virtualViewId, int action, Bundle arguments);
Android Lint
http://developer.android.com/tools/help/lint.html
Accessibility Scanner
https://g.co/AccessibilityScanner
Stetho
http://facebook.github.io/stetho/
Accessibility Test Framework for Android
https://github.com/google/Accessibility-Test-Framework-for-Android
Accessibility Checks
Espresso: https://google.github.io/android-testing-support-library/docs/accesibility-checking/
Robolectric: http://robolectric.org/javadoc/3.0/org/robolectric/annotation/AccessibilityChecks.html
Tools
A word of caution
Not all accessibility issues can be detected automatically.
You should still manually test to validate the user
experience.
Keep in touch
linkedin.com/in/renatoiwashima
@renatoiwa
renatoiwa@gmail.com

Más contenido relacionado

Similar a Developing accessible android applications

Android accessibility for developers and QA
Android accessibility for developers and QAAndroid accessibility for developers and QA
Android accessibility for developers and QATed Drake
 
React Native Accessibility - San Diego React and React Native Meetup
React Native Accessibility - San Diego React and React Native MeetupReact Native Accessibility - San Diego React and React Native Meetup
React Native Accessibility - San Diego React and React Native MeetupTed Drake
 
Mobile Web on Touch Event and YUI
Mobile Web on Touch Event and YUIMobile Web on Touch Event and YUI
Mobile Web on Touch Event and YUIMorgan Cheng
 
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperThe Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperDroidConTLV
 
Building interactive app
Building interactive appBuilding interactive app
Building interactive appOmar Albelbaisy
 
Accessibility in android And Add accessibility hooks to a custom view
Accessibility in android And Add accessibility hooks to a custom viewAccessibility in android And Add accessibility hooks to a custom view
Accessibility in android And Add accessibility hooks to a custom viewAly Arman
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android AppsGil Irizarry
 
Android Evolution, AppForum 2014, Brussels, Friedger Müffke
Android Evolution, AppForum 2014, Brussels, Friedger MüffkeAndroid Evolution, AppForum 2014, Brussels, Friedger Müffke
Android Evolution, AppForum 2014, Brussels, Friedger MüffkeFriedger Müffke
 
Android Accessibility - The missing manual
Android Accessibility - The missing manualAndroid Accessibility - The missing manual
Android Accessibility - The missing manualTed Drake
 
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...Lviv Startup Club
 
01 09 - graphical user interface - basic widgets
01  09 - graphical user interface - basic widgets01  09 - graphical user interface - basic widgets
01 09 - graphical user interface - basic widgetsSiva Kumar reddy Vasipally
 
Android Tutorial
Android TutorialAndroid Tutorial
Android TutorialFun2Do Labs
 
Mobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’sMobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’sAdam Wilson
 
Android Wear, a developer's perspective
Android Wear, a developer's perspectiveAndroid Wear, a developer's perspective
Android Wear, a developer's perspectiveSebastian Vieira
 
Android Bootcamp Tanzania:understanding ui in_android
Android Bootcamp Tanzania:understanding ui in_androidAndroid Bootcamp Tanzania:understanding ui in_android
Android Bootcamp Tanzania:understanding ui in_androidDenis Minja
 
Android App Development 20150409
Android App Development 20150409Android App Development 20150409
Android App Development 20150409Hideo Kadowaki
 
Mobile Application Development With Android
Mobile Application Development With AndroidMobile Application Development With Android
Mobile Application Development With Androidguest213e237
 
Mobile Application Development -Lecture 09 & 10.pdf
Mobile Application Development -Lecture 09 & 10.pdfMobile Application Development -Lecture 09 & 10.pdf
Mobile Application Development -Lecture 09 & 10.pdfAbdullahMunir32
 

Similar a Developing accessible android applications (20)

Android accessibility for developers and QA
Android accessibility for developers and QAAndroid accessibility for developers and QA
Android accessibility for developers and QA
 
Vc info park
Vc  info parkVc  info park
Vc info park
 
React Native Accessibility - San Diego React and React Native Meetup
React Native Accessibility - San Diego React and React Native MeetupReact Native Accessibility - San Diego React and React Native Meetup
React Native Accessibility - San Diego React and React Native Meetup
 
Mobile Web on Touch Event and YUI
Mobile Web on Touch Event and YUIMobile Web on Touch Event and YUI
Mobile Web on Touch Event and YUI
 
Compose In Practice
Compose In PracticeCompose In Practice
Compose In Practice
 
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, PepperThe Mighty Power of the Accessibility Service - Guy Griv, Pepper
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
 
Building interactive app
Building interactive appBuilding interactive app
Building interactive app
 
Accessibility in android And Add accessibility hooks to a custom view
Accessibility in android And Add accessibility hooks to a custom viewAccessibility in android And Add accessibility hooks to a custom view
Accessibility in android And Add accessibility hooks to a custom view
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android Apps
 
Android Evolution, AppForum 2014, Brussels, Friedger Müffke
Android Evolution, AppForum 2014, Brussels, Friedger MüffkeAndroid Evolution, AppForum 2014, Brussels, Friedger Müffke
Android Evolution, AppForum 2014, Brussels, Friedger Müffke
 
Android Accessibility - The missing manual
Android Accessibility - The missing manualAndroid Accessibility - The missing manual
Android Accessibility - The missing manual
 
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...
Lviv MDDay 2014. Сергій Комлач “Використання accessibility api для доступу до...
 
01 09 - graphical user interface - basic widgets
01  09 - graphical user interface - basic widgets01  09 - graphical user interface - basic widgets
01 09 - graphical user interface - basic widgets
 
Android Tutorial
Android TutorialAndroid Tutorial
Android Tutorial
 
Mobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’sMobile Application Development with JUCE and Native API’s
Mobile Application Development with JUCE and Native API’s
 
Android Wear, a developer's perspective
Android Wear, a developer's perspectiveAndroid Wear, a developer's perspective
Android Wear, a developer's perspective
 
Android Bootcamp Tanzania:understanding ui in_android
Android Bootcamp Tanzania:understanding ui in_androidAndroid Bootcamp Tanzania:understanding ui in_android
Android Bootcamp Tanzania:understanding ui in_android
 
Android App Development 20150409
Android App Development 20150409Android App Development 20150409
Android App Development 20150409
 
Mobile Application Development With Android
Mobile Application Development With AndroidMobile Application Development With Android
Mobile Application Development With Android
 
Mobile Application Development -Lecture 09 & 10.pdf
Mobile Application Development -Lecture 09 & 10.pdfMobile Application Development -Lecture 09 & 10.pdf
Mobile Application Development -Lecture 09 & 10.pdf
 

Último

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
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 WorkerThousandEyes
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
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...Miguel Araújo
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Último (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
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
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
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...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Developing accessible android applications

Notas del editor

  1. An event has a type with additional information important for the event. For instance, TextView has to send and implement all possible events that could happen in the view, such as Selection Change, Focus Change, etc.
  2. An event has a type with additional information important for the event. For instance, TextView has to send and implement all possible events that could happen in the view, such as Selection Change, Focus Change, etc.
  3. An event has a type with additional information important for the event. For instance, TextView has to send and implement all possible events that could happen in the view, such as Selection Change, Focus Change, etc.
  4. Android 4.0.x version and below: The default video player did not have support for subtitles. It needs to be implemented by the application. Android 4.1 (Jelly Bean): The default video player has support for in-band and out-of-band text tracks. In-band text tracks come as a text track within an MP4 or 3GPP media source. Out-of-band text tracks can be added as an external text source via addTimedTextSource() method from MediaPlayer class. The subtitle is limited to SubRip format with the file extension .srt. More info on Android's versions page.
  5. Mention to test on TalkBack during development
  6. In the slide, we see 3 buttons that are not labeled. Each button is being described as “Unlabeled”.
  7. We fix the problem by adding a meaningful content description to each image button.
  8. Stop accessibility events from being sent. For older platforms, the only option is to not make it focusable.
  9. In this slide, we see a list of multiple buttons with the same description: “Ignore” and “Connect”.
  10. In this slide, we see a list of multiple buttons with the same description: “Ignore” and “Connect”.
  11. In this slide, we see a list of multiple buttons with the same description: “Ignore” and “Connect”.
  12. In this screen, we have a sort button with redundant description: “Button”.
  13. In this screen, we have a sort button with redundant description: “Button”.
  14. Stop accessibility events from being sent. For older platforms, the only option is to not make it focusable.
  15. An event has a type with additional information important for the event. For instance, TextView has to send and implement all possible events that could happen in the view, such as Selection Change, Focus Change, etc.
  16. In theory, you could also set the state in this method, but the recommended way is to do that in the onInitializeAccessibilityEvent() method.
  17. Remember: Always best to use the default UI components
  18. Remember: Always best to use the default UI components
  19. Remember: Always best to use the default UI components
  20. Example: When you focus on a Button, a11y services need to know what actions can be performed, what’s the current state of the button (Disabled?) etc.
  21. Here we have code that shows how to add an action to a node info.
  22. Tools help us reduce the amount of manual testing to be done. But don’t forget to manually test your app.
  23. Mention accessibility examples app