From 3a3dc4e8fe43b11e41b954c239a8c285e46854e3 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Fri, 13 Jun 2025 20:29:04 -0700 Subject: [PATCH] Handle SurfaceRedrawNeededAsync as well --- .../SkiaPlatform/InvalidationAwareSurfaceView.cs | 7 +++++++ .../Platform/SkiaPlatform/TopLevelImpl.cs | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs index 4b716a07e1..f15322a6a7 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs @@ -7,6 +7,7 @@ using Android.Views; using Avalonia.Android.Platform.SkiaPlatform; using Avalonia.Logging; using Avalonia.Platform; +using Java.Lang; namespace Avalonia.Android { @@ -69,6 +70,12 @@ namespace Avalonia.Android .Log(this, "InvalidationAwareSurfaceView RedrawNeeded"); } + public virtual void SurfaceRedrawNeededAsync(ISurfaceHolder holder, IRunnable drawingFinished) + { + Logger.TryGet(LogEventLevel.Verbose, LogArea.AndroidPlatform)? + .Log(this, "InvalidationAwareSurfaceView RedrawNeededAsync"); + } + private void CacheSurfaceProperties(ISurfaceHolder holder) { var surface = holder?.Surface; diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index b4ec5ba0bb..00ae95abaf 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -223,12 +223,17 @@ namespace Avalonia.Android.Platform.SkiaPlatform public override void SurfaceRedrawNeeded(ISurfaceHolder holder) { // Compositor Renderer handles Paint event in-sync, which is perfect for sync SurfaceRedrawNeeded - // In the future we might to handle SurfaceRedrawNeededAsync as well. _tl.Paint?.Invoke(new Rect(new Point(), Size.ToSize(Scaling))); base.SurfaceRedrawNeeded(holder); } - public sealed override bool OnCheckIsTextEditor() + public override void SurfaceRedrawNeededAsync(ISurfaceHolder holder, IRunnable drawingFinished) + { + _tl.Compositor.RequestCompositionUpdate(drawingFinished.Run); + base.SurfaceRedrawNeededAsync(holder, drawingFinished); + } + + public override bool OnCheckIsTextEditor() { return true; }