From ff620db5bbd072094e56aa9e9f143b95f3ea9a8e Mon Sep 17 00:00:00 2001 From: Tristan Labelle Date: Mon, 7 Nov 2022 20:36:27 -0500 Subject: [PATCH] Android: Force punch a hole in the SurfaceView to workaround issue #9230 --- .../Platform/SkiaPlatform/TopLevelImpl.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 984eb775b5..4e972d504a 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -165,6 +165,28 @@ namespace Avalonia.Android.Platform.SkiaPlatform _tl.Draw(); } + protected override void DispatchDraw(global::Android.Graphics.Canvas canvas) + { + // Workaround issue #9230 on where screen remains gray after splash screen. + // base.DispatchDraw should punch a hole into the canvas so the surface + // can be seen below, but it does not. + if (OperatingSystem.IsAndroidVersionAtLeast(29)) + { + // Android 10+ does this (BlendMode was new) + var paint = new Paint(); + paint.SetColor(0); + paint.BlendMode = BlendMode.Clear; + canvas.DrawRect(0, 0, Width, Height, paint); + } + else + { + // Android 9 did this + canvas.DrawColor(Color.Transparent, PorterDuff.Mode.Clear); + } + + base.DispatchDraw(canvas); + } + protected override bool DispatchGenericPointerEvent(MotionEvent e) { bool callBase;