[All] Basic Accessibility Support (#713)
authorSamantha Houts <samantha@teamredwall.com>
Tue, 31 Jan 2017 19:49:15 +0000 (11:49 -0800)
committerKangho Hur <kangho.hur@samsung.com>
Mon, 24 Apr 2017 04:36:41 +0000 (13:36 +0900)
* [Core] Add accessibility properties

* [Controls] Add accessibility gallery

* [iOS] Implement accessibility properties

* [Android] Implement accessibilty properties

* [Win] Implement accessibility properties

* [Win] Select ListView item on selected for a11y

* Update docs

* TODO: macOS accessibility

* [iOS] Fix failing UI Tests

Xamarin.Forms.Platform.iOS/Renderers/ButtonRenderer.cs
Xamarin.Forms.Platform.iOS/ViewRenderer.cs

index dd25e63..c38846e 100644 (file)
@@ -119,6 +119,21 @@ namespace Xamarin.Forms.Platform.iOS
                        }
                }
 
+               protected override void SetAccessibilityLabel()
+               {
+                       // If we have not specified an AccessibilityLabel and the AccessibiltyLabel is current bound to the Title,
+                       // exit this method so we don't set the AccessibilityLabel value and break the binding.
+                       // This may pose a problem for users who want to explicitly set the AccessibilityLabel to null, but this
+                       // will prevent us from inadvertently breaking UI Tests that are using Query.Marked to get the dynamic Title 
+                       // of the Button.
+
+                       var elemValue = (string)Element?.GetValue(Accessibility.NameProperty);
+                       if (string.IsNullOrWhiteSpace(elemValue) && Control?.AccessibilityLabel == Control?.Title(UIControlState.Normal))
+                               return;
+
+                       base.SetAccessibilityLabel();
+               }
+
                void OnButtonTouchUpInside(object sender, EventArgs eventArgs)
                {
                        ((IButtonController)Element)?.SendReleased();
index a785fb0..e9d9a25 100644 (file)
@@ -151,6 +151,49 @@ namespace Xamarin.Forms.Platform.MacOS
 
                        Control.AccessibilityLabel = (string)Element.GetValue(Accessibility.NameProperty) ?? _defaultAccessibilityLabel;
                }
+#if __MOBILE__
+               protected override void SetAccessibilityHint()
+               {
+                       if (Control == null)
+                       {
+                               base.SetAccessibilityHint();
+                               return;
+                       }
+
+                       if (Element == null)
+                               return;
+
+                       if (_defaultAccessibilityHint == null)
+                               _defaultAccessibilityHint = Control.AccessibilityHint;
+
+                       Control.AccessibilityHint = (string)Element.GetValue(Accessibility.HintProperty) ?? _defaultAccessibilityHint;
+
+               }
+
+               protected override void SetAccessibilityLabel()
+               {
+                       if (Control == null)
+                       {
+                               base.SetAccessibilityLabel();
+                               return;
+                       }
+
+                       if (Element == null)
+                               return;
+
+                       if (_defaultAccessibilityLabel == null)
+                               _defaultAccessibilityLabel = Control.AccessibilityLabel;
+
+                       Control.AccessibilityLabel = (string)Element.GetValue(Accessibility.NameProperty) ?? _defaultAccessibilityLabel;
+               }
+
+               protected override void SetIsAccessibilityElement()
+               {
+                       if (Control == null)
+                       {
+                               base.SetIsAccessibilityElement();
+                               return;
+                       }
 
                protected override void SetIsAccessibilityElement()
                {