Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion src/Android/Avalonia.Android/AvaloniaAccessHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Avalonia.Automation;
using Avalonia.Automation.Peers;
using Avalonia.Automation.Provider;
using Avalonia.Controls.Automation.Peers;
using Java.Lang;

namespace Avalonia.Android
Expand Down Expand Up @@ -84,6 +85,8 @@ public AvaloniaAccessHelper(AvaloniaView view) : base(view)
}
}

private static bool IsInteropPeer(AutomationPeer peer) => peer is InteropAutomationPeer;

private HashSet<INodeInfoProvider> GetOrCreateNodeInfoProvidersFromPeer(AutomationPeer peer, out int virtualViewId)
{
int peerViewId;
Expand Down Expand Up @@ -175,6 +178,11 @@ protected override int GetVirtualViewAt(float x, float y)
AutomationPeer? peer = embeddedRootProvider?.GetPeerFromPoint(p);
if (peer is not null)
{
if (IsInteropPeer(peer))
{
return InvalidId;
}

int virtualViewId;
if (peer.GetParent() is AutomationPeer parent &&
!s_containerTypes.Contains(parent.GetAutomationControlType()))
Expand All @@ -191,7 +199,7 @@ protected override int GetVirtualViewAt(float x, float y)
else
{
peer = embeddedRootProvider?.GetFocus();
return peer is null ? InvalidId : _peerIds[peer];
return peer is null || IsInteropPeer(peer) ? InvalidId : _peerIds[peer];
}
}

Expand All @@ -204,6 +212,11 @@ protected override void GetVisibleVirtualViews(IList<Integer>? virtualViewIds)

foreach (AutomationPeer peer in _peers[0].GetChildren())
{
if (IsInteropPeer(peer))
{
continue;
}

GetOrCreateNodeInfoProvidersFromPeer(peer, out int virtualViewId);
virtualViewIds.Add(Integer.ValueOf(virtualViewId));
}
Expand Down Expand Up @@ -255,6 +268,11 @@ protected override void OnPopulateNodeForVirtualView(int virtualViewId, Accessib
// UI logical structure
foreach (AutomationPeer child in peer.GetChildren())
{
if (IsInteropPeer(child))
{
continue;
}

GetOrCreateNodeInfoProvidersFromPeer(child, out int childId);
nodeInfo.AddChild(_view, childId);
}
Expand Down
1 change: 1 addition & 0 deletions src/Avalonia.Controls/Avalonia.Controls.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<InternalsVisibleTo Include="AvaloniaUI.DiagnosticsSupport.Avalonia, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.LeakTests, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Headless, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Android, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Native, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Win32, PublicKey=$(AvaloniaPublicKey)" />
<InternalsVisibleTo Include="Avalonia.Win32.Automation, PublicKey=$(AvaloniaPublicKey)" />
Expand Down