SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

Digital Twin and Smart Spaces
Digital Twin and Smart Spaces Digital Twin and Smart Spaces
Digital Twin and Smart Spaces
SANGHEE SHIN
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
ENSET, Université Hassan II Casablanca
 

What's hot (20)

Microsoft Surface Report
Microsoft Surface ReportMicrosoft Surface Report
Microsoft Surface Report
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
 
Introduction to AR with Unity3D
Introduction to AR with Unity3DIntroduction to AR with Unity3D
Introduction to AR with Unity3D
 
React Native
React NativeReact Native
React Native
 
React Native
React Native React Native
React Native
 
React Native
React NativeReact Native
React Native
 
Multi-tenancy in Java
Multi-tenancy in JavaMulti-tenancy in Java
Multi-tenancy in Java
 
Digital Twin and Smart Spaces
Digital Twin and Smart Spaces Digital Twin and Smart Spaces
Digital Twin and Smart Spaces
 
Introduction to three.js
Introduction to three.jsIntroduction to three.js
Introduction to three.js
 
メンタルヘルス対策ゲーム「ストマネ」
メンタルヘルス対策ゲーム「ストマネ」メンタルヘルス対策ゲーム「ストマネ」
メンタルヘルス対策ゲーム「ストマネ」
 
Spring Cloud Function
Spring Cloud FunctionSpring Cloud Function
Spring Cloud Function
 
Cloud Computing Introduction for Kids
Cloud Computing Introduction for KidsCloud Computing Introduction for Kids
Cloud Computing Introduction for Kids
 
OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Introduction to UI Components in Magento 2
Introduction to UI Components in Magento 2Introduction to UI Components in Magento 2
Introduction to UI Components in Magento 2
 
Augmented Reality: Merging Our Real World WIth The Virtual
Augmented Reality: Merging Our Real World WIth The VirtualAugmented Reality: Merging Our Real World WIth The Virtual
Augmented Reality: Merging Our Real World WIth The Virtual
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Intro to Three.js
Intro to Three.jsIntro to Three.js
Intro to Three.js
 
Introduction to React Native Workshop
Introduction to React Native WorkshopIntroduction to React Native Workshop
Introduction to React Native Workshop
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 

Similar to Developing accessible android applications

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
Aly Arman
 
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
AbdullahMunir32
 

Similar to 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
 
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
 
Learning Android Part 2/6
Learning Android Part 2/6Learning Android Part 2/6
Learning Android Part 2/6
 

Recently uploaded

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
 

Recently uploaded (20)

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
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
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
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
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

Developing accessible android applications

Editor's Notes

  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