Browse Source

Fix unexpected crashes during accessibility actions. (#20687)

release/11.3.13
SunnyDesignor 8 months ago
committed by Julien Lebosquain
parent
commit
d780d11679
No known key found for this signature in database GPG Key ID: 1833CAD10ACC46FD
  1. 26
      src/Android/Avalonia.Android/AvaloniaAccessHelper.cs

26
src/Android/Avalonia.Android/AvaloniaAccessHelper.cs

@ -147,13 +147,33 @@ namespace Avalonia.Android
protected override bool OnPerformActionForVirtualView(int virtualViewId, int action, Bundle? arguments)
{
return (GetNodeInfoProvidersFromVirtualViewId(virtualViewId) ?? [])
.Select(x => x.PerformNodeAction(action, arguments))
.Select(x => TryPerformNodeAction(x, action, arguments))
.Aggregate(false, (a, b) => a | b);
}
protected override void OnPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat nodeInfo)
private static bool TryPerformNodeAction(INodeInfoProvider nodeInfoProvider, int action, Bundle? arguments)
{
if (!_peers.TryGetValue(virtualViewId, out AutomationPeer? peer))
try
{
return nodeInfoProvider.PerformNodeAction(action, arguments);
}
catch (ElementNotEnabledException)
{
return false;
}
catch (InvalidOperationException)
{
return false;
}
catch (NotSupportedException)
{
return false;
}
}
protected override void OnPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat? nodeInfo)
{
if (nodeInfo is null || !_peers.TryGetValue(virtualViewId, out AutomationPeer? peer))
{
return; // BAIL!! No work to be done
}

Loading…
Cancel
Save