SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Javascript - Tutorial
Javascript - TutorialJavascript - Tutorial
Javascript - Tutorial
adelaticleanu
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
devCAT Studio, NEXON
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
Jubok Kim
 

Tendances (20)

Android Services
Android ServicesAndroid Services
Android Services
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
 
Android Threading
Android ThreadingAndroid Threading
Android Threading
 
Progressive Web App
Progressive Web AppProgressive Web App
Progressive Web App
 
RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)
 
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
 
Intoduction of FIrebase Realtime Database
Intoduction of FIrebase Realtime DatabaseIntoduction of FIrebase Realtime Database
Intoduction of FIrebase Realtime Database
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
Javascript - Tutorial
Javascript - TutorialJavascript - Tutorial
Javascript - Tutorial
 
UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)
 
Ios development training presentation
Ios development training presentationIos development training presentation
Ios development training presentation
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
Javascript Arrow function
Javascript Arrow functionJavascript Arrow function
Javascript Arrow function
 
Introduction to kotlin coroutines
Introduction to kotlin coroutinesIntroduction to kotlin coroutines
Introduction to kotlin coroutines
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
 
장재화, Replay system, NDC2011
장재화, Replay system, NDC2011장재화, Replay system, NDC2011
장재화, Replay system, NDC2011
 

Similaire à 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
 

Similaire à 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
 

Dernier

Dernier (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
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...
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
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?
 
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
 
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
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
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)
 
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
 

Developing accessible android applications

Notes de l'éditeur

  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