From: Samantha Houts Date: Tue, 31 Jan 2017 19:49:15 +0000 (-0800) Subject: [All] Basic Accessibility Support (#713) X-Git-Tag: submit/tizen/20170424.094440~138 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94b7a489571e6af5acc82fee3b7c96bba2181c35;p=platform%2Fupstream%2Fxamarin-forms.git [All] Basic Accessibility Support (#713) * [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 --- diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ButtonRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/ButtonRenderer.cs index dd25e63..c38846e 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/ButtonRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/ButtonRenderer.cs @@ -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(); diff --git a/Xamarin.Forms.Platform.iOS/ViewRenderer.cs b/Xamarin.Forms.Platform.iOS/ViewRenderer.cs index a785fb0..e9d9a25 100644 --- a/Xamarin.Forms.Platform.iOS/ViewRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/ViewRenderer.cs @@ -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() {