diff --git a/src/Android/Avalonia.Android/Automation/ToggleNodeInfoProvider.cs b/src/Android/Avalonia.Android/Automation/ToggleNodeInfoProvider.cs index 569714c88a..907bd2e3a0 100644 --- a/src/Android/Avalonia.Android/Automation/ToggleNodeInfoProvider.cs +++ b/src/Android/Avalonia.Android/Automation/ToggleNodeInfoProvider.cs @@ -1,4 +1,5 @@ -using Android.OS; +using System.Reflection; +using Android.OS; using AndroidX.Core.View.Accessibility; using AndroidX.CustomView.Widget; using Avalonia.Automation.Peers; @@ -8,6 +9,8 @@ namespace Avalonia.Android.Automation { internal class ToggleNodeInfoProvider : NodeInfoProvider { + private PropertyInfo? _checkedProperty; + public ToggleNodeInfoProvider(ExploreByTouchHelper owner, AutomationPeer peer, int virtualViewId) : base(owner, peer, virtualViewId) { @@ -32,7 +35,25 @@ namespace Avalonia.Android.Automation nodeInfo.Clickable = true; IToggleProvider provider = GetProvider(); - nodeInfo.Checked = provider.ToggleState == ToggleState.On; + + _checkedProperty ??= nodeInfo.GetType().GetProperty(nameof(nodeInfo.Checked)); + if (_checkedProperty?.PropertyType == typeof(int)) + { + // Needed for Xamarin.AndroidX.Core 1.17+ + _checkedProperty.SetValue(this, + provider.ToggleState switch + { + ToggleState.On => 1, + ToggleState.Indeterminate => 2, + _ => 0 + }); + } + else if (_checkedProperty?.PropertyType == typeof(bool)) + { + // Needed for Xamarin.AndroidX.Core < 1.17 + _checkedProperty.SetValue(this, provider.ToggleState == ToggleState.On); + } + nodeInfo.Checkable = true; } }