|
|
|
@ -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<IToggleProvider> |
|
|
|
{ |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
|