summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs256
1 files changed, 256 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs
new file mode 100644
index 00000000..3d8f68d7
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla31333.cs
@@ -0,0 +1,256 @@
+using System;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Xamarin.Forms.CustomAttributes;
+#if UITEST
+using NUnit.Framework;
+using Xamarin.UITest;
+
+#endif
+
+namespace Xamarin.Forms.Controls.TestCasesPages
+{
+ [Preserve (AllMembers=true)]
+ [Issue (IssueTracker.Bugzilla, 31333,
+ "Focus() on Entry in ViewCell brings up keyboard, but doesn't have cursor in EditText", PlatformAffected.Android)]
+ public class Bugzilla31333 : TestContentPage
+ {
+ [Preserve (AllMembers=true)]
+ public class Model31333 : INotifyPropertyChanged
+ {
+ public string Data
+ {
+ get { return _data; }
+ set
+ {
+ _data = value;
+ OnPropertyChanged ();
+ }
+ }
+
+ bool _isFocused = false;
+ string _data;
+
+ public bool IsFocused
+ {
+ get { return _isFocused; }
+ set
+ {
+ _isFocused = value;
+ OnPropertyChanged ();
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
+ }
+ }
+
+ [Preserve (AllMembers=true)]
+ public interface IHaveControlFocusedProperty
+ {
+ void SetBinding ();
+ }
+
+ [Preserve (AllMembers=true)]
+ public class ExtendedEntry : Entry, IHaveControlFocusedProperty
+ {
+ public static readonly BindableProperty IsControlFocusedProperty =
+ BindableProperty.Create ("IsControlFocused", typeof(bool), typeof(ExtendedEntry), false);
+
+ public bool IsControlFocused
+ {
+ get { return (bool)GetValue (IsControlFocusedProperty); }
+ set { SetValue (IsControlFocusedProperty, value); }
+ }
+
+ protected override void OnPropertyChanged (string propertyName = null)
+ {
+ base.OnPropertyChanged (propertyName);
+ if (propertyName == IsControlFocusedProperty.PropertyName) {
+ if (IsControlFocused) {
+ Focus ();
+ } else {
+ Unfocus ();
+ }
+ }
+ }
+
+ public void SetBinding ()
+ {
+ this.SetBinding (IsControlFocusedProperty, "IsFocused");
+ }
+ }
+
+ [Preserve (AllMembers=true)]
+ public class ExtendedEditor : Editor, IHaveControlFocusedProperty
+ {
+ public static readonly BindableProperty IsControlFocusedProperty =
+ BindableProperty.Create ("IsControlFocused", typeof(bool), typeof(ExtendedEditor), false);
+
+ public bool IsControlFocused
+ {
+ get { return (bool)GetValue (IsControlFocusedProperty); }
+ set { SetValue (IsControlFocusedProperty, value); }
+ }
+
+ protected override void OnPropertyChanged (string propertyName = null)
+ {
+ base.OnPropertyChanged (propertyName);
+ if (propertyName == IsControlFocusedProperty.PropertyName) {
+ if (IsControlFocused) {
+ Focus ();
+ } else {
+ Unfocus ();
+ }
+ }
+ }
+
+ public void SetBinding ()
+ {
+ this.SetBinding (IsControlFocusedProperty, "IsFocused");
+ }
+ }
+
+ [Preserve (AllMembers=true)]
+ public class ExtendedCell<T> : ViewCell where T : View, IHaveControlFocusedProperty
+ {
+ public ExtendedCell ()
+ {
+ var control = (T)Activator.CreateInstance (typeof(T));
+ control.SetBinding ();
+ control.HorizontalOptions = LayoutOptions.FillAndExpand;
+
+ View = new StackLayout {
+ Orientation = StackOrientation.Horizontal,
+ HorizontalOptions = LayoutOptions.StartAndExpand,
+ Children = {
+ control
+ }
+ };
+ }
+ }
+
+ StackLayout CreateListViewTestSection (Type controlType)
+ {
+ var name = controlType.GenericTypeArguments[0].Name;
+ name = name.Replace ("Extended", "");
+
+ var button = new Button () { Text = $"Focus {name} in ListView" };
+
+ var data = new ObservableCollection<Model31333> { new Model31333 () };
+
+ var listView = new ListView {
+ VerticalOptions = LayoutOptions.Start,
+ ItemsSource = data,
+ ItemTemplate = new DataTemplate (controlType)
+ };
+
+ button.Clicked += (sender, args) => {
+ var item = data[0];
+ if (item != null) {
+ item.IsFocused = !item.IsFocused;
+ }
+ };
+
+ return new StackLayout () { Children = { button, listView } };
+ }
+
+ StackLayout CreateTableViewTestSection<T> () where T : View, IHaveControlFocusedProperty
+ {
+ var name = typeof(T).Name;
+ name = name.Replace ("Extended", "");
+
+ var button = new Button () { Text = $"Focus {name} in Table" };
+
+ var data = new Model31333 ();
+
+ var tableView = new TableView {
+ VerticalOptions = LayoutOptions.Start
+ };
+
+ var tableRoot = new TableRoot();
+ var tableSection = new TableSection();
+
+ var cell = new ExtendedCell<T> ();
+
+ cell.BindingContext = data;
+
+ tableSection.Add(cell);
+ tableRoot.Add (tableSection);
+ tableView.Root = tableRoot;
+
+ button.Clicked += (sender, args) => {
+ var item = data;
+ if (item != null) {
+ item.IsFocused = !item.IsFocused;
+ }
+ };
+
+ return new StackLayout () { Children = { button, tableView } };
+ }
+
+ protected override void Init ()
+ {
+ var entrySection = CreateListViewTestSection (typeof(ExtendedCell<ExtendedEntry>));
+ var editorSection = CreateListViewTestSection (typeof(ExtendedCell<ExtendedEditor>));
+
+ var entryTableSection = CreateTableViewTestSection<ExtendedEntry> ();
+ var editorTableSection = CreateTableViewTestSection<ExtendedEditor> ();
+
+ Content = new StackLayout () { Children = { entrySection, editorSection, entryTableSection, editorTableSection } };
+ }
+
+#if UITEST
+ [Test]
+ [UiTest (typeof(NavigationPage))]
+ public void Issue31333FocusEntryInListViewCell ()
+ {
+ RunningApp.Tap (q => q.Marked ("Focus Entry in ListView"));
+ RunningApp.Screenshot ("Entry control in ListView cell is focused");
+ RunningApp.EnterText ("Entry in ListView Success");
+ Assert.True(RunningApp.Query(query => query.Text("Entry in ListView Success")).Length > 0);
+ RunningApp.Screenshot ("Entry in ListView Success");
+ }
+
+ [Test]
+ [UiTest (typeof(NavigationPage))]
+ public void Issue31333FocusEditorInListViewCell ()
+ {
+ RunningApp.Tap (q => q.Marked ("Focus Editor in ListView"));
+ RunningApp.Screenshot ("Editor control in ListView cell is focused");
+ RunningApp.EnterText ("Editor in ListView Success");
+ Assert.True(RunningApp.Query(query => query.Text("Editor in ListView Success")).Length > 0);
+ RunningApp.Screenshot ("Editor in ListView Success");
+ }
+
+
+ [Test]
+ [UiTest (typeof(NavigationPage))]
+ public void Issue31333FocusEntryInTableViewCell ()
+ {
+ RunningApp.Tap (q => q.Marked ("Focus Entry in Table"));
+ RunningApp.Screenshot ("Entry control in TableView cell is focused");
+ RunningApp.EnterText ("Entry in TableView Success");
+ Assert.True(RunningApp.Query(query => query.Text("Entry in TableView Success")).Length > 0);
+ RunningApp.Screenshot ("Entry in TableView Success");
+ }
+
+ [Test]
+ [UiTest (typeof(NavigationPage))]
+ public void Issue31333FocusEditorInTableViewCell ()
+ {
+ RunningApp.Tap (q => q.Marked ("Focus Editor in Table"));
+ RunningApp.Screenshot ("Editor control in TableView cell is focused");
+ RunningApp.EnterText ("Editor in TableView Success");
+ Assert.True(RunningApp.Query(query => query.Text("Editor in TableView Success")).Length > 0);
+ RunningApp.Screenshot ("Editor in TableView Success");
+ }
+#endif
+ }
+} \ No newline at end of file