From a588543cc95610a0ce0da052b5309fc7dd183b1b Mon Sep 17 00:00:00 2001 From: ijklam <43789618+Tangent-90@users.noreply.github.com> Date: Fri, 10 May 2024 21:57:34 +0800 Subject: [PATCH] [Android] Support `PerformContextMenuAction` (#15608) * support PerformContextMenuAction * update * update to new api --- .../Platform/SkiaPlatform/TopLevelImpl.cs | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 02e3f68d73..d3b38c8da2 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -54,7 +54,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform { throw new ArgumentException("AvaloniaView.Context must not be null"); } - + _view = new ViewImpl(avaloniaView.Context, this, placeOnTop); _textInputMethod = new AndroidInputMethod(_view); _keyboardHelper = new AndroidKeyboardEventsHelper(this); @@ -85,7 +85,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform public virtual Size ClientSize => _view.Size.ToSize(RenderScaling); public Size? FrameSize => null; - + public Action? Closed { get; set; } public Action? Input { get; set; } @@ -136,7 +136,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform { InputRoot = inputRoot; } - + public virtual void Show() { _view.Visibility = ViewStates.Visible; @@ -148,7 +148,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform { Paint?.Invoke(new Rect(new Point(0, 0), ClientSize)); } - + public virtual void Dispose() { _systemNavigationManager.Dispose(); @@ -264,11 +264,11 @@ namespace Avalonia.Android.Platform.SkiaPlatform } public IPopupImpl? CreatePopup() => null; - + public Action? LostFocus { get; set; } public Action? TransparencyLevelChanged { get; set; } - public WindowTransparencyLevel TransparencyLevel + public WindowTransparencyLevel TransparencyLevel { get => _transparencyLevel; private set @@ -681,5 +681,29 @@ namespace Avalonia.Android.Platform.SkiaPlatform return extract; } + + public override bool PerformContextMenuAction(int id) + { + if (InputMethod.Client is not { } client) return false; + + switch (id) + { + case global::Android.Resource.Id.SelectAll: + client.ExecuteContextMenuAction(ContextMenuAction.SelectAll); + return true; + case global::Android.Resource.Id.Cut: + client.ExecuteContextMenuAction(ContextMenuAction.Cut); + return true; + case global::Android.Resource.Id.Copy: + client.ExecuteContextMenuAction(ContextMenuAction.Copy); + return true; + case global::Android.Resource.Id.Paste: + client.ExecuteContextMenuAction(ContextMenuAction.Paste); + return true; + default: + break; + } + return base.PerformContextMenuAction(id); + } } }