Browse Source

fixed (#19985)

pull/20084/head
Bobby Cannon 3 months ago
committed by Julien Lebosquain
parent
commit
90cdabc1f3
  1. 25
      src/Android/Avalonia.Android/Automation/ToggleNodeInfoProvider.cs

25
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.Core.View.Accessibility;
using AndroidX.CustomView.Widget; using AndroidX.CustomView.Widget;
using Avalonia.Automation.Peers; using Avalonia.Automation.Peers;
@ -8,6 +9,8 @@ namespace Avalonia.Android.Automation
{ {
internal class ToggleNodeInfoProvider : NodeInfoProvider<IToggleProvider> internal class ToggleNodeInfoProvider : NodeInfoProvider<IToggleProvider>
{ {
private PropertyInfo? _checkedProperty;
public ToggleNodeInfoProvider(ExploreByTouchHelper owner, AutomationPeer peer, int virtualViewId) : public ToggleNodeInfoProvider(ExploreByTouchHelper owner, AutomationPeer peer, int virtualViewId) :
base(owner, peer, virtualViewId) base(owner, peer, virtualViewId)
{ {
@ -32,7 +35,25 @@ namespace Avalonia.Android.Automation
nodeInfo.Clickable = true; nodeInfo.Clickable = true;
IToggleProvider provider = GetProvider(); 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; nodeInfo.Checkable = true;
} }
} }

Loading…
Cancel
Save