diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2017-05-04 03:51:01 -0600 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2017-05-04 10:51:01 +0100 |
commit | adac0fcc38295263d08f589b7d564c9b12d9935c (patch) | |
tree | 0e35fc4d708c61d88feda798e3b6ee7bbd48bd11 /Xamarin.Forms.Controls.Issues | |
parent | 40dff0a54cd718747f280b808dc08aa7efb83f4c (diff) | |
download | xamarin-forms-adac0fcc38295263d08f589b7d564c9b12d9935c.tar.gz xamarin-forms-adac0fcc38295263d08f589b7d564c9b12d9935c.tar.bz2 xamarin-forms-adac0fcc38295263d08f589b7d564c9b12d9935c.zip |
Give layouts a chance to handle touch events after passing though immediate children (#902)
* Repro for Bugzilla 55912
* Automate test
* Give the layout a chance to actually handle gestures before bubbling up
Diffstat (limited to 'Xamarin.Forms.Controls.Issues')
2 files changed, 96 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla55912.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla55912.cs new file mode 100644 index 00000000..834244bb --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla55912.cs @@ -0,0 +1,95 @@ +using System; +using System.Diagnostics; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +#if UITEST +using NUnit.Framework; + +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 955912, "Tap event not always propagated to containing Grid/StackLayout", + PlatformAffected.Android)] + public class Bugzilla55912 : TestContentPage + { + const string Success = "Success"; + const string GridLabelId = "GridLabel"; + const string StackLabelId = "StackLabel"; + + protected override void Init() + { + var layout = new Grid(); + + layout.RowDefinitions.Add(new RowDefinition { Height = GridLength.Star }); + layout.RowDefinitions.Add(new RowDefinition { Height = GridLength.Star }); + layout.RowDefinitions.Add(new RowDefinition { Height = GridLength.Star }); + + var testGrid = new Grid { BackgroundColor = Color.Red }; + var gridLabel = new Label + { + AutomationId = GridLabelId, + Text = "This is a Grid with a TapGesture", + FontSize = 24, + BackgroundColor = Color.Green + }; + Grid.SetRow(testGrid, 1); + testGrid.Children.Add(gridLabel); + + var testStack = new StackLayout { BackgroundColor = Color.Default }; + var stackLabel = new Label + { + AutomationId = StackLabelId, + Text = "This StackLayout also has a TapGesture", + FontSize = 24, + BackgroundColor = Color.Green + }; + Grid.SetRow(testStack, 2); + testStack.Children.Add(stackLabel); + + layout.Children.Add(testGrid); + layout.Children.Add(testStack); + + Content = layout; + + testGrid.GestureRecognizers.Add(new TapGestureRecognizer + { + NumberOfTapsRequired = 1, + Command = new Command(() => + { + Debug.WriteLine($"***** TestGrid Tapped: {DateTime.Now} *****"); + layout.Children.Add(new Label { AutomationId = Success, Text = Success }); + }) + }); + + testStack.GestureRecognizers.Add(new TapGestureRecognizer + { + NumberOfTapsRequired = 1, + Command = new Command(() => + { + Debug.WriteLine($"***** TestStack Tapped: {DateTime.Now} *****"); + layout.Children.Add(new Label { AutomationId = Success, Text = Success }); + }) + }); + } + +#if UITEST + [Test] + public void GestureBubblingInStackLayout() + { + RunningApp.WaitForElement(StackLabelId); + RunningApp.Tap(StackLabelId); + RunningApp.WaitForElement(Success); + } + + [Test] + public void GestureBubblingInGrid() + { + RunningApp.WaitForElement(GridLabelId); + RunningApp.Tap(GridLabelId); + RunningApp.WaitForElement(Success); + } +#endif + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 70069d9d..f602ef65 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -196,6 +196,7 @@ </Compile> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla52266.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla53445.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla55912.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> |