1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
#if UITEST
using NUnit.Framework;
using Xamarin.Forms.Core.UITests;
#endif
namespace Xamarin.Forms.Controls
{
#if UITEST
[Category(UITestCategories.BoxView)]
#endif
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Bugzilla, 40173, "Android BoxView/Frame not clickthrough in ListView")]
public class Bugzilla40173 : TestContentPage // or TestMasterDetailPage, etc ...
{
const string CantTouchButtonId = "CantTouchButtonId";
const string CanTouchButtonId = "CanTouchButtonId";
const string ListTapTarget = "ListTapTarget";
const string CantTouchFailText = "Failed";
const string CanTouchSuccessText = "ButtonTapped";
const string ListTapSuccessText = "ItemTapped";
#if UITEST
[Test]
public void ButtonBlocked()
{
RunningApp.Tap(q => q.All().Marked(CantTouchButtonId));
RunningApp.WaitForNoElement(q => q.All().Text(CantTouchFailText));
RunningApp.Tap(q => q.All().Marked(CanTouchButtonId));
RunningApp.WaitForElement(q => q.All().Text(CanTouchSuccessText));
RunningApp.Tap(q => q.All().Marked(ListTapTarget));
RunningApp.WaitForElement(q => q.All().Text(ListTapSuccessText));
}
#endif
protected override void Init()
{
var outputLabel = new Label();
var testButton = new Button
{
Text = "Can't Touch This",
AutomationId = CantTouchButtonId
};
testButton.Clicked += (sender, args) => outputLabel.Text = CantTouchFailText;
var testGrid = new Grid
{
Children =
{
testButton,
new BoxView
{
Color = Color.Pink.MultiplyAlpha(0.5)
}
}
};
// BoxView over Button prevents Button click
var testButtonOk = new Button
{
Text = "Can Touch This",
AutomationId = CanTouchButtonId
};
testButtonOk.Clicked += (sender, args) => outputLabel.Text = CanTouchSuccessText;
var testGridOk = new Grid
{
Children =
{
testButtonOk,
new BoxView
{
Color = Color.Pink.MultiplyAlpha(0.5),
InputTransparent = true
}
}
};
var testListView = new ListView();
var items = new[] { "Foo" };
testListView.ItemsSource = items;
testListView.ItemTemplate = new DataTemplate(() =>
{
var result = new ViewCell
{
View = new Grid
{
Children =
{
new BoxView
{
AutomationId = ListTapTarget,
Color = Color.Pink.MultiplyAlpha(0.5)
}
}
}
};
return result;
});
testListView.ItemSelected += (sender, args) => outputLabel.Text = ListTapSuccessText;
Content = new StackLayout
{
Children = { outputLabel, testGrid, testGridOk, testListView }
};
}
}
}
|