From c9e55b9b26b8eb652017400b261e49962b588d98 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Wed, 6 Sep 2023 22:23:04 +0200 Subject: [PATCH] Implement touch interception on Android --- .../Concepts/InputTransparencyGalleryPage.cs | 396 ++++++++++++++++-- .../samples/Controls.Sample.UITests/Test.cs | 36 +- .../Pages/Core/InputTransparentPage.xaml | 5 +- .../Pages/Core/InputTransparentPage.xaml.cs | 6 + .../Concepts/InputTransparencyGalleryTests.cs | 21 +- .../tests/UITests/Tests/_ViewUITests.cs | 45 +- .../Handlers/Image/ImageHandler.Android.cs | 3 +- .../Handlers/Layout/LayoutHandler.Android.cs | 9 +- src/Core/src/Handlers/View/ViewHandler.cs | 14 +- .../src/Platform/Android/LayoutViewGroup.cs | 25 +- .../src/Platform/Android/MauiImageView.cs | 19 + src/Core/src/Platform/Android/MauiTextView.cs | 9 +- .../Platform/Android/TouchEventInterceptor.cs | 208 +++++++++ .../src/Platform/Android/ViewExtensions.cs | 7 + src/Core/src/Platform/Android/WrapperView.cs | 25 +- src/Core/src/Platform/Tizen/ViewExtensions.cs | 2 +- .../net-android/PublicAPI.Unshipped.txt | 6 + src/Core/src/ViewExtensions.cs | 12 +- .../HandlerTestBaseOfT.Android.cs | 4 +- 19 files changed, 747 insertions(+), 105 deletions(-) create mode 100644 src/Core/src/Platform/Android/MauiImageView.cs create mode 100644 src/Core/src/Platform/Android/TouchEventInterceptor.cs diff --git a/src/Controls/samples/Controls.Sample.UITests/Concepts/InputTransparencyGalleryPage.cs b/src/Controls/samples/Controls.Sample.UITests/Concepts/InputTransparencyGalleryPage.cs index 98be75b6debc..48bba4528372 100644 --- a/src/Controls/samples/Controls.Sample.UITests/Concepts/InputTransparencyGalleryPage.cs +++ b/src/Controls/samples/Controls.Sample.UITests/Concepts/InputTransparencyGalleryPage.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using Microsoft.Maui.Controls; +using Microsoft.Maui.Graphics; +using Microsoft.Maui.Layouts; namespace Maui.Controls.Sample { @@ -7,20 +11,86 @@ internal class InputTransparencyGalleryPage : CoreGalleryBasePage { protected override void Build() { - // Basic test with view defaults, should be clickable - Add(Test.InputTransparency.Default, new Button { Text = "Click Me!" }) + // Single Control + AddButtonNotSet(); + AddButton(); + AddTransButtonInputBlocked(); + + // Button + AddButtonOverlay(); + AddTransButtonOverlay(); + + // Image + AddOverlayTest( + Test.InputTransparency.ImageOverlayInputBlocked, + Test.InputTransparency.TransImageOverlay, + image => image.Source = ImageSource.FromFile("small_dotnet_bot.png")); + AddOverlayTest( + Test.InputTransparency.ImageBackOverlayInputBlocked, + Test.InputTransparency.TransImageBackOverlay, + image => + { + image.Source = ImageSource.FromFile("small_dotnet_bot.png"); + image.Background = Brush.Red; + }); + + // Label + AddOverlayTest