summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs119
1 files changed, 119 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs
new file mode 100644
index 00000000..d3a05fdf
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla45330.cs
@@ -0,0 +1,119 @@
+´╗┐using System;
+using System.Collections.ObjectModel;
+using System.Linq;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Bugzilla, 45330, "System.ObjectDisposedException: Cannot access a disposed object. Object name: 'Android.Views.GestureDetector'.", PlatformAffected.Android)]
+ public class Bugzilla45330 : TestContentPage
+ {
+ ObservableCollection<_45330Notification> _feed;
+
+ [Preserve(AllMembers = true)]
+ public class _45330Dto
+ {
+ public _45330Dto()
+ {
+ Notifications = new ObservableCollection<_45330Notification>();
+ }
+
+ public ObservableCollection<_45330Notification> Notifications { get; set; }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class _45330Notification
+ {
+ public string UniqueId { get; set; }
+ public DateTime DisplayDate { get; set; }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class _45330ListCell : ViewCell
+ {
+ protected override void OnBindingContextChanged()
+ {
+ base.OnBindingContextChanged();
+
+ var item = BindingContext as _45330Notification;
+ if (item == null) return;
+
+ View = new StackLayout()
+ {
+ BackgroundColor = Color.Transparent,
+ Padding = new Thickness(0, 1, 0, 1),
+ Children = { new Label { Text = item.UniqueId } }
+ };
+ }
+ }
+
+ public ObservableCollection<_45330Notification> Feed
+ {
+ get { return _feed; }
+ set
+ {
+ _feed = value;
+ OnPropertyChanged();
+ }
+ }
+
+ protected override void Init()
+ {
+ BindingContext = this;
+ Feed = MakeNotifications();
+
+ var listview = new ListView();
+ listview.SetBinding(ListView.ItemsSourceProperty, "Feed");
+ listview.ItemTemplate = new DataTemplate(typeof(_45330ListCell));
+ listview.IsPullToRefreshEnabled = true;
+ listview.RefreshCommand = new Command(() =>
+ {
+ listview.IsRefreshing = false;
+ Feed = MakeNotifications();
+ });
+
+ listview.ItemAppearing += (sender, e) =>
+ {
+ var currentItem = e.Item as _45330Notification;
+ if (currentItem == null) return;
+ var item = Feed.Last();
+ if (currentItem.UniqueId == item.UniqueId)
+ {
+ Feed = MakeNotifications();
+ }
+ };
+
+ var layout = new StackLayout();
+
+ var instructions = new Label { Text = @"The bug can be intermittently reproduced by pulling the list down to refresh it and immediately tapping one of the cells.
+Leaving this test page in for reference purposes, and possibly as a base for a future UI test if we get a way to accurately/consistently simulate the events which cause the crash."};
+
+ layout.Children.Add(instructions);
+ layout.Children.Add(listview);
+
+ Content = layout;
+ }
+
+ ObservableCollection<_45330Notification> MakeNotifications()
+ {
+ var list = new _45330Dto();
+ for (int i = 0; i < 1000; i++)
+ {
+ list.Notifications.Add(new _45330Notification()
+ {
+ UniqueId = i.ToString(),
+ DisplayDate = DateTime.UtcNow
+ });
+ }
+ return list.Notifications;
+ }
+
+ protected override void OnAppearing()
+ {
+ base.OnAppearing();
+ Feed = MakeNotifications();
+ }
+ }
+} \ No newline at end of file