SlideShare une entreprise Scribd logo
1  sur  48
Nicolas Yuen nyuen@adobe.com Developing Accessible Flex Applications
Agenda Introduction Motivation for Accessibility Flex Accessibility API Building Custom accessible Components Best practices Testing Final word
Introduction Consultant for Adobe Professional Services Specialized in developing Rich Internet Applications Developing with Flex for 3 year Worked on a public facing RIA for a government organization Took interest in accessibility
Motivation for Accessibility Morale arguments Accessibility is the right thing to do 12.8 percent of adults (21-64) are disabled in some way Ensure equal access for individuals with disabilities Improves the application’s design by thinking upfront of accessibility constraints Also benefits the mainstream audience it is our duty to design and develop accessible websites as part of our work
Motivation for Accessibility Legal arguments ,[object Object]
Allows companies to reach a wider audience
Can have a significant impact on the perceived brand image
Make your website accessible to everyone and you can tell the world about it.
pressure on companies and the government to make their websites accessible.
Example: Class Action lawsuit for Target.com
Mandatory and must have feature for government agencies
Europa : Web Accessibility policy
all public websites should be accessible by 2010,[object Object]
Motivation for Accessibility – WCAG 2.0 About WCAG2 4 Principles / 12 guidelines
Motivation for Accessibility – WCAG 2.0 About WCAG2 4 Principles / 12 guidelines Perceivable :  ,[object Object]
Time-based Media(Captions or alternatives)
Make content Adaptable(simpler or different layout alternative)
Distinguishable (sufficient contrast or audio volume),[object Object]
Time-based Media(Captions or alternatives)
Make content Adaptable(simpler or different layout alternative)
Distinguishable (sufficient contrast or audio volume)Operable :  ,[object Object]
Provide users enough time to read and usecontent
Do not design content in a way that is known to cause seizures
Provide ways to help users navigate, find content and determine where they are,[object Object]
Time-based Media(Captions or alternatives)
Make content Adaptable(simpler or different layout alternative)
Distinguishable (sufficient contrast or audio volume)Understandable:  ,[object Object]
Make pages and content appear and operate in predictable ways
Help users avoid and correct mistakesOperable :  ,[object Object]
Provide users enough time to read and usecontent
Do not design content in a way that is known to cause seizures
Provide ways to help users navigate, find content and determine where they are,[object Object]
Time-based Media(Captions or alternatives)
Make content Adaptable(simpler or different layout alternative)
Distinguishable (sufficient contrast or audio volume)Understandable:  ,[object Object]
Make pages and content appear and operate in predictable ways
Help users avoid and correct mistakesOperable :  ,[object Object]
Provide users enough time to read and usecontent
Do not design content in a way that is known to cause seizures
Provide ways to help users navigate, find content and determine where they areRobust:  ,[object Object],[object Object]
About Accessibility in Flash Introduced with Flash 6 Previously limited to Flash and Flex but not supported in AIR Air 2 now supports Accessibility (built in Flex/Flash) Detailed documentation and Language Reference available Support for assistive technology through Microsoft Active Accessibility (MSAA) API
How MSAA works provides a descriptive and standardized way for applications and screen readers to communicate.  Middleware architecture that conveys an object model of an application When Internet Explorer or Firefox loads a new page, it sends an event notification to the MSAA system Screen Readers are essentially MSAA clients listening for events
Accessible object model in Flash Player The Flash Player's accessible object tree consists of a single top-levelcontainer Contains a flat collection of the following types: Text Input TextField Buttons Simple Movie Clip Scripted Movie Clip
Enabling Accessibility for your Flex applications In Flash Builder 4 Select “Generate Accessible SWF file” in the Project properties dialog Modfifies the compiler node : <compiler additionalCompilerArguments="-locale en_US" generateAccessible="true"> in the .actionScriptProperties file This is now selected by default in Flash Builder 4 At Runtime Append accessible=true to the URL  http://www.mydomain.com/index.html?accessible=true Using the command line compiler Use the Accessible option with MXMLC mxlmc –accessible MyApplication.mxml
Enabling Accessibility for your Flex applications Accessibility disabled Accessibility enabled
Flex Accessible components and containers  Adobe built support for accessibility into Flex MX components and containers Accessible components : 28 for Halo - 19 for Spark ButtonBar DropDownList NumericStepper RichEditableText Spinner TabBar ToggleButton VideoPlayer Accordion AdvancedDataGrid Alert Button CheckBox ColorPicker ComboBox DataGrid DateChooser DateField Form Image Label LinkButton List Menu MenuBar Panel RadioButton RadioButtonGroup Slider TabNavigator Text TextArea TextInput TitleWindow ToolTipManager Tree
Accessibility API Contain base classes and implementations for Accessibility DisplayObject has a default implementation with the AccessibilityPropertiesclass Flex Accessible components have extra code and classes The AccessibilityProperties has the following options: ,[object Object]
ForceSimple: If true, causes Flash Player to exclude child objects within this display object from the accessible presentation.

Contenu connexe

Similaire à Develop Accessible Flex Apps

Software Accessibility Siddhesh
Software Accessibility SiddheshSoftware Accessibility Siddhesh
Software Accessibility SiddheshSiddhesh Bhobe
 
Testing flash and flex for accessibility indic threads-q11
Testing flash and flex for accessibility indic threads-q11Testing flash and flex for accessibility indic threads-q11
Testing flash and flex for accessibility indic threads-q11IndicThreads
 
Accessibility in Flex
Accessibility in FlexAccessibility in Flex
Accessibility in Flexfugaciousness
 
Accessibility in Flex
Accessibility in FlexAccessibility in Flex
Accessibility in FlexEffectiveUI
 
Accessibility In Adobe Flex
Accessibility In Adobe FlexAccessibility In Adobe Flex
Accessibility In Adobe FlexEffective
 
Alfresco WCM Case Study: National Academy of Sciences
Alfresco WCM Case Study: National Academy of SciencesAlfresco WCM Case Study: National Academy of Sciences
Alfresco WCM Case Study: National Academy of Sciencesrivetlogic
 
Designing Product As A Platform
Designing Product As A PlatformDesigning Product As A Platform
Designing Product As A Platformanandkhisti
 
Designing your Product as a Platform
Designing your Product as a PlatformDesigning your Product as a Platform
Designing your Product as a PlatformMicah Laaker
 
Buzzword, How'd They Build That?
Buzzword, How'd They Build That?Buzzword, How'd They Build That?
Buzzword, How'd They Build That?dcoletta
 
Open Source Web Content Management Strategies
Open Source Web Content Management StrategiesOpen Source Web Content Management Strategies
Open Source Web Content Management StrategiesKStod
 
Interface Design
Interface DesignInterface Design
Interface Designgavhays
 
corePHP Usability Accessibility by Steven Pignataro
corePHP Usability Accessibility by Steven PignatarocorePHP Usability Accessibility by Steven Pignataro
corePHP Usability Accessibility by Steven PignataroJohn Coonen
 
Rich Internet Applications
Rich Internet ApplicationsRich Internet Applications
Rich Internet ApplicationsYoussef Shaath
 
Accessibility And 508 Compliance In 2009
Accessibility And 508 Compliance In 2009Accessibility And 508 Compliance In 2009
Accessibility And 508 Compliance In 2009Emagination ®
 
Device Independence
Device IndependenceDevice Independence
Device Independencebjornh
 
WCAG 2.0, Simplified
WCAG 2.0, SimplifiedWCAG 2.0, Simplified
WCAG 2.0, Simplifiedciwstudy
 

Similaire à Develop Accessible Flex Apps (20)

Software Accessibility Siddhesh
Software Accessibility SiddheshSoftware Accessibility Siddhesh
Software Accessibility Siddhesh
 
Testing flash and flex for accessibility indic threads-q11
Testing flash and flex for accessibility indic threads-q11Testing flash and flex for accessibility indic threads-q11
Testing flash and flex for accessibility indic threads-q11
 
Accessibility in Flex
Accessibility in FlexAccessibility in Flex
Accessibility in Flex
 
Accessibility in Flex
Accessibility in FlexAccessibility in Flex
Accessibility in Flex
 
Accessibility In Adobe Flex
Accessibility In Adobe FlexAccessibility In Adobe Flex
Accessibility In Adobe Flex
 
Alfresco WCM Case Study: National Academy of Sciences
Alfresco WCM Case Study: National Academy of SciencesAlfresco WCM Case Study: National Academy of Sciences
Alfresco WCM Case Study: National Academy of Sciences
 
Designing Product As A Platform
Designing Product As A PlatformDesigning Product As A Platform
Designing Product As A Platform
 
Designing your Product as a Platform
Designing your Product as a PlatformDesigning your Product as a Platform
Designing your Product as a Platform
 
Buzzword, How'd They Build That?
Buzzword, How'd They Build That?Buzzword, How'd They Build That?
Buzzword, How'd They Build That?
 
Open Source Web Content Management Strategies
Open Source Web Content Management StrategiesOpen Source Web Content Management Strategies
Open Source Web Content Management Strategies
 
Interface Design
Interface DesignInterface Design
Interface Design
 
corePHP Usability Accessibility by Steven Pignataro
corePHP Usability Accessibility by Steven PignatarocorePHP Usability Accessibility by Steven Pignataro
corePHP Usability Accessibility by Steven Pignataro
 
Web Accessibility
Web AccessibilityWeb Accessibility
Web Accessibility
 
Rich Internet Applications
Rich Internet ApplicationsRich Internet Applications
Rich Internet Applications
 
Dfg Intranet Development
Dfg Intranet DevelopmentDfg Intranet Development
Dfg Intranet Development
 
eLearning & Accessibility
eLearning & AccessibilityeLearning & Accessibility
eLearning & Accessibility
 
Accessibility And 508 Compliance In 2009
Accessibility And 508 Compliance In 2009Accessibility And 508 Compliance In 2009
Accessibility And 508 Compliance In 2009
 
Device Independence
Device IndependenceDevice Independence
Device Independence
 
doumi94
doumi94doumi94
doumi94
 
WCAG 2.0, Simplified
WCAG 2.0, SimplifiedWCAG 2.0, Simplified
WCAG 2.0, Simplified
 

Plus de Skills Matter

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard LawrenceSkills Matter
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimSkills Matter
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Skills Matter
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingSkills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveSkills Matter
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tSkills Matter
 

Plus de Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Dernier

Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Dernier (20)

Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

Develop Accessible Flex Apps

  • 1. Nicolas Yuen nyuen@adobe.com Developing Accessible Flex Applications
  • 2. Agenda Introduction Motivation for Accessibility Flex Accessibility API Building Custom accessible Components Best practices Testing Final word
  • 3. Introduction Consultant for Adobe Professional Services Specialized in developing Rich Internet Applications Developing with Flex for 3 year Worked on a public facing RIA for a government organization Took interest in accessibility
  • 4. Motivation for Accessibility Morale arguments Accessibility is the right thing to do 12.8 percent of adults (21-64) are disabled in some way Ensure equal access for individuals with disabilities Improves the application’s design by thinking upfront of accessibility constraints Also benefits the mainstream audience it is our duty to design and develop accessible websites as part of our work
  • 5.
  • 6. Allows companies to reach a wider audience
  • 7. Can have a significant impact on the perceived brand image
  • 8. Make your website accessible to everyone and you can tell the world about it.
  • 9. pressure on companies and the government to make their websites accessible.
  • 10. Example: Class Action lawsuit for Target.com
  • 11. Mandatory and must have feature for government agencies
  • 12. Europa : Web Accessibility policy
  • 13.
  • 14. Motivation for Accessibility – WCAG 2.0 About WCAG2 4 Principles / 12 guidelines
  • 15.
  • 17. Make content Adaptable(simpler or different layout alternative)
  • 18.
  • 20. Make content Adaptable(simpler or different layout alternative)
  • 21.
  • 22. Provide users enough time to read and usecontent
  • 23. Do not design content in a way that is known to cause seizures
  • 24.
  • 26. Make content Adaptable(simpler or different layout alternative)
  • 27.
  • 28. Make pages and content appear and operate in predictable ways
  • 29.
  • 30. Provide users enough time to read and usecontent
  • 31. Do not design content in a way that is known to cause seizures
  • 32.
  • 34. Make content Adaptable(simpler or different layout alternative)
  • 35.
  • 36. Make pages and content appear and operate in predictable ways
  • 37.
  • 38. Provide users enough time to read and usecontent
  • 39. Do not design content in a way that is known to cause seizures
  • 40.
  • 41. About Accessibility in Flash Introduced with Flash 6 Previously limited to Flash and Flex but not supported in AIR Air 2 now supports Accessibility (built in Flex/Flash) Detailed documentation and Language Reference available Support for assistive technology through Microsoft Active Accessibility (MSAA) API
  • 42. How MSAA works provides a descriptive and standardized way for applications and screen readers to communicate. Middleware architecture that conveys an object model of an application When Internet Explorer or Firefox loads a new page, it sends an event notification to the MSAA system Screen Readers are essentially MSAA clients listening for events
  • 43. Accessible object model in Flash Player The Flash Player's accessible object tree consists of a single top-levelcontainer Contains a flat collection of the following types: Text Input TextField Buttons Simple Movie Clip Scripted Movie Clip
  • 44. Enabling Accessibility for your Flex applications In Flash Builder 4 Select “Generate Accessible SWF file” in the Project properties dialog Modfifies the compiler node : <compiler additionalCompilerArguments="-locale en_US" generateAccessible="true"> in the .actionScriptProperties file This is now selected by default in Flash Builder 4 At Runtime Append accessible=true to the URL http://www.mydomain.com/index.html?accessible=true Using the command line compiler Use the Accessible option with MXMLC mxlmc –accessible MyApplication.mxml
  • 45. Enabling Accessibility for your Flex applications Accessibility disabled Accessibility enabled
  • 46. Flex Accessible components and containers Adobe built support for accessibility into Flex MX components and containers Accessible components : 28 for Halo - 19 for Spark ButtonBar DropDownList NumericStepper RichEditableText Spinner TabBar ToggleButton VideoPlayer Accordion AdvancedDataGrid Alert Button CheckBox ColorPicker ComboBox DataGrid DateChooser DateField Form Image Label LinkButton List Menu MenuBar Panel RadioButton RadioButtonGroup Slider TabNavigator Text TextArea TextInput TitleWindow ToolTipManager Tree
  • 47.
  • 48. ForceSimple: If true, causes Flash Player to exclude child objects within this display object from the accessible presentation.
  • 49. Description :Provides a description for this display object in the accessible presentation
  • 50. Silent: If true, excludes this display object from accessible presentation.
  • 51.
  • 52. Accessibility API Instanciating the flash.accessiblity.AccessibilityProperties class In MXML <?xml version="1.0" encoding="utf-8"?> <s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:TextArea id="accessibleTxt" accessibilityName="Spark Accessible Text" accessibilityEnabled="true" accessibilityDescription="A short description" /> </s:Application>
  • 53. Accessibility API The flash.accessibility.Accessibility class provides the following methods and properties: active : Indicates whether a screen reader is currently active and the player is communicating with it. updateProperties():Tells Flash Player to apply any accessibility changes made by using the DisplayObject.accessibilityProperties property. sendEvent: Sends an event to the Microsoft Active Accessibility API. What happens when your OS doesn’t have an active screen reader? Calling updateProperties() will throw an IllegalOperatorErrorexception Use flash.system.Capabilities.hasAccessibilityto detected if the system supports Accessibility And the active property to prevent a call to updateProperties() privatefunctionupdateProperties():void { if (Accessibility.active) { Accessibility.updateProperties(); } }
  • 54. The flash.accessibility.AccessibilityImplementation class Flash provides the flash.accessibility.AccessibilityImplementation class for exposing accessible components subset of the IAccessible interface, adapted slightly for ease of use. The Flash Player IAccessible interfacepasses most calls from MSAA to thesubclass instance for that component Flex components with Accessibility will be treated as scripted movie clips In Flex, this class is extended by mx.accessibility.AccImpl
  • 55.
  • 56. Building Custom Accessible Components Developers need to be able to provide their own accessibility implementations for custom component You create a new accessibility implementation by extending mx.accessibility.AccImpl for each new component Consider two primary forms of guidance: MSAA documentation has guidelines for objects based on the component type Look at a similar component in an HTML page Make sure you implement keyboard navigation and focus management Go for the easy path and extend accessible components if possible
  • 57. Building Custom Accessible Components Let’s start with an example : Contextual help component You will need to create your implementation class by extending AccImpl The AccConst class provides all the MSSA constants you need. You will have to override some of the methods from the IAccessible interface
  • 58. Building Custom Accessible Components Let’s first create our visual component – the HelpButton class Defining a custom accessibility implementation for a component requires changes the component class file First thing to do – add the AccessibilityClassmetatada tag to let the compiler know which AccessibilityImplementation to use [AccessibilityClass(implementation=”component.HelpButtonAccImpl")] Add a placeholder for the mix-in function mx_internal static var createAccessibilityImplementation:Function; This createAccessibilityImplementation() method will be assigned by the PopUpButtonAccImpl accessibility implementation class we'll create Override the UIComponent.initializeAccessibility() method with the following to initialize the AccessibilityImplementation for a given component instance at runtime. overrideprotectedfunctioninitializeAccessibility():void { if (HelpButton.createAccessibilityImplementation != null) { HelpButton.createAccessibilityImplementation( this ); } }
  • 59. Creating the accessibility implementation Creating the HelpButtonAccImpl which is a subclass of mx.accessibility.AccImpl Constructor We set the appropriate role for the component based on the MSAA constants publicfunctionHelpButtonAccImpl(master:UIComponent) { super( master ); role = AccConst.ROLE_SYSTEM_PUSHBUTTON; }
  • 60. Creating the accessibility implementation Initializing Accessibility for the host component Initializes the creatAccessibilityImplementation property we declared on the host component Creating a new acessibiliyImplementation for each instances of the host component mx_internalstaticfunctioncreateAccessibilityImplementation ( component:UIComponent):void { component.accessibilityImplementation = new HelpButtonAccImpl(component); } publicstaticfunctionenableAccessibility():void { HelpButton.createAccessibilityImplementation = createAccessibilityImplementation; }
  • 61. Creating the accessibility implementation Managing events that will an assistive technology will need to react to Overriding the eventToHandle methods Overriding the EventHandler method to manage these events overrideprotectedfunctiongeteventsToHandle():Array { returnsuper.eventsToHandle.concat([ Event.Change]); } overrideprotectedfunctioneventHandler(event:Event):void { super.eventHandler( event ); switch (event.type) { caseEvent.CHANGE: Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_STATECHANGE); Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_NAMECHANGE); Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_SHOW); Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_FOCUS); Accessibility.updateProperties(); break; } }
  • 62. Creating the accessibility implementation We now need to override methods from the IAccessible interface Overriding the EventHandler method to manage these events overrideprotectedfunctiongetName(childID:uint):String { varlabel:String = helpButton.label; label = ( label != null && label != "" ) ? label : ""; if( helpButton.selected ) { label = label + ". " + helpButton.helpText; } return label; } overridepublicfunctionget_accName(childID:uint):String { varaccName:String = AccImpl.getFormName(master); accName += getName(childID) + getStatusName(); return (accName != null && accName != "") ? accName : null; }
  • 63. Creating the accessibility implementation We now need to override methods from the IAccessible interface overridepublicfunctionget_accDefaultAction(childID:uint):String { return"Press"; } */ overridepublicfunctionget_accState(childID:uint):uint { varaccState:uint = getState(childID); if (HelpButton(master).selected) accState |= AccConst.STATE_SYSTEM_PRESSED; returnaccState; }
  • 65. Best Practices – Reading order Reading order must match the content of the application Default order is Left-Right/Top-Bottom Possible to override but not straightforward : Tab order is flat Doesn’t provide hierarchy If overridden the tab index must be specified to ALL component in the application Allocate slots for each part of your application.
  • 66. Best Practices – Reading order Controlling the reading order in MXML <mx:Form label="login"> <mx:FormItem label="Username"> <mx:TextInputtabIndex="1"/> </mx:FormItem> <mx:FormItemlabel="Password"> <mx:TextInputtabIndex="2"/> </mx:FormItem> <mx:HBox> <mx:Buttonlabel="Reset" tabIndex="3"/> <mx:Buttonlabel="Login" tabIndex="4"/> </mx:HBox> </mx:Form>
  • 67. Best Practices – Global navigation Extremely different from an HTML Page What happens when you navigate ( Changing state or switching content )? By default : nothing! Example : Login screen to dashboard screen Notify the user that a change occurred Explain briefly the new content and the purpose of the screen Set the focus on a relevant component Consider non-mouse driven navigation Everything should be accessible using the keyboard Make sure your navigation components have simple and explicit names Provide auto-scroll when focusing a component
  • 68. Best Practices – Pop Ups What happens by default : again, nothing Correct behavior : Read the title followed by the content of the pop up Set the focus on the default button ( e.g. cancel or ok) Disable the background : the rest of the application is hidden to the screen reader Use a default key to close pop ups (commonly the ESC key)
  • 69. Best Practices - Forms Use Form and FormItem for user input Provide out of the box accessibility features Mandatory Field Validation Set focus on the first input field when entering a form Make sure the user can enter “Form mode” with his screen reader What happens when the validation fails? Focus on the first error Explicitly warn the user that the form is invalid If possible specify the number of errors
  • 70. Best Practices – Adjustable Interface / High contrast Provide resizable text Screen magnification A High constrast version Alternative css Save user preferences
  • 71. Best Practices – Video Demo
  • 72. Best Practices – Context ad relationship Provide context and relationship : Applications that assume comprehension of visual relationships require extra attention ( i.e hierarchical data) Explicitly add context to links/buttons whenever possible (e.g. :Edit --> Edit your profile) Otherwise use tooltips or description to give more information.
  • 73. Best Practices – visual content Consider users with visual acuity limitations : Don’t rely on colors/images to convey information Provide caption to any images Disable animations Provide instructions: Non-obvious functionality needs to be revealed for users
  • 75. Testing Accessibility MSAA Inspector Tools: Quick tool for identifying role and state info Much faster to test a component Screen reader : Jaws Navigation (test with your keyboard ) : Tabbing through controls is a good start Make sure to shift+tab backwards Try to turn off your monitor and use the application Perform user testing
  • 76. Final word Accessibility is not an easy task Allocate enough time on the project Keep accessibility in mind during all phases ( starting with the design phase) Involve users as soon as possible : Regular users of assistive technologies will provide the most accurate information An accessible application is not necessarily usable – allow time for user testing User expectations are a possible issue Don’t put accessibility on a TODO at the end of the project

Notes de l'éditeur

  1. The methods of the flash.accessibility.AccessibilityImplementation class are a subset of the IAccessible interface, adapted slightly for ease of use.It class provides a set of methods that allow a component developer to make information about system roles, object based events, and states available to assistive technology. The Flash Player IAccessible interface for a scripted movie clip simply passes most calls from MSAA through to the flash.accessibility.AccessibilityImplementation subclass instance for that component.For example, when a screen reader needs to determine the default action of a mx.controls.Button component instance on the Stage in Flash Player, it calls the IAccessible method get_accDefaultAction() on the IAccessible interface exposed by the Flash Player for that component instance. The request is passed through to the get_accDefaultAction() method of the mx.accessibility.ButtonAccImpl accessibility implementation class instance, which returns the appropriate default action String for a button control, which is “Press.”