diff --git a/src/Android/Avalonia.Android/AvaloniaAccessHelper.cs b/src/Android/Avalonia.Android/AvaloniaAccessHelper.cs index 0bec287fedd..59bd7864cd9 100644 --- a/src/Android/Avalonia.Android/AvaloniaAccessHelper.cs +++ b/src/Android/Avalonia.Android/AvaloniaAccessHelper.cs @@ -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 @@ -84,6 +85,8 @@ public AvaloniaAccessHelper(AvaloniaView view) : base(view) } } + private static bool IsInteropPeer(AutomationPeer peer) => peer is InteropAutomationPeer; + private HashSet GetOrCreateNodeInfoProvidersFromPeer(AutomationPeer peer, out int virtualViewId) { int peerViewId; @@ -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())) @@ -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]; } } @@ -204,6 +212,11 @@ protected override void GetVisibleVirtualViews(IList? virtualViewIds) foreach (AutomationPeer peer in _peers[0].GetChildren()) { + if (IsInteropPeer(peer)) + { + continue; + } + GetOrCreateNodeInfoProvidersFromPeer(peer, out int virtualViewId); virtualViewIds.Add(Integer.ValueOf(virtualViewId)); } @@ -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); } diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index 2a67934a983..2bbaaf60ec2 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -22,6 +22,7 @@ +